##// END OF EJS Templates
call upgrade_dir with args in parens to work correctly with ...
vivainio -
Show More
@@ -1,2970 +1,2970 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 1335 2006-05-30 06:02:44Z fperez $"""
4 $Id: Magic.py 1338 2006-05-31 14:24:23Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import shlex
29 import shlex
30 import sys
30 import sys
31 import re
31 import re
32 import tempfile
32 import tempfile
33 import time
33 import time
34 import cPickle as pickle
34 import cPickle as pickle
35 import textwrap
35 import textwrap
36 from cStringIO import StringIO
36 from cStringIO import StringIO
37 from getopt import getopt,GetoptError
37 from getopt import getopt,GetoptError
38 from pprint import pprint, pformat
38 from pprint import pprint, pformat
39
39
40 # profile isn't bundled by default in Debian for license reasons
40 # profile isn't bundled by default in Debian for license reasons
41 try:
41 try:
42 import profile,pstats
42 import profile,pstats
43 except ImportError:
43 except ImportError:
44 profile = pstats = None
44 profile = pstats = None
45
45
46 # Homebrewed
46 # Homebrewed
47 import IPython
47 import IPython
48 from IPython import Debugger, OInspect, wildcard
48 from IPython import Debugger, OInspect, wildcard
49 from IPython.FakeModule import FakeModule
49 from IPython.FakeModule import FakeModule
50 from IPython.Itpl import Itpl, itpl, printpl,itplns
50 from IPython.Itpl import Itpl, itpl, printpl,itplns
51 from IPython.PyColorize import Parser
51 from IPython.PyColorize import Parser
52 from IPython.ipstruct import Struct
52 from IPython.ipstruct import Struct
53 from IPython.macro import Macro
53 from IPython.macro import Macro
54 from IPython.genutils import *
54 from IPython.genutils import *
55 from IPython import platutils
55 from IPython import platutils
56
56
57 #***************************************************************************
57 #***************************************************************************
58 # Utility functions
58 # Utility functions
59 def on_off(tag):
59 def on_off(tag):
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
61 return ['OFF','ON'][tag]
61 return ['OFF','ON'][tag]
62
62
63 class Bunch: pass
63 class Bunch: pass
64
64
65 #***************************************************************************
65 #***************************************************************************
66 # Main class implementing Magic functionality
66 # Main class implementing Magic functionality
67 class Magic:
67 class Magic:
68 """Magic functions for InteractiveShell.
68 """Magic functions for InteractiveShell.
69
69
70 Shell functions which can be reached as %function_name. All magic
70 Shell functions which can be reached as %function_name. All magic
71 functions should accept a string, which they can parse for their own
71 functions should accept a string, which they can parse for their own
72 needs. This can make some functions easier to type, eg `%cd ../`
72 needs. This can make some functions easier to type, eg `%cd ../`
73 vs. `%cd("../")`
73 vs. `%cd("../")`
74
74
75 ALL definitions MUST begin with the prefix magic_. The user won't need it
75 ALL definitions MUST begin with the prefix magic_. The user won't need it
76 at the command line, but it is is needed in the definition. """
76 at the command line, but it is is needed in the definition. """
77
77
78 # class globals
78 # class globals
79 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
79 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
80 'Automagic is ON, % prefix NOT needed for magic functions.']
80 'Automagic is ON, % prefix NOT needed for magic functions.']
81
81
82 #......................................................................
82 #......................................................................
83 # some utility functions
83 # some utility functions
84
84
85 def __init__(self,shell):
85 def __init__(self,shell):
86
86
87 self.options_table = {}
87 self.options_table = {}
88 if profile is None:
88 if profile is None:
89 self.magic_prun = self.profile_missing_notice
89 self.magic_prun = self.profile_missing_notice
90 self.shell = shell
90 self.shell = shell
91
91
92 # namespace for holding state we may need
92 # namespace for holding state we may need
93 self._magic_state = Bunch()
93 self._magic_state = Bunch()
94
94
95 def profile_missing_notice(self, *args, **kwargs):
95 def profile_missing_notice(self, *args, **kwargs):
96 error("""\
96 error("""\
97 The profile module could not be found. If you are a Debian user,
97 The profile module could not be found. If you are a Debian user,
98 it has been removed from the standard Debian package because of its non-free
98 it has been removed from the standard Debian package because of its non-free
99 license. To use profiling, please install"python2.3-profiler" from non-free.""")
99 license. To use profiling, please install"python2.3-profiler" from non-free.""")
100
100
101 def default_option(self,fn,optstr):
101 def default_option(self,fn,optstr):
102 """Make an entry in the options_table for fn, with value optstr"""
102 """Make an entry in the options_table for fn, with value optstr"""
103
103
104 if fn not in self.lsmagic():
104 if fn not in self.lsmagic():
105 error("%s is not a magic function" % fn)
105 error("%s is not a magic function" % fn)
106 self.options_table[fn] = optstr
106 self.options_table[fn] = optstr
107
107
108 def lsmagic(self):
108 def lsmagic(self):
109 """Return a list of currently available magic functions.
109 """Return a list of currently available magic functions.
110
110
111 Gives a list of the bare names after mangling (['ls','cd', ...], not
111 Gives a list of the bare names after mangling (['ls','cd', ...], not
112 ['magic_ls','magic_cd',...]"""
112 ['magic_ls','magic_cd',...]"""
113
113
114 # FIXME. This needs a cleanup, in the way the magics list is built.
114 # FIXME. This needs a cleanup, in the way the magics list is built.
115
115
116 # magics in class definition
116 # magics in class definition
117 class_magic = lambda fn: fn.startswith('magic_') and \
117 class_magic = lambda fn: fn.startswith('magic_') and \
118 callable(Magic.__dict__[fn])
118 callable(Magic.__dict__[fn])
119 # in instance namespace (run-time user additions)
119 # in instance namespace (run-time user additions)
120 inst_magic = lambda fn: fn.startswith('magic_') and \
120 inst_magic = lambda fn: fn.startswith('magic_') and \
121 callable(self.__dict__[fn])
121 callable(self.__dict__[fn])
122 # and bound magics by user (so they can access self):
122 # and bound magics by user (so they can access self):
123 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
123 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
124 callable(self.__class__.__dict__[fn])
124 callable(self.__class__.__dict__[fn])
125 magics = filter(class_magic,Magic.__dict__.keys()) + \
125 magics = filter(class_magic,Magic.__dict__.keys()) + \
126 filter(inst_magic,self.__dict__.keys()) + \
126 filter(inst_magic,self.__dict__.keys()) + \
127 filter(inst_bound_magic,self.__class__.__dict__.keys())
127 filter(inst_bound_magic,self.__class__.__dict__.keys())
128 out = []
128 out = []
129 for fn in magics:
129 for fn in magics:
130 out.append(fn.replace('magic_','',1))
130 out.append(fn.replace('magic_','',1))
131 out.sort()
131 out.sort()
132 return out
132 return out
133
133
134 def extract_input_slices(self,slices,raw=False):
134 def extract_input_slices(self,slices,raw=False):
135 """Return as a string a set of input history slices.
135 """Return as a string a set of input history slices.
136
136
137 Inputs:
137 Inputs:
138
138
139 - slices: the set of slices is given as a list of strings (like
139 - slices: the set of slices is given as a list of strings (like
140 ['1','4:8','9'], since this function is for use by magic functions
140 ['1','4:8','9'], since this function is for use by magic functions
141 which get their arguments as strings.
141 which get their arguments as strings.
142
142
143 Optional inputs:
143 Optional inputs:
144
144
145 - raw(False): by default, the processed input is used. If this is
145 - raw(False): by default, the processed input is used. If this is
146 true, the raw input history is used instead.
146 true, the raw input history is used instead.
147
147
148 Note that slices can be called with two notations:
148 Note that slices can be called with two notations:
149
149
150 N:M -> standard python form, means including items N...(M-1).
150 N:M -> standard python form, means including items N...(M-1).
151
151
152 N-M -> include items N..M (closed endpoint)."""
152 N-M -> include items N..M (closed endpoint)."""
153
153
154 if raw:
154 if raw:
155 hist = self.shell.input_hist_raw
155 hist = self.shell.input_hist_raw
156 else:
156 else:
157 hist = self.shell.input_hist
157 hist = self.shell.input_hist
158
158
159 cmds = []
159 cmds = []
160 for chunk in slices:
160 for chunk in slices:
161 if ':' in chunk:
161 if ':' in chunk:
162 ini,fin = map(int,chunk.split(':'))
162 ini,fin = map(int,chunk.split(':'))
163 elif '-' in chunk:
163 elif '-' in chunk:
164 ini,fin = map(int,chunk.split('-'))
164 ini,fin = map(int,chunk.split('-'))
165 fin += 1
165 fin += 1
166 else:
166 else:
167 ini = int(chunk)
167 ini = int(chunk)
168 fin = ini+1
168 fin = ini+1
169 cmds.append(hist[ini:fin])
169 cmds.append(hist[ini:fin])
170 return cmds
170 return cmds
171
171
172 def _ofind(self,oname):
172 def _ofind(self,oname):
173 """Find an object in the available namespaces.
173 """Find an object in the available namespaces.
174
174
175 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
175 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
176
176
177 Has special code to detect magic functions.
177 Has special code to detect magic functions.
178 """
178 """
179
179
180 oname = oname.strip()
180 oname = oname.strip()
181
181
182 # Namespaces to search in:
182 # Namespaces to search in:
183 user_ns = self.shell.user_ns
183 user_ns = self.shell.user_ns
184 internal_ns = self.shell.internal_ns
184 internal_ns = self.shell.internal_ns
185 builtin_ns = __builtin__.__dict__
185 builtin_ns = __builtin__.__dict__
186 alias_ns = self.shell.alias_table
186 alias_ns = self.shell.alias_table
187
187
188 # Put them in a list. The order is important so that we find things in
188 # Put them in a list. The order is important so that we find things in
189 # the same order that Python finds them.
189 # the same order that Python finds them.
190 namespaces = [ ('Interactive',user_ns),
190 namespaces = [ ('Interactive',user_ns),
191 ('IPython internal',internal_ns),
191 ('IPython internal',internal_ns),
192 ('Python builtin',builtin_ns),
192 ('Python builtin',builtin_ns),
193 ('Alias',alias_ns),
193 ('Alias',alias_ns),
194 ]
194 ]
195
195
196 # initialize results to 'null'
196 # initialize results to 'null'
197 found = 0; obj = None; ospace = None; ds = None;
197 found = 0; obj = None; ospace = None; ds = None;
198 ismagic = 0; isalias = 0
198 ismagic = 0; isalias = 0
199
199
200 # Look for the given name by splitting it in parts. If the head is
200 # Look for the given name by splitting it in parts. If the head is
201 # found, then we look for all the remaining parts as members, and only
201 # found, then we look for all the remaining parts as members, and only
202 # declare success if we can find them all.
202 # declare success if we can find them all.
203 oname_parts = oname.split('.')
203 oname_parts = oname.split('.')
204 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
204 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
205 for nsname,ns in namespaces:
205 for nsname,ns in namespaces:
206 try:
206 try:
207 obj = ns[oname_head]
207 obj = ns[oname_head]
208 except KeyError:
208 except KeyError:
209 continue
209 continue
210 else:
210 else:
211 for part in oname_rest:
211 for part in oname_rest:
212 try:
212 try:
213 obj = getattr(obj,part)
213 obj = getattr(obj,part)
214 except:
214 except:
215 # Blanket except b/c some badly implemented objects
215 # Blanket except b/c some badly implemented objects
216 # allow __getattr__ to raise exceptions other than
216 # allow __getattr__ to raise exceptions other than
217 # AttributeError, which then crashes IPython.
217 # AttributeError, which then crashes IPython.
218 break
218 break
219 else:
219 else:
220 # If we finish the for loop (no break), we got all members
220 # If we finish the for loop (no break), we got all members
221 found = 1
221 found = 1
222 ospace = nsname
222 ospace = nsname
223 if ns == alias_ns:
223 if ns == alias_ns:
224 isalias = 1
224 isalias = 1
225 break # namespace loop
225 break # namespace loop
226
226
227 # Try to see if it's magic
227 # Try to see if it's magic
228 if not found:
228 if not found:
229 if oname.startswith(self.shell.ESC_MAGIC):
229 if oname.startswith(self.shell.ESC_MAGIC):
230 oname = oname[1:]
230 oname = oname[1:]
231 obj = getattr(self,'magic_'+oname,None)
231 obj = getattr(self,'magic_'+oname,None)
232 if obj is not None:
232 if obj is not None:
233 found = 1
233 found = 1
234 ospace = 'IPython internal'
234 ospace = 'IPython internal'
235 ismagic = 1
235 ismagic = 1
236
236
237 # Last try: special-case some literals like '', [], {}, etc:
237 # Last try: special-case some literals like '', [], {}, etc:
238 if not found and oname_head in ["''",'""','[]','{}','()']:
238 if not found and oname_head in ["''",'""','[]','{}','()']:
239 obj = eval(oname_head)
239 obj = eval(oname_head)
240 found = 1
240 found = 1
241 ospace = 'Interactive'
241 ospace = 'Interactive'
242
242
243 return {'found':found, 'obj':obj, 'namespace':ospace,
243 return {'found':found, 'obj':obj, 'namespace':ospace,
244 'ismagic':ismagic, 'isalias':isalias}
244 'ismagic':ismagic, 'isalias':isalias}
245
245
246 def arg_err(self,func):
246 def arg_err(self,func):
247 """Print docstring if incorrect arguments were passed"""
247 """Print docstring if incorrect arguments were passed"""
248 print 'Error in arguments:'
248 print 'Error in arguments:'
249 print OInspect.getdoc(func)
249 print OInspect.getdoc(func)
250
250
251 def format_latex(self,strng):
251 def format_latex(self,strng):
252 """Format a string for latex inclusion."""
252 """Format a string for latex inclusion."""
253
253
254 # Characters that need to be escaped for latex:
254 # Characters that need to be escaped for latex:
255 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
255 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
256 # Magic command names as headers:
256 # Magic command names as headers:
257 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
257 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
258 re.MULTILINE)
258 re.MULTILINE)
259 # Magic commands
259 # Magic commands
260 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
260 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
261 re.MULTILINE)
261 re.MULTILINE)
262 # Paragraph continue
262 # Paragraph continue
263 par_re = re.compile(r'\\$',re.MULTILINE)
263 par_re = re.compile(r'\\$',re.MULTILINE)
264
264
265 # The "\n" symbol
265 # The "\n" symbol
266 newline_re = re.compile(r'\\n')
266 newline_re = re.compile(r'\\n')
267
267
268 # Now build the string for output:
268 # Now build the string for output:
269 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
269 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
270 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
270 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
271 strng)
271 strng)
272 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
272 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
273 strng = par_re.sub(r'\\\\',strng)
273 strng = par_re.sub(r'\\\\',strng)
274 strng = escape_re.sub(r'\\\1',strng)
274 strng = escape_re.sub(r'\\\1',strng)
275 strng = newline_re.sub(r'\\textbackslash{}n',strng)
275 strng = newline_re.sub(r'\\textbackslash{}n',strng)
276 return strng
276 return strng
277
277
278 def format_screen(self,strng):
278 def format_screen(self,strng):
279 """Format a string for screen printing.
279 """Format a string for screen printing.
280
280
281 This removes some latex-type format codes."""
281 This removes some latex-type format codes."""
282 # Paragraph continue
282 # Paragraph continue
283 par_re = re.compile(r'\\$',re.MULTILINE)
283 par_re = re.compile(r'\\$',re.MULTILINE)
284 strng = par_re.sub('',strng)
284 strng = par_re.sub('',strng)
285 return strng
285 return strng
286
286
287 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
287 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
288 """Parse options passed to an argument string.
288 """Parse options passed to an argument string.
289
289
290 The interface is similar to that of getopt(), but it returns back a
290 The interface is similar to that of getopt(), but it returns back a
291 Struct with the options as keys and the stripped argument string still
291 Struct with the options as keys and the stripped argument string still
292 as a string.
292 as a string.
293
293
294 arg_str is quoted as a true sys.argv vector by using shlex.split.
294 arg_str is quoted as a true sys.argv vector by using shlex.split.
295 This allows us to easily expand variables, glob files, quote
295 This allows us to easily expand variables, glob files, quote
296 arguments, etc.
296 arguments, etc.
297
297
298 Options:
298 Options:
299 -mode: default 'string'. If given as 'list', the argument string is
299 -mode: default 'string'. If given as 'list', the argument string is
300 returned as a list (split on whitespace) instead of a string.
300 returned as a list (split on whitespace) instead of a string.
301
301
302 -list_all: put all option values in lists. Normally only options
302 -list_all: put all option values in lists. Normally only options
303 appearing more than once are put in a list."""
303 appearing more than once are put in a list."""
304
304
305 # inject default options at the beginning of the input line
305 # inject default options at the beginning of the input line
306 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
306 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
307 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
307 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
308
308
309 mode = kw.get('mode','string')
309 mode = kw.get('mode','string')
310 if mode not in ['string','list']:
310 if mode not in ['string','list']:
311 raise ValueError,'incorrect mode given: %s' % mode
311 raise ValueError,'incorrect mode given: %s' % mode
312 # Get options
312 # Get options
313 list_all = kw.get('list_all',0)
313 list_all = kw.get('list_all',0)
314
314
315 # Check if we have more than one argument to warrant extra processing:
315 # Check if we have more than one argument to warrant extra processing:
316 odict = {} # Dictionary with options
316 odict = {} # Dictionary with options
317 args = arg_str.split()
317 args = arg_str.split()
318 if len(args) >= 1:
318 if len(args) >= 1:
319 # If the list of inputs only has 0 or 1 thing in it, there's no
319 # If the list of inputs only has 0 or 1 thing in it, there's no
320 # need to look for options
320 # need to look for options
321 argv = shlex.split(arg_str)
321 argv = shlex.split(arg_str)
322 # Do regular option processing
322 # Do regular option processing
323 try:
323 try:
324 opts,args = getopt(argv,opt_str,*long_opts)
324 opts,args = getopt(argv,opt_str,*long_opts)
325 except GetoptError,e:
325 except GetoptError,e:
326 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
326 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
327 " ".join(long_opts)))
327 " ".join(long_opts)))
328 for o,a in opts:
328 for o,a in opts:
329 if o.startswith('--'):
329 if o.startswith('--'):
330 o = o[2:]
330 o = o[2:]
331 else:
331 else:
332 o = o[1:]
332 o = o[1:]
333 try:
333 try:
334 odict[o].append(a)
334 odict[o].append(a)
335 except AttributeError:
335 except AttributeError:
336 odict[o] = [odict[o],a]
336 odict[o] = [odict[o],a]
337 except KeyError:
337 except KeyError:
338 if list_all:
338 if list_all:
339 odict[o] = [a]
339 odict[o] = [a]
340 else:
340 else:
341 odict[o] = a
341 odict[o] = a
342
342
343 # Prepare opts,args for return
343 # Prepare opts,args for return
344 opts = Struct(odict)
344 opts = Struct(odict)
345 if mode == 'string':
345 if mode == 'string':
346 args = ' '.join(args)
346 args = ' '.join(args)
347
347
348 return opts,args
348 return opts,args
349
349
350 #......................................................................
350 #......................................................................
351 # And now the actual magic functions
351 # And now the actual magic functions
352
352
353 # Functions for IPython shell work (vars,funcs, config, etc)
353 # Functions for IPython shell work (vars,funcs, config, etc)
354 def magic_lsmagic(self, parameter_s = ''):
354 def magic_lsmagic(self, parameter_s = ''):
355 """List currently available magic functions."""
355 """List currently available magic functions."""
356 mesc = self.shell.ESC_MAGIC
356 mesc = self.shell.ESC_MAGIC
357 print 'Available magic functions:\n'+mesc+\
357 print 'Available magic functions:\n'+mesc+\
358 (' '+mesc).join(self.lsmagic())
358 (' '+mesc).join(self.lsmagic())
359 print '\n' + Magic.auto_status[self.shell.rc.automagic]
359 print '\n' + Magic.auto_status[self.shell.rc.automagic]
360 return None
360 return None
361
361
362 def magic_magic(self, parameter_s = ''):
362 def magic_magic(self, parameter_s = ''):
363 """Print information about the magic function system."""
363 """Print information about the magic function system."""
364
364
365 mode = ''
365 mode = ''
366 try:
366 try:
367 if parameter_s.split()[0] == '-latex':
367 if parameter_s.split()[0] == '-latex':
368 mode = 'latex'
368 mode = 'latex'
369 if parameter_s.split()[0] == '-brief':
369 if parameter_s.split()[0] == '-brief':
370 mode = 'brief'
370 mode = 'brief'
371 except:
371 except:
372 pass
372 pass
373
373
374 magic_docs = []
374 magic_docs = []
375 for fname in self.lsmagic():
375 for fname in self.lsmagic():
376 mname = 'magic_' + fname
376 mname = 'magic_' + fname
377 for space in (Magic,self,self.__class__):
377 for space in (Magic,self,self.__class__):
378 try:
378 try:
379 fn = space.__dict__[mname]
379 fn = space.__dict__[mname]
380 except KeyError:
380 except KeyError:
381 pass
381 pass
382 else:
382 else:
383 break
383 break
384 if mode == 'brief':
384 if mode == 'brief':
385 # only first line
385 # only first line
386 fndoc = fn.__doc__.split('\n',1)[0]
386 fndoc = fn.__doc__.split('\n',1)[0]
387 else:
387 else:
388 fndoc = fn.__doc__
388 fndoc = fn.__doc__
389
389
390 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
390 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
391 fname,fndoc))
391 fname,fndoc))
392 magic_docs = ''.join(magic_docs)
392 magic_docs = ''.join(magic_docs)
393
393
394 if mode == 'latex':
394 if mode == 'latex':
395 print self.format_latex(magic_docs)
395 print self.format_latex(magic_docs)
396 return
396 return
397 else:
397 else:
398 magic_docs = self.format_screen(magic_docs)
398 magic_docs = self.format_screen(magic_docs)
399 if mode == 'brief':
399 if mode == 'brief':
400 return magic_docs
400 return magic_docs
401
401
402 outmsg = """
402 outmsg = """
403 IPython's 'magic' functions
403 IPython's 'magic' functions
404 ===========================
404 ===========================
405
405
406 The magic function system provides a series of functions which allow you to
406 The magic function system provides a series of functions which allow you to
407 control the behavior of IPython itself, plus a lot of system-type
407 control the behavior of IPython itself, plus a lot of system-type
408 features. All these functions are prefixed with a % character, but parameters
408 features. All these functions are prefixed with a % character, but parameters
409 are given without parentheses or quotes.
409 are given without parentheses or quotes.
410
410
411 NOTE: If you have 'automagic' enabled (via the command line option or with the
411 NOTE: If you have 'automagic' enabled (via the command line option or with the
412 %automagic function), you don't need to type in the % explicitly. By default,
412 %automagic function), you don't need to type in the % explicitly. By default,
413 IPython ships with automagic on, so you should only rarely need the % escape.
413 IPython ships with automagic on, so you should only rarely need the % escape.
414
414
415 Example: typing '%cd mydir' (without the quotes) changes you working directory
415 Example: typing '%cd mydir' (without the quotes) changes you working directory
416 to 'mydir', if it exists.
416 to 'mydir', if it exists.
417
417
418 You can define your own magic functions to extend the system. See the supplied
418 You can define your own magic functions to extend the system. See the supplied
419 ipythonrc and example-magic.py files for details (in your ipython
419 ipythonrc and example-magic.py files for details (in your ipython
420 configuration directory, typically $HOME/.ipython/).
420 configuration directory, typically $HOME/.ipython/).
421
421
422 You can also define your own aliased names for magic functions. In your
422 You can also define your own aliased names for magic functions. In your
423 ipythonrc file, placing a line like:
423 ipythonrc file, placing a line like:
424
424
425 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
425 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
426
426
427 will define %pf as a new name for %profile.
427 will define %pf as a new name for %profile.
428
428
429 You can also call magics in code using the ipmagic() function, which IPython
429 You can also call magics in code using the ipmagic() function, which IPython
430 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
430 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
431
431
432 For a list of the available magic functions, use %lsmagic. For a description
432 For a list of the available magic functions, use %lsmagic. For a description
433 of any of them, type %magic_name?, e.g. '%cd?'.
433 of any of them, type %magic_name?, e.g. '%cd?'.
434
434
435 Currently the magic system has the following functions:\n"""
435 Currently the magic system has the following functions:\n"""
436
436
437 mesc = self.shell.ESC_MAGIC
437 mesc = self.shell.ESC_MAGIC
438 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
438 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
439 "\n\n%s%s\n\n%s" % (outmsg,
439 "\n\n%s%s\n\n%s" % (outmsg,
440 magic_docs,mesc,mesc,
440 magic_docs,mesc,mesc,
441 (' '+mesc).join(self.lsmagic()),
441 (' '+mesc).join(self.lsmagic()),
442 Magic.auto_status[self.shell.rc.automagic] ) )
442 Magic.auto_status[self.shell.rc.automagic] ) )
443
443
444 page(outmsg,screen_lines=self.shell.rc.screen_length)
444 page(outmsg,screen_lines=self.shell.rc.screen_length)
445
445
446 def magic_automagic(self, parameter_s = ''):
446 def magic_automagic(self, parameter_s = ''):
447 """Make magic functions callable without having to type the initial %.
447 """Make magic functions callable without having to type the initial %.
448
448
449 Toggles on/off (when off, you must call it as %automagic, of
449 Toggles on/off (when off, you must call it as %automagic, of
450 course). Note that magic functions have lowest priority, so if there's
450 course). Note that magic functions have lowest priority, so if there's
451 a variable whose name collides with that of a magic fn, automagic
451 a variable whose name collides with that of a magic fn, automagic
452 won't work for that function (you get the variable instead). However,
452 won't work for that function (you get the variable instead). However,
453 if you delete the variable (del var), the previously shadowed magic
453 if you delete the variable (del var), the previously shadowed magic
454 function becomes visible to automagic again."""
454 function becomes visible to automagic again."""
455
455
456 rc = self.shell.rc
456 rc = self.shell.rc
457 rc.automagic = not rc.automagic
457 rc.automagic = not rc.automagic
458 print '\n' + Magic.auto_status[rc.automagic]
458 print '\n' + Magic.auto_status[rc.automagic]
459
459
460 def magic_autocall(self, parameter_s = ''):
460 def magic_autocall(self, parameter_s = ''):
461 """Make functions callable without having to type parentheses.
461 """Make functions callable without having to type parentheses.
462
462
463 Usage:
463 Usage:
464
464
465 %autocall [mode]
465 %autocall [mode]
466
466
467 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
467 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
468 value is toggled on and off (remembering the previous state)."""
468 value is toggled on and off (remembering the previous state)."""
469
469
470 rc = self.shell.rc
470 rc = self.shell.rc
471
471
472 if parameter_s:
472 if parameter_s:
473 arg = int(parameter_s)
473 arg = int(parameter_s)
474 else:
474 else:
475 arg = 'toggle'
475 arg = 'toggle'
476
476
477 if not arg in (0,1,2,'toggle'):
477 if not arg in (0,1,2,'toggle'):
478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
479 return
479 return
480
480
481 if arg in (0,1,2):
481 if arg in (0,1,2):
482 rc.autocall = arg
482 rc.autocall = arg
483 else: # toggle
483 else: # toggle
484 if rc.autocall:
484 if rc.autocall:
485 self._magic_state.autocall_save = rc.autocall
485 self._magic_state.autocall_save = rc.autocall
486 rc.autocall = 0
486 rc.autocall = 0
487 else:
487 else:
488 try:
488 try:
489 rc.autocall = self._magic_state.autocall_save
489 rc.autocall = self._magic_state.autocall_save
490 except AttributeError:
490 except AttributeError:
491 rc.autocall = self._magic_state.autocall_save = 1
491 rc.autocall = self._magic_state.autocall_save = 1
492
492
493 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
493 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
494
494
495 def magic_autoindent(self, parameter_s = ''):
495 def magic_autoindent(self, parameter_s = ''):
496 """Toggle autoindent on/off (if available)."""
496 """Toggle autoindent on/off (if available)."""
497
497
498 self.shell.set_autoindent()
498 self.shell.set_autoindent()
499 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
499 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
500
500
501 def magic_system_verbose(self, parameter_s = ''):
501 def magic_system_verbose(self, parameter_s = ''):
502 """Toggle verbose printing of system calls on/off."""
502 """Toggle verbose printing of system calls on/off."""
503
503
504 self.shell.rc_set_toggle('system_verbose')
504 self.shell.rc_set_toggle('system_verbose')
505 print "System verbose printing is:",\
505 print "System verbose printing is:",\
506 ['OFF','ON'][self.shell.rc.system_verbose]
506 ['OFF','ON'][self.shell.rc.system_verbose]
507
507
508 def magic_history(self, parameter_s = ''):
508 def magic_history(self, parameter_s = ''):
509 """Print input history (_i<n> variables), with most recent last.
509 """Print input history (_i<n> variables), with most recent last.
510
510
511 %history -> print at most 40 inputs (some may be multi-line)\\
511 %history -> print at most 40 inputs (some may be multi-line)\\
512 %history n -> print at most n inputs\\
512 %history n -> print at most n inputs\\
513 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
513 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
514
514
515 Each input's number <n> is shown, and is accessible as the
515 Each input's number <n> is shown, and is accessible as the
516 automatically generated variable _i<n>. Multi-line statements are
516 automatically generated variable _i<n>. Multi-line statements are
517 printed starting at a new line for easy copy/paste.
517 printed starting at a new line for easy copy/paste.
518
518
519
519
520 Options:
520 Options:
521
521
522 -n: do NOT print line numbers. This is useful if you want to get a
522 -n: do NOT print line numbers. This is useful if you want to get a
523 printout of many lines which can be directly pasted into a text
523 printout of many lines which can be directly pasted into a text
524 editor.
524 editor.
525
525
526 This feature is only available if numbered prompts are in use.
526 This feature is only available if numbered prompts are in use.
527
527
528 -r: print the 'raw' history. IPython filters your input and
528 -r: print the 'raw' history. IPython filters your input and
529 converts it all into valid Python source before executing it (things
529 converts it all into valid Python source before executing it (things
530 like magics or aliases are turned into function calls, for
530 like magics or aliases are turned into function calls, for
531 example). With this option, you'll see the unfiltered history
531 example). With this option, you'll see the unfiltered history
532 instead of the filtered version: '%cd /' will be seen as '%cd /'
532 instead of the filtered version: '%cd /' will be seen as '%cd /'
533 instead of '_ip.magic("%cd /")'.
533 instead of '_ip.magic("%cd /")'.
534 """
534 """
535
535
536 shell = self.shell
536 shell = self.shell
537 if not shell.outputcache.do_full_cache:
537 if not shell.outputcache.do_full_cache:
538 print 'This feature is only available if numbered prompts are in use.'
538 print 'This feature is only available if numbered prompts are in use.'
539 return
539 return
540 opts,args = self.parse_options(parameter_s,'nr',mode='list')
540 opts,args = self.parse_options(parameter_s,'nr',mode='list')
541
541
542 if opts.has_key('r'):
542 if opts.has_key('r'):
543 input_hist = shell.input_hist_raw
543 input_hist = shell.input_hist_raw
544 else:
544 else:
545 input_hist = shell.input_hist
545 input_hist = shell.input_hist
546
546
547 default_length = 40
547 default_length = 40
548 if len(args) == 0:
548 if len(args) == 0:
549 final = len(input_hist)
549 final = len(input_hist)
550 init = max(1,final-default_length)
550 init = max(1,final-default_length)
551 elif len(args) == 1:
551 elif len(args) == 1:
552 final = len(input_hist)
552 final = len(input_hist)
553 init = max(1,final-int(args[0]))
553 init = max(1,final-int(args[0]))
554 elif len(args) == 2:
554 elif len(args) == 2:
555 init,final = map(int,args)
555 init,final = map(int,args)
556 else:
556 else:
557 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
557 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
558 print self.magic_hist.__doc__
558 print self.magic_hist.__doc__
559 return
559 return
560 width = len(str(final))
560 width = len(str(final))
561 line_sep = ['','\n']
561 line_sep = ['','\n']
562 print_nums = not opts.has_key('n')
562 print_nums = not opts.has_key('n')
563 for in_num in range(init,final):
563 for in_num in range(init,final):
564 inline = input_hist[in_num]
564 inline = input_hist[in_num]
565 multiline = int(inline.count('\n') > 1)
565 multiline = int(inline.count('\n') > 1)
566 if print_nums:
566 if print_nums:
567 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
567 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
568 print inline,
568 print inline,
569
569
570 def magic_hist(self, parameter_s=''):
570 def magic_hist(self, parameter_s=''):
571 """Alternate name for %history."""
571 """Alternate name for %history."""
572 return self.magic_history(parameter_s)
572 return self.magic_history(parameter_s)
573
573
574 def magic_p(self, parameter_s=''):
574 def magic_p(self, parameter_s=''):
575 """Just a short alias for Python's 'print'."""
575 """Just a short alias for Python's 'print'."""
576 exec 'print ' + parameter_s in self.shell.user_ns
576 exec 'print ' + parameter_s in self.shell.user_ns
577
577
578 def magic_r(self, parameter_s=''):
578 def magic_r(self, parameter_s=''):
579 """Repeat previous input.
579 """Repeat previous input.
580
580
581 If given an argument, repeats the previous command which starts with
581 If given an argument, repeats the previous command which starts with
582 the same string, otherwise it just repeats the previous input.
582 the same string, otherwise it just repeats the previous input.
583
583
584 Shell escaped commands (with ! as first character) are not recognized
584 Shell escaped commands (with ! as first character) are not recognized
585 by this system, only pure python code and magic commands.
585 by this system, only pure python code and magic commands.
586 """
586 """
587
587
588 start = parameter_s.strip()
588 start = parameter_s.strip()
589 esc_magic = self.shell.ESC_MAGIC
589 esc_magic = self.shell.ESC_MAGIC
590 # Identify magic commands even if automagic is on (which means
590 # Identify magic commands even if automagic is on (which means
591 # the in-memory version is different from that typed by the user).
591 # the in-memory version is different from that typed by the user).
592 if self.shell.rc.automagic:
592 if self.shell.rc.automagic:
593 start_magic = esc_magic+start
593 start_magic = esc_magic+start
594 else:
594 else:
595 start_magic = start
595 start_magic = start
596 # Look through the input history in reverse
596 # Look through the input history in reverse
597 for n in range(len(self.shell.input_hist)-2,0,-1):
597 for n in range(len(self.shell.input_hist)-2,0,-1):
598 input = self.shell.input_hist[n]
598 input = self.shell.input_hist[n]
599 # skip plain 'r' lines so we don't recurse to infinity
599 # skip plain 'r' lines so we don't recurse to infinity
600 if input != '_ip.magic("r")\n' and \
600 if input != '_ip.magic("r")\n' and \
601 (input.startswith(start) or input.startswith(start_magic)):
601 (input.startswith(start) or input.startswith(start_magic)):
602 #print 'match',`input` # dbg
602 #print 'match',`input` # dbg
603 print 'Executing:',input,
603 print 'Executing:',input,
604 self.shell.runlines(input)
604 self.shell.runlines(input)
605 return
605 return
606 print 'No previous input matching `%s` found.' % start
606 print 'No previous input matching `%s` found.' % start
607
607
608 def magic_page(self, parameter_s=''):
608 def magic_page(self, parameter_s=''):
609 """Pretty print the object and display it through a pager.
609 """Pretty print the object and display it through a pager.
610
610
611 If no parameter is given, use _ (last output)."""
611 If no parameter is given, use _ (last output)."""
612 # After a function contributed by Olivier Aubert, slightly modified.
612 # After a function contributed by Olivier Aubert, slightly modified.
613
613
614 oname = parameter_s and parameter_s or '_'
614 oname = parameter_s and parameter_s or '_'
615 info = self._ofind(oname)
615 info = self._ofind(oname)
616 if info['found']:
616 if info['found']:
617 page(pformat(info['obj']))
617 page(pformat(info['obj']))
618 else:
618 else:
619 print 'Object `%s` not found' % oname
619 print 'Object `%s` not found' % oname
620
620
621 def magic_profile(self, parameter_s=''):
621 def magic_profile(self, parameter_s=''):
622 """Print your currently active IPyhton profile."""
622 """Print your currently active IPyhton profile."""
623 if self.shell.rc.profile:
623 if self.shell.rc.profile:
624 printpl('Current IPython profile: $self.shell.rc.profile.')
624 printpl('Current IPython profile: $self.shell.rc.profile.')
625 else:
625 else:
626 print 'No profile active.'
626 print 'No profile active.'
627
627
628 def _inspect(self,meth,oname,**kw):
628 def _inspect(self,meth,oname,**kw):
629 """Generic interface to the inspector system.
629 """Generic interface to the inspector system.
630
630
631 This function is meant to be called by pdef, pdoc & friends."""
631 This function is meant to be called by pdef, pdoc & friends."""
632
632
633 oname = oname.strip()
633 oname = oname.strip()
634 info = Struct(self._ofind(oname))
634 info = Struct(self._ofind(oname))
635 if info.found:
635 if info.found:
636 pmethod = getattr(self.shell.inspector,meth)
636 pmethod = getattr(self.shell.inspector,meth)
637 formatter = info.ismagic and self.format_screen or None
637 formatter = info.ismagic and self.format_screen or None
638 if meth == 'pdoc':
638 if meth == 'pdoc':
639 pmethod(info.obj,oname,formatter)
639 pmethod(info.obj,oname,formatter)
640 elif meth == 'pinfo':
640 elif meth == 'pinfo':
641 pmethod(info.obj,oname,formatter,info,**kw)
641 pmethod(info.obj,oname,formatter,info,**kw)
642 else:
642 else:
643 pmethod(info.obj,oname)
643 pmethod(info.obj,oname)
644 else:
644 else:
645 print 'Object `%s` not found.' % oname
645 print 'Object `%s` not found.' % oname
646 return 'not found' # so callers can take other action
646 return 'not found' # so callers can take other action
647
647
648 def magic_pdef(self, parameter_s=''):
648 def magic_pdef(self, parameter_s=''):
649 """Print the definition header for any callable object.
649 """Print the definition header for any callable object.
650
650
651 If the object is a class, print the constructor information."""
651 If the object is a class, print the constructor information."""
652 self._inspect('pdef',parameter_s)
652 self._inspect('pdef',parameter_s)
653
653
654 def magic_pdoc(self, parameter_s=''):
654 def magic_pdoc(self, parameter_s=''):
655 """Print the docstring for an object.
655 """Print the docstring for an object.
656
656
657 If the given object is a class, it will print both the class and the
657 If the given object is a class, it will print both the class and the
658 constructor docstrings."""
658 constructor docstrings."""
659 self._inspect('pdoc',parameter_s)
659 self._inspect('pdoc',parameter_s)
660
660
661 def magic_psource(self, parameter_s=''):
661 def magic_psource(self, parameter_s=''):
662 """Print (or run through pager) the source code for an object."""
662 """Print (or run through pager) the source code for an object."""
663 self._inspect('psource',parameter_s)
663 self._inspect('psource',parameter_s)
664
664
665 def magic_pfile(self, parameter_s=''):
665 def magic_pfile(self, parameter_s=''):
666 """Print (or run through pager) the file where an object is defined.
666 """Print (or run through pager) the file where an object is defined.
667
667
668 The file opens at the line where the object definition begins. IPython
668 The file opens at the line where the object definition begins. IPython
669 will honor the environment variable PAGER if set, and otherwise will
669 will honor the environment variable PAGER if set, and otherwise will
670 do its best to print the file in a convenient form.
670 do its best to print the file in a convenient form.
671
671
672 If the given argument is not an object currently defined, IPython will
672 If the given argument is not an object currently defined, IPython will
673 try to interpret it as a filename (automatically adding a .py extension
673 try to interpret it as a filename (automatically adding a .py extension
674 if needed). You can thus use %pfile as a syntax highlighting code
674 if needed). You can thus use %pfile as a syntax highlighting code
675 viewer."""
675 viewer."""
676
676
677 # first interpret argument as an object name
677 # first interpret argument as an object name
678 out = self._inspect('pfile',parameter_s)
678 out = self._inspect('pfile',parameter_s)
679 # if not, try the input as a filename
679 # if not, try the input as a filename
680 if out == 'not found':
680 if out == 'not found':
681 try:
681 try:
682 filename = get_py_filename(parameter_s)
682 filename = get_py_filename(parameter_s)
683 except IOError,msg:
683 except IOError,msg:
684 print msg
684 print msg
685 return
685 return
686 page(self.shell.inspector.format(file(filename).read()))
686 page(self.shell.inspector.format(file(filename).read()))
687
687
688 def magic_pinfo(self, parameter_s=''):
688 def magic_pinfo(self, parameter_s=''):
689 """Provide detailed information about an object.
689 """Provide detailed information about an object.
690
690
691 '%pinfo object' is just a synonym for object? or ?object."""
691 '%pinfo object' is just a synonym for object? or ?object."""
692
692
693 #print 'pinfo par: <%s>' % parameter_s # dbg
693 #print 'pinfo par: <%s>' % parameter_s # dbg
694
694
695 # detail_level: 0 -> obj? , 1 -> obj??
695 # detail_level: 0 -> obj? , 1 -> obj??
696 detail_level = 0
696 detail_level = 0
697 # We need to detect if we got called as 'pinfo pinfo foo', which can
697 # We need to detect if we got called as 'pinfo pinfo foo', which can
698 # happen if the user types 'pinfo foo?' at the cmd line.
698 # happen if the user types 'pinfo foo?' at the cmd line.
699 pinfo,qmark1,oname,qmark2 = \
699 pinfo,qmark1,oname,qmark2 = \
700 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
700 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
701 if pinfo or qmark1 or qmark2:
701 if pinfo or qmark1 or qmark2:
702 detail_level = 1
702 detail_level = 1
703 if "*" in oname:
703 if "*" in oname:
704 self.magic_psearch(oname)
704 self.magic_psearch(oname)
705 else:
705 else:
706 self._inspect('pinfo',oname,detail_level=detail_level)
706 self._inspect('pinfo',oname,detail_level=detail_level)
707
707
708 def magic_psearch(self, parameter_s=''):
708 def magic_psearch(self, parameter_s=''):
709 """Search for object in namespaces by wildcard.
709 """Search for object in namespaces by wildcard.
710
710
711 %psearch [options] PATTERN [OBJECT TYPE]
711 %psearch [options] PATTERN [OBJECT TYPE]
712
712
713 Note: ? can be used as a synonym for %psearch, at the beginning or at
713 Note: ? can be used as a synonym for %psearch, at the beginning or at
714 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
714 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
715 rest of the command line must be unchanged (options come first), so
715 rest of the command line must be unchanged (options come first), so
716 for example the following forms are equivalent
716 for example the following forms are equivalent
717
717
718 %psearch -i a* function
718 %psearch -i a* function
719 -i a* function?
719 -i a* function?
720 ?-i a* function
720 ?-i a* function
721
721
722 Arguments:
722 Arguments:
723
723
724 PATTERN
724 PATTERN
725
725
726 where PATTERN is a string containing * as a wildcard similar to its
726 where PATTERN is a string containing * as a wildcard similar to its
727 use in a shell. The pattern is matched in all namespaces on the
727 use in a shell. The pattern is matched in all namespaces on the
728 search path. By default objects starting with a single _ are not
728 search path. By default objects starting with a single _ are not
729 matched, many IPython generated objects have a single
729 matched, many IPython generated objects have a single
730 underscore. The default is case insensitive matching. Matching is
730 underscore. The default is case insensitive matching. Matching is
731 also done on the attributes of objects and not only on the objects
731 also done on the attributes of objects and not only on the objects
732 in a module.
732 in a module.
733
733
734 [OBJECT TYPE]
734 [OBJECT TYPE]
735
735
736 Is the name of a python type from the types module. The name is
736 Is the name of a python type from the types module. The name is
737 given in lowercase without the ending type, ex. StringType is
737 given in lowercase without the ending type, ex. StringType is
738 written string. By adding a type here only objects matching the
738 written string. By adding a type here only objects matching the
739 given type are matched. Using all here makes the pattern match all
739 given type are matched. Using all here makes the pattern match all
740 types (this is the default).
740 types (this is the default).
741
741
742 Options:
742 Options:
743
743
744 -a: makes the pattern match even objects whose names start with a
744 -a: makes the pattern match even objects whose names start with a
745 single underscore. These names are normally ommitted from the
745 single underscore. These names are normally ommitted from the
746 search.
746 search.
747
747
748 -i/-c: make the pattern case insensitive/sensitive. If neither of
748 -i/-c: make the pattern case insensitive/sensitive. If neither of
749 these options is given, the default is read from your ipythonrc
749 these options is given, the default is read from your ipythonrc
750 file. The option name which sets this value is
750 file. The option name which sets this value is
751 'wildcards_case_sensitive'. If this option is not specified in your
751 'wildcards_case_sensitive'. If this option is not specified in your
752 ipythonrc file, IPython's internal default is to do a case sensitive
752 ipythonrc file, IPython's internal default is to do a case sensitive
753 search.
753 search.
754
754
755 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
755 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
756 specifiy can be searched in any of the following namespaces:
756 specifiy can be searched in any of the following namespaces:
757 'builtin', 'user', 'user_global','internal', 'alias', where
757 'builtin', 'user', 'user_global','internal', 'alias', where
758 'builtin' and 'user' are the search defaults. Note that you should
758 'builtin' and 'user' are the search defaults. Note that you should
759 not use quotes when specifying namespaces.
759 not use quotes when specifying namespaces.
760
760
761 'Builtin' contains the python module builtin, 'user' contains all
761 'Builtin' contains the python module builtin, 'user' contains all
762 user data, 'alias' only contain the shell aliases and no python
762 user data, 'alias' only contain the shell aliases and no python
763 objects, 'internal' contains objects used by IPython. The
763 objects, 'internal' contains objects used by IPython. The
764 'user_global' namespace is only used by embedded IPython instances,
764 'user_global' namespace is only used by embedded IPython instances,
765 and it contains module-level globals. You can add namespaces to the
765 and it contains module-level globals. You can add namespaces to the
766 search with -s or exclude them with -e (these options can be given
766 search with -s or exclude them with -e (these options can be given
767 more than once).
767 more than once).
768
768
769 Examples:
769 Examples:
770
770
771 %psearch a* -> objects beginning with an a
771 %psearch a* -> objects beginning with an a
772 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
772 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
773 %psearch a* function -> all functions beginning with an a
773 %psearch a* function -> all functions beginning with an a
774 %psearch re.e* -> objects beginning with an e in module re
774 %psearch re.e* -> objects beginning with an e in module re
775 %psearch r*.e* -> objects that start with e in modules starting in r
775 %psearch r*.e* -> objects that start with e in modules starting in r
776 %psearch r*.* string -> all strings in modules beginning with r
776 %psearch r*.* string -> all strings in modules beginning with r
777
777
778 Case sensitve search:
778 Case sensitve search:
779
779
780 %psearch -c a* list all object beginning with lower case a
780 %psearch -c a* list all object beginning with lower case a
781
781
782 Show objects beginning with a single _:
782 Show objects beginning with a single _:
783
783
784 %psearch -a _* list objects beginning with a single underscore"""
784 %psearch -a _* list objects beginning with a single underscore"""
785
785
786 # default namespaces to be searched
786 # default namespaces to be searched
787 def_search = ['user','builtin']
787 def_search = ['user','builtin']
788
788
789 # Process options/args
789 # Process options/args
790 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
790 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
791 opt = opts.get
791 opt = opts.get
792 shell = self.shell
792 shell = self.shell
793 psearch = shell.inspector.psearch
793 psearch = shell.inspector.psearch
794
794
795 # select case options
795 # select case options
796 if opts.has_key('i'):
796 if opts.has_key('i'):
797 ignore_case = True
797 ignore_case = True
798 elif opts.has_key('c'):
798 elif opts.has_key('c'):
799 ignore_case = False
799 ignore_case = False
800 else:
800 else:
801 ignore_case = not shell.rc.wildcards_case_sensitive
801 ignore_case = not shell.rc.wildcards_case_sensitive
802
802
803 # Build list of namespaces to search from user options
803 # Build list of namespaces to search from user options
804 def_search.extend(opt('s',[]))
804 def_search.extend(opt('s',[]))
805 ns_exclude = ns_exclude=opt('e',[])
805 ns_exclude = ns_exclude=opt('e',[])
806 ns_search = [nm for nm in def_search if nm not in ns_exclude]
806 ns_search = [nm for nm in def_search if nm not in ns_exclude]
807
807
808 # Call the actual search
808 # Call the actual search
809 try:
809 try:
810 psearch(args,shell.ns_table,ns_search,
810 psearch(args,shell.ns_table,ns_search,
811 show_all=opt('a'),ignore_case=ignore_case)
811 show_all=opt('a'),ignore_case=ignore_case)
812 except:
812 except:
813 shell.showtraceback()
813 shell.showtraceback()
814
814
815 def magic_who_ls(self, parameter_s=''):
815 def magic_who_ls(self, parameter_s=''):
816 """Return a sorted list of all interactive variables.
816 """Return a sorted list of all interactive variables.
817
817
818 If arguments are given, only variables of types matching these
818 If arguments are given, only variables of types matching these
819 arguments are returned."""
819 arguments are returned."""
820
820
821 user_ns = self.shell.user_ns
821 user_ns = self.shell.user_ns
822 internal_ns = self.shell.internal_ns
822 internal_ns = self.shell.internal_ns
823 user_config_ns = self.shell.user_config_ns
823 user_config_ns = self.shell.user_config_ns
824 out = []
824 out = []
825 typelist = parameter_s.split()
825 typelist = parameter_s.split()
826
826
827 for i in user_ns:
827 for i in user_ns:
828 if not (i.startswith('_') or i.startswith('_i')) \
828 if not (i.startswith('_') or i.startswith('_i')) \
829 and not (i in internal_ns or i in user_config_ns):
829 and not (i in internal_ns or i in user_config_ns):
830 if typelist:
830 if typelist:
831 if type(user_ns[i]).__name__ in typelist:
831 if type(user_ns[i]).__name__ in typelist:
832 out.append(i)
832 out.append(i)
833 else:
833 else:
834 out.append(i)
834 out.append(i)
835 out.sort()
835 out.sort()
836 return out
836 return out
837
837
838 def magic_who(self, parameter_s=''):
838 def magic_who(self, parameter_s=''):
839 """Print all interactive variables, with some minimal formatting.
839 """Print all interactive variables, with some minimal formatting.
840
840
841 If any arguments are given, only variables whose type matches one of
841 If any arguments are given, only variables whose type matches one of
842 these are printed. For example:
842 these are printed. For example:
843
843
844 %who function str
844 %who function str
845
845
846 will only list functions and strings, excluding all other types of
846 will only list functions and strings, excluding all other types of
847 variables. To find the proper type names, simply use type(var) at a
847 variables. To find the proper type names, simply use type(var) at a
848 command line to see how python prints type names. For example:
848 command line to see how python prints type names. For example:
849
849
850 In [1]: type('hello')\\
850 In [1]: type('hello')\\
851 Out[1]: <type 'str'>
851 Out[1]: <type 'str'>
852
852
853 indicates that the type name for strings is 'str'.
853 indicates that the type name for strings is 'str'.
854
854
855 %who always excludes executed names loaded through your configuration
855 %who always excludes executed names loaded through your configuration
856 file and things which are internal to IPython.
856 file and things which are internal to IPython.
857
857
858 This is deliberate, as typically you may load many modules and the
858 This is deliberate, as typically you may load many modules and the
859 purpose of %who is to show you only what you've manually defined."""
859 purpose of %who is to show you only what you've manually defined."""
860
860
861 varlist = self.magic_who_ls(parameter_s)
861 varlist = self.magic_who_ls(parameter_s)
862 if not varlist:
862 if not varlist:
863 print 'Interactive namespace is empty.'
863 print 'Interactive namespace is empty.'
864 return
864 return
865
865
866 # if we have variables, move on...
866 # if we have variables, move on...
867
867
868 # stupid flushing problem: when prompts have no separators, stdout is
868 # stupid flushing problem: when prompts have no separators, stdout is
869 # getting lost. I'm starting to think this is a python bug. I'm having
869 # getting lost. I'm starting to think this is a python bug. I'm having
870 # to force a flush with a print because even a sys.stdout.flush
870 # to force a flush with a print because even a sys.stdout.flush
871 # doesn't seem to do anything!
871 # doesn't seem to do anything!
872
872
873 count = 0
873 count = 0
874 for i in varlist:
874 for i in varlist:
875 print i+'\t',
875 print i+'\t',
876 count += 1
876 count += 1
877 if count > 8:
877 if count > 8:
878 count = 0
878 count = 0
879 print
879 print
880 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
880 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
881
881
882 print # well, this does force a flush at the expense of an extra \n
882 print # well, this does force a flush at the expense of an extra \n
883
883
884 def magic_whos(self, parameter_s=''):
884 def magic_whos(self, parameter_s=''):
885 """Like %who, but gives some extra information about each variable.
885 """Like %who, but gives some extra information about each variable.
886
886
887 The same type filtering of %who can be applied here.
887 The same type filtering of %who can be applied here.
888
888
889 For all variables, the type is printed. Additionally it prints:
889 For all variables, the type is printed. Additionally it prints:
890
890
891 - For {},[],(): their length.
891 - For {},[],(): their length.
892
892
893 - For Numeric arrays, a summary with shape, number of elements,
893 - For Numeric arrays, a summary with shape, number of elements,
894 typecode and size in memory.
894 typecode and size in memory.
895
895
896 - Everything else: a string representation, snipping their middle if
896 - Everything else: a string representation, snipping their middle if
897 too long."""
897 too long."""
898
898
899 varnames = self.magic_who_ls(parameter_s)
899 varnames = self.magic_who_ls(parameter_s)
900 if not varnames:
900 if not varnames:
901 print 'Interactive namespace is empty.'
901 print 'Interactive namespace is empty.'
902 return
902 return
903
903
904 # if we have variables, move on...
904 # if we have variables, move on...
905
905
906 # for these types, show len() instead of data:
906 # for these types, show len() instead of data:
907 seq_types = [types.DictType,types.ListType,types.TupleType]
907 seq_types = [types.DictType,types.ListType,types.TupleType]
908
908
909 # for Numeric arrays, display summary info
909 # for Numeric arrays, display summary info
910 try:
910 try:
911 import Numeric
911 import Numeric
912 except ImportError:
912 except ImportError:
913 array_type = None
913 array_type = None
914 else:
914 else:
915 array_type = Numeric.ArrayType.__name__
915 array_type = Numeric.ArrayType.__name__
916
916
917 # Find all variable names and types so we can figure out column sizes
917 # Find all variable names and types so we can figure out column sizes
918 get_vars = lambda i: self.shell.user_ns[i]
918 get_vars = lambda i: self.shell.user_ns[i]
919 type_name = lambda v: type(v).__name__
919 type_name = lambda v: type(v).__name__
920 varlist = map(get_vars,varnames)
920 varlist = map(get_vars,varnames)
921
921
922 typelist = []
922 typelist = []
923 for vv in varlist:
923 for vv in varlist:
924 tt = type_name(vv)
924 tt = type_name(vv)
925 if tt=='instance':
925 if tt=='instance':
926 typelist.append(str(vv.__class__))
926 typelist.append(str(vv.__class__))
927 else:
927 else:
928 typelist.append(tt)
928 typelist.append(tt)
929
929
930 # column labels and # of spaces as separator
930 # column labels and # of spaces as separator
931 varlabel = 'Variable'
931 varlabel = 'Variable'
932 typelabel = 'Type'
932 typelabel = 'Type'
933 datalabel = 'Data/Info'
933 datalabel = 'Data/Info'
934 colsep = 3
934 colsep = 3
935 # variable format strings
935 # variable format strings
936 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
936 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
937 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
937 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
938 aformat = "%s: %s elems, type `%s`, %s bytes"
938 aformat = "%s: %s elems, type `%s`, %s bytes"
939 # find the size of the columns to format the output nicely
939 # find the size of the columns to format the output nicely
940 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
940 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
941 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
941 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
942 # table header
942 # table header
943 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
943 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
944 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
944 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
945 # and the table itself
945 # and the table itself
946 kb = 1024
946 kb = 1024
947 Mb = 1048576 # kb**2
947 Mb = 1048576 # kb**2
948 for vname,var,vtype in zip(varnames,varlist,typelist):
948 for vname,var,vtype in zip(varnames,varlist,typelist):
949 print itpl(vformat),
949 print itpl(vformat),
950 if vtype in seq_types:
950 if vtype in seq_types:
951 print len(var)
951 print len(var)
952 elif vtype==array_type:
952 elif vtype==array_type:
953 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
953 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
954 vsize = Numeric.size(var)
954 vsize = Numeric.size(var)
955 vbytes = vsize*var.itemsize()
955 vbytes = vsize*var.itemsize()
956 if vbytes < 100000:
956 if vbytes < 100000:
957 print aformat % (vshape,vsize,var.typecode(),vbytes)
957 print aformat % (vshape,vsize,var.typecode(),vbytes)
958 else:
958 else:
959 print aformat % (vshape,vsize,var.typecode(),vbytes),
959 print aformat % (vshape,vsize,var.typecode(),vbytes),
960 if vbytes < Mb:
960 if vbytes < Mb:
961 print '(%s kb)' % (vbytes/kb,)
961 print '(%s kb)' % (vbytes/kb,)
962 else:
962 else:
963 print '(%s Mb)' % (vbytes/Mb,)
963 print '(%s Mb)' % (vbytes/Mb,)
964 else:
964 else:
965 vstr = str(var).replace('\n','\\n')
965 vstr = str(var).replace('\n','\\n')
966 if len(vstr) < 50:
966 if len(vstr) < 50:
967 print vstr
967 print vstr
968 else:
968 else:
969 printpl(vfmt_short)
969 printpl(vfmt_short)
970
970
971 def magic_reset(self, parameter_s=''):
971 def magic_reset(self, parameter_s=''):
972 """Resets the namespace by removing all names defined by the user.
972 """Resets the namespace by removing all names defined by the user.
973
973
974 Input/Output history are left around in case you need them."""
974 Input/Output history are left around in case you need them."""
975
975
976 ans = raw_input(
976 ans = raw_input(
977 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
977 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
978 if not ans.lower() == 'y':
978 if not ans.lower() == 'y':
979 print 'Nothing done.'
979 print 'Nothing done.'
980 return
980 return
981 user_ns = self.shell.user_ns
981 user_ns = self.shell.user_ns
982 for i in self.magic_who_ls():
982 for i in self.magic_who_ls():
983 del(user_ns[i])
983 del(user_ns[i])
984
984
985 def magic_config(self,parameter_s=''):
985 def magic_config(self,parameter_s=''):
986 """Show IPython's internal configuration."""
986 """Show IPython's internal configuration."""
987
987
988 page('Current configuration structure:\n'+
988 page('Current configuration structure:\n'+
989 pformat(self.shell.rc.dict()))
989 pformat(self.shell.rc.dict()))
990
990
991 def magic_logstart(self,parameter_s=''):
991 def magic_logstart(self,parameter_s=''):
992 """Start logging anywhere in a session.
992 """Start logging anywhere in a session.
993
993
994 %logstart [-o|-r|-t] [log_name [log_mode]]
994 %logstart [-o|-r|-t] [log_name [log_mode]]
995
995
996 If no name is given, it defaults to a file named 'ipython_log.py' in your
996 If no name is given, it defaults to a file named 'ipython_log.py' in your
997 current directory, in 'rotate' mode (see below).
997 current directory, in 'rotate' mode (see below).
998
998
999 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
999 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1000 history up to that point and then continues logging.
1000 history up to that point and then continues logging.
1001
1001
1002 %logstart takes a second optional parameter: logging mode. This can be one
1002 %logstart takes a second optional parameter: logging mode. This can be one
1003 of (note that the modes are given unquoted):\\
1003 of (note that the modes are given unquoted):\\
1004 append: well, that says it.\\
1004 append: well, that says it.\\
1005 backup: rename (if exists) to name~ and start name.\\
1005 backup: rename (if exists) to name~ and start name.\\
1006 global: single logfile in your home dir, appended to.\\
1006 global: single logfile in your home dir, appended to.\\
1007 over : overwrite existing log.\\
1007 over : overwrite existing log.\\
1008 rotate: create rotating logs name.1~, name.2~, etc.
1008 rotate: create rotating logs name.1~, name.2~, etc.
1009
1009
1010 Options:
1010 Options:
1011
1011
1012 -o: log also IPython's output. In this mode, all commands which
1012 -o: log also IPython's output. In this mode, all commands which
1013 generate an Out[NN] prompt are recorded to the logfile, right after
1013 generate an Out[NN] prompt are recorded to the logfile, right after
1014 their corresponding input line. The output lines are always
1014 their corresponding input line. The output lines are always
1015 prepended with a '#[Out]# ' marker, so that the log remains valid
1015 prepended with a '#[Out]# ' marker, so that the log remains valid
1016 Python code.
1016 Python code.
1017
1017
1018 Since this marker is always the same, filtering only the output from
1018 Since this marker is always the same, filtering only the output from
1019 a log is very easy, using for example a simple awk call:
1019 a log is very easy, using for example a simple awk call:
1020
1020
1021 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1021 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1022
1022
1023 -r: log 'raw' input. Normally, IPython's logs contain the processed
1023 -r: log 'raw' input. Normally, IPython's logs contain the processed
1024 input, so that user lines are logged in their final form, converted
1024 input, so that user lines are logged in their final form, converted
1025 into valid Python. For example, %Exit is logged as
1025 into valid Python. For example, %Exit is logged as
1026 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1026 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1027 exactly as typed, with no transformations applied.
1027 exactly as typed, with no transformations applied.
1028
1028
1029 -t: put timestamps before each input line logged (these are put in
1029 -t: put timestamps before each input line logged (these are put in
1030 comments)."""
1030 comments)."""
1031
1031
1032 opts,par = self.parse_options(parameter_s,'ort')
1032 opts,par = self.parse_options(parameter_s,'ort')
1033 log_output = 'o' in opts
1033 log_output = 'o' in opts
1034 log_raw_input = 'r' in opts
1034 log_raw_input = 'r' in opts
1035 timestamp = 't' in opts
1035 timestamp = 't' in opts
1036
1036
1037 rc = self.shell.rc
1037 rc = self.shell.rc
1038 logger = self.shell.logger
1038 logger = self.shell.logger
1039
1039
1040 # if no args are given, the defaults set in the logger constructor by
1040 # if no args are given, the defaults set in the logger constructor by
1041 # ipytohn remain valid
1041 # ipytohn remain valid
1042 if par:
1042 if par:
1043 try:
1043 try:
1044 logfname,logmode = par.split()
1044 logfname,logmode = par.split()
1045 except:
1045 except:
1046 logfname = par
1046 logfname = par
1047 logmode = 'backup'
1047 logmode = 'backup'
1048 else:
1048 else:
1049 logfname = logger.logfname
1049 logfname = logger.logfname
1050 logmode = logger.logmode
1050 logmode = logger.logmode
1051 # put logfname into rc struct as if it had been called on the command
1051 # put logfname into rc struct as if it had been called on the command
1052 # line, so it ends up saved in the log header Save it in case we need
1052 # line, so it ends up saved in the log header Save it in case we need
1053 # to restore it...
1053 # to restore it...
1054 old_logfile = rc.opts.get('logfile','')
1054 old_logfile = rc.opts.get('logfile','')
1055 if logfname:
1055 if logfname:
1056 logfname = os.path.expanduser(logfname)
1056 logfname = os.path.expanduser(logfname)
1057 rc.opts.logfile = logfname
1057 rc.opts.logfile = logfname
1058 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1058 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1059 try:
1059 try:
1060 started = logger.logstart(logfname,loghead,logmode,
1060 started = logger.logstart(logfname,loghead,logmode,
1061 log_output,timestamp,log_raw_input)
1061 log_output,timestamp,log_raw_input)
1062 except:
1062 except:
1063 rc.opts.logfile = old_logfile
1063 rc.opts.logfile = old_logfile
1064 warn("Couldn't start log: %s" % sys.exc_info()[1])
1064 warn("Couldn't start log: %s" % sys.exc_info()[1])
1065 else:
1065 else:
1066 # log input history up to this point, optionally interleaving
1066 # log input history up to this point, optionally interleaving
1067 # output if requested
1067 # output if requested
1068
1068
1069 if timestamp:
1069 if timestamp:
1070 # disable timestamping for the previous history, since we've
1070 # disable timestamping for the previous history, since we've
1071 # lost those already (no time machine here).
1071 # lost those already (no time machine here).
1072 logger.timestamp = False
1072 logger.timestamp = False
1073
1073
1074 if log_raw_input:
1074 if log_raw_input:
1075 input_hist = self.shell.input_hist_raw
1075 input_hist = self.shell.input_hist_raw
1076 else:
1076 else:
1077 input_hist = self.shell.input_hist
1077 input_hist = self.shell.input_hist
1078
1078
1079 if log_output:
1079 if log_output:
1080 log_write = logger.log_write
1080 log_write = logger.log_write
1081 output_hist = self.shell.output_hist
1081 output_hist = self.shell.output_hist
1082 for n in range(1,len(input_hist)-1):
1082 for n in range(1,len(input_hist)-1):
1083 log_write(input_hist[n].rstrip())
1083 log_write(input_hist[n].rstrip())
1084 if n in output_hist:
1084 if n in output_hist:
1085 log_write(repr(output_hist[n]),'output')
1085 log_write(repr(output_hist[n]),'output')
1086 else:
1086 else:
1087 logger.log_write(input_hist[1:])
1087 logger.log_write(input_hist[1:])
1088 if timestamp:
1088 if timestamp:
1089 # re-enable timestamping
1089 # re-enable timestamping
1090 logger.timestamp = True
1090 logger.timestamp = True
1091
1091
1092 print ('Activating auto-logging. '
1092 print ('Activating auto-logging. '
1093 'Current session state plus future input saved.')
1093 'Current session state plus future input saved.')
1094 logger.logstate()
1094 logger.logstate()
1095
1095
1096 def magic_logoff(self,parameter_s=''):
1096 def magic_logoff(self,parameter_s=''):
1097 """Temporarily stop logging.
1097 """Temporarily stop logging.
1098
1098
1099 You must have previously started logging."""
1099 You must have previously started logging."""
1100 self.shell.logger.switch_log(0)
1100 self.shell.logger.switch_log(0)
1101
1101
1102 def magic_logon(self,parameter_s=''):
1102 def magic_logon(self,parameter_s=''):
1103 """Restart logging.
1103 """Restart logging.
1104
1104
1105 This function is for restarting logging which you've temporarily
1105 This function is for restarting logging which you've temporarily
1106 stopped with %logoff. For starting logging for the first time, you
1106 stopped with %logoff. For starting logging for the first time, you
1107 must use the %logstart function, which allows you to specify an
1107 must use the %logstart function, which allows you to specify an
1108 optional log filename."""
1108 optional log filename."""
1109
1109
1110 self.shell.logger.switch_log(1)
1110 self.shell.logger.switch_log(1)
1111
1111
1112 def magic_logstate(self,parameter_s=''):
1112 def magic_logstate(self,parameter_s=''):
1113 """Print the status of the logging system."""
1113 """Print the status of the logging system."""
1114
1114
1115 self.shell.logger.logstate()
1115 self.shell.logger.logstate()
1116
1116
1117 def magic_pdb(self, parameter_s=''):
1117 def magic_pdb(self, parameter_s=''):
1118 """Control the calling of the pdb interactive debugger.
1118 """Control the calling of the pdb interactive debugger.
1119
1119
1120 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1120 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1121 argument it works as a toggle.
1121 argument it works as a toggle.
1122
1122
1123 When an exception is triggered, IPython can optionally call the
1123 When an exception is triggered, IPython can optionally call the
1124 interactive pdb debugger after the traceback printout. %pdb toggles
1124 interactive pdb debugger after the traceback printout. %pdb toggles
1125 this feature on and off."""
1125 this feature on and off."""
1126
1126
1127 par = parameter_s.strip().lower()
1127 par = parameter_s.strip().lower()
1128
1128
1129 if par:
1129 if par:
1130 try:
1130 try:
1131 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1131 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1132 except KeyError:
1132 except KeyError:
1133 print ('Incorrect argument. Use on/1, off/0, '
1133 print ('Incorrect argument. Use on/1, off/0, '
1134 'or nothing for a toggle.')
1134 'or nothing for a toggle.')
1135 return
1135 return
1136 else:
1136 else:
1137 # toggle
1137 # toggle
1138 new_pdb = not self.shell.InteractiveTB.call_pdb
1138 new_pdb = not self.shell.InteractiveTB.call_pdb
1139
1139
1140 # set on the shell
1140 # set on the shell
1141 self.shell.call_pdb = new_pdb
1141 self.shell.call_pdb = new_pdb
1142 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1142 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1143
1143
1144 def magic_prun(self, parameter_s ='',user_mode=1,
1144 def magic_prun(self, parameter_s ='',user_mode=1,
1145 opts=None,arg_lst=None,prog_ns=None):
1145 opts=None,arg_lst=None,prog_ns=None):
1146
1146
1147 """Run a statement through the python code profiler.
1147 """Run a statement through the python code profiler.
1148
1148
1149 Usage:\\
1149 Usage:\\
1150 %prun [options] statement
1150 %prun [options] statement
1151
1151
1152 The given statement (which doesn't require quote marks) is run via the
1152 The given statement (which doesn't require quote marks) is run via the
1153 python profiler in a manner similar to the profile.run() function.
1153 python profiler in a manner similar to the profile.run() function.
1154 Namespaces are internally managed to work correctly; profile.run
1154 Namespaces are internally managed to work correctly; profile.run
1155 cannot be used in IPython because it makes certain assumptions about
1155 cannot be used in IPython because it makes certain assumptions about
1156 namespaces which do not hold under IPython.
1156 namespaces which do not hold under IPython.
1157
1157
1158 Options:
1158 Options:
1159
1159
1160 -l <limit>: you can place restrictions on what or how much of the
1160 -l <limit>: you can place restrictions on what or how much of the
1161 profile gets printed. The limit value can be:
1161 profile gets printed. The limit value can be:
1162
1162
1163 * A string: only information for function names containing this string
1163 * A string: only information for function names containing this string
1164 is printed.
1164 is printed.
1165
1165
1166 * An integer: only these many lines are printed.
1166 * An integer: only these many lines are printed.
1167
1167
1168 * A float (between 0 and 1): this fraction of the report is printed
1168 * A float (between 0 and 1): this fraction of the report is printed
1169 (for example, use a limit of 0.4 to see the topmost 40% only).
1169 (for example, use a limit of 0.4 to see the topmost 40% only).
1170
1170
1171 You can combine several limits with repeated use of the option. For
1171 You can combine several limits with repeated use of the option. For
1172 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1172 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1173 information about class constructors.
1173 information about class constructors.
1174
1174
1175 -r: return the pstats.Stats object generated by the profiling. This
1175 -r: return the pstats.Stats object generated by the profiling. This
1176 object has all the information about the profile in it, and you can
1176 object has all the information about the profile in it, and you can
1177 later use it for further analysis or in other functions.
1177 later use it for further analysis or in other functions.
1178
1178
1179 Since magic functions have a particular form of calling which prevents
1179 Since magic functions have a particular form of calling which prevents
1180 you from writing something like:\\
1180 you from writing something like:\\
1181 In [1]: p = %prun -r print 4 # invalid!\\
1181 In [1]: p = %prun -r print 4 # invalid!\\
1182 you must instead use IPython's automatic variables to assign this:\\
1182 you must instead use IPython's automatic variables to assign this:\\
1183 In [1]: %prun -r print 4 \\
1183 In [1]: %prun -r print 4 \\
1184 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1184 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1185 In [2]: stats = _
1185 In [2]: stats = _
1186
1186
1187 If you really need to assign this value via an explicit function call,
1187 If you really need to assign this value via an explicit function call,
1188 you can always tap directly into the true name of the magic function
1188 you can always tap directly into the true name of the magic function
1189 by using the _ip.magic function:\\
1189 by using the _ip.magic function:\\
1190 In [3]: stats = _ip.magic('prun','-r print 4')
1190 In [3]: stats = _ip.magic('prun','-r print 4')
1191
1191
1192 You can type _ip.magic? for more details.
1192 You can type _ip.magic? for more details.
1193
1193
1194 -s <key>: sort profile by given key. You can provide more than one key
1194 -s <key>: sort profile by given key. You can provide more than one key
1195 by using the option several times: '-s key1 -s key2 -s key3...'. The
1195 by using the option several times: '-s key1 -s key2 -s key3...'. The
1196 default sorting key is 'time'.
1196 default sorting key is 'time'.
1197
1197
1198 The following is copied verbatim from the profile documentation
1198 The following is copied verbatim from the profile documentation
1199 referenced below:
1199 referenced below:
1200
1200
1201 When more than one key is provided, additional keys are used as
1201 When more than one key is provided, additional keys are used as
1202 secondary criteria when the there is equality in all keys selected
1202 secondary criteria when the there is equality in all keys selected
1203 before them.
1203 before them.
1204
1204
1205 Abbreviations can be used for any key names, as long as the
1205 Abbreviations can be used for any key names, as long as the
1206 abbreviation is unambiguous. The following are the keys currently
1206 abbreviation is unambiguous. The following are the keys currently
1207 defined:
1207 defined:
1208
1208
1209 Valid Arg Meaning\\
1209 Valid Arg Meaning\\
1210 "calls" call count\\
1210 "calls" call count\\
1211 "cumulative" cumulative time\\
1211 "cumulative" cumulative time\\
1212 "file" file name\\
1212 "file" file name\\
1213 "module" file name\\
1213 "module" file name\\
1214 "pcalls" primitive call count\\
1214 "pcalls" primitive call count\\
1215 "line" line number\\
1215 "line" line number\\
1216 "name" function name\\
1216 "name" function name\\
1217 "nfl" name/file/line\\
1217 "nfl" name/file/line\\
1218 "stdname" standard name\\
1218 "stdname" standard name\\
1219 "time" internal time
1219 "time" internal time
1220
1220
1221 Note that all sorts on statistics are in descending order (placing
1221 Note that all sorts on statistics are in descending order (placing
1222 most time consuming items first), where as name, file, and line number
1222 most time consuming items first), where as name, file, and line number
1223 searches are in ascending order (i.e., alphabetical). The subtle
1223 searches are in ascending order (i.e., alphabetical). The subtle
1224 distinction between "nfl" and "stdname" is that the standard name is a
1224 distinction between "nfl" and "stdname" is that the standard name is a
1225 sort of the name as printed, which means that the embedded line
1225 sort of the name as printed, which means that the embedded line
1226 numbers get compared in an odd way. For example, lines 3, 20, and 40
1226 numbers get compared in an odd way. For example, lines 3, 20, and 40
1227 would (if the file names were the same) appear in the string order
1227 would (if the file names were the same) appear in the string order
1228 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1228 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1229 line numbers. In fact, sort_stats("nfl") is the same as
1229 line numbers. In fact, sort_stats("nfl") is the same as
1230 sort_stats("name", "file", "line").
1230 sort_stats("name", "file", "line").
1231
1231
1232 -T <filename>: save profile results as shown on screen to a text
1232 -T <filename>: save profile results as shown on screen to a text
1233 file. The profile is still shown on screen.
1233 file. The profile is still shown on screen.
1234
1234
1235 -D <filename>: save (via dump_stats) profile statistics to given
1235 -D <filename>: save (via dump_stats) profile statistics to given
1236 filename. This data is in a format understod by the pstats module, and
1236 filename. This data is in a format understod by the pstats module, and
1237 is generated by a call to the dump_stats() method of profile
1237 is generated by a call to the dump_stats() method of profile
1238 objects. The profile is still shown on screen.
1238 objects. The profile is still shown on screen.
1239
1239
1240 If you want to run complete programs under the profiler's control, use
1240 If you want to run complete programs under the profiler's control, use
1241 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1241 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1242 contains profiler specific options as described here.
1242 contains profiler specific options as described here.
1243
1243
1244 You can read the complete documentation for the profile module with:\\
1244 You can read the complete documentation for the profile module with:\\
1245 In [1]: import profile; profile.help() """
1245 In [1]: import profile; profile.help() """
1246
1246
1247 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1247 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1248 # protect user quote marks
1248 # protect user quote marks
1249 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1249 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1250
1250
1251 if user_mode: # regular user call
1251 if user_mode: # regular user call
1252 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1252 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1253 list_all=1)
1253 list_all=1)
1254 namespace = self.shell.user_ns
1254 namespace = self.shell.user_ns
1255 else: # called to run a program by %run -p
1255 else: # called to run a program by %run -p
1256 try:
1256 try:
1257 filename = get_py_filename(arg_lst[0])
1257 filename = get_py_filename(arg_lst[0])
1258 except IOError,msg:
1258 except IOError,msg:
1259 error(msg)
1259 error(msg)
1260 return
1260 return
1261
1261
1262 arg_str = 'execfile(filename,prog_ns)'
1262 arg_str = 'execfile(filename,prog_ns)'
1263 namespace = locals()
1263 namespace = locals()
1264
1264
1265 opts.merge(opts_def)
1265 opts.merge(opts_def)
1266
1266
1267 prof = profile.Profile()
1267 prof = profile.Profile()
1268 try:
1268 try:
1269 prof = prof.runctx(arg_str,namespace,namespace)
1269 prof = prof.runctx(arg_str,namespace,namespace)
1270 sys_exit = ''
1270 sys_exit = ''
1271 except SystemExit:
1271 except SystemExit:
1272 sys_exit = """*** SystemExit exception caught in code being profiled."""
1272 sys_exit = """*** SystemExit exception caught in code being profiled."""
1273
1273
1274 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1274 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1275
1275
1276 lims = opts.l
1276 lims = opts.l
1277 if lims:
1277 if lims:
1278 lims = [] # rebuild lims with ints/floats/strings
1278 lims = [] # rebuild lims with ints/floats/strings
1279 for lim in opts.l:
1279 for lim in opts.l:
1280 try:
1280 try:
1281 lims.append(int(lim))
1281 lims.append(int(lim))
1282 except ValueError:
1282 except ValueError:
1283 try:
1283 try:
1284 lims.append(float(lim))
1284 lims.append(float(lim))
1285 except ValueError:
1285 except ValueError:
1286 lims.append(lim)
1286 lims.append(lim)
1287
1287
1288 # trap output
1288 # trap output
1289 sys_stdout = sys.stdout
1289 sys_stdout = sys.stdout
1290 stdout_trap = StringIO()
1290 stdout_trap = StringIO()
1291 try:
1291 try:
1292 sys.stdout = stdout_trap
1292 sys.stdout = stdout_trap
1293 stats.print_stats(*lims)
1293 stats.print_stats(*lims)
1294 finally:
1294 finally:
1295 sys.stdout = sys_stdout
1295 sys.stdout = sys_stdout
1296 output = stdout_trap.getvalue()
1296 output = stdout_trap.getvalue()
1297 output = output.rstrip()
1297 output = output.rstrip()
1298
1298
1299 page(output,screen_lines=self.shell.rc.screen_length)
1299 page(output,screen_lines=self.shell.rc.screen_length)
1300 print sys_exit,
1300 print sys_exit,
1301
1301
1302 dump_file = opts.D[0]
1302 dump_file = opts.D[0]
1303 text_file = opts.T[0]
1303 text_file = opts.T[0]
1304 if dump_file:
1304 if dump_file:
1305 prof.dump_stats(dump_file)
1305 prof.dump_stats(dump_file)
1306 print '\n*** Profile stats marshalled to file',\
1306 print '\n*** Profile stats marshalled to file',\
1307 `dump_file`+'.',sys_exit
1307 `dump_file`+'.',sys_exit
1308 if text_file:
1308 if text_file:
1309 file(text_file,'w').write(output)
1309 file(text_file,'w').write(output)
1310 print '\n*** Profile printout saved to text file',\
1310 print '\n*** Profile printout saved to text file',\
1311 `text_file`+'.',sys_exit
1311 `text_file`+'.',sys_exit
1312
1312
1313 if opts.has_key('r'):
1313 if opts.has_key('r'):
1314 return stats
1314 return stats
1315 else:
1315 else:
1316 return None
1316 return None
1317
1317
1318 def magic_run(self, parameter_s ='',runner=None):
1318 def magic_run(self, parameter_s ='',runner=None):
1319 """Run the named file inside IPython as a program.
1319 """Run the named file inside IPython as a program.
1320
1320
1321 Usage:\\
1321 Usage:\\
1322 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1322 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1323
1323
1324 Parameters after the filename are passed as command-line arguments to
1324 Parameters after the filename are passed as command-line arguments to
1325 the program (put in sys.argv). Then, control returns to IPython's
1325 the program (put in sys.argv). Then, control returns to IPython's
1326 prompt.
1326 prompt.
1327
1327
1328 This is similar to running at a system prompt:\\
1328 This is similar to running at a system prompt:\\
1329 $ python file args\\
1329 $ python file args\\
1330 but with the advantage of giving you IPython's tracebacks, and of
1330 but with the advantage of giving you IPython's tracebacks, and of
1331 loading all variables into your interactive namespace for further use
1331 loading all variables into your interactive namespace for further use
1332 (unless -p is used, see below).
1332 (unless -p is used, see below).
1333
1333
1334 The file is executed in a namespace initially consisting only of
1334 The file is executed in a namespace initially consisting only of
1335 __name__=='__main__' and sys.argv constructed as indicated. It thus
1335 __name__=='__main__' and sys.argv constructed as indicated. It thus
1336 sees its environment as if it were being run as a stand-alone
1336 sees its environment as if it were being run as a stand-alone
1337 program. But after execution, the IPython interactive namespace gets
1337 program. But after execution, the IPython interactive namespace gets
1338 updated with all variables defined in the program (except for __name__
1338 updated with all variables defined in the program (except for __name__
1339 and sys.argv). This allows for very convenient loading of code for
1339 and sys.argv). This allows for very convenient loading of code for
1340 interactive work, while giving each program a 'clean sheet' to run in.
1340 interactive work, while giving each program a 'clean sheet' to run in.
1341
1341
1342 Options:
1342 Options:
1343
1343
1344 -n: __name__ is NOT set to '__main__', but to the running file's name
1344 -n: __name__ is NOT set to '__main__', but to the running file's name
1345 without extension (as python does under import). This allows running
1345 without extension (as python does under import). This allows running
1346 scripts and reloading the definitions in them without calling code
1346 scripts and reloading the definitions in them without calling code
1347 protected by an ' if __name__ == "__main__" ' clause.
1347 protected by an ' if __name__ == "__main__" ' clause.
1348
1348
1349 -i: run the file in IPython's namespace instead of an empty one. This
1349 -i: run the file in IPython's namespace instead of an empty one. This
1350 is useful if you are experimenting with code written in a text editor
1350 is useful if you are experimenting with code written in a text editor
1351 which depends on variables defined interactively.
1351 which depends on variables defined interactively.
1352
1352
1353 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1353 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1354 being run. This is particularly useful if IPython is being used to
1354 being run. This is particularly useful if IPython is being used to
1355 run unittests, which always exit with a sys.exit() call. In such
1355 run unittests, which always exit with a sys.exit() call. In such
1356 cases you are interested in the output of the test results, not in
1356 cases you are interested in the output of the test results, not in
1357 seeing a traceback of the unittest module.
1357 seeing a traceback of the unittest module.
1358
1358
1359 -t: print timing information at the end of the run. IPython will give
1359 -t: print timing information at the end of the run. IPython will give
1360 you an estimated CPU time consumption for your script, which under
1360 you an estimated CPU time consumption for your script, which under
1361 Unix uses the resource module to avoid the wraparound problems of
1361 Unix uses the resource module to avoid the wraparound problems of
1362 time.clock(). Under Unix, an estimate of time spent on system tasks
1362 time.clock(). Under Unix, an estimate of time spent on system tasks
1363 is also given (for Windows platforms this is reported as 0.0).
1363 is also given (for Windows platforms this is reported as 0.0).
1364
1364
1365 If -t is given, an additional -N<N> option can be given, where <N>
1365 If -t is given, an additional -N<N> option can be given, where <N>
1366 must be an integer indicating how many times you want the script to
1366 must be an integer indicating how many times you want the script to
1367 run. The final timing report will include total and per run results.
1367 run. The final timing report will include total and per run results.
1368
1368
1369 For example (testing the script uniq_stable.py):
1369 For example (testing the script uniq_stable.py):
1370
1370
1371 In [1]: run -t uniq_stable
1371 In [1]: run -t uniq_stable
1372
1372
1373 IPython CPU timings (estimated):\\
1373 IPython CPU timings (estimated):\\
1374 User : 0.19597 s.\\
1374 User : 0.19597 s.\\
1375 System: 0.0 s.\\
1375 System: 0.0 s.\\
1376
1376
1377 In [2]: run -t -N5 uniq_stable
1377 In [2]: run -t -N5 uniq_stable
1378
1378
1379 IPython CPU timings (estimated):\\
1379 IPython CPU timings (estimated):\\
1380 Total runs performed: 5\\
1380 Total runs performed: 5\\
1381 Times : Total Per run\\
1381 Times : Total Per run\\
1382 User : 0.910862 s, 0.1821724 s.\\
1382 User : 0.910862 s, 0.1821724 s.\\
1383 System: 0.0 s, 0.0 s.
1383 System: 0.0 s, 0.0 s.
1384
1384
1385 -d: run your program under the control of pdb, the Python debugger.
1385 -d: run your program under the control of pdb, the Python debugger.
1386 This allows you to execute your program step by step, watch variables,
1386 This allows you to execute your program step by step, watch variables,
1387 etc. Internally, what IPython does is similar to calling:
1387 etc. Internally, what IPython does is similar to calling:
1388
1388
1389 pdb.run('execfile("YOURFILENAME")')
1389 pdb.run('execfile("YOURFILENAME")')
1390
1390
1391 with a breakpoint set on line 1 of your file. You can change the line
1391 with a breakpoint set on line 1 of your file. You can change the line
1392 number for this automatic breakpoint to be <N> by using the -bN option
1392 number for this automatic breakpoint to be <N> by using the -bN option
1393 (where N must be an integer). For example:
1393 (where N must be an integer). For example:
1394
1394
1395 %run -d -b40 myscript
1395 %run -d -b40 myscript
1396
1396
1397 will set the first breakpoint at line 40 in myscript.py. Note that
1397 will set the first breakpoint at line 40 in myscript.py. Note that
1398 the first breakpoint must be set on a line which actually does
1398 the first breakpoint must be set on a line which actually does
1399 something (not a comment or docstring) for it to stop execution.
1399 something (not a comment or docstring) for it to stop execution.
1400
1400
1401 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1401 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1402 first enter 'c' (without qoutes) to start execution up to the first
1402 first enter 'c' (without qoutes) to start execution up to the first
1403 breakpoint.
1403 breakpoint.
1404
1404
1405 Entering 'help' gives information about the use of the debugger. You
1405 Entering 'help' gives information about the use of the debugger. You
1406 can easily see pdb's full documentation with "import pdb;pdb.help()"
1406 can easily see pdb's full documentation with "import pdb;pdb.help()"
1407 at a prompt.
1407 at a prompt.
1408
1408
1409 -p: run program under the control of the Python profiler module (which
1409 -p: run program under the control of the Python profiler module (which
1410 prints a detailed report of execution times, function calls, etc).
1410 prints a detailed report of execution times, function calls, etc).
1411
1411
1412 You can pass other options after -p which affect the behavior of the
1412 You can pass other options after -p which affect the behavior of the
1413 profiler itself. See the docs for %prun for details.
1413 profiler itself. See the docs for %prun for details.
1414
1414
1415 In this mode, the program's variables do NOT propagate back to the
1415 In this mode, the program's variables do NOT propagate back to the
1416 IPython interactive namespace (because they remain in the namespace
1416 IPython interactive namespace (because they remain in the namespace
1417 where the profiler executes them).
1417 where the profiler executes them).
1418
1418
1419 Internally this triggers a call to %prun, see its documentation for
1419 Internally this triggers a call to %prun, see its documentation for
1420 details on the options available specifically for profiling."""
1420 details on the options available specifically for profiling."""
1421
1421
1422 # get arguments and set sys.argv for program to be run.
1422 # get arguments and set sys.argv for program to be run.
1423 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1423 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1424 mode='list',list_all=1)
1424 mode='list',list_all=1)
1425
1425
1426 try:
1426 try:
1427 filename = get_py_filename(arg_lst[0])
1427 filename = get_py_filename(arg_lst[0])
1428 except IndexError:
1428 except IndexError:
1429 warn('you must provide at least a filename.')
1429 warn('you must provide at least a filename.')
1430 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1430 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1431 return
1431 return
1432 except IOError,msg:
1432 except IOError,msg:
1433 error(msg)
1433 error(msg)
1434 return
1434 return
1435
1435
1436 # Control the response to exit() calls made by the script being run
1436 # Control the response to exit() calls made by the script being run
1437 exit_ignore = opts.has_key('e')
1437 exit_ignore = opts.has_key('e')
1438
1438
1439 # Make sure that the running script gets a proper sys.argv as if it
1439 # Make sure that the running script gets a proper sys.argv as if it
1440 # were run from a system shell.
1440 # were run from a system shell.
1441 save_argv = sys.argv # save it for later restoring
1441 save_argv = sys.argv # save it for later restoring
1442 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1442 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1443
1443
1444 if opts.has_key('i'):
1444 if opts.has_key('i'):
1445 prog_ns = self.shell.user_ns
1445 prog_ns = self.shell.user_ns
1446 __name__save = self.shell.user_ns['__name__']
1446 __name__save = self.shell.user_ns['__name__']
1447 prog_ns['__name__'] = '__main__'
1447 prog_ns['__name__'] = '__main__'
1448 else:
1448 else:
1449 if opts.has_key('n'):
1449 if opts.has_key('n'):
1450 name = os.path.splitext(os.path.basename(filename))[0]
1450 name = os.path.splitext(os.path.basename(filename))[0]
1451 else:
1451 else:
1452 name = '__main__'
1452 name = '__main__'
1453 prog_ns = {'__name__':name}
1453 prog_ns = {'__name__':name}
1454
1454
1455 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1455 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1456 # set the __file__ global in the script's namespace
1456 # set the __file__ global in the script's namespace
1457 prog_ns['__file__'] = filename
1457 prog_ns['__file__'] = filename
1458
1458
1459 # pickle fix. See iplib for an explanation. But we need to make sure
1459 # pickle fix. See iplib for an explanation. But we need to make sure
1460 # that, if we overwrite __main__, we replace it at the end
1460 # that, if we overwrite __main__, we replace it at the end
1461 if prog_ns['__name__'] == '__main__':
1461 if prog_ns['__name__'] == '__main__':
1462 restore_main = sys.modules['__main__']
1462 restore_main = sys.modules['__main__']
1463 else:
1463 else:
1464 restore_main = False
1464 restore_main = False
1465
1465
1466 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1466 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1467
1467
1468 stats = None
1468 stats = None
1469 try:
1469 try:
1470 if opts.has_key('p'):
1470 if opts.has_key('p'):
1471 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1471 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1472 else:
1472 else:
1473 if opts.has_key('d'):
1473 if opts.has_key('d'):
1474 deb = Debugger.Pdb(self.shell.rc.colors)
1474 deb = Debugger.Pdb(self.shell.rc.colors)
1475 # reset Breakpoint state, which is moronically kept
1475 # reset Breakpoint state, which is moronically kept
1476 # in a class
1476 # in a class
1477 bdb.Breakpoint.next = 1
1477 bdb.Breakpoint.next = 1
1478 bdb.Breakpoint.bplist = {}
1478 bdb.Breakpoint.bplist = {}
1479 bdb.Breakpoint.bpbynumber = [None]
1479 bdb.Breakpoint.bpbynumber = [None]
1480 # Set an initial breakpoint to stop execution
1480 # Set an initial breakpoint to stop execution
1481 maxtries = 10
1481 maxtries = 10
1482 bp = int(opts.get('b',[1])[0])
1482 bp = int(opts.get('b',[1])[0])
1483 checkline = deb.checkline(filename,bp)
1483 checkline = deb.checkline(filename,bp)
1484 if not checkline:
1484 if not checkline:
1485 for bp in range(bp+1,bp+maxtries+1):
1485 for bp in range(bp+1,bp+maxtries+1):
1486 if deb.checkline(filename,bp):
1486 if deb.checkline(filename,bp):
1487 break
1487 break
1488 else:
1488 else:
1489 msg = ("\nI failed to find a valid line to set "
1489 msg = ("\nI failed to find a valid line to set "
1490 "a breakpoint\n"
1490 "a breakpoint\n"
1491 "after trying up to line: %s.\n"
1491 "after trying up to line: %s.\n"
1492 "Please set a valid breakpoint manually "
1492 "Please set a valid breakpoint manually "
1493 "with the -b option." % bp)
1493 "with the -b option." % bp)
1494 error(msg)
1494 error(msg)
1495 return
1495 return
1496 # if we find a good linenumber, set the breakpoint
1496 # if we find a good linenumber, set the breakpoint
1497 deb.do_break('%s:%s' % (filename,bp))
1497 deb.do_break('%s:%s' % (filename,bp))
1498 # Start file run
1498 # Start file run
1499 print "NOTE: Enter 'c' at the",
1499 print "NOTE: Enter 'c' at the",
1500 print "ipdb> prompt to start your script."
1500 print "ipdb> prompt to start your script."
1501 try:
1501 try:
1502 deb.run('execfile("%s")' % filename,prog_ns)
1502 deb.run('execfile("%s")' % filename,prog_ns)
1503 except:
1503 except:
1504 etype, value, tb = sys.exc_info()
1504 etype, value, tb = sys.exc_info()
1505 # Skip three frames in the traceback: the %run one,
1505 # Skip three frames in the traceback: the %run one,
1506 # one inside bdb.py, and the command-line typed by the
1506 # one inside bdb.py, and the command-line typed by the
1507 # user (run by exec in pdb itself).
1507 # user (run by exec in pdb itself).
1508 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1508 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1509 else:
1509 else:
1510 if runner is None:
1510 if runner is None:
1511 runner = self.shell.safe_execfile
1511 runner = self.shell.safe_execfile
1512 if opts.has_key('t'):
1512 if opts.has_key('t'):
1513 try:
1513 try:
1514 nruns = int(opts['N'][0])
1514 nruns = int(opts['N'][0])
1515 if nruns < 1:
1515 if nruns < 1:
1516 error('Number of runs must be >=1')
1516 error('Number of runs must be >=1')
1517 return
1517 return
1518 except (KeyError):
1518 except (KeyError):
1519 nruns = 1
1519 nruns = 1
1520 if nruns == 1:
1520 if nruns == 1:
1521 t0 = clock2()
1521 t0 = clock2()
1522 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1522 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1523 t1 = clock2()
1523 t1 = clock2()
1524 t_usr = t1[0]-t0[0]
1524 t_usr = t1[0]-t0[0]
1525 t_sys = t1[1]-t1[1]
1525 t_sys = t1[1]-t1[1]
1526 print "\nIPython CPU timings (estimated):"
1526 print "\nIPython CPU timings (estimated):"
1527 print " User : %10s s." % t_usr
1527 print " User : %10s s." % t_usr
1528 print " System: %10s s." % t_sys
1528 print " System: %10s s." % t_sys
1529 else:
1529 else:
1530 runs = range(nruns)
1530 runs = range(nruns)
1531 t0 = clock2()
1531 t0 = clock2()
1532 for nr in runs:
1532 for nr in runs:
1533 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1533 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1534 t1 = clock2()
1534 t1 = clock2()
1535 t_usr = t1[0]-t0[0]
1535 t_usr = t1[0]-t0[0]
1536 t_sys = t1[1]-t1[1]
1536 t_sys = t1[1]-t1[1]
1537 print "\nIPython CPU timings (estimated):"
1537 print "\nIPython CPU timings (estimated):"
1538 print "Total runs performed:",nruns
1538 print "Total runs performed:",nruns
1539 print " Times : %10s %10s" % ('Total','Per run')
1539 print " Times : %10s %10s" % ('Total','Per run')
1540 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1540 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1541 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1541 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1542
1542
1543 else:
1543 else:
1544 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1544 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1545 if opts.has_key('i'):
1545 if opts.has_key('i'):
1546 self.shell.user_ns['__name__'] = __name__save
1546 self.shell.user_ns['__name__'] = __name__save
1547 else:
1547 else:
1548 # update IPython interactive namespace
1548 # update IPython interactive namespace
1549 del prog_ns['__name__']
1549 del prog_ns['__name__']
1550 self.shell.user_ns.update(prog_ns)
1550 self.shell.user_ns.update(prog_ns)
1551 finally:
1551 finally:
1552 sys.argv = save_argv
1552 sys.argv = save_argv
1553 if restore_main:
1553 if restore_main:
1554 sys.modules['__main__'] = restore_main
1554 sys.modules['__main__'] = restore_main
1555 return stats
1555 return stats
1556
1556
1557 def magic_runlog(self, parameter_s =''):
1557 def magic_runlog(self, parameter_s =''):
1558 """Run files as logs.
1558 """Run files as logs.
1559
1559
1560 Usage:\\
1560 Usage:\\
1561 %runlog file1 file2 ...
1561 %runlog file1 file2 ...
1562
1562
1563 Run the named files (treating them as log files) in sequence inside
1563 Run the named files (treating them as log files) in sequence inside
1564 the interpreter, and return to the prompt. This is much slower than
1564 the interpreter, and return to the prompt. This is much slower than
1565 %run because each line is executed in a try/except block, but it
1565 %run because each line is executed in a try/except block, but it
1566 allows running files with syntax errors in them.
1566 allows running files with syntax errors in them.
1567
1567
1568 Normally IPython will guess when a file is one of its own logfiles, so
1568 Normally IPython will guess when a file is one of its own logfiles, so
1569 you can typically use %run even for logs. This shorthand allows you to
1569 you can typically use %run even for logs. This shorthand allows you to
1570 force any file to be treated as a log file."""
1570 force any file to be treated as a log file."""
1571
1571
1572 for f in parameter_s.split():
1572 for f in parameter_s.split():
1573 self.shell.safe_execfile(f,self.shell.user_ns,
1573 self.shell.safe_execfile(f,self.shell.user_ns,
1574 self.shell.user_ns,islog=1)
1574 self.shell.user_ns,islog=1)
1575
1575
1576 def magic_timeit(self, parameter_s =''):
1576 def magic_timeit(self, parameter_s =''):
1577 """Time execution of a Python statement or expression
1577 """Time execution of a Python statement or expression
1578
1578
1579 Usage:\\
1579 Usage:\\
1580 %timeit [-n<N> -r<R> [-t|-c]] statement
1580 %timeit [-n<N> -r<R> [-t|-c]] statement
1581
1581
1582 Time execution of a Python statement or expression using the timeit
1582 Time execution of a Python statement or expression using the timeit
1583 module.
1583 module.
1584
1584
1585 Options:
1585 Options:
1586 -n<N>: execute the given statement <N> times in a loop. If this value
1586 -n<N>: execute the given statement <N> times in a loop. If this value
1587 is not given, a fitting value is chosen.
1587 is not given, a fitting value is chosen.
1588
1588
1589 -r<R>: repeat the loop iteration <R> times and take the best result.
1589 -r<R>: repeat the loop iteration <R> times and take the best result.
1590 Default: 3
1590 Default: 3
1591
1591
1592 -t: use time.time to measure the time, which is the default on Unix.
1592 -t: use time.time to measure the time, which is the default on Unix.
1593 This function measures wall time.
1593 This function measures wall time.
1594
1594
1595 -c: use time.clock to measure the time, which is the default on
1595 -c: use time.clock to measure the time, which is the default on
1596 Windows and measures wall time. On Unix, resource.getrusage is used
1596 Windows and measures wall time. On Unix, resource.getrusage is used
1597 instead and returns the CPU user time.
1597 instead and returns the CPU user time.
1598
1598
1599 -p<P>: use a precision of <P> digits to display the timing result.
1599 -p<P>: use a precision of <P> digits to display the timing result.
1600 Default: 3
1600 Default: 3
1601
1601
1602
1602
1603 Examples:\\
1603 Examples:\\
1604 In [1]: %timeit pass
1604 In [1]: %timeit pass
1605 10000000 loops, best of 3: 53.3 ns per loop
1605 10000000 loops, best of 3: 53.3 ns per loop
1606
1606
1607 In [2]: u = None
1607 In [2]: u = None
1608
1608
1609 In [3]: %timeit u is None
1609 In [3]: %timeit u is None
1610 10000000 loops, best of 3: 184 ns per loop
1610 10000000 loops, best of 3: 184 ns per loop
1611
1611
1612 In [4]: %timeit -r 4 u == None
1612 In [4]: %timeit -r 4 u == None
1613 1000000 loops, best of 4: 242 ns per loop
1613 1000000 loops, best of 4: 242 ns per loop
1614
1614
1615 In [5]: import time
1615 In [5]: import time
1616
1616
1617 In [6]: %timeit -n1 time.sleep(2)
1617 In [6]: %timeit -n1 time.sleep(2)
1618 1 loops, best of 3: 2 s per loop
1618 1 loops, best of 3: 2 s per loop
1619
1619
1620
1620
1621 The times reported by %timeit will be slightly higher than those reported
1621 The times reported by %timeit will be slightly higher than those reported
1622 by the timeit.py script when variables are accessed. This is due to the
1622 by the timeit.py script when variables are accessed. This is due to the
1623 fact that %timeit executes the statement in the namespace of the shell,
1623 fact that %timeit executes the statement in the namespace of the shell,
1624 compared with timeit.py, which uses a single setup statement to import
1624 compared with timeit.py, which uses a single setup statement to import
1625 function or create variables. Generally, the bias does not matter as long
1625 function or create variables. Generally, the bias does not matter as long
1626 as results from timeit.py are not mixed with those from %timeit."""
1626 as results from timeit.py are not mixed with those from %timeit."""
1627 import timeit
1627 import timeit
1628 import math
1628 import math
1629
1629
1630 units = ["s", "ms", "\xc2\xb5s", "ns"]
1630 units = ["s", "ms", "\xc2\xb5s", "ns"]
1631 scaling = [1, 1e3, 1e6, 1e9]
1631 scaling = [1, 1e3, 1e6, 1e9]
1632
1632
1633 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:')
1633 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:')
1634 if stmt == "":
1634 if stmt == "":
1635 return
1635 return
1636 timefunc = timeit.default_timer
1636 timefunc = timeit.default_timer
1637 number = int(getattr(opts, "n", 0))
1637 number = int(getattr(opts, "n", 0))
1638 repeat = int(getattr(opts, "r", timeit.default_repeat))
1638 repeat = int(getattr(opts, "r", timeit.default_repeat))
1639 precision = int(getattr(opts, "p", 3))
1639 precision = int(getattr(opts, "p", 3))
1640 if hasattr(opts, "t"):
1640 if hasattr(opts, "t"):
1641 timefunc = time.time
1641 timefunc = time.time
1642 if hasattr(opts, "c"):
1642 if hasattr(opts, "c"):
1643 timefunc = clock
1643 timefunc = clock
1644
1644
1645 timer = timeit.Timer(timer=timefunc)
1645 timer = timeit.Timer(timer=timefunc)
1646 # this code has tight coupling to the inner workings of timeit.Timer,
1646 # this code has tight coupling to the inner workings of timeit.Timer,
1647 # but is there a better way to achieve that the code stmt has access
1647 # but is there a better way to achieve that the code stmt has access
1648 # to the shell namespace?
1648 # to the shell namespace?
1649
1649
1650 src = timeit.template % {'stmt': timeit.reindent(stmt, 8), 'setup': "pass"}
1650 src = timeit.template % {'stmt': timeit.reindent(stmt, 8), 'setup': "pass"}
1651 code = compile(src, "<magic-timeit>", "exec")
1651 code = compile(src, "<magic-timeit>", "exec")
1652 ns = {}
1652 ns = {}
1653 exec code in self.shell.user_ns, ns
1653 exec code in self.shell.user_ns, ns
1654 timer.inner = ns["inner"]
1654 timer.inner = ns["inner"]
1655
1655
1656 if number == 0:
1656 if number == 0:
1657 # determine number so that 0.2 <= total time < 2.0
1657 # determine number so that 0.2 <= total time < 2.0
1658 number = 1
1658 number = 1
1659 for i in range(1, 10):
1659 for i in range(1, 10):
1660 number *= 10
1660 number *= 10
1661 if timer.timeit(number) >= 0.2:
1661 if timer.timeit(number) >= 0.2:
1662 break
1662 break
1663
1663
1664 best = min(timer.repeat(repeat, number)) / number
1664 best = min(timer.repeat(repeat, number)) / number
1665
1665
1666 if best > 0.0:
1666 if best > 0.0:
1667 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1667 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1668 else:
1668 else:
1669 order = 3
1669 order = 3
1670 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1670 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1671 precision,
1671 precision,
1672 best * scaling[order],
1672 best * scaling[order],
1673 units[order])
1673 units[order])
1674
1674
1675 def magic_time(self,parameter_s = ''):
1675 def magic_time(self,parameter_s = ''):
1676 """Time execution of a Python statement or expression.
1676 """Time execution of a Python statement or expression.
1677
1677
1678 The CPU and wall clock times are printed, and the value of the
1678 The CPU and wall clock times are printed, and the value of the
1679 expression (if any) is returned. Note that under Win32, system time
1679 expression (if any) is returned. Note that under Win32, system time
1680 is always reported as 0, since it can not be measured.
1680 is always reported as 0, since it can not be measured.
1681
1681
1682 This function provides very basic timing functionality. In Python
1682 This function provides very basic timing functionality. In Python
1683 2.3, the timeit module offers more control and sophistication, so this
1683 2.3, the timeit module offers more control and sophistication, so this
1684 could be rewritten to use it (patches welcome).
1684 could be rewritten to use it (patches welcome).
1685
1685
1686 Some examples:
1686 Some examples:
1687
1687
1688 In [1]: time 2**128
1688 In [1]: time 2**128
1689 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1689 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1690 Wall time: 0.00
1690 Wall time: 0.00
1691 Out[1]: 340282366920938463463374607431768211456L
1691 Out[1]: 340282366920938463463374607431768211456L
1692
1692
1693 In [2]: n = 1000000
1693 In [2]: n = 1000000
1694
1694
1695 In [3]: time sum(range(n))
1695 In [3]: time sum(range(n))
1696 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1696 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1697 Wall time: 1.37
1697 Wall time: 1.37
1698 Out[3]: 499999500000L
1698 Out[3]: 499999500000L
1699
1699
1700 In [4]: time print 'hello world'
1700 In [4]: time print 'hello world'
1701 hello world
1701 hello world
1702 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1702 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1703 Wall time: 0.00
1703 Wall time: 0.00
1704 """
1704 """
1705
1705
1706 # fail immediately if the given expression can't be compiled
1706 # fail immediately if the given expression can't be compiled
1707 try:
1707 try:
1708 mode = 'eval'
1708 mode = 'eval'
1709 code = compile(parameter_s,'<timed eval>',mode)
1709 code = compile(parameter_s,'<timed eval>',mode)
1710 except SyntaxError:
1710 except SyntaxError:
1711 mode = 'exec'
1711 mode = 'exec'
1712 code = compile(parameter_s,'<timed exec>',mode)
1712 code = compile(parameter_s,'<timed exec>',mode)
1713 # skew measurement as little as possible
1713 # skew measurement as little as possible
1714 glob = self.shell.user_ns
1714 glob = self.shell.user_ns
1715 clk = clock2
1715 clk = clock2
1716 wtime = time.time
1716 wtime = time.time
1717 # time execution
1717 # time execution
1718 wall_st = wtime()
1718 wall_st = wtime()
1719 if mode=='eval':
1719 if mode=='eval':
1720 st = clk()
1720 st = clk()
1721 out = eval(code,glob)
1721 out = eval(code,glob)
1722 end = clk()
1722 end = clk()
1723 else:
1723 else:
1724 st = clk()
1724 st = clk()
1725 exec code in glob
1725 exec code in glob
1726 end = clk()
1726 end = clk()
1727 out = None
1727 out = None
1728 wall_end = wtime()
1728 wall_end = wtime()
1729 # Compute actual times and report
1729 # Compute actual times and report
1730 wall_time = wall_end-wall_st
1730 wall_time = wall_end-wall_st
1731 cpu_user = end[0]-st[0]
1731 cpu_user = end[0]-st[0]
1732 cpu_sys = end[1]-st[1]
1732 cpu_sys = end[1]-st[1]
1733 cpu_tot = cpu_user+cpu_sys
1733 cpu_tot = cpu_user+cpu_sys
1734 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1734 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1735 (cpu_user,cpu_sys,cpu_tot)
1735 (cpu_user,cpu_sys,cpu_tot)
1736 print "Wall time: %.2f" % wall_time
1736 print "Wall time: %.2f" % wall_time
1737 return out
1737 return out
1738
1738
1739 def magic_macro(self,parameter_s = ''):
1739 def magic_macro(self,parameter_s = ''):
1740 """Define a set of input lines as a macro for future re-execution.
1740 """Define a set of input lines as a macro for future re-execution.
1741
1741
1742 Usage:\\
1742 Usage:\\
1743 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1743 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1744
1744
1745 Options:
1745 Options:
1746
1746
1747 -r: use 'raw' input. By default, the 'processed' history is used,
1747 -r: use 'raw' input. By default, the 'processed' history is used,
1748 so that magics are loaded in their transformed version to valid
1748 so that magics are loaded in their transformed version to valid
1749 Python. If this option is given, the raw input as typed as the
1749 Python. If this option is given, the raw input as typed as the
1750 command line is used instead.
1750 command line is used instead.
1751
1751
1752 This will define a global variable called `name` which is a string
1752 This will define a global variable called `name` which is a string
1753 made of joining the slices and lines you specify (n1,n2,... numbers
1753 made of joining the slices and lines you specify (n1,n2,... numbers
1754 above) from your input history into a single string. This variable
1754 above) from your input history into a single string. This variable
1755 acts like an automatic function which re-executes those lines as if
1755 acts like an automatic function which re-executes those lines as if
1756 you had typed them. You just type 'name' at the prompt and the code
1756 you had typed them. You just type 'name' at the prompt and the code
1757 executes.
1757 executes.
1758
1758
1759 The notation for indicating number ranges is: n1-n2 means 'use line
1759 The notation for indicating number ranges is: n1-n2 means 'use line
1760 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1760 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1761 using the lines numbered 5,6 and 7.
1761 using the lines numbered 5,6 and 7.
1762
1762
1763 Note: as a 'hidden' feature, you can also use traditional python slice
1763 Note: as a 'hidden' feature, you can also use traditional python slice
1764 notation, where N:M means numbers N through M-1.
1764 notation, where N:M means numbers N through M-1.
1765
1765
1766 For example, if your history contains (%hist prints it):
1766 For example, if your history contains (%hist prints it):
1767
1767
1768 44: x=1\\
1768 44: x=1\\
1769 45: y=3\\
1769 45: y=3\\
1770 46: z=x+y\\
1770 46: z=x+y\\
1771 47: print x\\
1771 47: print x\\
1772 48: a=5\\
1772 48: a=5\\
1773 49: print 'x',x,'y',y\\
1773 49: print 'x',x,'y',y\\
1774
1774
1775 you can create a macro with lines 44 through 47 (included) and line 49
1775 you can create a macro with lines 44 through 47 (included) and line 49
1776 called my_macro with:
1776 called my_macro with:
1777
1777
1778 In [51]: %macro my_macro 44-47 49
1778 In [51]: %macro my_macro 44-47 49
1779
1779
1780 Now, typing `my_macro` (without quotes) will re-execute all this code
1780 Now, typing `my_macro` (without quotes) will re-execute all this code
1781 in one pass.
1781 in one pass.
1782
1782
1783 You don't need to give the line-numbers in order, and any given line
1783 You don't need to give the line-numbers in order, and any given line
1784 number can appear multiple times. You can assemble macros with any
1784 number can appear multiple times. You can assemble macros with any
1785 lines from your input history in any order.
1785 lines from your input history in any order.
1786
1786
1787 The macro is a simple object which holds its value in an attribute,
1787 The macro is a simple object which holds its value in an attribute,
1788 but IPython's display system checks for macros and executes them as
1788 but IPython's display system checks for macros and executes them as
1789 code instead of printing them when you type their name.
1789 code instead of printing them when you type their name.
1790
1790
1791 You can view a macro's contents by explicitly printing it with:
1791 You can view a macro's contents by explicitly printing it with:
1792
1792
1793 'print macro_name'.
1793 'print macro_name'.
1794
1794
1795 For one-off cases which DON'T contain magic function calls in them you
1795 For one-off cases which DON'T contain magic function calls in them you
1796 can obtain similar results by explicitly executing slices from your
1796 can obtain similar results by explicitly executing slices from your
1797 input history with:
1797 input history with:
1798
1798
1799 In [60]: exec In[44:48]+In[49]"""
1799 In [60]: exec In[44:48]+In[49]"""
1800
1800
1801 opts,args = self.parse_options(parameter_s,'r',mode='list')
1801 opts,args = self.parse_options(parameter_s,'r',mode='list')
1802 name,ranges = args[0], args[1:]
1802 name,ranges = args[0], args[1:]
1803 #print 'rng',ranges # dbg
1803 #print 'rng',ranges # dbg
1804 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1804 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1805 macro = Macro(lines)
1805 macro = Macro(lines)
1806 self.shell.user_ns.update({name:macro})
1806 self.shell.user_ns.update({name:macro})
1807 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1807 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1808 print 'Macro contents:'
1808 print 'Macro contents:'
1809 print macro,
1809 print macro,
1810
1810
1811 def magic_save(self,parameter_s = ''):
1811 def magic_save(self,parameter_s = ''):
1812 """Save a set of lines to a given filename.
1812 """Save a set of lines to a given filename.
1813
1813
1814 Usage:\\
1814 Usage:\\
1815 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1815 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1816
1816
1817 Options:
1817 Options:
1818
1818
1819 -r: use 'raw' input. By default, the 'processed' history is used,
1819 -r: use 'raw' input. By default, the 'processed' history is used,
1820 so that magics are loaded in their transformed version to valid
1820 so that magics are loaded in their transformed version to valid
1821 Python. If this option is given, the raw input as typed as the
1821 Python. If this option is given, the raw input as typed as the
1822 command line is used instead.
1822 command line is used instead.
1823
1823
1824 This function uses the same syntax as %macro for line extraction, but
1824 This function uses the same syntax as %macro for line extraction, but
1825 instead of creating a macro it saves the resulting string to the
1825 instead of creating a macro it saves the resulting string to the
1826 filename you specify.
1826 filename you specify.
1827
1827
1828 It adds a '.py' extension to the file if you don't do so yourself, and
1828 It adds a '.py' extension to the file if you don't do so yourself, and
1829 it asks for confirmation before overwriting existing files."""
1829 it asks for confirmation before overwriting existing files."""
1830
1830
1831 opts,args = self.parse_options(parameter_s,'r',mode='list')
1831 opts,args = self.parse_options(parameter_s,'r',mode='list')
1832 fname,ranges = args[0], args[1:]
1832 fname,ranges = args[0], args[1:]
1833 if not fname.endswith('.py'):
1833 if not fname.endswith('.py'):
1834 fname += '.py'
1834 fname += '.py'
1835 if os.path.isfile(fname):
1835 if os.path.isfile(fname):
1836 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1836 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1837 if ans.lower() not in ['y','yes']:
1837 if ans.lower() not in ['y','yes']:
1838 print 'Operation cancelled.'
1838 print 'Operation cancelled.'
1839 return
1839 return
1840 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1840 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1841 f = file(fname,'w')
1841 f = file(fname,'w')
1842 f.write(cmds)
1842 f.write(cmds)
1843 f.close()
1843 f.close()
1844 print 'The following commands were written to file `%s`:' % fname
1844 print 'The following commands were written to file `%s`:' % fname
1845 print cmds
1845 print cmds
1846
1846
1847 def _edit_macro(self,mname,macro):
1847 def _edit_macro(self,mname,macro):
1848 """open an editor with the macro data in a file"""
1848 """open an editor with the macro data in a file"""
1849 filename = self.shell.mktempfile(macro.value)
1849 filename = self.shell.mktempfile(macro.value)
1850 self.shell.hooks.editor(filename)
1850 self.shell.hooks.editor(filename)
1851
1851
1852 # and make a new macro object, to replace the old one
1852 # and make a new macro object, to replace the old one
1853 mfile = open(filename)
1853 mfile = open(filename)
1854 mvalue = mfile.read()
1854 mvalue = mfile.read()
1855 mfile.close()
1855 mfile.close()
1856 self.shell.user_ns[mname] = Macro(mvalue)
1856 self.shell.user_ns[mname] = Macro(mvalue)
1857
1857
1858 def magic_ed(self,parameter_s=''):
1858 def magic_ed(self,parameter_s=''):
1859 """Alias to %edit."""
1859 """Alias to %edit."""
1860 return self.magic_edit(parameter_s)
1860 return self.magic_edit(parameter_s)
1861
1861
1862 def magic_edit(self,parameter_s='',last_call=['','']):
1862 def magic_edit(self,parameter_s='',last_call=['','']):
1863 """Bring up an editor and execute the resulting code.
1863 """Bring up an editor and execute the resulting code.
1864
1864
1865 Usage:
1865 Usage:
1866 %edit [options] [args]
1866 %edit [options] [args]
1867
1867
1868 %edit runs IPython's editor hook. The default version of this hook is
1868 %edit runs IPython's editor hook. The default version of this hook is
1869 set to call the __IPYTHON__.rc.editor command. This is read from your
1869 set to call the __IPYTHON__.rc.editor command. This is read from your
1870 environment variable $EDITOR. If this isn't found, it will default to
1870 environment variable $EDITOR. If this isn't found, it will default to
1871 vi under Linux/Unix and to notepad under Windows. See the end of this
1871 vi under Linux/Unix and to notepad under Windows. See the end of this
1872 docstring for how to change the editor hook.
1872 docstring for how to change the editor hook.
1873
1873
1874 You can also set the value of this editor via the command line option
1874 You can also set the value of this editor via the command line option
1875 '-editor' or in your ipythonrc file. This is useful if you wish to use
1875 '-editor' or in your ipythonrc file. This is useful if you wish to use
1876 specifically for IPython an editor different from your typical default
1876 specifically for IPython an editor different from your typical default
1877 (and for Windows users who typically don't set environment variables).
1877 (and for Windows users who typically don't set environment variables).
1878
1878
1879 This command allows you to conveniently edit multi-line code right in
1879 This command allows you to conveniently edit multi-line code right in
1880 your IPython session.
1880 your IPython session.
1881
1881
1882 If called without arguments, %edit opens up an empty editor with a
1882 If called without arguments, %edit opens up an empty editor with a
1883 temporary file and will execute the contents of this file when you
1883 temporary file and will execute the contents of this file when you
1884 close it (don't forget to save it!).
1884 close it (don't forget to save it!).
1885
1885
1886
1886
1887 Options:
1887 Options:
1888
1888
1889 -n <number>: open the editor at a specified line number. By default,
1889 -n <number>: open the editor at a specified line number. By default,
1890 the IPython editor hook uses the unix syntax 'editor +N filename', but
1890 the IPython editor hook uses the unix syntax 'editor +N filename', but
1891 you can configure this by providing your own modified hook if your
1891 you can configure this by providing your own modified hook if your
1892 favorite editor supports line-number specifications with a different
1892 favorite editor supports line-number specifications with a different
1893 syntax.
1893 syntax.
1894
1894
1895 -p: this will call the editor with the same data as the previous time
1895 -p: this will call the editor with the same data as the previous time
1896 it was used, regardless of how long ago (in your current session) it
1896 it was used, regardless of how long ago (in your current session) it
1897 was.
1897 was.
1898
1898
1899 -r: use 'raw' input. This option only applies to input taken from the
1899 -r: use 'raw' input. This option only applies to input taken from the
1900 user's history. By default, the 'processed' history is used, so that
1900 user's history. By default, the 'processed' history is used, so that
1901 magics are loaded in their transformed version to valid Python. If
1901 magics are loaded in their transformed version to valid Python. If
1902 this option is given, the raw input as typed as the command line is
1902 this option is given, the raw input as typed as the command line is
1903 used instead. When you exit the editor, it will be executed by
1903 used instead. When you exit the editor, it will be executed by
1904 IPython's own processor.
1904 IPython's own processor.
1905
1905
1906 -x: do not execute the edited code immediately upon exit. This is
1906 -x: do not execute the edited code immediately upon exit. This is
1907 mainly useful if you are editing programs which need to be called with
1907 mainly useful if you are editing programs which need to be called with
1908 command line arguments, which you can then do using %run.
1908 command line arguments, which you can then do using %run.
1909
1909
1910
1910
1911 Arguments:
1911 Arguments:
1912
1912
1913 If arguments are given, the following possibilites exist:
1913 If arguments are given, the following possibilites exist:
1914
1914
1915 - The arguments are numbers or pairs of colon-separated numbers (like
1915 - The arguments are numbers or pairs of colon-separated numbers (like
1916 1 4:8 9). These are interpreted as lines of previous input to be
1916 1 4:8 9). These are interpreted as lines of previous input to be
1917 loaded into the editor. The syntax is the same of the %macro command.
1917 loaded into the editor. The syntax is the same of the %macro command.
1918
1918
1919 - If the argument doesn't start with a number, it is evaluated as a
1919 - If the argument doesn't start with a number, it is evaluated as a
1920 variable and its contents loaded into the editor. You can thus edit
1920 variable and its contents loaded into the editor. You can thus edit
1921 any string which contains python code (including the result of
1921 any string which contains python code (including the result of
1922 previous edits).
1922 previous edits).
1923
1923
1924 - If the argument is the name of an object (other than a string),
1924 - If the argument is the name of an object (other than a string),
1925 IPython will try to locate the file where it was defined and open the
1925 IPython will try to locate the file where it was defined and open the
1926 editor at the point where it is defined. You can use `%edit function`
1926 editor at the point where it is defined. You can use `%edit function`
1927 to load an editor exactly at the point where 'function' is defined,
1927 to load an editor exactly at the point where 'function' is defined,
1928 edit it and have the file be executed automatically.
1928 edit it and have the file be executed automatically.
1929
1929
1930 If the object is a macro (see %macro for details), this opens up your
1930 If the object is a macro (see %macro for details), this opens up your
1931 specified editor with a temporary file containing the macro's data.
1931 specified editor with a temporary file containing the macro's data.
1932 Upon exit, the macro is reloaded with the contents of the file.
1932 Upon exit, the macro is reloaded with the contents of the file.
1933
1933
1934 Note: opening at an exact line is only supported under Unix, and some
1934 Note: opening at an exact line is only supported under Unix, and some
1935 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1935 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1936 '+NUMBER' parameter necessary for this feature. Good editors like
1936 '+NUMBER' parameter necessary for this feature. Good editors like
1937 (X)Emacs, vi, jed, pico and joe all do.
1937 (X)Emacs, vi, jed, pico and joe all do.
1938
1938
1939 - If the argument is not found as a variable, IPython will look for a
1939 - If the argument is not found as a variable, IPython will look for a
1940 file with that name (adding .py if necessary) and load it into the
1940 file with that name (adding .py if necessary) and load it into the
1941 editor. It will execute its contents with execfile() when you exit,
1941 editor. It will execute its contents with execfile() when you exit,
1942 loading any code in the file into your interactive namespace.
1942 loading any code in the file into your interactive namespace.
1943
1943
1944 After executing your code, %edit will return as output the code you
1944 After executing your code, %edit will return as output the code you
1945 typed in the editor (except when it was an existing file). This way
1945 typed in the editor (except when it was an existing file). This way
1946 you can reload the code in further invocations of %edit as a variable,
1946 you can reload the code in further invocations of %edit as a variable,
1947 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1947 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1948 the output.
1948 the output.
1949
1949
1950 Note that %edit is also available through the alias %ed.
1950 Note that %edit is also available through the alias %ed.
1951
1951
1952 This is an example of creating a simple function inside the editor and
1952 This is an example of creating a simple function inside the editor and
1953 then modifying it. First, start up the editor:
1953 then modifying it. First, start up the editor:
1954
1954
1955 In [1]: ed\\
1955 In [1]: ed\\
1956 Editing... done. Executing edited code...\\
1956 Editing... done. Executing edited code...\\
1957 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1957 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1958
1958
1959 We can then call the function foo():
1959 We can then call the function foo():
1960
1960
1961 In [2]: foo()\\
1961 In [2]: foo()\\
1962 foo() was defined in an editing session
1962 foo() was defined in an editing session
1963
1963
1964 Now we edit foo. IPython automatically loads the editor with the
1964 Now we edit foo. IPython automatically loads the editor with the
1965 (temporary) file where foo() was previously defined:
1965 (temporary) file where foo() was previously defined:
1966
1966
1967 In [3]: ed foo\\
1967 In [3]: ed foo\\
1968 Editing... done. Executing edited code...
1968 Editing... done. Executing edited code...
1969
1969
1970 And if we call foo() again we get the modified version:
1970 And if we call foo() again we get the modified version:
1971
1971
1972 In [4]: foo()\\
1972 In [4]: foo()\\
1973 foo() has now been changed!
1973 foo() has now been changed!
1974
1974
1975 Here is an example of how to edit a code snippet successive
1975 Here is an example of how to edit a code snippet successive
1976 times. First we call the editor:
1976 times. First we call the editor:
1977
1977
1978 In [8]: ed\\
1978 In [8]: ed\\
1979 Editing... done. Executing edited code...\\
1979 Editing... done. Executing edited code...\\
1980 hello\\
1980 hello\\
1981 Out[8]: "print 'hello'\\n"
1981 Out[8]: "print 'hello'\\n"
1982
1982
1983 Now we call it again with the previous output (stored in _):
1983 Now we call it again with the previous output (stored in _):
1984
1984
1985 In [9]: ed _\\
1985 In [9]: ed _\\
1986 Editing... done. Executing edited code...\\
1986 Editing... done. Executing edited code...\\
1987 hello world\\
1987 hello world\\
1988 Out[9]: "print 'hello world'\\n"
1988 Out[9]: "print 'hello world'\\n"
1989
1989
1990 Now we call it with the output #8 (stored in _8, also as Out[8]):
1990 Now we call it with the output #8 (stored in _8, also as Out[8]):
1991
1991
1992 In [10]: ed _8\\
1992 In [10]: ed _8\\
1993 Editing... done. Executing edited code...\\
1993 Editing... done. Executing edited code...\\
1994 hello again\\
1994 hello again\\
1995 Out[10]: "print 'hello again'\\n"
1995 Out[10]: "print 'hello again'\\n"
1996
1996
1997
1997
1998 Changing the default editor hook:
1998 Changing the default editor hook:
1999
1999
2000 If you wish to write your own editor hook, you can put it in a
2000 If you wish to write your own editor hook, you can put it in a
2001 configuration file which you load at startup time. The default hook
2001 configuration file which you load at startup time. The default hook
2002 is defined in the IPython.hooks module, and you can use that as a
2002 is defined in the IPython.hooks module, and you can use that as a
2003 starting example for further modifications. That file also has
2003 starting example for further modifications. That file also has
2004 general instructions on how to set a new hook for use once you've
2004 general instructions on how to set a new hook for use once you've
2005 defined it."""
2005 defined it."""
2006
2006
2007 # FIXME: This function has become a convoluted mess. It needs a
2007 # FIXME: This function has become a convoluted mess. It needs a
2008 # ground-up rewrite with clean, simple logic.
2008 # ground-up rewrite with clean, simple logic.
2009
2009
2010 def make_filename(arg):
2010 def make_filename(arg):
2011 "Make a filename from the given args"
2011 "Make a filename from the given args"
2012 try:
2012 try:
2013 filename = get_py_filename(arg)
2013 filename = get_py_filename(arg)
2014 except IOError:
2014 except IOError:
2015 if args.endswith('.py'):
2015 if args.endswith('.py'):
2016 filename = arg
2016 filename = arg
2017 else:
2017 else:
2018 filename = None
2018 filename = None
2019 return filename
2019 return filename
2020
2020
2021 # custom exceptions
2021 # custom exceptions
2022 class DataIsObject(Exception): pass
2022 class DataIsObject(Exception): pass
2023
2023
2024 opts,args = self.parse_options(parameter_s,'prxn:')
2024 opts,args = self.parse_options(parameter_s,'prxn:')
2025 # Set a few locals from the options for convenience:
2025 # Set a few locals from the options for convenience:
2026 opts_p = opts.has_key('p')
2026 opts_p = opts.has_key('p')
2027 opts_r = opts.has_key('r')
2027 opts_r = opts.has_key('r')
2028
2028
2029 # Default line number value
2029 # Default line number value
2030 lineno = opts.get('n',None)
2030 lineno = opts.get('n',None)
2031
2031
2032 if opts_p:
2032 if opts_p:
2033 args = '_%s' % last_call[0]
2033 args = '_%s' % last_call[0]
2034 if not self.shell.user_ns.has_key(args):
2034 if not self.shell.user_ns.has_key(args):
2035 args = last_call[1]
2035 args = last_call[1]
2036
2036
2037 # use last_call to remember the state of the previous call, but don't
2037 # use last_call to remember the state of the previous call, but don't
2038 # let it be clobbered by successive '-p' calls.
2038 # let it be clobbered by successive '-p' calls.
2039 try:
2039 try:
2040 last_call[0] = self.shell.outputcache.prompt_count
2040 last_call[0] = self.shell.outputcache.prompt_count
2041 if not opts_p:
2041 if not opts_p:
2042 last_call[1] = parameter_s
2042 last_call[1] = parameter_s
2043 except:
2043 except:
2044 pass
2044 pass
2045
2045
2046 # by default this is done with temp files, except when the given
2046 # by default this is done with temp files, except when the given
2047 # arg is a filename
2047 # arg is a filename
2048 use_temp = 1
2048 use_temp = 1
2049
2049
2050 if re.match(r'\d',args):
2050 if re.match(r'\d',args):
2051 # Mode where user specifies ranges of lines, like in %macro.
2051 # Mode where user specifies ranges of lines, like in %macro.
2052 # This means that you can't edit files whose names begin with
2052 # This means that you can't edit files whose names begin with
2053 # numbers this way. Tough.
2053 # numbers this way. Tough.
2054 ranges = args.split()
2054 ranges = args.split()
2055 data = ''.join(self.extract_input_slices(ranges,opts_r))
2055 data = ''.join(self.extract_input_slices(ranges,opts_r))
2056 elif args.endswith('.py'):
2056 elif args.endswith('.py'):
2057 filename = make_filename(args)
2057 filename = make_filename(args)
2058 data = ''
2058 data = ''
2059 use_temp = 0
2059 use_temp = 0
2060 elif args:
2060 elif args:
2061 try:
2061 try:
2062 # Load the parameter given as a variable. If not a string,
2062 # Load the parameter given as a variable. If not a string,
2063 # process it as an object instead (below)
2063 # process it as an object instead (below)
2064
2064
2065 #print '*** args',args,'type',type(args) # dbg
2065 #print '*** args',args,'type',type(args) # dbg
2066 data = eval(args,self.shell.user_ns)
2066 data = eval(args,self.shell.user_ns)
2067 if not type(data) in StringTypes:
2067 if not type(data) in StringTypes:
2068 raise DataIsObject
2068 raise DataIsObject
2069
2069
2070 except (NameError,SyntaxError):
2070 except (NameError,SyntaxError):
2071 # given argument is not a variable, try as a filename
2071 # given argument is not a variable, try as a filename
2072 filename = make_filename(args)
2072 filename = make_filename(args)
2073 if filename is None:
2073 if filename is None:
2074 warn("Argument given (%s) can't be found as a variable "
2074 warn("Argument given (%s) can't be found as a variable "
2075 "or as a filename." % args)
2075 "or as a filename." % args)
2076 return
2076 return
2077
2077
2078 data = ''
2078 data = ''
2079 use_temp = 0
2079 use_temp = 0
2080 except DataIsObject:
2080 except DataIsObject:
2081
2081
2082 # macros have a special edit function
2082 # macros have a special edit function
2083 if isinstance(data,Macro):
2083 if isinstance(data,Macro):
2084 self._edit_macro(args,data)
2084 self._edit_macro(args,data)
2085 return
2085 return
2086
2086
2087 # For objects, try to edit the file where they are defined
2087 # For objects, try to edit the file where they are defined
2088 try:
2088 try:
2089 filename = inspect.getabsfile(data)
2089 filename = inspect.getabsfile(data)
2090 datafile = 1
2090 datafile = 1
2091 except TypeError:
2091 except TypeError:
2092 filename = make_filename(args)
2092 filename = make_filename(args)
2093 datafile = 1
2093 datafile = 1
2094 warn('Could not find file where `%s` is defined.\n'
2094 warn('Could not find file where `%s` is defined.\n'
2095 'Opening a file named `%s`' % (args,filename))
2095 'Opening a file named `%s`' % (args,filename))
2096 # Now, make sure we can actually read the source (if it was in
2096 # Now, make sure we can actually read the source (if it was in
2097 # a temp file it's gone by now).
2097 # a temp file it's gone by now).
2098 if datafile:
2098 if datafile:
2099 try:
2099 try:
2100 if lineno is None:
2100 if lineno is None:
2101 lineno = inspect.getsourcelines(data)[1]
2101 lineno = inspect.getsourcelines(data)[1]
2102 except IOError:
2102 except IOError:
2103 filename = make_filename(args)
2103 filename = make_filename(args)
2104 if filename is None:
2104 if filename is None:
2105 warn('The file `%s` where `%s` was defined cannot '
2105 warn('The file `%s` where `%s` was defined cannot '
2106 'be read.' % (filename,data))
2106 'be read.' % (filename,data))
2107 return
2107 return
2108 use_temp = 0
2108 use_temp = 0
2109 else:
2109 else:
2110 data = ''
2110 data = ''
2111
2111
2112 if use_temp:
2112 if use_temp:
2113 filename = self.shell.mktempfile(data)
2113 filename = self.shell.mktempfile(data)
2114 print 'IPython will make a temporary file named:',filename
2114 print 'IPython will make a temporary file named:',filename
2115
2115
2116 # do actual editing here
2116 # do actual editing here
2117 print 'Editing...',
2117 print 'Editing...',
2118 sys.stdout.flush()
2118 sys.stdout.flush()
2119 self.shell.hooks.editor(filename,lineno)
2119 self.shell.hooks.editor(filename,lineno)
2120 if opts.has_key('x'): # -x prevents actual execution
2120 if opts.has_key('x'): # -x prevents actual execution
2121 print
2121 print
2122 else:
2122 else:
2123 print 'done. Executing edited code...'
2123 print 'done. Executing edited code...'
2124 if opts_r:
2124 if opts_r:
2125 self.shell.runlines(file_read(filename))
2125 self.shell.runlines(file_read(filename))
2126 else:
2126 else:
2127 self.shell.safe_execfile(filename,self.shell.user_ns)
2127 self.shell.safe_execfile(filename,self.shell.user_ns)
2128 if use_temp:
2128 if use_temp:
2129 try:
2129 try:
2130 return open(filename).read()
2130 return open(filename).read()
2131 except IOError,msg:
2131 except IOError,msg:
2132 if msg.filename == filename:
2132 if msg.filename == filename:
2133 warn('File not found. Did you forget to save?')
2133 warn('File not found. Did you forget to save?')
2134 return
2134 return
2135 else:
2135 else:
2136 self.shell.showtraceback()
2136 self.shell.showtraceback()
2137
2137
2138 def magic_xmode(self,parameter_s = ''):
2138 def magic_xmode(self,parameter_s = ''):
2139 """Switch modes for the exception handlers.
2139 """Switch modes for the exception handlers.
2140
2140
2141 Valid modes: Plain, Context and Verbose.
2141 Valid modes: Plain, Context and Verbose.
2142
2142
2143 If called without arguments, acts as a toggle."""
2143 If called without arguments, acts as a toggle."""
2144
2144
2145 def xmode_switch_err(name):
2145 def xmode_switch_err(name):
2146 warn('Error changing %s exception modes.\n%s' %
2146 warn('Error changing %s exception modes.\n%s' %
2147 (name,sys.exc_info()[1]))
2147 (name,sys.exc_info()[1]))
2148
2148
2149 shell = self.shell
2149 shell = self.shell
2150 new_mode = parameter_s.strip().capitalize()
2150 new_mode = parameter_s.strip().capitalize()
2151 try:
2151 try:
2152 shell.InteractiveTB.set_mode(mode=new_mode)
2152 shell.InteractiveTB.set_mode(mode=new_mode)
2153 print 'Exception reporting mode:',shell.InteractiveTB.mode
2153 print 'Exception reporting mode:',shell.InteractiveTB.mode
2154 except:
2154 except:
2155 xmode_switch_err('user')
2155 xmode_switch_err('user')
2156
2156
2157 # threaded shells use a special handler in sys.excepthook
2157 # threaded shells use a special handler in sys.excepthook
2158 if shell.isthreaded:
2158 if shell.isthreaded:
2159 try:
2159 try:
2160 shell.sys_excepthook.set_mode(mode=new_mode)
2160 shell.sys_excepthook.set_mode(mode=new_mode)
2161 except:
2161 except:
2162 xmode_switch_err('threaded')
2162 xmode_switch_err('threaded')
2163
2163
2164 def magic_colors(self,parameter_s = ''):
2164 def magic_colors(self,parameter_s = ''):
2165 """Switch color scheme for prompts, info system and exception handlers.
2165 """Switch color scheme for prompts, info system and exception handlers.
2166
2166
2167 Currently implemented schemes: NoColor, Linux, LightBG.
2167 Currently implemented schemes: NoColor, Linux, LightBG.
2168
2168
2169 Color scheme names are not case-sensitive."""
2169 Color scheme names are not case-sensitive."""
2170
2170
2171 def color_switch_err(name):
2171 def color_switch_err(name):
2172 warn('Error changing %s color schemes.\n%s' %
2172 warn('Error changing %s color schemes.\n%s' %
2173 (name,sys.exc_info()[1]))
2173 (name,sys.exc_info()[1]))
2174
2174
2175
2175
2176 new_scheme = parameter_s.strip()
2176 new_scheme = parameter_s.strip()
2177 if not new_scheme:
2177 if not new_scheme:
2178 print 'You must specify a color scheme.'
2178 print 'You must specify a color scheme.'
2179 return
2179 return
2180 import IPython.rlineimpl as readline
2180 import IPython.rlineimpl as readline
2181 if not readline.have_readline:
2181 if not readline.have_readline:
2182 msg = """\
2182 msg = """\
2183 Proper color support under MS Windows requires Gary Bishop's readline library.
2183 Proper color support under MS Windows requires Gary Bishop's readline library.
2184 You can find it at:
2184 You can find it at:
2185 http://sourceforge.net/projects/uncpythontools
2185 http://sourceforge.net/projects/uncpythontools
2186 Gary's readline needs the ctypes module, from:
2186 Gary's readline needs the ctypes module, from:
2187 http://starship.python.net/crew/theller/ctypes
2187 http://starship.python.net/crew/theller/ctypes
2188
2188
2189 Defaulting color scheme to 'NoColor'"""
2189 Defaulting color scheme to 'NoColor'"""
2190 new_scheme = 'NoColor'
2190 new_scheme = 'NoColor'
2191 warn(msg)
2191 warn(msg)
2192 # local shortcut
2192 # local shortcut
2193 shell = self.shell
2193 shell = self.shell
2194
2194
2195 # Set prompt colors
2195 # Set prompt colors
2196 try:
2196 try:
2197 shell.outputcache.set_colors(new_scheme)
2197 shell.outputcache.set_colors(new_scheme)
2198 except:
2198 except:
2199 color_switch_err('prompt')
2199 color_switch_err('prompt')
2200 else:
2200 else:
2201 shell.rc.colors = \
2201 shell.rc.colors = \
2202 shell.outputcache.color_table.active_scheme_name
2202 shell.outputcache.color_table.active_scheme_name
2203 # Set exception colors
2203 # Set exception colors
2204 try:
2204 try:
2205 shell.InteractiveTB.set_colors(scheme = new_scheme)
2205 shell.InteractiveTB.set_colors(scheme = new_scheme)
2206 shell.SyntaxTB.set_colors(scheme = new_scheme)
2206 shell.SyntaxTB.set_colors(scheme = new_scheme)
2207 except:
2207 except:
2208 color_switch_err('exception')
2208 color_switch_err('exception')
2209
2209
2210 # threaded shells use a verbose traceback in sys.excepthook
2210 # threaded shells use a verbose traceback in sys.excepthook
2211 if shell.isthreaded:
2211 if shell.isthreaded:
2212 try:
2212 try:
2213 shell.sys_excepthook.set_colors(scheme=new_scheme)
2213 shell.sys_excepthook.set_colors(scheme=new_scheme)
2214 except:
2214 except:
2215 color_switch_err('system exception handler')
2215 color_switch_err('system exception handler')
2216
2216
2217 # Set info (for 'object?') colors
2217 # Set info (for 'object?') colors
2218 if shell.rc.color_info:
2218 if shell.rc.color_info:
2219 try:
2219 try:
2220 shell.inspector.set_active_scheme(new_scheme)
2220 shell.inspector.set_active_scheme(new_scheme)
2221 except:
2221 except:
2222 color_switch_err('object inspector')
2222 color_switch_err('object inspector')
2223 else:
2223 else:
2224 shell.inspector.set_active_scheme('NoColor')
2224 shell.inspector.set_active_scheme('NoColor')
2225
2225
2226 def magic_color_info(self,parameter_s = ''):
2226 def magic_color_info(self,parameter_s = ''):
2227 """Toggle color_info.
2227 """Toggle color_info.
2228
2228
2229 The color_info configuration parameter controls whether colors are
2229 The color_info configuration parameter controls whether colors are
2230 used for displaying object details (by things like %psource, %pfile or
2230 used for displaying object details (by things like %psource, %pfile or
2231 the '?' system). This function toggles this value with each call.
2231 the '?' system). This function toggles this value with each call.
2232
2232
2233 Note that unless you have a fairly recent pager (less works better
2233 Note that unless you have a fairly recent pager (less works better
2234 than more) in your system, using colored object information displays
2234 than more) in your system, using colored object information displays
2235 will not work properly. Test it and see."""
2235 will not work properly. Test it and see."""
2236
2236
2237 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2237 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2238 self.magic_colors(self.shell.rc.colors)
2238 self.magic_colors(self.shell.rc.colors)
2239 print 'Object introspection functions have now coloring:',
2239 print 'Object introspection functions have now coloring:',
2240 print ['OFF','ON'][self.shell.rc.color_info]
2240 print ['OFF','ON'][self.shell.rc.color_info]
2241
2241
2242 def magic_Pprint(self, parameter_s=''):
2242 def magic_Pprint(self, parameter_s=''):
2243 """Toggle pretty printing on/off."""
2243 """Toggle pretty printing on/off."""
2244
2244
2245 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2245 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2246 print 'Pretty printing has been turned', \
2246 print 'Pretty printing has been turned', \
2247 ['OFF','ON'][self.shell.rc.pprint]
2247 ['OFF','ON'][self.shell.rc.pprint]
2248
2248
2249 def magic_exit(self, parameter_s=''):
2249 def magic_exit(self, parameter_s=''):
2250 """Exit IPython, confirming if configured to do so.
2250 """Exit IPython, confirming if configured to do so.
2251
2251
2252 You can configure whether IPython asks for confirmation upon exit by
2252 You can configure whether IPython asks for confirmation upon exit by
2253 setting the confirm_exit flag in the ipythonrc file."""
2253 setting the confirm_exit flag in the ipythonrc file."""
2254
2254
2255 self.shell.exit()
2255 self.shell.exit()
2256
2256
2257 def magic_quit(self, parameter_s=''):
2257 def magic_quit(self, parameter_s=''):
2258 """Exit IPython, confirming if configured to do so (like %exit)"""
2258 """Exit IPython, confirming if configured to do so (like %exit)"""
2259
2259
2260 self.shell.exit()
2260 self.shell.exit()
2261
2261
2262 def magic_Exit(self, parameter_s=''):
2262 def magic_Exit(self, parameter_s=''):
2263 """Exit IPython without confirmation."""
2263 """Exit IPython without confirmation."""
2264
2264
2265 self.shell.exit_now = True
2265 self.shell.exit_now = True
2266
2266
2267 def magic_Quit(self, parameter_s=''):
2267 def magic_Quit(self, parameter_s=''):
2268 """Exit IPython without confirmation (like %Exit)."""
2268 """Exit IPython without confirmation (like %Exit)."""
2269
2269
2270 self.shell.exit_now = True
2270 self.shell.exit_now = True
2271
2271
2272 #......................................................................
2272 #......................................................................
2273 # Functions to implement unix shell-type things
2273 # Functions to implement unix shell-type things
2274
2274
2275 def magic_alias(self, parameter_s = ''):
2275 def magic_alias(self, parameter_s = ''):
2276 """Define an alias for a system command.
2276 """Define an alias for a system command.
2277
2277
2278 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2278 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2279
2279
2280 Then, typing 'alias_name params' will execute the system command 'cmd
2280 Then, typing 'alias_name params' will execute the system command 'cmd
2281 params' (from your underlying operating system).
2281 params' (from your underlying operating system).
2282
2282
2283 Aliases have lower precedence than magic functions and Python normal
2283 Aliases have lower precedence than magic functions and Python normal
2284 variables, so if 'foo' is both a Python variable and an alias, the
2284 variables, so if 'foo' is both a Python variable and an alias, the
2285 alias can not be executed until 'del foo' removes the Python variable.
2285 alias can not be executed until 'del foo' removes the Python variable.
2286
2286
2287 You can use the %l specifier in an alias definition to represent the
2287 You can use the %l specifier in an alias definition to represent the
2288 whole line when the alias is called. For example:
2288 whole line when the alias is called. For example:
2289
2289
2290 In [2]: alias all echo "Input in brackets: <%l>"\\
2290 In [2]: alias all echo "Input in brackets: <%l>"\\
2291 In [3]: all hello world\\
2291 In [3]: all hello world\\
2292 Input in brackets: <hello world>
2292 Input in brackets: <hello world>
2293
2293
2294 You can also define aliases with parameters using %s specifiers (one
2294 You can also define aliases with parameters using %s specifiers (one
2295 per parameter):
2295 per parameter):
2296
2296
2297 In [1]: alias parts echo first %s second %s\\
2297 In [1]: alias parts echo first %s second %s\\
2298 In [2]: %parts A B\\
2298 In [2]: %parts A B\\
2299 first A second B\\
2299 first A second B\\
2300 In [3]: %parts A\\
2300 In [3]: %parts A\\
2301 Incorrect number of arguments: 2 expected.\\
2301 Incorrect number of arguments: 2 expected.\\
2302 parts is an alias to: 'echo first %s second %s'
2302 parts is an alias to: 'echo first %s second %s'
2303
2303
2304 Note that %l and %s are mutually exclusive. You can only use one or
2304 Note that %l and %s are mutually exclusive. You can only use one or
2305 the other in your aliases.
2305 the other in your aliases.
2306
2306
2307 Aliases expand Python variables just like system calls using ! or !!
2307 Aliases expand Python variables just like system calls using ! or !!
2308 do: all expressions prefixed with '$' get expanded. For details of
2308 do: all expressions prefixed with '$' get expanded. For details of
2309 the semantic rules, see PEP-215:
2309 the semantic rules, see PEP-215:
2310 http://www.python.org/peps/pep-0215.html. This is the library used by
2310 http://www.python.org/peps/pep-0215.html. This is the library used by
2311 IPython for variable expansion. If you want to access a true shell
2311 IPython for variable expansion. If you want to access a true shell
2312 variable, an extra $ is necessary to prevent its expansion by IPython:
2312 variable, an extra $ is necessary to prevent its expansion by IPython:
2313
2313
2314 In [6]: alias show echo\\
2314 In [6]: alias show echo\\
2315 In [7]: PATH='A Python string'\\
2315 In [7]: PATH='A Python string'\\
2316 In [8]: show $PATH\\
2316 In [8]: show $PATH\\
2317 A Python string\\
2317 A Python string\\
2318 In [9]: show $$PATH\\
2318 In [9]: show $$PATH\\
2319 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2319 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2320
2320
2321 You can use the alias facility to acess all of $PATH. See the %rehash
2321 You can use the alias facility to acess all of $PATH. See the %rehash
2322 and %rehashx functions, which automatically create aliases for the
2322 and %rehashx functions, which automatically create aliases for the
2323 contents of your $PATH.
2323 contents of your $PATH.
2324
2324
2325 If called with no parameters, %alias prints the current alias table."""
2325 If called with no parameters, %alias prints the current alias table."""
2326
2326
2327 par = parameter_s.strip()
2327 par = parameter_s.strip()
2328 if not par:
2328 if not par:
2329 if self.shell.rc.automagic:
2329 if self.shell.rc.automagic:
2330 prechar = ''
2330 prechar = ''
2331 else:
2331 else:
2332 prechar = self.shell.ESC_MAGIC
2332 prechar = self.shell.ESC_MAGIC
2333 #print 'Alias\t\tSystem Command\n'+'-'*30
2333 #print 'Alias\t\tSystem Command\n'+'-'*30
2334 atab = self.shell.alias_table
2334 atab = self.shell.alias_table
2335 aliases = atab.keys()
2335 aliases = atab.keys()
2336 aliases.sort()
2336 aliases.sort()
2337 res = []
2337 res = []
2338 for alias in aliases:
2338 for alias in aliases:
2339 res.append((alias, atab[alias][1]))
2339 res.append((alias, atab[alias][1]))
2340 print "Total number of aliases:",len(aliases)
2340 print "Total number of aliases:",len(aliases)
2341 return res
2341 return res
2342 try:
2342 try:
2343 alias,cmd = par.split(None,1)
2343 alias,cmd = par.split(None,1)
2344 except:
2344 except:
2345 print OInspect.getdoc(self.magic_alias)
2345 print OInspect.getdoc(self.magic_alias)
2346 else:
2346 else:
2347 nargs = cmd.count('%s')
2347 nargs = cmd.count('%s')
2348 if nargs>0 and cmd.find('%l')>=0:
2348 if nargs>0 and cmd.find('%l')>=0:
2349 error('The %s and %l specifiers are mutually exclusive '
2349 error('The %s and %l specifiers are mutually exclusive '
2350 'in alias definitions.')
2350 'in alias definitions.')
2351 else: # all looks OK
2351 else: # all looks OK
2352 self.shell.alias_table[alias] = (nargs,cmd)
2352 self.shell.alias_table[alias] = (nargs,cmd)
2353 self.shell.alias_table_validate(verbose=0)
2353 self.shell.alias_table_validate(verbose=0)
2354 # end magic_alias
2354 # end magic_alias
2355
2355
2356 def magic_unalias(self, parameter_s = ''):
2356 def magic_unalias(self, parameter_s = ''):
2357 """Remove an alias"""
2357 """Remove an alias"""
2358
2358
2359 aname = parameter_s.strip()
2359 aname = parameter_s.strip()
2360 if aname in self.shell.alias_table:
2360 if aname in self.shell.alias_table:
2361 del self.shell.alias_table[aname]
2361 del self.shell.alias_table[aname]
2362
2362
2363 def magic_rehash(self, parameter_s = ''):
2363 def magic_rehash(self, parameter_s = ''):
2364 """Update the alias table with all entries in $PATH.
2364 """Update the alias table with all entries in $PATH.
2365
2365
2366 This version does no checks on execute permissions or whether the
2366 This version does no checks on execute permissions or whether the
2367 contents of $PATH are truly files (instead of directories or something
2367 contents of $PATH are truly files (instead of directories or something
2368 else). For such a safer (but slower) version, use %rehashx."""
2368 else). For such a safer (but slower) version, use %rehashx."""
2369
2369
2370 # This function (and rehashx) manipulate the alias_table directly
2370 # This function (and rehashx) manipulate the alias_table directly
2371 # rather than calling magic_alias, for speed reasons. A rehash on a
2371 # rather than calling magic_alias, for speed reasons. A rehash on a
2372 # typical Linux box involves several thousand entries, so efficiency
2372 # typical Linux box involves several thousand entries, so efficiency
2373 # here is a top concern.
2373 # here is a top concern.
2374
2374
2375 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2375 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2376 alias_table = self.shell.alias_table
2376 alias_table = self.shell.alias_table
2377 for pdir in path:
2377 for pdir in path:
2378 for ff in os.listdir(pdir):
2378 for ff in os.listdir(pdir):
2379 # each entry in the alias table must be (N,name), where
2379 # each entry in the alias table must be (N,name), where
2380 # N is the number of positional arguments of the alias.
2380 # N is the number of positional arguments of the alias.
2381 alias_table[ff] = (0,ff)
2381 alias_table[ff] = (0,ff)
2382 # Make sure the alias table doesn't contain keywords or builtins
2382 # Make sure the alias table doesn't contain keywords or builtins
2383 self.shell.alias_table_validate()
2383 self.shell.alias_table_validate()
2384 # Call again init_auto_alias() so we get 'rm -i' and other modified
2384 # Call again init_auto_alias() so we get 'rm -i' and other modified
2385 # aliases since %rehash will probably clobber them
2385 # aliases since %rehash will probably clobber them
2386 self.shell.init_auto_alias()
2386 self.shell.init_auto_alias()
2387
2387
2388 def magic_rehashx(self, parameter_s = ''):
2388 def magic_rehashx(self, parameter_s = ''):
2389 """Update the alias table with all executable files in $PATH.
2389 """Update the alias table with all executable files in $PATH.
2390
2390
2391 This version explicitly checks that every entry in $PATH is a file
2391 This version explicitly checks that every entry in $PATH is a file
2392 with execute access (os.X_OK), so it is much slower than %rehash.
2392 with execute access (os.X_OK), so it is much slower than %rehash.
2393
2393
2394 Under Windows, it checks executability as a match agains a
2394 Under Windows, it checks executability as a match agains a
2395 '|'-separated string of extensions, stored in the IPython config
2395 '|'-separated string of extensions, stored in the IPython config
2396 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2396 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2397
2397
2398 path = [os.path.abspath(os.path.expanduser(p)) for p in
2398 path = [os.path.abspath(os.path.expanduser(p)) for p in
2399 os.environ['PATH'].split(os.pathsep)]
2399 os.environ['PATH'].split(os.pathsep)]
2400 path = filter(os.path.isdir,path)
2400 path = filter(os.path.isdir,path)
2401
2401
2402 alias_table = self.shell.alias_table
2402 alias_table = self.shell.alias_table
2403 syscmdlist = []
2403 syscmdlist = []
2404 if os.name == 'posix':
2404 if os.name == 'posix':
2405 isexec = lambda fname:os.path.isfile(fname) and \
2405 isexec = lambda fname:os.path.isfile(fname) and \
2406 os.access(fname,os.X_OK)
2406 os.access(fname,os.X_OK)
2407 else:
2407 else:
2408
2408
2409 try:
2409 try:
2410 winext = os.environ['pathext'].replace(';','|').replace('.','')
2410 winext = os.environ['pathext'].replace(';','|').replace('.','')
2411 except KeyError:
2411 except KeyError:
2412 winext = 'exe|com|bat'
2412 winext = 'exe|com|bat'
2413
2413
2414 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2414 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2415 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2415 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2416 savedir = os.getcwd()
2416 savedir = os.getcwd()
2417 try:
2417 try:
2418 # write the whole loop for posix/Windows so we don't have an if in
2418 # write the whole loop for posix/Windows so we don't have an if in
2419 # the innermost part
2419 # the innermost part
2420 if os.name == 'posix':
2420 if os.name == 'posix':
2421 for pdir in path:
2421 for pdir in path:
2422 os.chdir(pdir)
2422 os.chdir(pdir)
2423 for ff in os.listdir(pdir):
2423 for ff in os.listdir(pdir):
2424 if isexec(ff):
2424 if isexec(ff):
2425 # each entry in the alias table must be (N,name),
2425 # each entry in the alias table must be (N,name),
2426 # where N is the number of positional arguments of the
2426 # where N is the number of positional arguments of the
2427 # alias.
2427 # alias.
2428 alias_table[ff] = (0,ff)
2428 alias_table[ff] = (0,ff)
2429 syscmdlist.append(ff)
2429 syscmdlist.append(ff)
2430 else:
2430 else:
2431 for pdir in path:
2431 for pdir in path:
2432 os.chdir(pdir)
2432 os.chdir(pdir)
2433 for ff in os.listdir(pdir):
2433 for ff in os.listdir(pdir):
2434 if isexec(ff):
2434 if isexec(ff):
2435 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2435 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2436 syscmdlist.append(ff)
2436 syscmdlist.append(ff)
2437 # Make sure the alias table doesn't contain keywords or builtins
2437 # Make sure the alias table doesn't contain keywords or builtins
2438 self.shell.alias_table_validate()
2438 self.shell.alias_table_validate()
2439 # Call again init_auto_alias() so we get 'rm -i' and other
2439 # Call again init_auto_alias() so we get 'rm -i' and other
2440 # modified aliases since %rehashx will probably clobber them
2440 # modified aliases since %rehashx will probably clobber them
2441 self.shell.init_auto_alias()
2441 self.shell.init_auto_alias()
2442 db = self.getapi().db
2442 db = self.getapi().db
2443 db['syscmdlist'] = syscmdlist
2443 db['syscmdlist'] = syscmdlist
2444 finally:
2444 finally:
2445 os.chdir(savedir)
2445 os.chdir(savedir)
2446
2446
2447 def magic_pwd(self, parameter_s = ''):
2447 def magic_pwd(self, parameter_s = ''):
2448 """Return the current working directory path."""
2448 """Return the current working directory path."""
2449 return os.getcwd()
2449 return os.getcwd()
2450
2450
2451 def magic_cd(self, parameter_s=''):
2451 def magic_cd(self, parameter_s=''):
2452 """Change the current working directory.
2452 """Change the current working directory.
2453
2453
2454 This command automatically maintains an internal list of directories
2454 This command automatically maintains an internal list of directories
2455 you visit during your IPython session, in the variable _dh. The
2455 you visit during your IPython session, in the variable _dh. The
2456 command %dhist shows this history nicely formatted.
2456 command %dhist shows this history nicely formatted.
2457
2457
2458 Usage:
2458 Usage:
2459
2459
2460 cd 'dir': changes to directory 'dir'.
2460 cd 'dir': changes to directory 'dir'.
2461
2461
2462 cd -: changes to the last visited directory.
2462 cd -: changes to the last visited directory.
2463
2463
2464 cd -<n>: changes to the n-th directory in the directory history.
2464 cd -<n>: changes to the n-th directory in the directory history.
2465
2465
2466 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2466 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2467 (note: cd <bookmark_name> is enough if there is no
2467 (note: cd <bookmark_name> is enough if there is no
2468 directory <bookmark_name>, but a bookmark with the name exists.)
2468 directory <bookmark_name>, but a bookmark with the name exists.)
2469
2469
2470 Options:
2470 Options:
2471
2471
2472 -q: quiet. Do not print the working directory after the cd command is
2472 -q: quiet. Do not print the working directory after the cd command is
2473 executed. By default IPython's cd command does print this directory,
2473 executed. By default IPython's cd command does print this directory,
2474 since the default prompts do not display path information.
2474 since the default prompts do not display path information.
2475
2475
2476 Note that !cd doesn't work for this purpose because the shell where
2476 Note that !cd doesn't work for this purpose because the shell where
2477 !command runs is immediately discarded after executing 'command'."""
2477 !command runs is immediately discarded after executing 'command'."""
2478
2478
2479 parameter_s = parameter_s.strip()
2479 parameter_s = parameter_s.strip()
2480 #bkms = self.shell.persist.get("bookmarks",{})
2480 #bkms = self.shell.persist.get("bookmarks",{})
2481
2481
2482 numcd = re.match(r'(-)(\d+)$',parameter_s)
2482 numcd = re.match(r'(-)(\d+)$',parameter_s)
2483 # jump in directory history by number
2483 # jump in directory history by number
2484 if numcd:
2484 if numcd:
2485 nn = int(numcd.group(2))
2485 nn = int(numcd.group(2))
2486 try:
2486 try:
2487 ps = self.shell.user_ns['_dh'][nn]
2487 ps = self.shell.user_ns['_dh'][nn]
2488 except IndexError:
2488 except IndexError:
2489 print 'The requested directory does not exist in history.'
2489 print 'The requested directory does not exist in history.'
2490 return
2490 return
2491 else:
2491 else:
2492 opts = {}
2492 opts = {}
2493 else:
2493 else:
2494 #turn all non-space-escaping backslashes to slashes,
2494 #turn all non-space-escaping backslashes to slashes,
2495 # for c:\windows\directory\names\
2495 # for c:\windows\directory\names\
2496 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2496 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2497 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2497 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2498 # jump to previous
2498 # jump to previous
2499 if ps == '-':
2499 if ps == '-':
2500 try:
2500 try:
2501 ps = self.shell.user_ns['_dh'][-2]
2501 ps = self.shell.user_ns['_dh'][-2]
2502 except IndexError:
2502 except IndexError:
2503 print 'No previous directory to change to.'
2503 print 'No previous directory to change to.'
2504 return
2504 return
2505 # jump to bookmark if needed
2505 # jump to bookmark if needed
2506 else:
2506 else:
2507 if not os.path.isdir(ps) or opts.has_key('b'):
2507 if not os.path.isdir(ps) or opts.has_key('b'):
2508 bkms = self.db.get('bookmarks', {})
2508 bkms = self.db.get('bookmarks', {})
2509
2509
2510 if bkms.has_key(ps):
2510 if bkms.has_key(ps):
2511 target = bkms[ps]
2511 target = bkms[ps]
2512 print '(bookmark:%s) -> %s' % (ps,target)
2512 print '(bookmark:%s) -> %s' % (ps,target)
2513 ps = target
2513 ps = target
2514 else:
2514 else:
2515 if opts.has_key('b'):
2515 if opts.has_key('b'):
2516 error("Bookmark '%s' not found. "
2516 error("Bookmark '%s' not found. "
2517 "Use '%%bookmark -l' to see your bookmarks." % ps)
2517 "Use '%%bookmark -l' to see your bookmarks." % ps)
2518 return
2518 return
2519
2519
2520 # at this point ps should point to the target dir
2520 # at this point ps should point to the target dir
2521 if ps:
2521 if ps:
2522 try:
2522 try:
2523 os.chdir(os.path.expanduser(ps))
2523 os.chdir(os.path.expanduser(ps))
2524 ttitle = ("IPy:" + (
2524 ttitle = ("IPy:" + (
2525 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2525 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2526 platutils.set_term_title(ttitle)
2526 platutils.set_term_title(ttitle)
2527 except OSError:
2527 except OSError:
2528 print sys.exc_info()[1]
2528 print sys.exc_info()[1]
2529 else:
2529 else:
2530 self.shell.user_ns['_dh'].append(os.getcwd())
2530 self.shell.user_ns['_dh'].append(os.getcwd())
2531 else:
2531 else:
2532 os.chdir(self.shell.home_dir)
2532 os.chdir(self.shell.home_dir)
2533 platutils.set_term_title("IPy:~")
2533 platutils.set_term_title("IPy:~")
2534 self.shell.user_ns['_dh'].append(os.getcwd())
2534 self.shell.user_ns['_dh'].append(os.getcwd())
2535 if not 'q' in opts:
2535 if not 'q' in opts:
2536 print self.shell.user_ns['_dh'][-1]
2536 print self.shell.user_ns['_dh'][-1]
2537
2537
2538 def magic_dhist(self, parameter_s=''):
2538 def magic_dhist(self, parameter_s=''):
2539 """Print your history of visited directories.
2539 """Print your history of visited directories.
2540
2540
2541 %dhist -> print full history\\
2541 %dhist -> print full history\\
2542 %dhist n -> print last n entries only\\
2542 %dhist n -> print last n entries only\\
2543 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2543 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2544
2544
2545 This history is automatically maintained by the %cd command, and
2545 This history is automatically maintained by the %cd command, and
2546 always available as the global list variable _dh. You can use %cd -<n>
2546 always available as the global list variable _dh. You can use %cd -<n>
2547 to go to directory number <n>."""
2547 to go to directory number <n>."""
2548
2548
2549 dh = self.shell.user_ns['_dh']
2549 dh = self.shell.user_ns['_dh']
2550 if parameter_s:
2550 if parameter_s:
2551 try:
2551 try:
2552 args = map(int,parameter_s.split())
2552 args = map(int,parameter_s.split())
2553 except:
2553 except:
2554 self.arg_err(Magic.magic_dhist)
2554 self.arg_err(Magic.magic_dhist)
2555 return
2555 return
2556 if len(args) == 1:
2556 if len(args) == 1:
2557 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2557 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2558 elif len(args) == 2:
2558 elif len(args) == 2:
2559 ini,fin = args
2559 ini,fin = args
2560 else:
2560 else:
2561 self.arg_err(Magic.magic_dhist)
2561 self.arg_err(Magic.magic_dhist)
2562 return
2562 return
2563 else:
2563 else:
2564 ini,fin = 0,len(dh)
2564 ini,fin = 0,len(dh)
2565 nlprint(dh,
2565 nlprint(dh,
2566 header = 'Directory history (kept in _dh)',
2566 header = 'Directory history (kept in _dh)',
2567 start=ini,stop=fin)
2567 start=ini,stop=fin)
2568
2568
2569 def magic_env(self, parameter_s=''):
2569 def magic_env(self, parameter_s=''):
2570 """List environment variables."""
2570 """List environment variables."""
2571
2571
2572 return os.environ.data
2572 return os.environ.data
2573
2573
2574 def magic_pushd(self, parameter_s=''):
2574 def magic_pushd(self, parameter_s=''):
2575 """Place the current dir on stack and change directory.
2575 """Place the current dir on stack and change directory.
2576
2576
2577 Usage:\\
2577 Usage:\\
2578 %pushd ['dirname']
2578 %pushd ['dirname']
2579
2579
2580 %pushd with no arguments does a %pushd to your home directory.
2580 %pushd with no arguments does a %pushd to your home directory.
2581 """
2581 """
2582 if parameter_s == '': parameter_s = '~'
2582 if parameter_s == '': parameter_s = '~'
2583 dir_s = self.shell.dir_stack
2583 dir_s = self.shell.dir_stack
2584 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2584 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2585 os.path.expanduser(self.shell.dir_stack[0]):
2585 os.path.expanduser(self.shell.dir_stack[0]):
2586 try:
2586 try:
2587 self.magic_cd(parameter_s)
2587 self.magic_cd(parameter_s)
2588 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2588 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2589 self.magic_dirs()
2589 self.magic_dirs()
2590 except:
2590 except:
2591 print 'Invalid directory'
2591 print 'Invalid directory'
2592 else:
2592 else:
2593 print 'You are already there!'
2593 print 'You are already there!'
2594
2594
2595 def magic_popd(self, parameter_s=''):
2595 def magic_popd(self, parameter_s=''):
2596 """Change to directory popped off the top of the stack.
2596 """Change to directory popped off the top of the stack.
2597 """
2597 """
2598 if len (self.shell.dir_stack) > 1:
2598 if len (self.shell.dir_stack) > 1:
2599 self.shell.dir_stack.pop(0)
2599 self.shell.dir_stack.pop(0)
2600 self.magic_cd(self.shell.dir_stack[0])
2600 self.magic_cd(self.shell.dir_stack[0])
2601 print self.shell.dir_stack[0]
2601 print self.shell.dir_stack[0]
2602 else:
2602 else:
2603 print "You can't remove the starting directory from the stack:",\
2603 print "You can't remove the starting directory from the stack:",\
2604 self.shell.dir_stack
2604 self.shell.dir_stack
2605
2605
2606 def magic_dirs(self, parameter_s=''):
2606 def magic_dirs(self, parameter_s=''):
2607 """Return the current directory stack."""
2607 """Return the current directory stack."""
2608
2608
2609 return self.shell.dir_stack[:]
2609 return self.shell.dir_stack[:]
2610
2610
2611 def magic_sc(self, parameter_s=''):
2611 def magic_sc(self, parameter_s=''):
2612 """Shell capture - execute a shell command and capture its output.
2612 """Shell capture - execute a shell command and capture its output.
2613
2613
2614 DEPRECATED. Suboptimal, retained for backwards compatibility.
2614 DEPRECATED. Suboptimal, retained for backwards compatibility.
2615
2615
2616 You should use the form 'var = !command' instead. Example:
2616 You should use the form 'var = !command' instead. Example:
2617
2617
2618 "%sc -l myfiles = ls ~" should now be written as
2618 "%sc -l myfiles = ls ~" should now be written as
2619
2619
2620 "myfiles = !ls ~"
2620 "myfiles = !ls ~"
2621
2621
2622 myfiles.s, myfiles.l and myfiles.n still apply as documented
2622 myfiles.s, myfiles.l and myfiles.n still apply as documented
2623 below.
2623 below.
2624
2624
2625 --
2625 --
2626 %sc [options] varname=command
2626 %sc [options] varname=command
2627
2627
2628 IPython will run the given command using commands.getoutput(), and
2628 IPython will run the given command using commands.getoutput(), and
2629 will then update the user's interactive namespace with a variable
2629 will then update the user's interactive namespace with a variable
2630 called varname, containing the value of the call. Your command can
2630 called varname, containing the value of the call. Your command can
2631 contain shell wildcards, pipes, etc.
2631 contain shell wildcards, pipes, etc.
2632
2632
2633 The '=' sign in the syntax is mandatory, and the variable name you
2633 The '=' sign in the syntax is mandatory, and the variable name you
2634 supply must follow Python's standard conventions for valid names.
2634 supply must follow Python's standard conventions for valid names.
2635
2635
2636 (A special format without variable name exists for internal use)
2636 (A special format without variable name exists for internal use)
2637
2637
2638 Options:
2638 Options:
2639
2639
2640 -l: list output. Split the output on newlines into a list before
2640 -l: list output. Split the output on newlines into a list before
2641 assigning it to the given variable. By default the output is stored
2641 assigning it to the given variable. By default the output is stored
2642 as a single string.
2642 as a single string.
2643
2643
2644 -v: verbose. Print the contents of the variable.
2644 -v: verbose. Print the contents of the variable.
2645
2645
2646 In most cases you should not need to split as a list, because the
2646 In most cases you should not need to split as a list, because the
2647 returned value is a special type of string which can automatically
2647 returned value is a special type of string which can automatically
2648 provide its contents either as a list (split on newlines) or as a
2648 provide its contents either as a list (split on newlines) or as a
2649 space-separated string. These are convenient, respectively, either
2649 space-separated string. These are convenient, respectively, either
2650 for sequential processing or to be passed to a shell command.
2650 for sequential processing or to be passed to a shell command.
2651
2651
2652 For example:
2652 For example:
2653
2653
2654 # Capture into variable a
2654 # Capture into variable a
2655 In [9]: sc a=ls *py
2655 In [9]: sc a=ls *py
2656
2656
2657 # a is a string with embedded newlines
2657 # a is a string with embedded newlines
2658 In [10]: a
2658 In [10]: a
2659 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2659 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2660
2660
2661 # which can be seen as a list:
2661 # which can be seen as a list:
2662 In [11]: a.l
2662 In [11]: a.l
2663 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2663 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2664
2664
2665 # or as a whitespace-separated string:
2665 # or as a whitespace-separated string:
2666 In [12]: a.s
2666 In [12]: a.s
2667 Out[12]: 'setup.py win32_manual_post_install.py'
2667 Out[12]: 'setup.py win32_manual_post_install.py'
2668
2668
2669 # a.s is useful to pass as a single command line:
2669 # a.s is useful to pass as a single command line:
2670 In [13]: !wc -l $a.s
2670 In [13]: !wc -l $a.s
2671 146 setup.py
2671 146 setup.py
2672 130 win32_manual_post_install.py
2672 130 win32_manual_post_install.py
2673 276 total
2673 276 total
2674
2674
2675 # while the list form is useful to loop over:
2675 # while the list form is useful to loop over:
2676 In [14]: for f in a.l:
2676 In [14]: for f in a.l:
2677 ....: !wc -l $f
2677 ....: !wc -l $f
2678 ....:
2678 ....:
2679 146 setup.py
2679 146 setup.py
2680 130 win32_manual_post_install.py
2680 130 win32_manual_post_install.py
2681
2681
2682 Similiarly, the lists returned by the -l option are also special, in
2682 Similiarly, the lists returned by the -l option are also special, in
2683 the sense that you can equally invoke the .s attribute on them to
2683 the sense that you can equally invoke the .s attribute on them to
2684 automatically get a whitespace-separated string from their contents:
2684 automatically get a whitespace-separated string from their contents:
2685
2685
2686 In [1]: sc -l b=ls *py
2686 In [1]: sc -l b=ls *py
2687
2687
2688 In [2]: b
2688 In [2]: b
2689 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2689 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2690
2690
2691 In [3]: b.s
2691 In [3]: b.s
2692 Out[3]: 'setup.py win32_manual_post_install.py'
2692 Out[3]: 'setup.py win32_manual_post_install.py'
2693
2693
2694 In summary, both the lists and strings used for ouptut capture have
2694 In summary, both the lists and strings used for ouptut capture have
2695 the following special attributes:
2695 the following special attributes:
2696
2696
2697 .l (or .list) : value as list.
2697 .l (or .list) : value as list.
2698 .n (or .nlstr): value as newline-separated string.
2698 .n (or .nlstr): value as newline-separated string.
2699 .s (or .spstr): value as space-separated string.
2699 .s (or .spstr): value as space-separated string.
2700 """
2700 """
2701
2701
2702 opts,args = self.parse_options(parameter_s,'lv')
2702 opts,args = self.parse_options(parameter_s,'lv')
2703 # Try to get a variable name and command to run
2703 # Try to get a variable name and command to run
2704 try:
2704 try:
2705 # the variable name must be obtained from the parse_options
2705 # the variable name must be obtained from the parse_options
2706 # output, which uses shlex.split to strip options out.
2706 # output, which uses shlex.split to strip options out.
2707 var,_ = args.split('=',1)
2707 var,_ = args.split('=',1)
2708 var = var.strip()
2708 var = var.strip()
2709 # But the the command has to be extracted from the original input
2709 # But the the command has to be extracted from the original input
2710 # parameter_s, not on what parse_options returns, to avoid the
2710 # parameter_s, not on what parse_options returns, to avoid the
2711 # quote stripping which shlex.split performs on it.
2711 # quote stripping which shlex.split performs on it.
2712 _,cmd = parameter_s.split('=',1)
2712 _,cmd = parameter_s.split('=',1)
2713 except ValueError:
2713 except ValueError:
2714 var,cmd = '',''
2714 var,cmd = '',''
2715 # If all looks ok, proceed
2715 # If all looks ok, proceed
2716 out,err = self.shell.getoutputerror(cmd)
2716 out,err = self.shell.getoutputerror(cmd)
2717 if err:
2717 if err:
2718 print >> Term.cerr,err
2718 print >> Term.cerr,err
2719 if opts.has_key('l'):
2719 if opts.has_key('l'):
2720 out = SList(out.split('\n'))
2720 out = SList(out.split('\n'))
2721 else:
2721 else:
2722 out = LSString(out)
2722 out = LSString(out)
2723 if opts.has_key('v'):
2723 if opts.has_key('v'):
2724 print '%s ==\n%s' % (var,pformat(out))
2724 print '%s ==\n%s' % (var,pformat(out))
2725 if var:
2725 if var:
2726 self.shell.user_ns.update({var:out})
2726 self.shell.user_ns.update({var:out})
2727 else:
2727 else:
2728 return out
2728 return out
2729
2729
2730 def magic_sx(self, parameter_s=''):
2730 def magic_sx(self, parameter_s=''):
2731 """Shell execute - run a shell command and capture its output.
2731 """Shell execute - run a shell command and capture its output.
2732
2732
2733 %sx command
2733 %sx command
2734
2734
2735 IPython will run the given command using commands.getoutput(), and
2735 IPython will run the given command using commands.getoutput(), and
2736 return the result formatted as a list (split on '\\n'). Since the
2736 return the result formatted as a list (split on '\\n'). Since the
2737 output is _returned_, it will be stored in ipython's regular output
2737 output is _returned_, it will be stored in ipython's regular output
2738 cache Out[N] and in the '_N' automatic variables.
2738 cache Out[N] and in the '_N' automatic variables.
2739
2739
2740 Notes:
2740 Notes:
2741
2741
2742 1) If an input line begins with '!!', then %sx is automatically
2742 1) If an input line begins with '!!', then %sx is automatically
2743 invoked. That is, while:
2743 invoked. That is, while:
2744 !ls
2744 !ls
2745 causes ipython to simply issue system('ls'), typing
2745 causes ipython to simply issue system('ls'), typing
2746 !!ls
2746 !!ls
2747 is a shorthand equivalent to:
2747 is a shorthand equivalent to:
2748 %sx ls
2748 %sx ls
2749
2749
2750 2) %sx differs from %sc in that %sx automatically splits into a list,
2750 2) %sx differs from %sc in that %sx automatically splits into a list,
2751 like '%sc -l'. The reason for this is to make it as easy as possible
2751 like '%sc -l'. The reason for this is to make it as easy as possible
2752 to process line-oriented shell output via further python commands.
2752 to process line-oriented shell output via further python commands.
2753 %sc is meant to provide much finer control, but requires more
2753 %sc is meant to provide much finer control, but requires more
2754 typing.
2754 typing.
2755
2755
2756 3) Just like %sc -l, this is a list with special attributes:
2756 3) Just like %sc -l, this is a list with special attributes:
2757
2757
2758 .l (or .list) : value as list.
2758 .l (or .list) : value as list.
2759 .n (or .nlstr): value as newline-separated string.
2759 .n (or .nlstr): value as newline-separated string.
2760 .s (or .spstr): value as whitespace-separated string.
2760 .s (or .spstr): value as whitespace-separated string.
2761
2761
2762 This is very useful when trying to use such lists as arguments to
2762 This is very useful when trying to use such lists as arguments to
2763 system commands."""
2763 system commands."""
2764
2764
2765 if parameter_s:
2765 if parameter_s:
2766 out,err = self.shell.getoutputerror(parameter_s)
2766 out,err = self.shell.getoutputerror(parameter_s)
2767 if err:
2767 if err:
2768 print >> Term.cerr,err
2768 print >> Term.cerr,err
2769 return SList(out.split('\n'))
2769 return SList(out.split('\n'))
2770
2770
2771 def magic_bg(self, parameter_s=''):
2771 def magic_bg(self, parameter_s=''):
2772 """Run a job in the background, in a separate thread.
2772 """Run a job in the background, in a separate thread.
2773
2773
2774 For example,
2774 For example,
2775
2775
2776 %bg myfunc(x,y,z=1)
2776 %bg myfunc(x,y,z=1)
2777
2777
2778 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2778 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2779 execution starts, a message will be printed indicating the job
2779 execution starts, a message will be printed indicating the job
2780 number. If your job number is 5, you can use
2780 number. If your job number is 5, you can use
2781
2781
2782 myvar = jobs.result(5) or myvar = jobs[5].result
2782 myvar = jobs.result(5) or myvar = jobs[5].result
2783
2783
2784 to assign this result to variable 'myvar'.
2784 to assign this result to variable 'myvar'.
2785
2785
2786 IPython has a job manager, accessible via the 'jobs' object. You can
2786 IPython has a job manager, accessible via the 'jobs' object. You can
2787 type jobs? to get more information about it, and use jobs.<TAB> to see
2787 type jobs? to get more information about it, and use jobs.<TAB> to see
2788 its attributes. All attributes not starting with an underscore are
2788 its attributes. All attributes not starting with an underscore are
2789 meant for public use.
2789 meant for public use.
2790
2790
2791 In particular, look at the jobs.new() method, which is used to create
2791 In particular, look at the jobs.new() method, which is used to create
2792 new jobs. This magic %bg function is just a convenience wrapper
2792 new jobs. This magic %bg function is just a convenience wrapper
2793 around jobs.new(), for expression-based jobs. If you want to create a
2793 around jobs.new(), for expression-based jobs. If you want to create a
2794 new job with an explicit function object and arguments, you must call
2794 new job with an explicit function object and arguments, you must call
2795 jobs.new() directly.
2795 jobs.new() directly.
2796
2796
2797 The jobs.new docstring also describes in detail several important
2797 The jobs.new docstring also describes in detail several important
2798 caveats associated with a thread-based model for background job
2798 caveats associated with a thread-based model for background job
2799 execution. Type jobs.new? for details.
2799 execution. Type jobs.new? for details.
2800
2800
2801 You can check the status of all jobs with jobs.status().
2801 You can check the status of all jobs with jobs.status().
2802
2802
2803 The jobs variable is set by IPython into the Python builtin namespace.
2803 The jobs variable is set by IPython into the Python builtin namespace.
2804 If you ever declare a variable named 'jobs', you will shadow this
2804 If you ever declare a variable named 'jobs', you will shadow this
2805 name. You can either delete your global jobs variable to regain
2805 name. You can either delete your global jobs variable to regain
2806 access to the job manager, or make a new name and assign it manually
2806 access to the job manager, or make a new name and assign it manually
2807 to the manager (stored in IPython's namespace). For example, to
2807 to the manager (stored in IPython's namespace). For example, to
2808 assign the job manager to the Jobs name, use:
2808 assign the job manager to the Jobs name, use:
2809
2809
2810 Jobs = __builtins__.jobs"""
2810 Jobs = __builtins__.jobs"""
2811
2811
2812 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2812 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2813
2813
2814
2814
2815 def magic_bookmark(self, parameter_s=''):
2815 def magic_bookmark(self, parameter_s=''):
2816 """Manage IPython's bookmark system.
2816 """Manage IPython's bookmark system.
2817
2817
2818 %bookmark <name> - set bookmark to current dir
2818 %bookmark <name> - set bookmark to current dir
2819 %bookmark <name> <dir> - set bookmark to <dir>
2819 %bookmark <name> <dir> - set bookmark to <dir>
2820 %bookmark -l - list all bookmarks
2820 %bookmark -l - list all bookmarks
2821 %bookmark -d <name> - remove bookmark
2821 %bookmark -d <name> - remove bookmark
2822 %bookmark -r - remove all bookmarks
2822 %bookmark -r - remove all bookmarks
2823
2823
2824 You can later on access a bookmarked folder with:
2824 You can later on access a bookmarked folder with:
2825 %cd -b <name>
2825 %cd -b <name>
2826 or simply '%cd <name>' if there is no directory called <name> AND
2826 or simply '%cd <name>' if there is no directory called <name> AND
2827 there is such a bookmark defined.
2827 there is such a bookmark defined.
2828
2828
2829 Your bookmarks persist through IPython sessions, but they are
2829 Your bookmarks persist through IPython sessions, but they are
2830 associated with each profile."""
2830 associated with each profile."""
2831
2831
2832 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2832 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2833 if len(args) > 2:
2833 if len(args) > 2:
2834 error('You can only give at most two arguments')
2834 error('You can only give at most two arguments')
2835 return
2835 return
2836
2836
2837 bkms = self.db.get('bookmarks',{})
2837 bkms = self.db.get('bookmarks',{})
2838
2838
2839 if opts.has_key('d'):
2839 if opts.has_key('d'):
2840 try:
2840 try:
2841 todel = args[0]
2841 todel = args[0]
2842 except IndexError:
2842 except IndexError:
2843 error('You must provide a bookmark to delete')
2843 error('You must provide a bookmark to delete')
2844 else:
2844 else:
2845 try:
2845 try:
2846 del bkms[todel]
2846 del bkms[todel]
2847 except:
2847 except:
2848 error("Can't delete bookmark '%s'" % todel)
2848 error("Can't delete bookmark '%s'" % todel)
2849 elif opts.has_key('r'):
2849 elif opts.has_key('r'):
2850 bkms = {}
2850 bkms = {}
2851 elif opts.has_key('l'):
2851 elif opts.has_key('l'):
2852 bks = bkms.keys()
2852 bks = bkms.keys()
2853 bks.sort()
2853 bks.sort()
2854 if bks:
2854 if bks:
2855 size = max(map(len,bks))
2855 size = max(map(len,bks))
2856 else:
2856 else:
2857 size = 0
2857 size = 0
2858 fmt = '%-'+str(size)+'s -> %s'
2858 fmt = '%-'+str(size)+'s -> %s'
2859 print 'Current bookmarks:'
2859 print 'Current bookmarks:'
2860 for bk in bks:
2860 for bk in bks:
2861 print fmt % (bk,bkms[bk])
2861 print fmt % (bk,bkms[bk])
2862 else:
2862 else:
2863 if not args:
2863 if not args:
2864 error("You must specify the bookmark name")
2864 error("You must specify the bookmark name")
2865 elif len(args)==1:
2865 elif len(args)==1:
2866 bkms[args[0]] = os.getcwd()
2866 bkms[args[0]] = os.getcwd()
2867 elif len(args)==2:
2867 elif len(args)==2:
2868 bkms[args[0]] = args[1]
2868 bkms[args[0]] = args[1]
2869 self.db['bookmarks'] = bkms
2869 self.db['bookmarks'] = bkms
2870
2870
2871 def magic_pycat(self, parameter_s=''):
2871 def magic_pycat(self, parameter_s=''):
2872 """Show a syntax-highlighted file through a pager.
2872 """Show a syntax-highlighted file through a pager.
2873
2873
2874 This magic is similar to the cat utility, but it will assume the file
2874 This magic is similar to the cat utility, but it will assume the file
2875 to be Python source and will show it with syntax highlighting. """
2875 to be Python source and will show it with syntax highlighting. """
2876
2876
2877 try:
2877 try:
2878 filename = get_py_filename(parameter_s)
2878 filename = get_py_filename(parameter_s)
2879 cont = file_read(filename)
2879 cont = file_read(filename)
2880 except IOError:
2880 except IOError:
2881 try:
2881 try:
2882 cont = eval(parameter_s,self.user_ns)
2882 cont = eval(parameter_s,self.user_ns)
2883 except NameError:
2883 except NameError:
2884 cont = None
2884 cont = None
2885 if cont is None:
2885 if cont is None:
2886 print "Error: no such file or variable"
2886 print "Error: no such file or variable"
2887 return
2887 return
2888
2888
2889 page(self.shell.pycolorize(cont),
2889 page(self.shell.pycolorize(cont),
2890 screen_lines=self.shell.rc.screen_length)
2890 screen_lines=self.shell.rc.screen_length)
2891
2891
2892 def magic_cpaste(self, parameter_s=''):
2892 def magic_cpaste(self, parameter_s=''):
2893 """Allows you to paste & execute a pre-formatted code block from clipboard
2893 """Allows you to paste & execute a pre-formatted code block from clipboard
2894
2894
2895 You must terminate the block with '--' (two minus-signs) alone on the
2895 You must terminate the block with '--' (two minus-signs) alone on the
2896 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2896 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2897 is the new sentinel for this operation)
2897 is the new sentinel for this operation)
2898
2898
2899 The block is dedented prior to execution to enable execution of
2899 The block is dedented prior to execution to enable execution of
2900 method definitions. The executed block is also assigned to variable
2900 method definitions. The executed block is also assigned to variable
2901 named 'pasted_block' for later editing with '%edit pasted_block'.
2901 named 'pasted_block' for later editing with '%edit pasted_block'.
2902
2902
2903 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2903 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2904 This assigns the pasted block to variable 'foo' as string, without
2904 This assigns the pasted block to variable 'foo' as string, without
2905 dedenting or executing it.
2905 dedenting or executing it.
2906
2906
2907 Do not be alarmed by garbled output on Windows (it's a readline bug).
2907 Do not be alarmed by garbled output on Windows (it's a readline bug).
2908 Just press enter and type -- (and press enter again) and the block
2908 Just press enter and type -- (and press enter again) and the block
2909 will be what was just pasted.
2909 will be what was just pasted.
2910
2910
2911 IPython statements (magics, shell escapes) are not supported (yet).
2911 IPython statements (magics, shell escapes) are not supported (yet).
2912 """
2912 """
2913 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2913 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2914 par = args.strip()
2914 par = args.strip()
2915 sentinel = opts.get('s','--')
2915 sentinel = opts.get('s','--')
2916
2916
2917 from IPython import iplib
2917 from IPython import iplib
2918 lines = []
2918 lines = []
2919 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2919 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2920 while 1:
2920 while 1:
2921 l = iplib.raw_input_original(':')
2921 l = iplib.raw_input_original(':')
2922 if l ==sentinel:
2922 if l ==sentinel:
2923 break
2923 break
2924 lines.append(l)
2924 lines.append(l)
2925 block = "\n".join(lines) + '\n'
2925 block = "\n".join(lines) + '\n'
2926 #print "block:\n",block
2926 #print "block:\n",block
2927 if not par:
2927 if not par:
2928 b = textwrap.dedent(block)
2928 b = textwrap.dedent(block)
2929 exec b in self.user_ns
2929 exec b in self.user_ns
2930 self.user_ns['pasted_block'] = b
2930 self.user_ns['pasted_block'] = b
2931 else:
2931 else:
2932 self.user_ns[par] = block
2932 self.user_ns[par] = block
2933 print "Block assigned to '%s'" % par
2933 print "Block assigned to '%s'" % par
2934
2934
2935 def magic_quickref(self,arg):
2935 def magic_quickref(self,arg):
2936 """ Show a quick reference sheet """
2936 """ Show a quick reference sheet """
2937 import IPython.usage
2937 import IPython.usage
2938 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2938 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2939
2939
2940 page(qr)
2940 page(qr)
2941
2941
2942 def magic_upgrade(self,arg):
2942 def magic_upgrade(self,arg):
2943 """ Upgrade your IPython installation
2943 """ Upgrade your IPython installation
2944
2944
2945 This will copy the config files that don't yet exist in your
2945 This will copy the config files that don't yet exist in your
2946 ipython dir from the system config dir. Use this after upgrading
2946 ipython dir from the system config dir. Use this after upgrading
2947 IPython if you don't wish to delete your .ipython dir.
2947 IPython if you don't wish to delete your .ipython dir.
2948
2948
2949 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2949 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2950 new users)
2950 new users)
2951
2951
2952 """
2952 """
2953 ip = self.getapi()
2953 ip = self.getapi()
2954 ipinstallation = path(IPython.__file__).dirname()
2954 ipinstallation = path(IPython.__file__).dirname()
2955 upgrade_script = sys.executable + " " + ipinstallation / 'upgrade_dir.py'
2955 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
2956 src_config = ipinstallation / 'UserConfig'
2956 src_config = ipinstallation / 'UserConfig'
2957 userdir = path(ip.options.ipythondir)
2957 userdir = path(ip.options.ipythondir)
2958 cmd = upgrade_script + " " + src_config + " " + userdir
2958 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
2959 print ">",cmd
2959 print ">",cmd
2960 shell(cmd)
2960 shell(cmd)
2961 if arg == '-nolegacy':
2961 if arg == '-nolegacy':
2962 legacy = userdir.files('ipythonrc*')
2962 legacy = userdir.files('ipythonrc*')
2963 print "Nuking legacy files:",legacy
2963 print "Nuking legacy files:",legacy
2964
2964
2965 [p.remove() for p in legacy]
2965 [p.remove() for p in legacy]
2966 suffix = (sys.platform == 'win32' and '.ini' or '')
2966 suffix = (sys.platform == 'win32' and '.ini' or '')
2967 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2967 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2968
2968
2969
2969
2970 # end Magic
2970 # end Magic
@@ -1,88 +1,88 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 """ A script/util to upgrade all files in a directory
2 """ A script/util to upgrade all files in a directory
3
3
4 This is rather conservative in its approach, only copying/overwriting
4 This is rather conservative in its approach, only copying/overwriting
5 new and unedited files.
5 new and unedited files.
6
6
7 To be used by "upgrade" feature.
7 To be used by "upgrade" feature.
8 """
8 """
9 from IPython.Extensions.path import path
9 from IPython.Extensions.path import path
10 import md5,pickle
10 import md5,pickle
11
11
12 def showdiff(old,new):
12 def showdiff(old,new):
13 import difflib
13 import difflib
14 d = difflib.Differ()
14 d = difflib.Differ()
15 lines = d.compare(old.lines(),new.lines())
15 lines = d.compare(old.lines(),new.lines())
16 realdiff = False
16 realdiff = False
17 for l in lines:
17 for l in lines:
18 print l,
18 print l,
19 if not realdiff and not l[0].isspace():
19 if not realdiff and not l[0].isspace():
20 realdiff = True
20 realdiff = True
21 return realdiff
21 return realdiff
22
22
23 def upgrade_dir(srcdir, tgtdir):
23 def upgrade_dir(srcdir, tgtdir):
24 """ Copy over all files in srcdir to tgtdir w/ native line endings
24 """ Copy over all files in srcdir to tgtdir w/ native line endings
25
25
26 Creates .upgrade_report in tgtdir that stores md5sums of all files
26 Creates .upgrade_report in tgtdir that stores md5sums of all files
27 to notice changed files b/w upgrades.
27 to notice changed files b/w upgrades.
28 """
28 """
29
29
30 def pr(s):
30 def pr(s):
31 print s
31 print s
32
32
33 def ignorable(p):
33 def ignorable(p):
34 if p.lower().startswith('.svn') or p.startswith('ipythonrc'):
34 if p.lower().startswith('.svn') or p.startswith('ipythonrc'):
35 return True
35 return True
36 return False
36 return False
37
37
38
38
39 modded = []
39 modded = []
40 files = [path(srcdir).relpathto(p) for p in path(srcdir).walkfiles()]
40 files = [path(srcdir).relpathto(p) for p in path(srcdir).walkfiles()]
41 #print files
41 #print files
42 rep = tgtdir / '.upgrade_report'
42 rep = tgtdir / '.upgrade_report'
43 try:
43 try:
44 rpt = pickle.load(rep.open())
44 rpt = pickle.load(rep.open())
45 except:
45 except:
46 rpt = {}
46 rpt = {}
47
47
48 for f in files:
48 for f in files:
49 if ignorable(f):
49 if ignorable(f):
50 continue
50 continue
51 src = srcdir / f
51 src = srcdir / f
52 tgt = tgtdir / f
52 tgt = tgtdir / f
53 if not tgt.isfile():
53 if not tgt.isfile():
54 pr("Creating %s" % str(tgt))
54 pr("Creating %s" % str(tgt))
55
55
56 tgt.write_text(src.text())
56 tgt.write_text(src.text())
57 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
57 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
58 else:
58 else:
59 cont = tgt.text()
59 cont = tgt.text()
60 sum = rpt.get(str(tgt), None)
60 sum = rpt.get(str(tgt), None)
61 #print sum
61 #print sum
62 if sum and md5.new(cont).hexdigest() == sum:
62 if sum and md5.new(cont).hexdigest() == sum:
63 pr("Unedited, installing new %s" % tgt)
63 pr("Unedited, installing new %s" % tgt)
64 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
64 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
65 else:
65 else:
66 pr(' == Modified, skipping %s, diffs below == ' % tgt)
66 pr(' == Modified, skipping %s, diffs below == ' % tgt)
67 #rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest()
67 #rpt[str(tgt)] = md5.new(tgt.bytes()).hexdigest()
68 real = showdiff(tgt,src)
68 real = showdiff(tgt,src)
69 pr('') # empty line
69 pr('') # empty line
70 if not real:
70 if not real:
71 pr("(Ok, it wasn't that different at all, upgrading checksum)")
71 pr("(Ok, it wasn't that different at all, upgrading checksum)")
72 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
72 rpt[str(tgt)] = md5.new(tgt.text()).hexdigest()
73 else:
73 else:
74 modded.append(tgt)
74 modded.append(tgt)
75
75
76 #print rpt
76 #print rpt
77 pickle.dump(rpt, rep.open('w'))
77 pickle.dump(rpt, rep.open('w'))
78 if modded:
78 if modded:
79 print "\n\nDelete the following files manually if you need a full upgrade:"
79 print "\n\nDelete the following files manually (and rerun %upgrade)\nif you need a full upgrade:"
80 for m in modded:
80 for m in modded:
81 print m
81 print m
82
82
83
83
84 import sys
84 import sys
85 if __name__ == "__main__":
85 if __name__ == "__main__":
86 upgrade_dir(path(sys.argv[1]), path(sys.argv[2]))
86 upgrade_dir(path(sys.argv[1]), path(sys.argv[2]))
87
87
88
88
@@ -1,5480 +1,5485 b''
1 2006-05-31 Ville Vainio <vivainio@gmail.com>
2
3 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
4 with args in parens to work correctly with dirs that have spaces.
5
1 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
6 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
2
7
3 * IPython/Logger.py (Logger.logstart): add option to log raw input
8 * IPython/Logger.py (Logger.logstart): add option to log raw input
4 instead of the processed one. A -r flag was added to the
9 instead of the processed one. A -r flag was added to the
5 %logstart magic used for controlling logging.
10 %logstart magic used for controlling logging.
6
11
7 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
12 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
8
13
9 * IPython/iplib.py (InteractiveShell.__init__): add check for the
14 * IPython/iplib.py (InteractiveShell.__init__): add check for the
10 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
15 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
11 recognize the option. After a bug report by Will Maier. This
16 recognize the option. After a bug report by Will Maier. This
12 closes #64 (will do it after confirmation from W. Maier).
17 closes #64 (will do it after confirmation from W. Maier).
13
18
14 * IPython/irunner.py: New module to run scripts as if manually
19 * IPython/irunner.py: New module to run scripts as if manually
15 typed into an interactive environment, based on pexpect. After a
20 typed into an interactive environment, based on pexpect. After a
16 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
21 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
17 ipython-user list. Simple unittests in the tests/ directory.
22 ipython-user list. Simple unittests in the tests/ directory.
18
23
19 * tools/release: add Will Maier, OpenBSD port maintainer, to
24 * tools/release: add Will Maier, OpenBSD port maintainer, to
20 recepients list. We are now officially part of the OpenBSD ports:
25 recepients list. We are now officially part of the OpenBSD ports:
21 http://www.openbsd.org/ports.html ! Many thanks to Will for the
26 http://www.openbsd.org/ports.html ! Many thanks to Will for the
22 work.
27 work.
23
28
24 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
29 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
25
30
26 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
31 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
27 so that it doesn't break tkinter apps.
32 so that it doesn't break tkinter apps.
28
33
29 * IPython/iplib.py (_prefilter): fix bug where aliases would
34 * IPython/iplib.py (_prefilter): fix bug where aliases would
30 shadow variables when autocall was fully off. Reported by SAGE
35 shadow variables when autocall was fully off. Reported by SAGE
31 author William Stein.
36 author William Stein.
32
37
33 * IPython/OInspect.py (Inspector.__init__): add a flag to control
38 * IPython/OInspect.py (Inspector.__init__): add a flag to control
34 at what detail level strings are computed when foo? is requested.
39 at what detail level strings are computed when foo? is requested.
35 This allows users to ask for example that the string form of an
40 This allows users to ask for example that the string form of an
36 object is only computed when foo?? is called, or even never, by
41 object is only computed when foo?? is called, or even never, by
37 setting the object_info_string_level >= 2 in the configuration
42 setting the object_info_string_level >= 2 in the configuration
38 file. This new option has been added and documented. After a
43 file. This new option has been added and documented. After a
39 request by SAGE to be able to control the printing of very large
44 request by SAGE to be able to control the printing of very large
40 objects more easily.
45 objects more easily.
41
46
42 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
47 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
43
48
44 * IPython/ipmaker.py (make_IPython): remove the ipython call path
49 * IPython/ipmaker.py (make_IPython): remove the ipython call path
45 from sys.argv, to be 100% consistent with how Python itself works
50 from sys.argv, to be 100% consistent with how Python itself works
46 (as seen for example with python -i file.py). After a bug report
51 (as seen for example with python -i file.py). After a bug report
47 by Jeffrey Collins.
52 by Jeffrey Collins.
48
53
49 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
54 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
50 nasty bug which was preventing custom namespaces with -pylab,
55 nasty bug which was preventing custom namespaces with -pylab,
51 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
56 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
52 compatibility (long gone from mpl).
57 compatibility (long gone from mpl).
53
58
54 * IPython/ipapi.py (make_session): name change: create->make. We
59 * IPython/ipapi.py (make_session): name change: create->make. We
55 use make in other places (ipmaker,...), it's shorter and easier to
60 use make in other places (ipmaker,...), it's shorter and easier to
56 type and say, etc. I'm trying to clean things before 0.7.2 so
61 type and say, etc. I'm trying to clean things before 0.7.2 so
57 that I can keep things stable wrt to ipapi in the chainsaw branch.
62 that I can keep things stable wrt to ipapi in the chainsaw branch.
58
63
59 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
64 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
60 python-mode recognizes our debugger mode. Add support for
65 python-mode recognizes our debugger mode. Add support for
61 autoindent inside (X)emacs. After a patch sent in by Jin Liu
66 autoindent inside (X)emacs. After a patch sent in by Jin Liu
62 <m.liu.jin-AT-gmail.com> originally written by
67 <m.liu.jin-AT-gmail.com> originally written by
63 doxgen-AT-newsmth.net (with minor modifications for xemacs
68 doxgen-AT-newsmth.net (with minor modifications for xemacs
64 compatibility)
69 compatibility)
65
70
66 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
71 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
67 tracebacks when walking the stack so that the stack tracking system
72 tracebacks when walking the stack so that the stack tracking system
68 in emacs' python-mode can identify the frames correctly.
73 in emacs' python-mode can identify the frames correctly.
69
74
70 * IPython/ipmaker.py (make_IPython): make the internal (and
75 * IPython/ipmaker.py (make_IPython): make the internal (and
71 default config) autoedit_syntax value false by default. Too many
76 default config) autoedit_syntax value false by default. Too many
72 users have complained to me (both on and off-list) about problems
77 users have complained to me (both on and off-list) about problems
73 with this option being on by default, so I'm making it default to
78 with this option being on by default, so I'm making it default to
74 off. It can still be enabled by anyone via the usual mechanisms.
79 off. It can still be enabled by anyone via the usual mechanisms.
75
80
76 * IPython/completer.py (Completer.attr_matches): add support for
81 * IPython/completer.py (Completer.attr_matches): add support for
77 PyCrust-style _getAttributeNames magic method. Patch contributed
82 PyCrust-style _getAttributeNames magic method. Patch contributed
78 by <mscott-AT-goldenspud.com>. Closes #50.
83 by <mscott-AT-goldenspud.com>. Closes #50.
79
84
80 * IPython/iplib.py (InteractiveShell.__init__): remove the
85 * IPython/iplib.py (InteractiveShell.__init__): remove the
81 deletion of exit/quit from __builtin__, which can break
86 deletion of exit/quit from __builtin__, which can break
82 third-party tools like the Zope debugging console. The
87 third-party tools like the Zope debugging console. The
83 %exit/%quit magics remain. In general, it's probably a good idea
88 %exit/%quit magics remain. In general, it's probably a good idea
84 not to delete anything from __builtin__, since we never know what
89 not to delete anything from __builtin__, since we never know what
85 that will break. In any case, python now (for 2.5) will support
90 that will break. In any case, python now (for 2.5) will support
86 'real' exit/quit, so this issue is moot. Closes #55.
91 'real' exit/quit, so this issue is moot. Closes #55.
87
92
88 * IPython/genutils.py (with_obj): rename the 'with' function to
93 * IPython/genutils.py (with_obj): rename the 'with' function to
89 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
94 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
90 becomes a language keyword. Closes #53.
95 becomes a language keyword. Closes #53.
91
96
92 * IPython/FakeModule.py (FakeModule.__init__): add a proper
97 * IPython/FakeModule.py (FakeModule.__init__): add a proper
93 __file__ attribute to this so it fools more things into thinking
98 __file__ attribute to this so it fools more things into thinking
94 it is a real module. Closes #59.
99 it is a real module. Closes #59.
95
100
96 * IPython/Magic.py (magic_edit): add -n option to open the editor
101 * IPython/Magic.py (magic_edit): add -n option to open the editor
97 at a specific line number. After a patch by Stefan van der Walt.
102 at a specific line number. After a patch by Stefan van der Walt.
98
103
99 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
104 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
100
105
101 * IPython/iplib.py (edit_syntax_error): fix crash when for some
106 * IPython/iplib.py (edit_syntax_error): fix crash when for some
102 reason the file could not be opened. After automatic crash
107 reason the file could not be opened. After automatic crash
103 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
108 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
104 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
109 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
105 (_should_recompile): Don't fire editor if using %bg, since there
110 (_should_recompile): Don't fire editor if using %bg, since there
106 is no file in the first place. From the same report as above.
111 is no file in the first place. From the same report as above.
107 (raw_input): protect against faulty third-party prefilters. After
112 (raw_input): protect against faulty third-party prefilters. After
108 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
113 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
109 while running under SAGE.
114 while running under SAGE.
110
115
111 2006-05-23 Ville Vainio <vivainio@gmail.com>
116 2006-05-23 Ville Vainio <vivainio@gmail.com>
112
117
113 * ipapi.py: Stripped down ip.to_user_ns() to work only as
118 * ipapi.py: Stripped down ip.to_user_ns() to work only as
114 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
119 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
115 now returns None (again), unless dummy is specifically allowed by
120 now returns None (again), unless dummy is specifically allowed by
116 ipapi.get(allow_dummy=True).
121 ipapi.get(allow_dummy=True).
117
122
118 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
123 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
119
124
120 * IPython: remove all 2.2-compatibility objects and hacks from
125 * IPython: remove all 2.2-compatibility objects and hacks from
121 everywhere, since we only support 2.3 at this point. Docs
126 everywhere, since we only support 2.3 at this point. Docs
122 updated.
127 updated.
123
128
124 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
129 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
125 Anything requiring extra validation can be turned into a Python
130 Anything requiring extra validation can be turned into a Python
126 property in the future. I used a property for the db one b/c
131 property in the future. I used a property for the db one b/c
127 there was a nasty circularity problem with the initialization
132 there was a nasty circularity problem with the initialization
128 order, which right now I don't have time to clean up.
133 order, which right now I don't have time to clean up.
129
134
130 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
135 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
131 another locking bug reported by Jorgen. I'm not 100% sure though,
136 another locking bug reported by Jorgen. I'm not 100% sure though,
132 so more testing is needed...
137 so more testing is needed...
133
138
134 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
139 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
135
140
136 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
141 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
137 local variables from any routine in user code (typically executed
142 local variables from any routine in user code (typically executed
138 with %run) directly into the interactive namespace. Very useful
143 with %run) directly into the interactive namespace. Very useful
139 when doing complex debugging.
144 when doing complex debugging.
140 (IPythonNotRunning): Changed the default None object to a dummy
145 (IPythonNotRunning): Changed the default None object to a dummy
141 whose attributes can be queried as well as called without
146 whose attributes can be queried as well as called without
142 exploding, to ease writing code which works transparently both in
147 exploding, to ease writing code which works transparently both in
143 and out of ipython and uses some of this API.
148 and out of ipython and uses some of this API.
144
149
145 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
150 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
146
151
147 * IPython/hooks.py (result_display): Fix the fact that our display
152 * IPython/hooks.py (result_display): Fix the fact that our display
148 hook was using str() instead of repr(), as the default python
153 hook was using str() instead of repr(), as the default python
149 console does. This had gone unnoticed b/c it only happened if
154 console does. This had gone unnoticed b/c it only happened if
150 %Pprint was off, but the inconsistency was there.
155 %Pprint was off, but the inconsistency was there.
151
156
152 2006-05-15 Ville Vainio <vivainio@gmail.com>
157 2006-05-15 Ville Vainio <vivainio@gmail.com>
153
158
154 * Oinspect.py: Only show docstring for nonexisting/binary files
159 * Oinspect.py: Only show docstring for nonexisting/binary files
155 when doing object??, closing ticket #62
160 when doing object??, closing ticket #62
156
161
157 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
162 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
158
163
159 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
164 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
160 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
165 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
161 was being released in a routine which hadn't checked if it had
166 was being released in a routine which hadn't checked if it had
162 been the one to acquire it.
167 been the one to acquire it.
163
168
164 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
169 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
165
170
166 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
171 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
167
172
168 2006-04-11 Ville Vainio <vivainio@gmail.com>
173 2006-04-11 Ville Vainio <vivainio@gmail.com>
169
174
170 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
175 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
171 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
176 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
172 prefilters, allowing stuff like magics and aliases in the file.
177 prefilters, allowing stuff like magics and aliases in the file.
173
178
174 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
179 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
175 added. Supported now are "%clear in" and "%clear out" (clear input and
180 added. Supported now are "%clear in" and "%clear out" (clear input and
176 output history, respectively). Also fixed CachedOutput.flush to
181 output history, respectively). Also fixed CachedOutput.flush to
177 properly flush the output cache.
182 properly flush the output cache.
178
183
179 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
184 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
180 half-success (and fail explicitly).
185 half-success (and fail explicitly).
181
186
182 2006-03-28 Ville Vainio <vivainio@gmail.com>
187 2006-03-28 Ville Vainio <vivainio@gmail.com>
183
188
184 * iplib.py: Fix quoting of aliases so that only argless ones
189 * iplib.py: Fix quoting of aliases so that only argless ones
185 are quoted
190 are quoted
186
191
187 2006-03-28 Ville Vainio <vivainio@gmail.com>
192 2006-03-28 Ville Vainio <vivainio@gmail.com>
188
193
189 * iplib.py: Quote aliases with spaces in the name.
194 * iplib.py: Quote aliases with spaces in the name.
190 "c:\program files\blah\bin" is now legal alias target.
195 "c:\program files\blah\bin" is now legal alias target.
191
196
192 * ext_rehashdir.py: Space no longer allowed as arg
197 * ext_rehashdir.py: Space no longer allowed as arg
193 separator, since space is legal in path names.
198 separator, since space is legal in path names.
194
199
195 2006-03-16 Ville Vainio <vivainio@gmail.com>
200 2006-03-16 Ville Vainio <vivainio@gmail.com>
196
201
197 * upgrade_dir.py: Take path.py from Extensions, correcting
202 * upgrade_dir.py: Take path.py from Extensions, correcting
198 %upgrade magic
203 %upgrade magic
199
204
200 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
205 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
201
206
202 * hooks.py: Only enclose editor binary in quotes if legal and
207 * hooks.py: Only enclose editor binary in quotes if legal and
203 necessary (space in the name, and is an existing file). Fixes a bug
208 necessary (space in the name, and is an existing file). Fixes a bug
204 reported by Zachary Pincus.
209 reported by Zachary Pincus.
205
210
206 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
211 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
207
212
208 * Manual: thanks to a tip on proper color handling for Emacs, by
213 * Manual: thanks to a tip on proper color handling for Emacs, by
209 Eric J Haywiser <ejh1-AT-MIT.EDU>.
214 Eric J Haywiser <ejh1-AT-MIT.EDU>.
210
215
211 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
216 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
212 by applying the provided patch. Thanks to Liu Jin
217 by applying the provided patch. Thanks to Liu Jin
213 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
218 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
214 XEmacs/Linux, I'm trusting the submitter that it actually helps
219 XEmacs/Linux, I'm trusting the submitter that it actually helps
215 under win32/GNU Emacs. Will revisit if any problems are reported.
220 under win32/GNU Emacs. Will revisit if any problems are reported.
216
221
217 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
222 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
218
223
219 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
224 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
220 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
225 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
221
226
222 2006-03-12 Ville Vainio <vivainio@gmail.com>
227 2006-03-12 Ville Vainio <vivainio@gmail.com>
223
228
224 * Magic.py (magic_timeit): Added %timeit magic, contributed by
229 * Magic.py (magic_timeit): Added %timeit magic, contributed by
225 Torsten Marek.
230 Torsten Marek.
226
231
227 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
232 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
228
233
229 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
234 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
230 line ranges works again.
235 line ranges works again.
231
236
232 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
237 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
233
238
234 * IPython/iplib.py (showtraceback): add back sys.last_traceback
239 * IPython/iplib.py (showtraceback): add back sys.last_traceback
235 and friends, after a discussion with Zach Pincus on ipython-user.
240 and friends, after a discussion with Zach Pincus on ipython-user.
236 I'm not 100% sure, but after thinking aobut it quite a bit, it may
241 I'm not 100% sure, but after thinking aobut it quite a bit, it may
237 be OK. Testing with the multithreaded shells didn't reveal any
242 be OK. Testing with the multithreaded shells didn't reveal any
238 problems, but let's keep an eye out.
243 problems, but let's keep an eye out.
239
244
240 In the process, I fixed a few things which were calling
245 In the process, I fixed a few things which were calling
241 self.InteractiveTB() directly (like safe_execfile), which is a
246 self.InteractiveTB() directly (like safe_execfile), which is a
242 mistake: ALL exception reporting should be done by calling
247 mistake: ALL exception reporting should be done by calling
243 self.showtraceback(), which handles state and tab-completion and
248 self.showtraceback(), which handles state and tab-completion and
244 more.
249 more.
245
250
246 2006-03-01 Ville Vainio <vivainio@gmail.com>
251 2006-03-01 Ville Vainio <vivainio@gmail.com>
247
252
248 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
253 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
249 To use, do "from ipipe import *".
254 To use, do "from ipipe import *".
250
255
251 2006-02-24 Ville Vainio <vivainio@gmail.com>
256 2006-02-24 Ville Vainio <vivainio@gmail.com>
252
257
253 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
258 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
254 "cleanly" and safely than the older upgrade mechanism.
259 "cleanly" and safely than the older upgrade mechanism.
255
260
256 2006-02-21 Ville Vainio <vivainio@gmail.com>
261 2006-02-21 Ville Vainio <vivainio@gmail.com>
257
262
258 * Magic.py: %save works again.
263 * Magic.py: %save works again.
259
264
260 2006-02-15 Ville Vainio <vivainio@gmail.com>
265 2006-02-15 Ville Vainio <vivainio@gmail.com>
261
266
262 * Magic.py: %Pprint works again
267 * Magic.py: %Pprint works again
263
268
264 * Extensions/ipy_sane_defaults.py: Provide everything provided
269 * Extensions/ipy_sane_defaults.py: Provide everything provided
265 in default ipythonrc, to make it possible to have a completely empty
270 in default ipythonrc, to make it possible to have a completely empty
266 ipythonrc (and thus completely rc-file free configuration)
271 ipythonrc (and thus completely rc-file free configuration)
267
272
268
273
269 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
274 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
270
275
271 * IPython/hooks.py (editor): quote the call to the editor command,
276 * IPython/hooks.py (editor): quote the call to the editor command,
272 to allow commands with spaces in them. Problem noted by watching
277 to allow commands with spaces in them. Problem noted by watching
273 Ian Oswald's video about textpad under win32 at
278 Ian Oswald's video about textpad under win32 at
274 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
279 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
275
280
276 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
281 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
277 describing magics (we haven't used @ for a loong time).
282 describing magics (we haven't used @ for a loong time).
278
283
279 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
284 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
280 contributed by marienz to close
285 contributed by marienz to close
281 http://www.scipy.net/roundup/ipython/issue53.
286 http://www.scipy.net/roundup/ipython/issue53.
282
287
283 2006-02-10 Ville Vainio <vivainio@gmail.com>
288 2006-02-10 Ville Vainio <vivainio@gmail.com>
284
289
285 * genutils.py: getoutput now works in win32 too
290 * genutils.py: getoutput now works in win32 too
286
291
287 * completer.py: alias and magic completion only invoked
292 * completer.py: alias and magic completion only invoked
288 at the first "item" in the line, to avoid "cd %store"
293 at the first "item" in the line, to avoid "cd %store"
289 nonsense.
294 nonsense.
290
295
291 2006-02-09 Ville Vainio <vivainio@gmail.com>
296 2006-02-09 Ville Vainio <vivainio@gmail.com>
292
297
293 * test/*: Added a unit testing framework (finally).
298 * test/*: Added a unit testing framework (finally).
294 '%run runtests.py' to run test_*.
299 '%run runtests.py' to run test_*.
295
300
296 * ipapi.py: Exposed runlines and set_custom_exc
301 * ipapi.py: Exposed runlines and set_custom_exc
297
302
298 2006-02-07 Ville Vainio <vivainio@gmail.com>
303 2006-02-07 Ville Vainio <vivainio@gmail.com>
299
304
300 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
305 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
301 instead use "f(1 2)" as before.
306 instead use "f(1 2)" as before.
302
307
303 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
308 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
304
309
305 * IPython/demo.py (IPythonDemo): Add new classes to the demo
310 * IPython/demo.py (IPythonDemo): Add new classes to the demo
306 facilities, for demos processed by the IPython input filter
311 facilities, for demos processed by the IPython input filter
307 (IPythonDemo), and for running a script one-line-at-a-time as a
312 (IPythonDemo), and for running a script one-line-at-a-time as a
308 demo, both for pure Python (LineDemo) and for IPython-processed
313 demo, both for pure Python (LineDemo) and for IPython-processed
309 input (IPythonLineDemo). After a request by Dave Kohel, from the
314 input (IPythonLineDemo). After a request by Dave Kohel, from the
310 SAGE team.
315 SAGE team.
311 (Demo.edit): added and edit() method to the demo objects, to edit
316 (Demo.edit): added and edit() method to the demo objects, to edit
312 the in-memory copy of the last executed block.
317 the in-memory copy of the last executed block.
313
318
314 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
319 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
315 processing to %edit, %macro and %save. These commands can now be
320 processing to %edit, %macro and %save. These commands can now be
316 invoked on the unprocessed input as it was typed by the user
321 invoked on the unprocessed input as it was typed by the user
317 (without any prefilters applied). After requests by the SAGE team
322 (without any prefilters applied). After requests by the SAGE team
318 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
323 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
319
324
320 2006-02-01 Ville Vainio <vivainio@gmail.com>
325 2006-02-01 Ville Vainio <vivainio@gmail.com>
321
326
322 * setup.py, eggsetup.py: easy_install ipython==dev works
327 * setup.py, eggsetup.py: easy_install ipython==dev works
323 correctly now (on Linux)
328 correctly now (on Linux)
324
329
325 * ipy_user_conf,ipmaker: user config changes, removed spurious
330 * ipy_user_conf,ipmaker: user config changes, removed spurious
326 warnings
331 warnings
327
332
328 * iplib: if rc.banner is string, use it as is.
333 * iplib: if rc.banner is string, use it as is.
329
334
330 * Magic: %pycat accepts a string argument and pages it's contents.
335 * Magic: %pycat accepts a string argument and pages it's contents.
331
336
332
337
333 2006-01-30 Ville Vainio <vivainio@gmail.com>
338 2006-01-30 Ville Vainio <vivainio@gmail.com>
334
339
335 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
340 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
336 Now %store and bookmarks work through PickleShare, meaning that
341 Now %store and bookmarks work through PickleShare, meaning that
337 concurrent access is possible and all ipython sessions see the
342 concurrent access is possible and all ipython sessions see the
338 same database situation all the time, instead of snapshot of
343 same database situation all the time, instead of snapshot of
339 the situation when the session was started. Hence, %bookmark
344 the situation when the session was started. Hence, %bookmark
340 results are immediately accessible from othes sessions. The database
345 results are immediately accessible from othes sessions. The database
341 is also available for use by user extensions. See:
346 is also available for use by user extensions. See:
342 http://www.python.org/pypi/pickleshare
347 http://www.python.org/pypi/pickleshare
343
348
344 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
349 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
345
350
346 * aliases can now be %store'd
351 * aliases can now be %store'd
347
352
348 * path.py move to Extensions so that pickleshare does not need
353 * path.py move to Extensions so that pickleshare does not need
349 IPython-specific import. Extensions added to pythonpath right
354 IPython-specific import. Extensions added to pythonpath right
350 at __init__.
355 at __init__.
351
356
352 * iplib.py: ipalias deprecated/redundant; aliases are converted and
357 * iplib.py: ipalias deprecated/redundant; aliases are converted and
353 called with _ip.system and the pre-transformed command string.
358 called with _ip.system and the pre-transformed command string.
354
359
355 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
360 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
356
361
357 * IPython/iplib.py (interact): Fix that we were not catching
362 * IPython/iplib.py (interact): Fix that we were not catching
358 KeyboardInterrupt exceptions properly. I'm not quite sure why the
363 KeyboardInterrupt exceptions properly. I'm not quite sure why the
359 logic here had to change, but it's fixed now.
364 logic here had to change, but it's fixed now.
360
365
361 2006-01-29 Ville Vainio <vivainio@gmail.com>
366 2006-01-29 Ville Vainio <vivainio@gmail.com>
362
367
363 * iplib.py: Try to import pyreadline on Windows.
368 * iplib.py: Try to import pyreadline on Windows.
364
369
365 2006-01-27 Ville Vainio <vivainio@gmail.com>
370 2006-01-27 Ville Vainio <vivainio@gmail.com>
366
371
367 * iplib.py: Expose ipapi as _ip in builtin namespace.
372 * iplib.py: Expose ipapi as _ip in builtin namespace.
368 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
373 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
369 and ip_set_hook (-> _ip.set_hook) redundant. % and !
374 and ip_set_hook (-> _ip.set_hook) redundant. % and !
370 syntax now produce _ip.* variant of the commands.
375 syntax now produce _ip.* variant of the commands.
371
376
372 * "_ip.options().autoedit_syntax = 2" automatically throws
377 * "_ip.options().autoedit_syntax = 2" automatically throws
373 user to editor for syntax error correction without prompting.
378 user to editor for syntax error correction without prompting.
374
379
375 2006-01-27 Ville Vainio <vivainio@gmail.com>
380 2006-01-27 Ville Vainio <vivainio@gmail.com>
376
381
377 * ipmaker.py: Give "realistic" sys.argv for scripts (without
382 * ipmaker.py: Give "realistic" sys.argv for scripts (without
378 'ipython' at argv[0]) executed through command line.
383 'ipython' at argv[0]) executed through command line.
379 NOTE: this DEPRECATES calling ipython with multiple scripts
384 NOTE: this DEPRECATES calling ipython with multiple scripts
380 ("ipython a.py b.py c.py")
385 ("ipython a.py b.py c.py")
381
386
382 * iplib.py, hooks.py: Added configurable input prefilter,
387 * iplib.py, hooks.py: Added configurable input prefilter,
383 named 'input_prefilter'. See ext_rescapture.py for example
388 named 'input_prefilter'. See ext_rescapture.py for example
384 usage.
389 usage.
385
390
386 * ext_rescapture.py, Magic.py: Better system command output capture
391 * ext_rescapture.py, Magic.py: Better system command output capture
387 through 'var = !ls' (deprecates user-visible %sc). Same notation
392 through 'var = !ls' (deprecates user-visible %sc). Same notation
388 applies for magics, 'var = %alias' assigns alias list to var.
393 applies for magics, 'var = %alias' assigns alias list to var.
389
394
390 * ipapi.py: added meta() for accessing extension-usable data store.
395 * ipapi.py: added meta() for accessing extension-usable data store.
391
396
392 * iplib.py: added InteractiveShell.getapi(). New magics should be
397 * iplib.py: added InteractiveShell.getapi(). New magics should be
393 written doing self.getapi() instead of using the shell directly.
398 written doing self.getapi() instead of using the shell directly.
394
399
395 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
400 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
396 %store foo >> ~/myfoo.txt to store variables to files (in clean
401 %store foo >> ~/myfoo.txt to store variables to files (in clean
397 textual form, not a restorable pickle).
402 textual form, not a restorable pickle).
398
403
399 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
404 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
400
405
401 * usage.py, Magic.py: added %quickref
406 * usage.py, Magic.py: added %quickref
402
407
403 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
408 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
404
409
405 * GetoptErrors when invoking magics etc. with wrong args
410 * GetoptErrors when invoking magics etc. with wrong args
406 are now more helpful:
411 are now more helpful:
407 GetoptError: option -l not recognized (allowed: "qb" )
412 GetoptError: option -l not recognized (allowed: "qb" )
408
413
409 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
414 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
410
415
411 * IPython/demo.py (Demo.show): Flush stdout after each block, so
416 * IPython/demo.py (Demo.show): Flush stdout after each block, so
412 computationally intensive blocks don't appear to stall the demo.
417 computationally intensive blocks don't appear to stall the demo.
413
418
414 2006-01-24 Ville Vainio <vivainio@gmail.com>
419 2006-01-24 Ville Vainio <vivainio@gmail.com>
415
420
416 * iplib.py, hooks.py: 'result_display' hook can return a non-None
421 * iplib.py, hooks.py: 'result_display' hook can return a non-None
417 value to manipulate resulting history entry.
422 value to manipulate resulting history entry.
418
423
419 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
424 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
420 to instance methods of IPApi class, to make extending an embedded
425 to instance methods of IPApi class, to make extending an embedded
421 IPython feasible. See ext_rehashdir.py for example usage.
426 IPython feasible. See ext_rehashdir.py for example usage.
422
427
423 * Merged 1071-1076 from banches/0.7.1
428 * Merged 1071-1076 from banches/0.7.1
424
429
425
430
426 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
431 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
427
432
428 * tools/release (daystamp): Fix build tools to use the new
433 * tools/release (daystamp): Fix build tools to use the new
429 eggsetup.py script to build lightweight eggs.
434 eggsetup.py script to build lightweight eggs.
430
435
431 * Applied changesets 1062 and 1064 before 0.7.1 release.
436 * Applied changesets 1062 and 1064 before 0.7.1 release.
432
437
433 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
438 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
434 see the raw input history (without conversions like %ls ->
439 see the raw input history (without conversions like %ls ->
435 ipmagic("ls")). After a request from W. Stein, SAGE
440 ipmagic("ls")). After a request from W. Stein, SAGE
436 (http://modular.ucsd.edu/sage) developer. This information is
441 (http://modular.ucsd.edu/sage) developer. This information is
437 stored in the input_hist_raw attribute of the IPython instance, so
442 stored in the input_hist_raw attribute of the IPython instance, so
438 developers can access it if needed (it's an InputList instance).
443 developers can access it if needed (it's an InputList instance).
439
444
440 * Versionstring = 0.7.2.svn
445 * Versionstring = 0.7.2.svn
441
446
442 * eggsetup.py: A separate script for constructing eggs, creates
447 * eggsetup.py: A separate script for constructing eggs, creates
443 proper launch scripts even on Windows (an .exe file in
448 proper launch scripts even on Windows (an .exe file in
444 \python24\scripts).
449 \python24\scripts).
445
450
446 * ipapi.py: launch_new_instance, launch entry point needed for the
451 * ipapi.py: launch_new_instance, launch entry point needed for the
447 egg.
452 egg.
448
453
449 2006-01-23 Ville Vainio <vivainio@gmail.com>
454 2006-01-23 Ville Vainio <vivainio@gmail.com>
450
455
451 * Added %cpaste magic for pasting python code
456 * Added %cpaste magic for pasting python code
452
457
453 2006-01-22 Ville Vainio <vivainio@gmail.com>
458 2006-01-22 Ville Vainio <vivainio@gmail.com>
454
459
455 * Merge from branches/0.7.1 into trunk, revs 1052-1057
460 * Merge from branches/0.7.1 into trunk, revs 1052-1057
456
461
457 * Versionstring = 0.7.2.svn
462 * Versionstring = 0.7.2.svn
458
463
459 * eggsetup.py: A separate script for constructing eggs, creates
464 * eggsetup.py: A separate script for constructing eggs, creates
460 proper launch scripts even on Windows (an .exe file in
465 proper launch scripts even on Windows (an .exe file in
461 \python24\scripts).
466 \python24\scripts).
462
467
463 * ipapi.py: launch_new_instance, launch entry point needed for the
468 * ipapi.py: launch_new_instance, launch entry point needed for the
464 egg.
469 egg.
465
470
466 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
471 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
467
472
468 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
473 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
469 %pfile foo would print the file for foo even if it was a binary.
474 %pfile foo would print the file for foo even if it was a binary.
470 Now, extensions '.so' and '.dll' are skipped.
475 Now, extensions '.so' and '.dll' are skipped.
471
476
472 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
477 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
473 bug, where macros would fail in all threaded modes. I'm not 100%
478 bug, where macros would fail in all threaded modes. I'm not 100%
474 sure, so I'm going to put out an rc instead of making a release
479 sure, so I'm going to put out an rc instead of making a release
475 today, and wait for feedback for at least a few days.
480 today, and wait for feedback for at least a few days.
476
481
477 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
482 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
478 it...) the handling of pasting external code with autoindent on.
483 it...) the handling of pasting external code with autoindent on.
479 To get out of a multiline input, the rule will appear for most
484 To get out of a multiline input, the rule will appear for most
480 users unchanged: two blank lines or change the indent level
485 users unchanged: two blank lines or change the indent level
481 proposed by IPython. But there is a twist now: you can
486 proposed by IPython. But there is a twist now: you can
482 add/subtract only *one or two spaces*. If you add/subtract three
487 add/subtract only *one or two spaces*. If you add/subtract three
483 or more (unless you completely delete the line), IPython will
488 or more (unless you completely delete the line), IPython will
484 accept that line, and you'll need to enter a second one of pure
489 accept that line, and you'll need to enter a second one of pure
485 whitespace. I know it sounds complicated, but I can't find a
490 whitespace. I know it sounds complicated, but I can't find a
486 different solution that covers all the cases, with the right
491 different solution that covers all the cases, with the right
487 heuristics. Hopefully in actual use, nobody will really notice
492 heuristics. Hopefully in actual use, nobody will really notice
488 all these strange rules and things will 'just work'.
493 all these strange rules and things will 'just work'.
489
494
490 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
495 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
491
496
492 * IPython/iplib.py (interact): catch exceptions which can be
497 * IPython/iplib.py (interact): catch exceptions which can be
493 triggered asynchronously by signal handlers. Thanks to an
498 triggered asynchronously by signal handlers. Thanks to an
494 automatic crash report, submitted by Colin Kingsley
499 automatic crash report, submitted by Colin Kingsley
495 <tercel-AT-gentoo.org>.
500 <tercel-AT-gentoo.org>.
496
501
497 2006-01-20 Ville Vainio <vivainio@gmail.com>
502 2006-01-20 Ville Vainio <vivainio@gmail.com>
498
503
499 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
504 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
500 (%rehashdir, very useful, try it out) of how to extend ipython
505 (%rehashdir, very useful, try it out) of how to extend ipython
501 with new magics. Also added Extensions dir to pythonpath to make
506 with new magics. Also added Extensions dir to pythonpath to make
502 importing extensions easy.
507 importing extensions easy.
503
508
504 * %store now complains when trying to store interactively declared
509 * %store now complains when trying to store interactively declared
505 classes / instances of those classes.
510 classes / instances of those classes.
506
511
507 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
512 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
508 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
513 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
509 if they exist, and ipy_user_conf.py with some defaults is created for
514 if they exist, and ipy_user_conf.py with some defaults is created for
510 the user.
515 the user.
511
516
512 * Startup rehashing done by the config file, not InterpreterExec.
517 * Startup rehashing done by the config file, not InterpreterExec.
513 This means system commands are available even without selecting the
518 This means system commands are available even without selecting the
514 pysh profile. It's the sensible default after all.
519 pysh profile. It's the sensible default after all.
515
520
516 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
521 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
517
522
518 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
523 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
519 multiline code with autoindent on working. But I am really not
524 multiline code with autoindent on working. But I am really not
520 sure, so this needs more testing. Will commit a debug-enabled
525 sure, so this needs more testing. Will commit a debug-enabled
521 version for now, while I test it some more, so that Ville and
526 version for now, while I test it some more, so that Ville and
522 others may also catch any problems. Also made
527 others may also catch any problems. Also made
523 self.indent_current_str() a method, to ensure that there's no
528 self.indent_current_str() a method, to ensure that there's no
524 chance of the indent space count and the corresponding string
529 chance of the indent space count and the corresponding string
525 falling out of sync. All code needing the string should just call
530 falling out of sync. All code needing the string should just call
526 the method.
531 the method.
527
532
528 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
533 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
529
534
530 * IPython/Magic.py (magic_edit): fix check for when users don't
535 * IPython/Magic.py (magic_edit): fix check for when users don't
531 save their output files, the try/except was in the wrong section.
536 save their output files, the try/except was in the wrong section.
532
537
533 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
538 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
534
539
535 * IPython/Magic.py (magic_run): fix __file__ global missing from
540 * IPython/Magic.py (magic_run): fix __file__ global missing from
536 script's namespace when executed via %run. After a report by
541 script's namespace when executed via %run. After a report by
537 Vivian.
542 Vivian.
538
543
539 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
544 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
540 when using python 2.4. The parent constructor changed in 2.4, and
545 when using python 2.4. The parent constructor changed in 2.4, and
541 we need to track it directly (we can't call it, as it messes up
546 we need to track it directly (we can't call it, as it messes up
542 readline and tab-completion inside our pdb would stop working).
547 readline and tab-completion inside our pdb would stop working).
543 After a bug report by R. Bernstein <rocky-AT-panix.com>.
548 After a bug report by R. Bernstein <rocky-AT-panix.com>.
544
549
545 2006-01-16 Ville Vainio <vivainio@gmail.com>
550 2006-01-16 Ville Vainio <vivainio@gmail.com>
546
551
547 * Ipython/magic.py:Reverted back to old %edit functionality
552 * Ipython/magic.py:Reverted back to old %edit functionality
548 that returns file contents on exit.
553 that returns file contents on exit.
549
554
550 * IPython/path.py: Added Jason Orendorff's "path" module to
555 * IPython/path.py: Added Jason Orendorff's "path" module to
551 IPython tree, http://www.jorendorff.com/articles/python/path/.
556 IPython tree, http://www.jorendorff.com/articles/python/path/.
552 You can get path objects conveniently through %sc, and !!, e.g.:
557 You can get path objects conveniently through %sc, and !!, e.g.:
553 sc files=ls
558 sc files=ls
554 for p in files.paths: # or files.p
559 for p in files.paths: # or files.p
555 print p,p.mtime
560 print p,p.mtime
556
561
557 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
562 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
558 now work again without considering the exclusion regexp -
563 now work again without considering the exclusion regexp -
559 hence, things like ',foo my/path' turn to 'foo("my/path")'
564 hence, things like ',foo my/path' turn to 'foo("my/path")'
560 instead of syntax error.
565 instead of syntax error.
561
566
562
567
563 2006-01-14 Ville Vainio <vivainio@gmail.com>
568 2006-01-14 Ville Vainio <vivainio@gmail.com>
564
569
565 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
570 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
566 ipapi decorators for python 2.4 users, options() provides access to rc
571 ipapi decorators for python 2.4 users, options() provides access to rc
567 data.
572 data.
568
573
569 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
574 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
570 as path separators (even on Linux ;-). Space character after
575 as path separators (even on Linux ;-). Space character after
571 backslash (as yielded by tab completer) is still space;
576 backslash (as yielded by tab completer) is still space;
572 "%cd long\ name" works as expected.
577 "%cd long\ name" works as expected.
573
578
574 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
579 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
575 as "chain of command", with priority. API stays the same,
580 as "chain of command", with priority. API stays the same,
576 TryNext exception raised by a hook function signals that
581 TryNext exception raised by a hook function signals that
577 current hook failed and next hook should try handling it, as
582 current hook failed and next hook should try handling it, as
578 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
583 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
579 requested configurable display hook, which is now implemented.
584 requested configurable display hook, which is now implemented.
580
585
581 2006-01-13 Ville Vainio <vivainio@gmail.com>
586 2006-01-13 Ville Vainio <vivainio@gmail.com>
582
587
583 * IPython/platutils*.py: platform specific utility functions,
588 * IPython/platutils*.py: platform specific utility functions,
584 so far only set_term_title is implemented (change terminal
589 so far only set_term_title is implemented (change terminal
585 label in windowing systems). %cd now changes the title to
590 label in windowing systems). %cd now changes the title to
586 current dir.
591 current dir.
587
592
588 * IPython/Release.py: Added myself to "authors" list,
593 * IPython/Release.py: Added myself to "authors" list,
589 had to create new files.
594 had to create new files.
590
595
591 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
596 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
592 shell escape; not a known bug but had potential to be one in the
597 shell escape; not a known bug but had potential to be one in the
593 future.
598 future.
594
599
595 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
600 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
596 extension API for IPython! See the module for usage example. Fix
601 extension API for IPython! See the module for usage example. Fix
597 OInspect for docstring-less magic functions.
602 OInspect for docstring-less magic functions.
598
603
599
604
600 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
605 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
601
606
602 * IPython/iplib.py (raw_input): temporarily deactivate all
607 * IPython/iplib.py (raw_input): temporarily deactivate all
603 attempts at allowing pasting of code with autoindent on. It
608 attempts at allowing pasting of code with autoindent on. It
604 introduced bugs (reported by Prabhu) and I can't seem to find a
609 introduced bugs (reported by Prabhu) and I can't seem to find a
605 robust combination which works in all cases. Will have to revisit
610 robust combination which works in all cases. Will have to revisit
606 later.
611 later.
607
612
608 * IPython/genutils.py: remove isspace() function. We've dropped
613 * IPython/genutils.py: remove isspace() function. We've dropped
609 2.2 compatibility, so it's OK to use the string method.
614 2.2 compatibility, so it's OK to use the string method.
610
615
611 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
616 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
612
617
613 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
618 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
614 matching what NOT to autocall on, to include all python binary
619 matching what NOT to autocall on, to include all python binary
615 operators (including things like 'and', 'or', 'is' and 'in').
620 operators (including things like 'and', 'or', 'is' and 'in').
616 Prompted by a bug report on 'foo & bar', but I realized we had
621 Prompted by a bug report on 'foo & bar', but I realized we had
617 many more potential bug cases with other operators. The regexp is
622 many more potential bug cases with other operators. The regexp is
618 self.re_exclude_auto, it's fairly commented.
623 self.re_exclude_auto, it's fairly commented.
619
624
620 2006-01-12 Ville Vainio <vivainio@gmail.com>
625 2006-01-12 Ville Vainio <vivainio@gmail.com>
621
626
622 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
627 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
623 Prettified and hardened string/backslash quoting with ipsystem(),
628 Prettified and hardened string/backslash quoting with ipsystem(),
624 ipalias() and ipmagic(). Now even \ characters are passed to
629 ipalias() and ipmagic(). Now even \ characters are passed to
625 %magics, !shell escapes and aliases exactly as they are in the
630 %magics, !shell escapes and aliases exactly as they are in the
626 ipython command line. Should improve backslash experience,
631 ipython command line. Should improve backslash experience,
627 particularly in Windows (path delimiter for some commands that
632 particularly in Windows (path delimiter for some commands that
628 won't understand '/'), but Unix benefits as well (regexps). %cd
633 won't understand '/'), but Unix benefits as well (regexps). %cd
629 magic still doesn't support backslash path delimiters, though. Also
634 magic still doesn't support backslash path delimiters, though. Also
630 deleted all pretense of supporting multiline command strings in
635 deleted all pretense of supporting multiline command strings in
631 !system or %magic commands. Thanks to Jerry McRae for suggestions.
636 !system or %magic commands. Thanks to Jerry McRae for suggestions.
632
637
633 * doc/build_doc_instructions.txt added. Documentation on how to
638 * doc/build_doc_instructions.txt added. Documentation on how to
634 use doc/update_manual.py, added yesterday. Both files contributed
639 use doc/update_manual.py, added yesterday. Both files contributed
635 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
640 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
636 doc/*.sh for deprecation at a later date.
641 doc/*.sh for deprecation at a later date.
637
642
638 * /ipython.py Added ipython.py to root directory for
643 * /ipython.py Added ipython.py to root directory for
639 zero-installation (tar xzvf ipython.tgz; cd ipython; python
644 zero-installation (tar xzvf ipython.tgz; cd ipython; python
640 ipython.py) and development convenience (no need to kee doing
645 ipython.py) and development convenience (no need to kee doing
641 "setup.py install" between changes).
646 "setup.py install" between changes).
642
647
643 * Made ! and !! shell escapes work (again) in multiline expressions:
648 * Made ! and !! shell escapes work (again) in multiline expressions:
644 if 1:
649 if 1:
645 !ls
650 !ls
646 !!ls
651 !!ls
647
652
648 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
653 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
649
654
650 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
655 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
651 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
656 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
652 module in case-insensitive installation. Was causing crashes
657 module in case-insensitive installation. Was causing crashes
653 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
658 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
654
659
655 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
660 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
656 <marienz-AT-gentoo.org>, closes
661 <marienz-AT-gentoo.org>, closes
657 http://www.scipy.net/roundup/ipython/issue51.
662 http://www.scipy.net/roundup/ipython/issue51.
658
663
659 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
664 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
660
665
661 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
666 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
662 problem of excessive CPU usage under *nix and keyboard lag under
667 problem of excessive CPU usage under *nix and keyboard lag under
663 win32.
668 win32.
664
669
665 2006-01-10 *** Released version 0.7.0
670 2006-01-10 *** Released version 0.7.0
666
671
667 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
672 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
668
673
669 * IPython/Release.py (revision): tag version number to 0.7.0,
674 * IPython/Release.py (revision): tag version number to 0.7.0,
670 ready for release.
675 ready for release.
671
676
672 * IPython/Magic.py (magic_edit): Add print statement to %edit so
677 * IPython/Magic.py (magic_edit): Add print statement to %edit so
673 it informs the user of the name of the temp. file used. This can
678 it informs the user of the name of the temp. file used. This can
674 help if you decide later to reuse that same file, so you know
679 help if you decide later to reuse that same file, so you know
675 where to copy the info from.
680 where to copy the info from.
676
681
677 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
682 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
678
683
679 * setup_bdist_egg.py: little script to build an egg. Added
684 * setup_bdist_egg.py: little script to build an egg. Added
680 support in the release tools as well.
685 support in the release tools as well.
681
686
682 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
687 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
683
688
684 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
689 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
685 version selection (new -wxversion command line and ipythonrc
690 version selection (new -wxversion command line and ipythonrc
686 parameter). Patch contributed by Arnd Baecker
691 parameter). Patch contributed by Arnd Baecker
687 <arnd.baecker-AT-web.de>.
692 <arnd.baecker-AT-web.de>.
688
693
689 * IPython/iplib.py (embed_mainloop): fix tab-completion in
694 * IPython/iplib.py (embed_mainloop): fix tab-completion in
690 embedded instances, for variables defined at the interactive
695 embedded instances, for variables defined at the interactive
691 prompt of the embedded ipython. Reported by Arnd.
696 prompt of the embedded ipython. Reported by Arnd.
692
697
693 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
698 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
694 it can be used as a (stateful) toggle, or with a direct parameter.
699 it can be used as a (stateful) toggle, or with a direct parameter.
695
700
696 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
701 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
697 could be triggered in certain cases and cause the traceback
702 could be triggered in certain cases and cause the traceback
698 printer not to work.
703 printer not to work.
699
704
700 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
705 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
701
706
702 * IPython/iplib.py (_should_recompile): Small fix, closes
707 * IPython/iplib.py (_should_recompile): Small fix, closes
703 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
708 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
704
709
705 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
710 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
706
711
707 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
712 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
708 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
713 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
709 Moad for help with tracking it down.
714 Moad for help with tracking it down.
710
715
711 * IPython/iplib.py (handle_auto): fix autocall handling for
716 * IPython/iplib.py (handle_auto): fix autocall handling for
712 objects which support BOTH __getitem__ and __call__ (so that f [x]
717 objects which support BOTH __getitem__ and __call__ (so that f [x]
713 is left alone, instead of becoming f([x]) automatically).
718 is left alone, instead of becoming f([x]) automatically).
714
719
715 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
720 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
716 Ville's patch.
721 Ville's patch.
717
722
718 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
723 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
719
724
720 * IPython/iplib.py (handle_auto): changed autocall semantics to
725 * IPython/iplib.py (handle_auto): changed autocall semantics to
721 include 'smart' mode, where the autocall transformation is NOT
726 include 'smart' mode, where the autocall transformation is NOT
722 applied if there are no arguments on the line. This allows you to
727 applied if there are no arguments on the line. This allows you to
723 just type 'foo' if foo is a callable to see its internal form,
728 just type 'foo' if foo is a callable to see its internal form,
724 instead of having it called with no arguments (typically a
729 instead of having it called with no arguments (typically a
725 mistake). The old 'full' autocall still exists: for that, you
730 mistake). The old 'full' autocall still exists: for that, you
726 need to set the 'autocall' parameter to 2 in your ipythonrc file.
731 need to set the 'autocall' parameter to 2 in your ipythonrc file.
727
732
728 * IPython/completer.py (Completer.attr_matches): add
733 * IPython/completer.py (Completer.attr_matches): add
729 tab-completion support for Enthoughts' traits. After a report by
734 tab-completion support for Enthoughts' traits. After a report by
730 Arnd and a patch by Prabhu.
735 Arnd and a patch by Prabhu.
731
736
732 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
737 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
733
738
734 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
739 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
735 Schmolck's patch to fix inspect.getinnerframes().
740 Schmolck's patch to fix inspect.getinnerframes().
736
741
737 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
742 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
738 for embedded instances, regarding handling of namespaces and items
743 for embedded instances, regarding handling of namespaces and items
739 added to the __builtin__ one. Multiple embedded instances and
744 added to the __builtin__ one. Multiple embedded instances and
740 recursive embeddings should work better now (though I'm not sure
745 recursive embeddings should work better now (though I'm not sure
741 I've got all the corner cases fixed, that code is a bit of a brain
746 I've got all the corner cases fixed, that code is a bit of a brain
742 twister).
747 twister).
743
748
744 * IPython/Magic.py (magic_edit): added support to edit in-memory
749 * IPython/Magic.py (magic_edit): added support to edit in-memory
745 macros (automatically creates the necessary temp files). %edit
750 macros (automatically creates the necessary temp files). %edit
746 also doesn't return the file contents anymore, it's just noise.
751 also doesn't return the file contents anymore, it's just noise.
747
752
748 * IPython/completer.py (Completer.attr_matches): revert change to
753 * IPython/completer.py (Completer.attr_matches): revert change to
749 complete only on attributes listed in __all__. I realized it
754 complete only on attributes listed in __all__. I realized it
750 cripples the tab-completion system as a tool for exploring the
755 cripples the tab-completion system as a tool for exploring the
751 internals of unknown libraries (it renders any non-__all__
756 internals of unknown libraries (it renders any non-__all__
752 attribute off-limits). I got bit by this when trying to see
757 attribute off-limits). I got bit by this when trying to see
753 something inside the dis module.
758 something inside the dis module.
754
759
755 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
760 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
756
761
757 * IPython/iplib.py (InteractiveShell.__init__): add .meta
762 * IPython/iplib.py (InteractiveShell.__init__): add .meta
758 namespace for users and extension writers to hold data in. This
763 namespace for users and extension writers to hold data in. This
759 follows the discussion in
764 follows the discussion in
760 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
765 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
761
766
762 * IPython/completer.py (IPCompleter.complete): small patch to help
767 * IPython/completer.py (IPCompleter.complete): small patch to help
763 tab-completion under Emacs, after a suggestion by John Barnard
768 tab-completion under Emacs, after a suggestion by John Barnard
764 <barnarj-AT-ccf.org>.
769 <barnarj-AT-ccf.org>.
765
770
766 * IPython/Magic.py (Magic.extract_input_slices): added support for
771 * IPython/Magic.py (Magic.extract_input_slices): added support for
767 the slice notation in magics to use N-M to represent numbers N...M
772 the slice notation in magics to use N-M to represent numbers N...M
768 (closed endpoints). This is used by %macro and %save.
773 (closed endpoints). This is used by %macro and %save.
769
774
770 * IPython/completer.py (Completer.attr_matches): for modules which
775 * IPython/completer.py (Completer.attr_matches): for modules which
771 define __all__, complete only on those. After a patch by Jeffrey
776 define __all__, complete only on those. After a patch by Jeffrey
772 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
777 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
773 speed up this routine.
778 speed up this routine.
774
779
775 * IPython/Logger.py (Logger.log): fix a history handling bug. I
780 * IPython/Logger.py (Logger.log): fix a history handling bug. I
776 don't know if this is the end of it, but the behavior now is
781 don't know if this is the end of it, but the behavior now is
777 certainly much more correct. Note that coupled with macros,
782 certainly much more correct. Note that coupled with macros,
778 slightly surprising (at first) behavior may occur: a macro will in
783 slightly surprising (at first) behavior may occur: a macro will in
779 general expand to multiple lines of input, so upon exiting, the
784 general expand to multiple lines of input, so upon exiting, the
780 in/out counters will both be bumped by the corresponding amount
785 in/out counters will both be bumped by the corresponding amount
781 (as if the macro's contents had been typed interactively). Typing
786 (as if the macro's contents had been typed interactively). Typing
782 %hist will reveal the intermediate (silently processed) lines.
787 %hist will reveal the intermediate (silently processed) lines.
783
788
784 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
789 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
785 pickle to fail (%run was overwriting __main__ and not restoring
790 pickle to fail (%run was overwriting __main__ and not restoring
786 it, but pickle relies on __main__ to operate).
791 it, but pickle relies on __main__ to operate).
787
792
788 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
793 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
789 using properties, but forgot to make the main InteractiveShell
794 using properties, but forgot to make the main InteractiveShell
790 class a new-style class. Properties fail silently, and
795 class a new-style class. Properties fail silently, and
791 misteriously, with old-style class (getters work, but
796 misteriously, with old-style class (getters work, but
792 setters don't do anything).
797 setters don't do anything).
793
798
794 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
799 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
795
800
796 * IPython/Magic.py (magic_history): fix history reporting bug (I
801 * IPython/Magic.py (magic_history): fix history reporting bug (I
797 know some nasties are still there, I just can't seem to find a
802 know some nasties are still there, I just can't seem to find a
798 reproducible test case to track them down; the input history is
803 reproducible test case to track them down; the input history is
799 falling out of sync...)
804 falling out of sync...)
800
805
801 * IPython/iplib.py (handle_shell_escape): fix bug where both
806 * IPython/iplib.py (handle_shell_escape): fix bug where both
802 aliases and system accesses where broken for indented code (such
807 aliases and system accesses where broken for indented code (such
803 as loops).
808 as loops).
804
809
805 * IPython/genutils.py (shell): fix small but critical bug for
810 * IPython/genutils.py (shell): fix small but critical bug for
806 win32 system access.
811 win32 system access.
807
812
808 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
813 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
809
814
810 * IPython/iplib.py (showtraceback): remove use of the
815 * IPython/iplib.py (showtraceback): remove use of the
811 sys.last_{type/value/traceback} structures, which are non
816 sys.last_{type/value/traceback} structures, which are non
812 thread-safe.
817 thread-safe.
813 (_prefilter): change control flow to ensure that we NEVER
818 (_prefilter): change control flow to ensure that we NEVER
814 introspect objects when autocall is off. This will guarantee that
819 introspect objects when autocall is off. This will guarantee that
815 having an input line of the form 'x.y', where access to attribute
820 having an input line of the form 'x.y', where access to attribute
816 'y' has side effects, doesn't trigger the side effect TWICE. It
821 'y' has side effects, doesn't trigger the side effect TWICE. It
817 is important to note that, with autocall on, these side effects
822 is important to note that, with autocall on, these side effects
818 can still happen.
823 can still happen.
819 (ipsystem): new builtin, to complete the ip{magic/alias/system}
824 (ipsystem): new builtin, to complete the ip{magic/alias/system}
820 trio. IPython offers these three kinds of special calls which are
825 trio. IPython offers these three kinds of special calls which are
821 not python code, and it's a good thing to have their call method
826 not python code, and it's a good thing to have their call method
822 be accessible as pure python functions (not just special syntax at
827 be accessible as pure python functions (not just special syntax at
823 the command line). It gives us a better internal implementation
828 the command line). It gives us a better internal implementation
824 structure, as well as exposing these for user scripting more
829 structure, as well as exposing these for user scripting more
825 cleanly.
830 cleanly.
826
831
827 * IPython/macro.py (Macro.__init__): moved macros to a standalone
832 * IPython/macro.py (Macro.__init__): moved macros to a standalone
828 file. Now that they'll be more likely to be used with the
833 file. Now that they'll be more likely to be used with the
829 persistance system (%store), I want to make sure their module path
834 persistance system (%store), I want to make sure their module path
830 doesn't change in the future, so that we don't break things for
835 doesn't change in the future, so that we don't break things for
831 users' persisted data.
836 users' persisted data.
832
837
833 * IPython/iplib.py (autoindent_update): move indentation
838 * IPython/iplib.py (autoindent_update): move indentation
834 management into the _text_ processing loop, not the keyboard
839 management into the _text_ processing loop, not the keyboard
835 interactive one. This is necessary to correctly process non-typed
840 interactive one. This is necessary to correctly process non-typed
836 multiline input (such as macros).
841 multiline input (such as macros).
837
842
838 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
843 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
839 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
844 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
840 which was producing problems in the resulting manual.
845 which was producing problems in the resulting manual.
841 (magic_whos): improve reporting of instances (show their class,
846 (magic_whos): improve reporting of instances (show their class,
842 instead of simply printing 'instance' which isn't terribly
847 instead of simply printing 'instance' which isn't terribly
843 informative).
848 informative).
844
849
845 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
850 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
846 (minor mods) to support network shares under win32.
851 (minor mods) to support network shares under win32.
847
852
848 * IPython/winconsole.py (get_console_size): add new winconsole
853 * IPython/winconsole.py (get_console_size): add new winconsole
849 module and fixes to page_dumb() to improve its behavior under
854 module and fixes to page_dumb() to improve its behavior under
850 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
855 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
851
856
852 * IPython/Magic.py (Macro): simplified Macro class to just
857 * IPython/Magic.py (Macro): simplified Macro class to just
853 subclass list. We've had only 2.2 compatibility for a very long
858 subclass list. We've had only 2.2 compatibility for a very long
854 time, yet I was still avoiding subclassing the builtin types. No
859 time, yet I was still avoiding subclassing the builtin types. No
855 more (I'm also starting to use properties, though I won't shift to
860 more (I'm also starting to use properties, though I won't shift to
856 2.3-specific features quite yet).
861 2.3-specific features quite yet).
857 (magic_store): added Ville's patch for lightweight variable
862 (magic_store): added Ville's patch for lightweight variable
858 persistence, after a request on the user list by Matt Wilkie
863 persistence, after a request on the user list by Matt Wilkie
859 <maphew-AT-gmail.com>. The new %store magic's docstring has full
864 <maphew-AT-gmail.com>. The new %store magic's docstring has full
860 details.
865 details.
861
866
862 * IPython/iplib.py (InteractiveShell.post_config_initialization):
867 * IPython/iplib.py (InteractiveShell.post_config_initialization):
863 changed the default logfile name from 'ipython.log' to
868 changed the default logfile name from 'ipython.log' to
864 'ipython_log.py'. These logs are real python files, and now that
869 'ipython_log.py'. These logs are real python files, and now that
865 we have much better multiline support, people are more likely to
870 we have much better multiline support, people are more likely to
866 want to use them as such. Might as well name them correctly.
871 want to use them as such. Might as well name them correctly.
867
872
868 * IPython/Magic.py: substantial cleanup. While we can't stop
873 * IPython/Magic.py: substantial cleanup. While we can't stop
869 using magics as mixins, due to the existing customizations 'out
874 using magics as mixins, due to the existing customizations 'out
870 there' which rely on the mixin naming conventions, at least I
875 there' which rely on the mixin naming conventions, at least I
871 cleaned out all cross-class name usage. So once we are OK with
876 cleaned out all cross-class name usage. So once we are OK with
872 breaking compatibility, the two systems can be separated.
877 breaking compatibility, the two systems can be separated.
873
878
874 * IPython/Logger.py: major cleanup. This one is NOT a mixin
879 * IPython/Logger.py: major cleanup. This one is NOT a mixin
875 anymore, and the class is a fair bit less hideous as well. New
880 anymore, and the class is a fair bit less hideous as well. New
876 features were also introduced: timestamping of input, and logging
881 features were also introduced: timestamping of input, and logging
877 of output results. These are user-visible with the -t and -o
882 of output results. These are user-visible with the -t and -o
878 options to %logstart. Closes
883 options to %logstart. Closes
879 http://www.scipy.net/roundup/ipython/issue11 and a request by
884 http://www.scipy.net/roundup/ipython/issue11 and a request by
880 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
885 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
881
886
882 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
887 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
883
888
884 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
889 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
885 better hadnle backslashes in paths. See the thread 'More Windows
890 better hadnle backslashes in paths. See the thread 'More Windows
886 questions part 2 - \/ characters revisited' on the iypthon user
891 questions part 2 - \/ characters revisited' on the iypthon user
887 list:
892 list:
888 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
893 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
889
894
890 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
895 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
891
896
892 (InteractiveShell.__init__): change threaded shells to not use the
897 (InteractiveShell.__init__): change threaded shells to not use the
893 ipython crash handler. This was causing more problems than not,
898 ipython crash handler. This was causing more problems than not,
894 as exceptions in the main thread (GUI code, typically) would
899 as exceptions in the main thread (GUI code, typically) would
895 always show up as a 'crash', when they really weren't.
900 always show up as a 'crash', when they really weren't.
896
901
897 The colors and exception mode commands (%colors/%xmode) have been
902 The colors and exception mode commands (%colors/%xmode) have been
898 synchronized to also take this into account, so users can get
903 synchronized to also take this into account, so users can get
899 verbose exceptions for their threaded code as well. I also added
904 verbose exceptions for their threaded code as well. I also added
900 support for activating pdb inside this exception handler as well,
905 support for activating pdb inside this exception handler as well,
901 so now GUI authors can use IPython's enhanced pdb at runtime.
906 so now GUI authors can use IPython's enhanced pdb at runtime.
902
907
903 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
908 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
904 true by default, and add it to the shipped ipythonrc file. Since
909 true by default, and add it to the shipped ipythonrc file. Since
905 this asks the user before proceeding, I think it's OK to make it
910 this asks the user before proceeding, I think it's OK to make it
906 true by default.
911 true by default.
907
912
908 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
913 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
909 of the previous special-casing of input in the eval loop. I think
914 of the previous special-casing of input in the eval loop. I think
910 this is cleaner, as they really are commands and shouldn't have
915 this is cleaner, as they really are commands and shouldn't have
911 a special role in the middle of the core code.
916 a special role in the middle of the core code.
912
917
913 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
918 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
914
919
915 * IPython/iplib.py (edit_syntax_error): added support for
920 * IPython/iplib.py (edit_syntax_error): added support for
916 automatically reopening the editor if the file had a syntax error
921 automatically reopening the editor if the file had a syntax error
917 in it. Thanks to scottt who provided the patch at:
922 in it. Thanks to scottt who provided the patch at:
918 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
923 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
919 version committed).
924 version committed).
920
925
921 * IPython/iplib.py (handle_normal): add suport for multi-line
926 * IPython/iplib.py (handle_normal): add suport for multi-line
922 input with emtpy lines. This fixes
927 input with emtpy lines. This fixes
923 http://www.scipy.net/roundup/ipython/issue43 and a similar
928 http://www.scipy.net/roundup/ipython/issue43 and a similar
924 discussion on the user list.
929 discussion on the user list.
925
930
926 WARNING: a behavior change is necessarily introduced to support
931 WARNING: a behavior change is necessarily introduced to support
927 blank lines: now a single blank line with whitespace does NOT
932 blank lines: now a single blank line with whitespace does NOT
928 break the input loop, which means that when autoindent is on, by
933 break the input loop, which means that when autoindent is on, by
929 default hitting return on the next (indented) line does NOT exit.
934 default hitting return on the next (indented) line does NOT exit.
930
935
931 Instead, to exit a multiline input you can either have:
936 Instead, to exit a multiline input you can either have:
932
937
933 - TWO whitespace lines (just hit return again), or
938 - TWO whitespace lines (just hit return again), or
934 - a single whitespace line of a different length than provided
939 - a single whitespace line of a different length than provided
935 by the autoindent (add or remove a space).
940 by the autoindent (add or remove a space).
936
941
937 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
942 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
938 module to better organize all readline-related functionality.
943 module to better organize all readline-related functionality.
939 I've deleted FlexCompleter and put all completion clases here.
944 I've deleted FlexCompleter and put all completion clases here.
940
945
941 * IPython/iplib.py (raw_input): improve indentation management.
946 * IPython/iplib.py (raw_input): improve indentation management.
942 It is now possible to paste indented code with autoindent on, and
947 It is now possible to paste indented code with autoindent on, and
943 the code is interpreted correctly (though it still looks bad on
948 the code is interpreted correctly (though it still looks bad on
944 screen, due to the line-oriented nature of ipython).
949 screen, due to the line-oriented nature of ipython).
945 (MagicCompleter.complete): change behavior so that a TAB key on an
950 (MagicCompleter.complete): change behavior so that a TAB key on an
946 otherwise empty line actually inserts a tab, instead of completing
951 otherwise empty line actually inserts a tab, instead of completing
947 on the entire global namespace. This makes it easier to use the
952 on the entire global namespace. This makes it easier to use the
948 TAB key for indentation. After a request by Hans Meine
953 TAB key for indentation. After a request by Hans Meine
949 <hans_meine-AT-gmx.net>
954 <hans_meine-AT-gmx.net>
950 (_prefilter): add support so that typing plain 'exit' or 'quit'
955 (_prefilter): add support so that typing plain 'exit' or 'quit'
951 does a sensible thing. Originally I tried to deviate as little as
956 does a sensible thing. Originally I tried to deviate as little as
952 possible from the default python behavior, but even that one may
957 possible from the default python behavior, but even that one may
953 change in this direction (thread on python-dev to that effect).
958 change in this direction (thread on python-dev to that effect).
954 Regardless, ipython should do the right thing even if CPython's
959 Regardless, ipython should do the right thing even if CPython's
955 '>>>' prompt doesn't.
960 '>>>' prompt doesn't.
956 (InteractiveShell): removed subclassing code.InteractiveConsole
961 (InteractiveShell): removed subclassing code.InteractiveConsole
957 class. By now we'd overridden just about all of its methods: I've
962 class. By now we'd overridden just about all of its methods: I've
958 copied the remaining two over, and now ipython is a standalone
963 copied the remaining two over, and now ipython is a standalone
959 class. This will provide a clearer picture for the chainsaw
964 class. This will provide a clearer picture for the chainsaw
960 branch refactoring.
965 branch refactoring.
961
966
962 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
967 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
963
968
964 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
969 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
965 failures for objects which break when dir() is called on them.
970 failures for objects which break when dir() is called on them.
966
971
967 * IPython/FlexCompleter.py (Completer.__init__): Added support for
972 * IPython/FlexCompleter.py (Completer.__init__): Added support for
968 distinct local and global namespaces in the completer API. This
973 distinct local and global namespaces in the completer API. This
969 change allows us top properly handle completion with distinct
974 change allows us top properly handle completion with distinct
970 scopes, including in embedded instances (this had never really
975 scopes, including in embedded instances (this had never really
971 worked correctly).
976 worked correctly).
972
977
973 Note: this introduces a change in the constructor for
978 Note: this introduces a change in the constructor for
974 MagicCompleter, as a new global_namespace parameter is now the
979 MagicCompleter, as a new global_namespace parameter is now the
975 second argument (the others were bumped one position).
980 second argument (the others were bumped one position).
976
981
977 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
982 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
978
983
979 * IPython/iplib.py (embed_mainloop): fix tab-completion in
984 * IPython/iplib.py (embed_mainloop): fix tab-completion in
980 embedded instances (which can be done now thanks to Vivian's
985 embedded instances (which can be done now thanks to Vivian's
981 frame-handling fixes for pdb).
986 frame-handling fixes for pdb).
982 (InteractiveShell.__init__): Fix namespace handling problem in
987 (InteractiveShell.__init__): Fix namespace handling problem in
983 embedded instances. We were overwriting __main__ unconditionally,
988 embedded instances. We were overwriting __main__ unconditionally,
984 and this should only be done for 'full' (non-embedded) IPython;
989 and this should only be done for 'full' (non-embedded) IPython;
985 embedded instances must respect the caller's __main__. Thanks to
990 embedded instances must respect the caller's __main__. Thanks to
986 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
991 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
987
992
988 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
993 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
989
994
990 * setup.py: added download_url to setup(). This registers the
995 * setup.py: added download_url to setup(). This registers the
991 download address at PyPI, which is not only useful to humans
996 download address at PyPI, which is not only useful to humans
992 browsing the site, but is also picked up by setuptools (the Eggs
997 browsing the site, but is also picked up by setuptools (the Eggs
993 machinery). Thanks to Ville and R. Kern for the info/discussion
998 machinery). Thanks to Ville and R. Kern for the info/discussion
994 on this.
999 on this.
995
1000
996 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1001 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
997
1002
998 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1003 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
999 This brings a lot of nice functionality to the pdb mode, which now
1004 This brings a lot of nice functionality to the pdb mode, which now
1000 has tab-completion, syntax highlighting, and better stack handling
1005 has tab-completion, syntax highlighting, and better stack handling
1001 than before. Many thanks to Vivian De Smedt
1006 than before. Many thanks to Vivian De Smedt
1002 <vivian-AT-vdesmedt.com> for the original patches.
1007 <vivian-AT-vdesmedt.com> for the original patches.
1003
1008
1004 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1009 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1005
1010
1006 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1011 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1007 sequence to consistently accept the banner argument. The
1012 sequence to consistently accept the banner argument. The
1008 inconsistency was tripping SAGE, thanks to Gary Zablackis
1013 inconsistency was tripping SAGE, thanks to Gary Zablackis
1009 <gzabl-AT-yahoo.com> for the report.
1014 <gzabl-AT-yahoo.com> for the report.
1010
1015
1011 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1016 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1012
1017
1013 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1018 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1014 Fix bug where a naked 'alias' call in the ipythonrc file would
1019 Fix bug where a naked 'alias' call in the ipythonrc file would
1015 cause a crash. Bug reported by Jorgen Stenarson.
1020 cause a crash. Bug reported by Jorgen Stenarson.
1016
1021
1017 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1022 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1018
1023
1019 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1024 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1020 startup time.
1025 startup time.
1021
1026
1022 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1027 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1023 instances had introduced a bug with globals in normal code. Now
1028 instances had introduced a bug with globals in normal code. Now
1024 it's working in all cases.
1029 it's working in all cases.
1025
1030
1026 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1031 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1027 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1032 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1028 has been introduced to set the default case sensitivity of the
1033 has been introduced to set the default case sensitivity of the
1029 searches. Users can still select either mode at runtime on a
1034 searches. Users can still select either mode at runtime on a
1030 per-search basis.
1035 per-search basis.
1031
1036
1032 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1037 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1033
1038
1034 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1039 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1035 attributes in wildcard searches for subclasses. Modified version
1040 attributes in wildcard searches for subclasses. Modified version
1036 of a patch by Jorgen.
1041 of a patch by Jorgen.
1037
1042
1038 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1043 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1039
1044
1040 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1045 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1041 embedded instances. I added a user_global_ns attribute to the
1046 embedded instances. I added a user_global_ns attribute to the
1042 InteractiveShell class to handle this.
1047 InteractiveShell class to handle this.
1043
1048
1044 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1049 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1045
1050
1046 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1051 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1047 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1052 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1048 (reported under win32, but may happen also in other platforms).
1053 (reported under win32, but may happen also in other platforms).
1049 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1054 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1050
1055
1051 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1056 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1052
1057
1053 * IPython/Magic.py (magic_psearch): new support for wildcard
1058 * IPython/Magic.py (magic_psearch): new support for wildcard
1054 patterns. Now, typing ?a*b will list all names which begin with a
1059 patterns. Now, typing ?a*b will list all names which begin with a
1055 and end in b, for example. The %psearch magic has full
1060 and end in b, for example. The %psearch magic has full
1056 docstrings. Many thanks to JΓΆrgen Stenarson
1061 docstrings. Many thanks to JΓΆrgen Stenarson
1057 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1062 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1058 implementing this functionality.
1063 implementing this functionality.
1059
1064
1060 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1065 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1061
1066
1062 * Manual: fixed long-standing annoyance of double-dashes (as in
1067 * Manual: fixed long-standing annoyance of double-dashes (as in
1063 --prefix=~, for example) being stripped in the HTML version. This
1068 --prefix=~, for example) being stripped in the HTML version. This
1064 is a latex2html bug, but a workaround was provided. Many thanks
1069 is a latex2html bug, but a workaround was provided. Many thanks
1065 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1070 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1066 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1071 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1067 rolling. This seemingly small issue had tripped a number of users
1072 rolling. This seemingly small issue had tripped a number of users
1068 when first installing, so I'm glad to see it gone.
1073 when first installing, so I'm glad to see it gone.
1069
1074
1070 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1075 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1071
1076
1072 * IPython/Extensions/numeric_formats.py: fix missing import,
1077 * IPython/Extensions/numeric_formats.py: fix missing import,
1073 reported by Stephen Walton.
1078 reported by Stephen Walton.
1074
1079
1075 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1080 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1076
1081
1077 * IPython/demo.py: finish demo module, fully documented now.
1082 * IPython/demo.py: finish demo module, fully documented now.
1078
1083
1079 * IPython/genutils.py (file_read): simple little utility to read a
1084 * IPython/genutils.py (file_read): simple little utility to read a
1080 file and ensure it's closed afterwards.
1085 file and ensure it's closed afterwards.
1081
1086
1082 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1087 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1083
1088
1084 * IPython/demo.py (Demo.__init__): added support for individually
1089 * IPython/demo.py (Demo.__init__): added support for individually
1085 tagging blocks for automatic execution.
1090 tagging blocks for automatic execution.
1086
1091
1087 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1092 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1088 syntax-highlighted python sources, requested by John.
1093 syntax-highlighted python sources, requested by John.
1089
1094
1090 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1095 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1091
1096
1092 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1097 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1093 finishing.
1098 finishing.
1094
1099
1095 * IPython/genutils.py (shlex_split): moved from Magic to here,
1100 * IPython/genutils.py (shlex_split): moved from Magic to here,
1096 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1101 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1097
1102
1098 * IPython/demo.py (Demo.__init__): added support for silent
1103 * IPython/demo.py (Demo.__init__): added support for silent
1099 blocks, improved marks as regexps, docstrings written.
1104 blocks, improved marks as regexps, docstrings written.
1100 (Demo.__init__): better docstring, added support for sys.argv.
1105 (Demo.__init__): better docstring, added support for sys.argv.
1101
1106
1102 * IPython/genutils.py (marquee): little utility used by the demo
1107 * IPython/genutils.py (marquee): little utility used by the demo
1103 code, handy in general.
1108 code, handy in general.
1104
1109
1105 * IPython/demo.py (Demo.__init__): new class for interactive
1110 * IPython/demo.py (Demo.__init__): new class for interactive
1106 demos. Not documented yet, I just wrote it in a hurry for
1111 demos. Not documented yet, I just wrote it in a hurry for
1107 scipy'05. Will docstring later.
1112 scipy'05. Will docstring later.
1108
1113
1109 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1114 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1110
1115
1111 * IPython/Shell.py (sigint_handler): Drastic simplification which
1116 * IPython/Shell.py (sigint_handler): Drastic simplification which
1112 also seems to make Ctrl-C work correctly across threads! This is
1117 also seems to make Ctrl-C work correctly across threads! This is
1113 so simple, that I can't beleive I'd missed it before. Needs more
1118 so simple, that I can't beleive I'd missed it before. Needs more
1114 testing, though.
1119 testing, though.
1115 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1120 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1116 like this before...
1121 like this before...
1117
1122
1118 * IPython/genutils.py (get_home_dir): add protection against
1123 * IPython/genutils.py (get_home_dir): add protection against
1119 non-dirs in win32 registry.
1124 non-dirs in win32 registry.
1120
1125
1121 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1126 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1122 bug where dict was mutated while iterating (pysh crash).
1127 bug where dict was mutated while iterating (pysh crash).
1123
1128
1124 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1129 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1125
1130
1126 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1131 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1127 spurious newlines added by this routine. After a report by
1132 spurious newlines added by this routine. After a report by
1128 F. Mantegazza.
1133 F. Mantegazza.
1129
1134
1130 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1135 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1131
1136
1132 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1137 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1133 calls. These were a leftover from the GTK 1.x days, and can cause
1138 calls. These were a leftover from the GTK 1.x days, and can cause
1134 problems in certain cases (after a report by John Hunter).
1139 problems in certain cases (after a report by John Hunter).
1135
1140
1136 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1141 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1137 os.getcwd() fails at init time. Thanks to patch from David Remahl
1142 os.getcwd() fails at init time. Thanks to patch from David Remahl
1138 <chmod007-AT-mac.com>.
1143 <chmod007-AT-mac.com>.
1139 (InteractiveShell.__init__): prevent certain special magics from
1144 (InteractiveShell.__init__): prevent certain special magics from
1140 being shadowed by aliases. Closes
1145 being shadowed by aliases. Closes
1141 http://www.scipy.net/roundup/ipython/issue41.
1146 http://www.scipy.net/roundup/ipython/issue41.
1142
1147
1143 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1148 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1144
1149
1145 * IPython/iplib.py (InteractiveShell.complete): Added new
1150 * IPython/iplib.py (InteractiveShell.complete): Added new
1146 top-level completion method to expose the completion mechanism
1151 top-level completion method to expose the completion mechanism
1147 beyond readline-based environments.
1152 beyond readline-based environments.
1148
1153
1149 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1154 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1150
1155
1151 * tools/ipsvnc (svnversion): fix svnversion capture.
1156 * tools/ipsvnc (svnversion): fix svnversion capture.
1152
1157
1153 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1158 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1154 attribute to self, which was missing. Before, it was set by a
1159 attribute to self, which was missing. Before, it was set by a
1155 routine which in certain cases wasn't being called, so the
1160 routine which in certain cases wasn't being called, so the
1156 instance could end up missing the attribute. This caused a crash.
1161 instance could end up missing the attribute. This caused a crash.
1157 Closes http://www.scipy.net/roundup/ipython/issue40.
1162 Closes http://www.scipy.net/roundup/ipython/issue40.
1158
1163
1159 2005-08-16 Fernando Perez <fperez@colorado.edu>
1164 2005-08-16 Fernando Perez <fperez@colorado.edu>
1160
1165
1161 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1166 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1162 contains non-string attribute. Closes
1167 contains non-string attribute. Closes
1163 http://www.scipy.net/roundup/ipython/issue38.
1168 http://www.scipy.net/roundup/ipython/issue38.
1164
1169
1165 2005-08-14 Fernando Perez <fperez@colorado.edu>
1170 2005-08-14 Fernando Perez <fperez@colorado.edu>
1166
1171
1167 * tools/ipsvnc: Minor improvements, to add changeset info.
1172 * tools/ipsvnc: Minor improvements, to add changeset info.
1168
1173
1169 2005-08-12 Fernando Perez <fperez@colorado.edu>
1174 2005-08-12 Fernando Perez <fperez@colorado.edu>
1170
1175
1171 * IPython/iplib.py (runsource): remove self.code_to_run_src
1176 * IPython/iplib.py (runsource): remove self.code_to_run_src
1172 attribute. I realized this is nothing more than
1177 attribute. I realized this is nothing more than
1173 '\n'.join(self.buffer), and having the same data in two different
1178 '\n'.join(self.buffer), and having the same data in two different
1174 places is just asking for synchronization bugs. This may impact
1179 places is just asking for synchronization bugs. This may impact
1175 people who have custom exception handlers, so I need to warn
1180 people who have custom exception handlers, so I need to warn
1176 ipython-dev about it (F. Mantegazza may use them).
1181 ipython-dev about it (F. Mantegazza may use them).
1177
1182
1178 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1183 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1179
1184
1180 * IPython/genutils.py: fix 2.2 compatibility (generators)
1185 * IPython/genutils.py: fix 2.2 compatibility (generators)
1181
1186
1182 2005-07-18 Fernando Perez <fperez@colorado.edu>
1187 2005-07-18 Fernando Perez <fperez@colorado.edu>
1183
1188
1184 * IPython/genutils.py (get_home_dir): fix to help users with
1189 * IPython/genutils.py (get_home_dir): fix to help users with
1185 invalid $HOME under win32.
1190 invalid $HOME under win32.
1186
1191
1187 2005-07-17 Fernando Perez <fperez@colorado.edu>
1192 2005-07-17 Fernando Perez <fperez@colorado.edu>
1188
1193
1189 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1194 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1190 some old hacks and clean up a bit other routines; code should be
1195 some old hacks and clean up a bit other routines; code should be
1191 simpler and a bit faster.
1196 simpler and a bit faster.
1192
1197
1193 * IPython/iplib.py (interact): removed some last-resort attempts
1198 * IPython/iplib.py (interact): removed some last-resort attempts
1194 to survive broken stdout/stderr. That code was only making it
1199 to survive broken stdout/stderr. That code was only making it
1195 harder to abstract out the i/o (necessary for gui integration),
1200 harder to abstract out the i/o (necessary for gui integration),
1196 and the crashes it could prevent were extremely rare in practice
1201 and the crashes it could prevent were extremely rare in practice
1197 (besides being fully user-induced in a pretty violent manner).
1202 (besides being fully user-induced in a pretty violent manner).
1198
1203
1199 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1204 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1200 Nothing major yet, but the code is simpler to read; this should
1205 Nothing major yet, but the code is simpler to read; this should
1201 make it easier to do more serious modifications in the future.
1206 make it easier to do more serious modifications in the future.
1202
1207
1203 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1208 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1204 which broke in .15 (thanks to a report by Ville).
1209 which broke in .15 (thanks to a report by Ville).
1205
1210
1206 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1211 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1207 be quite correct, I know next to nothing about unicode). This
1212 be quite correct, I know next to nothing about unicode). This
1208 will allow unicode strings to be used in prompts, amongst other
1213 will allow unicode strings to be used in prompts, amongst other
1209 cases. It also will prevent ipython from crashing when unicode
1214 cases. It also will prevent ipython from crashing when unicode
1210 shows up unexpectedly in many places. If ascii encoding fails, we
1215 shows up unexpectedly in many places. If ascii encoding fails, we
1211 assume utf_8. Currently the encoding is not a user-visible
1216 assume utf_8. Currently the encoding is not a user-visible
1212 setting, though it could be made so if there is demand for it.
1217 setting, though it could be made so if there is demand for it.
1213
1218
1214 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1219 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1215
1220
1216 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1221 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1217
1222
1218 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1223 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1219
1224
1220 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1225 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1221 code can work transparently for 2.2/2.3.
1226 code can work transparently for 2.2/2.3.
1222
1227
1223 2005-07-16 Fernando Perez <fperez@colorado.edu>
1228 2005-07-16 Fernando Perez <fperez@colorado.edu>
1224
1229
1225 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1230 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1226 out of the color scheme table used for coloring exception
1231 out of the color scheme table used for coloring exception
1227 tracebacks. This allows user code to add new schemes at runtime.
1232 tracebacks. This allows user code to add new schemes at runtime.
1228 This is a minimally modified version of the patch at
1233 This is a minimally modified version of the patch at
1229 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1234 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1230 for the contribution.
1235 for the contribution.
1231
1236
1232 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1237 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1233 slightly modified version of the patch in
1238 slightly modified version of the patch in
1234 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1239 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1235 to remove the previous try/except solution (which was costlier).
1240 to remove the previous try/except solution (which was costlier).
1236 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1241 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1237
1242
1238 2005-06-08 Fernando Perez <fperez@colorado.edu>
1243 2005-06-08 Fernando Perez <fperez@colorado.edu>
1239
1244
1240 * IPython/iplib.py (write/write_err): Add methods to abstract all
1245 * IPython/iplib.py (write/write_err): Add methods to abstract all
1241 I/O a bit more.
1246 I/O a bit more.
1242
1247
1243 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1248 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1244 warning, reported by Aric Hagberg, fix by JD Hunter.
1249 warning, reported by Aric Hagberg, fix by JD Hunter.
1245
1250
1246 2005-06-02 *** Released version 0.6.15
1251 2005-06-02 *** Released version 0.6.15
1247
1252
1248 2005-06-01 Fernando Perez <fperez@colorado.edu>
1253 2005-06-01 Fernando Perez <fperez@colorado.edu>
1249
1254
1250 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1255 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1251 tab-completion of filenames within open-quoted strings. Note that
1256 tab-completion of filenames within open-quoted strings. Note that
1252 this requires that in ~/.ipython/ipythonrc, users change the
1257 this requires that in ~/.ipython/ipythonrc, users change the
1253 readline delimiters configuration to read:
1258 readline delimiters configuration to read:
1254
1259
1255 readline_remove_delims -/~
1260 readline_remove_delims -/~
1256
1261
1257
1262
1258 2005-05-31 *** Released version 0.6.14
1263 2005-05-31 *** Released version 0.6.14
1259
1264
1260 2005-05-29 Fernando Perez <fperez@colorado.edu>
1265 2005-05-29 Fernando Perez <fperez@colorado.edu>
1261
1266
1262 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1267 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1263 with files not on the filesystem. Reported by Eliyahu Sandler
1268 with files not on the filesystem. Reported by Eliyahu Sandler
1264 <eli@gondolin.net>
1269 <eli@gondolin.net>
1265
1270
1266 2005-05-22 Fernando Perez <fperez@colorado.edu>
1271 2005-05-22 Fernando Perez <fperez@colorado.edu>
1267
1272
1268 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1273 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1269 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1274 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1270
1275
1271 2005-05-19 Fernando Perez <fperez@colorado.edu>
1276 2005-05-19 Fernando Perez <fperez@colorado.edu>
1272
1277
1273 * IPython/iplib.py (safe_execfile): close a file which could be
1278 * IPython/iplib.py (safe_execfile): close a file which could be
1274 left open (causing problems in win32, which locks open files).
1279 left open (causing problems in win32, which locks open files).
1275 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1280 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1276
1281
1277 2005-05-18 Fernando Perez <fperez@colorado.edu>
1282 2005-05-18 Fernando Perez <fperez@colorado.edu>
1278
1283
1279 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1284 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1280 keyword arguments correctly to safe_execfile().
1285 keyword arguments correctly to safe_execfile().
1281
1286
1282 2005-05-13 Fernando Perez <fperez@colorado.edu>
1287 2005-05-13 Fernando Perez <fperez@colorado.edu>
1283
1288
1284 * ipython.1: Added info about Qt to manpage, and threads warning
1289 * ipython.1: Added info about Qt to manpage, and threads warning
1285 to usage page (invoked with --help).
1290 to usage page (invoked with --help).
1286
1291
1287 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1292 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1288 new matcher (it goes at the end of the priority list) to do
1293 new matcher (it goes at the end of the priority list) to do
1289 tab-completion on named function arguments. Submitted by George
1294 tab-completion on named function arguments. Submitted by George
1290 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1295 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1291 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1296 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1292 for more details.
1297 for more details.
1293
1298
1294 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1299 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1295 SystemExit exceptions in the script being run. Thanks to a report
1300 SystemExit exceptions in the script being run. Thanks to a report
1296 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1301 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1297 producing very annoying behavior when running unit tests.
1302 producing very annoying behavior when running unit tests.
1298
1303
1299 2005-05-12 Fernando Perez <fperez@colorado.edu>
1304 2005-05-12 Fernando Perez <fperez@colorado.edu>
1300
1305
1301 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1306 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1302 which I'd broken (again) due to a changed regexp. In the process,
1307 which I'd broken (again) due to a changed regexp. In the process,
1303 added ';' as an escape to auto-quote the whole line without
1308 added ';' as an escape to auto-quote the whole line without
1304 splitting its arguments. Thanks to a report by Jerry McRae
1309 splitting its arguments. Thanks to a report by Jerry McRae
1305 <qrs0xyc02-AT-sneakemail.com>.
1310 <qrs0xyc02-AT-sneakemail.com>.
1306
1311
1307 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1312 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1308 possible crashes caused by a TokenError. Reported by Ed Schofield
1313 possible crashes caused by a TokenError. Reported by Ed Schofield
1309 <schofield-AT-ftw.at>.
1314 <schofield-AT-ftw.at>.
1310
1315
1311 2005-05-06 Fernando Perez <fperez@colorado.edu>
1316 2005-05-06 Fernando Perez <fperez@colorado.edu>
1312
1317
1313 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1318 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1314
1319
1315 2005-04-29 Fernando Perez <fperez@colorado.edu>
1320 2005-04-29 Fernando Perez <fperez@colorado.edu>
1316
1321
1317 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1322 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1318 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1323 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1319 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1324 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1320 which provides support for Qt interactive usage (similar to the
1325 which provides support for Qt interactive usage (similar to the
1321 existing one for WX and GTK). This had been often requested.
1326 existing one for WX and GTK). This had been often requested.
1322
1327
1323 2005-04-14 *** Released version 0.6.13
1328 2005-04-14 *** Released version 0.6.13
1324
1329
1325 2005-04-08 Fernando Perez <fperez@colorado.edu>
1330 2005-04-08 Fernando Perez <fperez@colorado.edu>
1326
1331
1327 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1332 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1328 from _ofind, which gets called on almost every input line. Now,
1333 from _ofind, which gets called on almost every input line. Now,
1329 we only try to get docstrings if they are actually going to be
1334 we only try to get docstrings if they are actually going to be
1330 used (the overhead of fetching unnecessary docstrings can be
1335 used (the overhead of fetching unnecessary docstrings can be
1331 noticeable for certain objects, such as Pyro proxies).
1336 noticeable for certain objects, such as Pyro proxies).
1332
1337
1333 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1338 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1334 for completers. For some reason I had been passing them the state
1339 for completers. For some reason I had been passing them the state
1335 variable, which completers never actually need, and was in
1340 variable, which completers never actually need, and was in
1336 conflict with the rlcompleter API. Custom completers ONLY need to
1341 conflict with the rlcompleter API. Custom completers ONLY need to
1337 take the text parameter.
1342 take the text parameter.
1338
1343
1339 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1344 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1340 work correctly in pysh. I've also moved all the logic which used
1345 work correctly in pysh. I've also moved all the logic which used
1341 to be in pysh.py here, which will prevent problems with future
1346 to be in pysh.py here, which will prevent problems with future
1342 upgrades. However, this time I must warn users to update their
1347 upgrades. However, this time I must warn users to update their
1343 pysh profile to include the line
1348 pysh profile to include the line
1344
1349
1345 import_all IPython.Extensions.InterpreterExec
1350 import_all IPython.Extensions.InterpreterExec
1346
1351
1347 because otherwise things won't work for them. They MUST also
1352 because otherwise things won't work for them. They MUST also
1348 delete pysh.py and the line
1353 delete pysh.py and the line
1349
1354
1350 execfile pysh.py
1355 execfile pysh.py
1351
1356
1352 from their ipythonrc-pysh.
1357 from their ipythonrc-pysh.
1353
1358
1354 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1359 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1355 robust in the face of objects whose dir() returns non-strings
1360 robust in the face of objects whose dir() returns non-strings
1356 (which it shouldn't, but some broken libs like ITK do). Thanks to
1361 (which it shouldn't, but some broken libs like ITK do). Thanks to
1357 a patch by John Hunter (implemented differently, though). Also
1362 a patch by John Hunter (implemented differently, though). Also
1358 minor improvements by using .extend instead of + on lists.
1363 minor improvements by using .extend instead of + on lists.
1359
1364
1360 * pysh.py:
1365 * pysh.py:
1361
1366
1362 2005-04-06 Fernando Perez <fperez@colorado.edu>
1367 2005-04-06 Fernando Perez <fperez@colorado.edu>
1363
1368
1364 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1369 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1365 by default, so that all users benefit from it. Those who don't
1370 by default, so that all users benefit from it. Those who don't
1366 want it can still turn it off.
1371 want it can still turn it off.
1367
1372
1368 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1373 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1369 config file, I'd forgotten about this, so users were getting it
1374 config file, I'd forgotten about this, so users were getting it
1370 off by default.
1375 off by default.
1371
1376
1372 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1377 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1373 consistency. Now magics can be called in multiline statements,
1378 consistency. Now magics can be called in multiline statements,
1374 and python variables can be expanded in magic calls via $var.
1379 and python variables can be expanded in magic calls via $var.
1375 This makes the magic system behave just like aliases or !system
1380 This makes the magic system behave just like aliases or !system
1376 calls.
1381 calls.
1377
1382
1378 2005-03-28 Fernando Perez <fperez@colorado.edu>
1383 2005-03-28 Fernando Perez <fperez@colorado.edu>
1379
1384
1380 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1385 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1381 expensive string additions for building command. Add support for
1386 expensive string additions for building command. Add support for
1382 trailing ';' when autocall is used.
1387 trailing ';' when autocall is used.
1383
1388
1384 2005-03-26 Fernando Perez <fperez@colorado.edu>
1389 2005-03-26 Fernando Perez <fperez@colorado.edu>
1385
1390
1386 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1391 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1387 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1392 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1388 ipython.el robust against prompts with any number of spaces
1393 ipython.el robust against prompts with any number of spaces
1389 (including 0) after the ':' character.
1394 (including 0) after the ':' character.
1390
1395
1391 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1396 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1392 continuation prompt, which misled users to think the line was
1397 continuation prompt, which misled users to think the line was
1393 already indented. Closes debian Bug#300847, reported to me by
1398 already indented. Closes debian Bug#300847, reported to me by
1394 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1399 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1395
1400
1396 2005-03-23 Fernando Perez <fperez@colorado.edu>
1401 2005-03-23 Fernando Perez <fperez@colorado.edu>
1397
1402
1398 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1403 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1399 properly aligned if they have embedded newlines.
1404 properly aligned if they have embedded newlines.
1400
1405
1401 * IPython/iplib.py (runlines): Add a public method to expose
1406 * IPython/iplib.py (runlines): Add a public method to expose
1402 IPython's code execution machinery, so that users can run strings
1407 IPython's code execution machinery, so that users can run strings
1403 as if they had been typed at the prompt interactively.
1408 as if they had been typed at the prompt interactively.
1404 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1409 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1405 methods which can call the system shell, but with python variable
1410 methods which can call the system shell, but with python variable
1406 expansion. The three such methods are: __IPYTHON__.system,
1411 expansion. The three such methods are: __IPYTHON__.system,
1407 .getoutput and .getoutputerror. These need to be documented in a
1412 .getoutput and .getoutputerror. These need to be documented in a
1408 'public API' section (to be written) of the manual.
1413 'public API' section (to be written) of the manual.
1409
1414
1410 2005-03-20 Fernando Perez <fperez@colorado.edu>
1415 2005-03-20 Fernando Perez <fperez@colorado.edu>
1411
1416
1412 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1417 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1413 for custom exception handling. This is quite powerful, and it
1418 for custom exception handling. This is quite powerful, and it
1414 allows for user-installable exception handlers which can trap
1419 allows for user-installable exception handlers which can trap
1415 custom exceptions at runtime and treat them separately from
1420 custom exceptions at runtime and treat them separately from
1416 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1421 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1417 Mantegazza <mantegazza-AT-ill.fr>.
1422 Mantegazza <mantegazza-AT-ill.fr>.
1418 (InteractiveShell.set_custom_completer): public API function to
1423 (InteractiveShell.set_custom_completer): public API function to
1419 add new completers at runtime.
1424 add new completers at runtime.
1420
1425
1421 2005-03-19 Fernando Perez <fperez@colorado.edu>
1426 2005-03-19 Fernando Perez <fperez@colorado.edu>
1422
1427
1423 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1428 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1424 allow objects which provide their docstrings via non-standard
1429 allow objects which provide their docstrings via non-standard
1425 mechanisms (like Pyro proxies) to still be inspected by ipython's
1430 mechanisms (like Pyro proxies) to still be inspected by ipython's
1426 ? system.
1431 ? system.
1427
1432
1428 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1433 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1429 automatic capture system. I tried quite hard to make it work
1434 automatic capture system. I tried quite hard to make it work
1430 reliably, and simply failed. I tried many combinations with the
1435 reliably, and simply failed. I tried many combinations with the
1431 subprocess module, but eventually nothing worked in all needed
1436 subprocess module, but eventually nothing worked in all needed
1432 cases (not blocking stdin for the child, duplicating stdout
1437 cases (not blocking stdin for the child, duplicating stdout
1433 without blocking, etc). The new %sc/%sx still do capture to these
1438 without blocking, etc). The new %sc/%sx still do capture to these
1434 magical list/string objects which make shell use much more
1439 magical list/string objects which make shell use much more
1435 conveninent, so not all is lost.
1440 conveninent, so not all is lost.
1436
1441
1437 XXX - FIX MANUAL for the change above!
1442 XXX - FIX MANUAL for the change above!
1438
1443
1439 (runsource): I copied code.py's runsource() into ipython to modify
1444 (runsource): I copied code.py's runsource() into ipython to modify
1440 it a bit. Now the code object and source to be executed are
1445 it a bit. Now the code object and source to be executed are
1441 stored in ipython. This makes this info accessible to third-party
1446 stored in ipython. This makes this info accessible to third-party
1442 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1447 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1443 Mantegazza <mantegazza-AT-ill.fr>.
1448 Mantegazza <mantegazza-AT-ill.fr>.
1444
1449
1445 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1450 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1446 history-search via readline (like C-p/C-n). I'd wanted this for a
1451 history-search via readline (like C-p/C-n). I'd wanted this for a
1447 long time, but only recently found out how to do it. For users
1452 long time, but only recently found out how to do it. For users
1448 who already have their ipythonrc files made and want this, just
1453 who already have their ipythonrc files made and want this, just
1449 add:
1454 add:
1450
1455
1451 readline_parse_and_bind "\e[A": history-search-backward
1456 readline_parse_and_bind "\e[A": history-search-backward
1452 readline_parse_and_bind "\e[B": history-search-forward
1457 readline_parse_and_bind "\e[B": history-search-forward
1453
1458
1454 2005-03-18 Fernando Perez <fperez@colorado.edu>
1459 2005-03-18 Fernando Perez <fperez@colorado.edu>
1455
1460
1456 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1461 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1457 LSString and SList classes which allow transparent conversions
1462 LSString and SList classes which allow transparent conversions
1458 between list mode and whitespace-separated string.
1463 between list mode and whitespace-separated string.
1459 (magic_r): Fix recursion problem in %r.
1464 (magic_r): Fix recursion problem in %r.
1460
1465
1461 * IPython/genutils.py (LSString): New class to be used for
1466 * IPython/genutils.py (LSString): New class to be used for
1462 automatic storage of the results of all alias/system calls in _o
1467 automatic storage of the results of all alias/system calls in _o
1463 and _e (stdout/err). These provide a .l/.list attribute which
1468 and _e (stdout/err). These provide a .l/.list attribute which
1464 does automatic splitting on newlines. This means that for most
1469 does automatic splitting on newlines. This means that for most
1465 uses, you'll never need to do capturing of output with %sc/%sx
1470 uses, you'll never need to do capturing of output with %sc/%sx
1466 anymore, since ipython keeps this always done for you. Note that
1471 anymore, since ipython keeps this always done for you. Note that
1467 only the LAST results are stored, the _o/e variables are
1472 only the LAST results are stored, the _o/e variables are
1468 overwritten on each call. If you need to save their contents
1473 overwritten on each call. If you need to save their contents
1469 further, simply bind them to any other name.
1474 further, simply bind them to any other name.
1470
1475
1471 2005-03-17 Fernando Perez <fperez@colorado.edu>
1476 2005-03-17 Fernando Perez <fperez@colorado.edu>
1472
1477
1473 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1478 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1474 prompt namespace handling.
1479 prompt namespace handling.
1475
1480
1476 2005-03-16 Fernando Perez <fperez@colorado.edu>
1481 2005-03-16 Fernando Perez <fperez@colorado.edu>
1477
1482
1478 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1483 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1479 classic prompts to be '>>> ' (final space was missing, and it
1484 classic prompts to be '>>> ' (final space was missing, and it
1480 trips the emacs python mode).
1485 trips the emacs python mode).
1481 (BasePrompt.__str__): Added safe support for dynamic prompt
1486 (BasePrompt.__str__): Added safe support for dynamic prompt
1482 strings. Now you can set your prompt string to be '$x', and the
1487 strings. Now you can set your prompt string to be '$x', and the
1483 value of x will be printed from your interactive namespace. The
1488 value of x will be printed from your interactive namespace. The
1484 interpolation syntax includes the full Itpl support, so
1489 interpolation syntax includes the full Itpl support, so
1485 ${foo()+x+bar()} is a valid prompt string now, and the function
1490 ${foo()+x+bar()} is a valid prompt string now, and the function
1486 calls will be made at runtime.
1491 calls will be made at runtime.
1487
1492
1488 2005-03-15 Fernando Perez <fperez@colorado.edu>
1493 2005-03-15 Fernando Perez <fperez@colorado.edu>
1489
1494
1490 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1495 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1491 avoid name clashes in pylab. %hist still works, it just forwards
1496 avoid name clashes in pylab. %hist still works, it just forwards
1492 the call to %history.
1497 the call to %history.
1493
1498
1494 2005-03-02 *** Released version 0.6.12
1499 2005-03-02 *** Released version 0.6.12
1495
1500
1496 2005-03-02 Fernando Perez <fperez@colorado.edu>
1501 2005-03-02 Fernando Perez <fperez@colorado.edu>
1497
1502
1498 * IPython/iplib.py (handle_magic): log magic calls properly as
1503 * IPython/iplib.py (handle_magic): log magic calls properly as
1499 ipmagic() function calls.
1504 ipmagic() function calls.
1500
1505
1501 * IPython/Magic.py (magic_time): Improved %time to support
1506 * IPython/Magic.py (magic_time): Improved %time to support
1502 statements and provide wall-clock as well as CPU time.
1507 statements and provide wall-clock as well as CPU time.
1503
1508
1504 2005-02-27 Fernando Perez <fperez@colorado.edu>
1509 2005-02-27 Fernando Perez <fperez@colorado.edu>
1505
1510
1506 * IPython/hooks.py: New hooks module, to expose user-modifiable
1511 * IPython/hooks.py: New hooks module, to expose user-modifiable
1507 IPython functionality in a clean manner. For now only the editor
1512 IPython functionality in a clean manner. For now only the editor
1508 hook is actually written, and other thigns which I intend to turn
1513 hook is actually written, and other thigns which I intend to turn
1509 into proper hooks aren't yet there. The display and prefilter
1514 into proper hooks aren't yet there. The display and prefilter
1510 stuff, for example, should be hooks. But at least now the
1515 stuff, for example, should be hooks. But at least now the
1511 framework is in place, and the rest can be moved here with more
1516 framework is in place, and the rest can be moved here with more
1512 time later. IPython had had a .hooks variable for a long time for
1517 time later. IPython had had a .hooks variable for a long time for
1513 this purpose, but I'd never actually used it for anything.
1518 this purpose, but I'd never actually used it for anything.
1514
1519
1515 2005-02-26 Fernando Perez <fperez@colorado.edu>
1520 2005-02-26 Fernando Perez <fperez@colorado.edu>
1516
1521
1517 * IPython/ipmaker.py (make_IPython): make the default ipython
1522 * IPython/ipmaker.py (make_IPython): make the default ipython
1518 directory be called _ipython under win32, to follow more the
1523 directory be called _ipython under win32, to follow more the
1519 naming peculiarities of that platform (where buggy software like
1524 naming peculiarities of that platform (where buggy software like
1520 Visual Sourcesafe breaks with .named directories). Reported by
1525 Visual Sourcesafe breaks with .named directories). Reported by
1521 Ville Vainio.
1526 Ville Vainio.
1522
1527
1523 2005-02-23 Fernando Perez <fperez@colorado.edu>
1528 2005-02-23 Fernando Perez <fperez@colorado.edu>
1524
1529
1525 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1530 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1526 auto_aliases for win32 which were causing problems. Users can
1531 auto_aliases for win32 which were causing problems. Users can
1527 define the ones they personally like.
1532 define the ones they personally like.
1528
1533
1529 2005-02-21 Fernando Perez <fperez@colorado.edu>
1534 2005-02-21 Fernando Perez <fperez@colorado.edu>
1530
1535
1531 * IPython/Magic.py (magic_time): new magic to time execution of
1536 * IPython/Magic.py (magic_time): new magic to time execution of
1532 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1537 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1533
1538
1534 2005-02-19 Fernando Perez <fperez@colorado.edu>
1539 2005-02-19 Fernando Perez <fperez@colorado.edu>
1535
1540
1536 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1541 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1537 into keys (for prompts, for example).
1542 into keys (for prompts, for example).
1538
1543
1539 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1544 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1540 prompts in case users want them. This introduces a small behavior
1545 prompts in case users want them. This introduces a small behavior
1541 change: ipython does not automatically add a space to all prompts
1546 change: ipython does not automatically add a space to all prompts
1542 anymore. To get the old prompts with a space, users should add it
1547 anymore. To get the old prompts with a space, users should add it
1543 manually to their ipythonrc file, so for example prompt_in1 should
1548 manually to their ipythonrc file, so for example prompt_in1 should
1544 now read 'In [\#]: ' instead of 'In [\#]:'.
1549 now read 'In [\#]: ' instead of 'In [\#]:'.
1545 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1550 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1546 file) to control left-padding of secondary prompts.
1551 file) to control left-padding of secondary prompts.
1547
1552
1548 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1553 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1549 the profiler can't be imported. Fix for Debian, which removed
1554 the profiler can't be imported. Fix for Debian, which removed
1550 profile.py because of License issues. I applied a slightly
1555 profile.py because of License issues. I applied a slightly
1551 modified version of the original Debian patch at
1556 modified version of the original Debian patch at
1552 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1557 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1553
1558
1554 2005-02-17 Fernando Perez <fperez@colorado.edu>
1559 2005-02-17 Fernando Perez <fperez@colorado.edu>
1555
1560
1556 * IPython/genutils.py (native_line_ends): Fix bug which would
1561 * IPython/genutils.py (native_line_ends): Fix bug which would
1557 cause improper line-ends under win32 b/c I was not opening files
1562 cause improper line-ends under win32 b/c I was not opening files
1558 in binary mode. Bug report and fix thanks to Ville.
1563 in binary mode. Bug report and fix thanks to Ville.
1559
1564
1560 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1565 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1561 trying to catch spurious foo[1] autocalls. My fix actually broke
1566 trying to catch spurious foo[1] autocalls. My fix actually broke
1562 ',/' autoquote/call with explicit escape (bad regexp).
1567 ',/' autoquote/call with explicit escape (bad regexp).
1563
1568
1564 2005-02-15 *** Released version 0.6.11
1569 2005-02-15 *** Released version 0.6.11
1565
1570
1566 2005-02-14 Fernando Perez <fperez@colorado.edu>
1571 2005-02-14 Fernando Perez <fperez@colorado.edu>
1567
1572
1568 * IPython/background_jobs.py: New background job management
1573 * IPython/background_jobs.py: New background job management
1569 subsystem. This is implemented via a new set of classes, and
1574 subsystem. This is implemented via a new set of classes, and
1570 IPython now provides a builtin 'jobs' object for background job
1575 IPython now provides a builtin 'jobs' object for background job
1571 execution. A convenience %bg magic serves as a lightweight
1576 execution. A convenience %bg magic serves as a lightweight
1572 frontend for starting the more common type of calls. This was
1577 frontend for starting the more common type of calls. This was
1573 inspired by discussions with B. Granger and the BackgroundCommand
1578 inspired by discussions with B. Granger and the BackgroundCommand
1574 class described in the book Python Scripting for Computational
1579 class described in the book Python Scripting for Computational
1575 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1580 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1576 (although ultimately no code from this text was used, as IPython's
1581 (although ultimately no code from this text was used, as IPython's
1577 system is a separate implementation).
1582 system is a separate implementation).
1578
1583
1579 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1584 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1580 to control the completion of single/double underscore names
1585 to control the completion of single/double underscore names
1581 separately. As documented in the example ipytonrc file, the
1586 separately. As documented in the example ipytonrc file, the
1582 readline_omit__names variable can now be set to 2, to omit even
1587 readline_omit__names variable can now be set to 2, to omit even
1583 single underscore names. Thanks to a patch by Brian Wong
1588 single underscore names. Thanks to a patch by Brian Wong
1584 <BrianWong-AT-AirgoNetworks.Com>.
1589 <BrianWong-AT-AirgoNetworks.Com>.
1585 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1590 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1586 be autocalled as foo([1]) if foo were callable. A problem for
1591 be autocalled as foo([1]) if foo were callable. A problem for
1587 things which are both callable and implement __getitem__.
1592 things which are both callable and implement __getitem__.
1588 (init_readline): Fix autoindentation for win32. Thanks to a patch
1593 (init_readline): Fix autoindentation for win32. Thanks to a patch
1589 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1594 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1590
1595
1591 2005-02-12 Fernando Perez <fperez@colorado.edu>
1596 2005-02-12 Fernando Perez <fperez@colorado.edu>
1592
1597
1593 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1598 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1594 which I had written long ago to sort out user error messages which
1599 which I had written long ago to sort out user error messages which
1595 may occur during startup. This seemed like a good idea initially,
1600 may occur during startup. This seemed like a good idea initially,
1596 but it has proven a disaster in retrospect. I don't want to
1601 but it has proven a disaster in retrospect. I don't want to
1597 change much code for now, so my fix is to set the internal 'debug'
1602 change much code for now, so my fix is to set the internal 'debug'
1598 flag to true everywhere, whose only job was precisely to control
1603 flag to true everywhere, whose only job was precisely to control
1599 this subsystem. This closes issue 28 (as well as avoiding all
1604 this subsystem. This closes issue 28 (as well as avoiding all
1600 sorts of strange hangups which occur from time to time).
1605 sorts of strange hangups which occur from time to time).
1601
1606
1602 2005-02-07 Fernando Perez <fperez@colorado.edu>
1607 2005-02-07 Fernando Perez <fperez@colorado.edu>
1603
1608
1604 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1609 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1605 previous call produced a syntax error.
1610 previous call produced a syntax error.
1606
1611
1607 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1612 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1608 classes without constructor.
1613 classes without constructor.
1609
1614
1610 2005-02-06 Fernando Perez <fperez@colorado.edu>
1615 2005-02-06 Fernando Perez <fperez@colorado.edu>
1611
1616
1612 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1617 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1613 completions with the results of each matcher, so we return results
1618 completions with the results of each matcher, so we return results
1614 to the user from all namespaces. This breaks with ipython
1619 to the user from all namespaces. This breaks with ipython
1615 tradition, but I think it's a nicer behavior. Now you get all
1620 tradition, but I think it's a nicer behavior. Now you get all
1616 possible completions listed, from all possible namespaces (python,
1621 possible completions listed, from all possible namespaces (python,
1617 filesystem, magics...) After a request by John Hunter
1622 filesystem, magics...) After a request by John Hunter
1618 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1623 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1619
1624
1620 2005-02-05 Fernando Perez <fperez@colorado.edu>
1625 2005-02-05 Fernando Perez <fperez@colorado.edu>
1621
1626
1622 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1627 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1623 the call had quote characters in it (the quotes were stripped).
1628 the call had quote characters in it (the quotes were stripped).
1624
1629
1625 2005-01-31 Fernando Perez <fperez@colorado.edu>
1630 2005-01-31 Fernando Perez <fperez@colorado.edu>
1626
1631
1627 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1632 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1628 Itpl.itpl() to make the code more robust against psyco
1633 Itpl.itpl() to make the code more robust against psyco
1629 optimizations.
1634 optimizations.
1630
1635
1631 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1636 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1632 of causing an exception. Quicker, cleaner.
1637 of causing an exception. Quicker, cleaner.
1633
1638
1634 2005-01-28 Fernando Perez <fperez@colorado.edu>
1639 2005-01-28 Fernando Perez <fperez@colorado.edu>
1635
1640
1636 * scripts/ipython_win_post_install.py (install): hardcode
1641 * scripts/ipython_win_post_install.py (install): hardcode
1637 sys.prefix+'python.exe' as the executable path. It turns out that
1642 sys.prefix+'python.exe' as the executable path. It turns out that
1638 during the post-installation run, sys.executable resolves to the
1643 during the post-installation run, sys.executable resolves to the
1639 name of the binary installer! I should report this as a distutils
1644 name of the binary installer! I should report this as a distutils
1640 bug, I think. I updated the .10 release with this tiny fix, to
1645 bug, I think. I updated the .10 release with this tiny fix, to
1641 avoid annoying the lists further.
1646 avoid annoying the lists further.
1642
1647
1643 2005-01-27 *** Released version 0.6.10
1648 2005-01-27 *** Released version 0.6.10
1644
1649
1645 2005-01-27 Fernando Perez <fperez@colorado.edu>
1650 2005-01-27 Fernando Perez <fperez@colorado.edu>
1646
1651
1647 * IPython/numutils.py (norm): Added 'inf' as optional name for
1652 * IPython/numutils.py (norm): Added 'inf' as optional name for
1648 L-infinity norm, included references to mathworld.com for vector
1653 L-infinity norm, included references to mathworld.com for vector
1649 norm definitions.
1654 norm definitions.
1650 (amin/amax): added amin/amax for array min/max. Similar to what
1655 (amin/amax): added amin/amax for array min/max. Similar to what
1651 pylab ships with after the recent reorganization of names.
1656 pylab ships with after the recent reorganization of names.
1652 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1657 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1653
1658
1654 * ipython.el: committed Alex's recent fixes and improvements.
1659 * ipython.el: committed Alex's recent fixes and improvements.
1655 Tested with python-mode from CVS, and it looks excellent. Since
1660 Tested with python-mode from CVS, and it looks excellent. Since
1656 python-mode hasn't released anything in a while, I'm temporarily
1661 python-mode hasn't released anything in a while, I'm temporarily
1657 putting a copy of today's CVS (v 4.70) of python-mode in:
1662 putting a copy of today's CVS (v 4.70) of python-mode in:
1658 http://ipython.scipy.org/tmp/python-mode.el
1663 http://ipython.scipy.org/tmp/python-mode.el
1659
1664
1660 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1665 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1661 sys.executable for the executable name, instead of assuming it's
1666 sys.executable for the executable name, instead of assuming it's
1662 called 'python.exe' (the post-installer would have produced broken
1667 called 'python.exe' (the post-installer would have produced broken
1663 setups on systems with a differently named python binary).
1668 setups on systems with a differently named python binary).
1664
1669
1665 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1670 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1666 references to os.linesep, to make the code more
1671 references to os.linesep, to make the code more
1667 platform-independent. This is also part of the win32 coloring
1672 platform-independent. This is also part of the win32 coloring
1668 fixes.
1673 fixes.
1669
1674
1670 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1675 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1671 lines, which actually cause coloring bugs because the length of
1676 lines, which actually cause coloring bugs because the length of
1672 the line is very difficult to correctly compute with embedded
1677 the line is very difficult to correctly compute with embedded
1673 escapes. This was the source of all the coloring problems under
1678 escapes. This was the source of all the coloring problems under
1674 Win32. I think that _finally_, Win32 users have a properly
1679 Win32. I think that _finally_, Win32 users have a properly
1675 working ipython in all respects. This would never have happened
1680 working ipython in all respects. This would never have happened
1676 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1681 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1677
1682
1678 2005-01-26 *** Released version 0.6.9
1683 2005-01-26 *** Released version 0.6.9
1679
1684
1680 2005-01-25 Fernando Perez <fperez@colorado.edu>
1685 2005-01-25 Fernando Perez <fperez@colorado.edu>
1681
1686
1682 * setup.py: finally, we have a true Windows installer, thanks to
1687 * setup.py: finally, we have a true Windows installer, thanks to
1683 the excellent work of Viktor Ransmayr
1688 the excellent work of Viktor Ransmayr
1684 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1689 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1685 Windows users. The setup routine is quite a bit cleaner thanks to
1690 Windows users. The setup routine is quite a bit cleaner thanks to
1686 this, and the post-install script uses the proper functions to
1691 this, and the post-install script uses the proper functions to
1687 allow a clean de-installation using the standard Windows Control
1692 allow a clean de-installation using the standard Windows Control
1688 Panel.
1693 Panel.
1689
1694
1690 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1695 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1691 environment variable under all OSes (including win32) if
1696 environment variable under all OSes (including win32) if
1692 available. This will give consistency to win32 users who have set
1697 available. This will give consistency to win32 users who have set
1693 this variable for any reason. If os.environ['HOME'] fails, the
1698 this variable for any reason. If os.environ['HOME'] fails, the
1694 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1699 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1695
1700
1696 2005-01-24 Fernando Perez <fperez@colorado.edu>
1701 2005-01-24 Fernando Perez <fperez@colorado.edu>
1697
1702
1698 * IPython/numutils.py (empty_like): add empty_like(), similar to
1703 * IPython/numutils.py (empty_like): add empty_like(), similar to
1699 zeros_like() but taking advantage of the new empty() Numeric routine.
1704 zeros_like() but taking advantage of the new empty() Numeric routine.
1700
1705
1701 2005-01-23 *** Released version 0.6.8
1706 2005-01-23 *** Released version 0.6.8
1702
1707
1703 2005-01-22 Fernando Perez <fperez@colorado.edu>
1708 2005-01-22 Fernando Perez <fperez@colorado.edu>
1704
1709
1705 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1710 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1706 automatic show() calls. After discussing things with JDH, it
1711 automatic show() calls. After discussing things with JDH, it
1707 turns out there are too many corner cases where this can go wrong.
1712 turns out there are too many corner cases where this can go wrong.
1708 It's best not to try to be 'too smart', and simply have ipython
1713 It's best not to try to be 'too smart', and simply have ipython
1709 reproduce as much as possible the default behavior of a normal
1714 reproduce as much as possible the default behavior of a normal
1710 python shell.
1715 python shell.
1711
1716
1712 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1717 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1713 line-splitting regexp and _prefilter() to avoid calling getattr()
1718 line-splitting regexp and _prefilter() to avoid calling getattr()
1714 on assignments. This closes
1719 on assignments. This closes
1715 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1720 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1716 readline uses getattr(), so a simple <TAB> keypress is still
1721 readline uses getattr(), so a simple <TAB> keypress is still
1717 enough to trigger getattr() calls on an object.
1722 enough to trigger getattr() calls on an object.
1718
1723
1719 2005-01-21 Fernando Perez <fperez@colorado.edu>
1724 2005-01-21 Fernando Perez <fperez@colorado.edu>
1720
1725
1721 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1726 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1722 docstring under pylab so it doesn't mask the original.
1727 docstring under pylab so it doesn't mask the original.
1723
1728
1724 2005-01-21 *** Released version 0.6.7
1729 2005-01-21 *** Released version 0.6.7
1725
1730
1726 2005-01-21 Fernando Perez <fperez@colorado.edu>
1731 2005-01-21 Fernando Perez <fperez@colorado.edu>
1727
1732
1728 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1733 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1729 signal handling for win32 users in multithreaded mode.
1734 signal handling for win32 users in multithreaded mode.
1730
1735
1731 2005-01-17 Fernando Perez <fperez@colorado.edu>
1736 2005-01-17 Fernando Perez <fperez@colorado.edu>
1732
1737
1733 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1738 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1734 instances with no __init__. After a crash report by Norbert Nemec
1739 instances with no __init__. After a crash report by Norbert Nemec
1735 <Norbert-AT-nemec-online.de>.
1740 <Norbert-AT-nemec-online.de>.
1736
1741
1737 2005-01-14 Fernando Perez <fperez@colorado.edu>
1742 2005-01-14 Fernando Perez <fperez@colorado.edu>
1738
1743
1739 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1744 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1740 names for verbose exceptions, when multiple dotted names and the
1745 names for verbose exceptions, when multiple dotted names and the
1741 'parent' object were present on the same line.
1746 'parent' object were present on the same line.
1742
1747
1743 2005-01-11 Fernando Perez <fperez@colorado.edu>
1748 2005-01-11 Fernando Perez <fperez@colorado.edu>
1744
1749
1745 * IPython/genutils.py (flag_calls): new utility to trap and flag
1750 * IPython/genutils.py (flag_calls): new utility to trap and flag
1746 calls in functions. I need it to clean up matplotlib support.
1751 calls in functions. I need it to clean up matplotlib support.
1747 Also removed some deprecated code in genutils.
1752 Also removed some deprecated code in genutils.
1748
1753
1749 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1754 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1750 that matplotlib scripts called with %run, which don't call show()
1755 that matplotlib scripts called with %run, which don't call show()
1751 themselves, still have their plotting windows open.
1756 themselves, still have their plotting windows open.
1752
1757
1753 2005-01-05 Fernando Perez <fperez@colorado.edu>
1758 2005-01-05 Fernando Perez <fperez@colorado.edu>
1754
1759
1755 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1760 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1756 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1761 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1757
1762
1758 2004-12-19 Fernando Perez <fperez@colorado.edu>
1763 2004-12-19 Fernando Perez <fperez@colorado.edu>
1759
1764
1760 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1765 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1761 parent_runcode, which was an eyesore. The same result can be
1766 parent_runcode, which was an eyesore. The same result can be
1762 obtained with Python's regular superclass mechanisms.
1767 obtained with Python's regular superclass mechanisms.
1763
1768
1764 2004-12-17 Fernando Perez <fperez@colorado.edu>
1769 2004-12-17 Fernando Perez <fperez@colorado.edu>
1765
1770
1766 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1771 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1767 reported by Prabhu.
1772 reported by Prabhu.
1768 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1773 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1769 sys.stderr) instead of explicitly calling sys.stderr. This helps
1774 sys.stderr) instead of explicitly calling sys.stderr. This helps
1770 maintain our I/O abstractions clean, for future GUI embeddings.
1775 maintain our I/O abstractions clean, for future GUI embeddings.
1771
1776
1772 * IPython/genutils.py (info): added new utility for sys.stderr
1777 * IPython/genutils.py (info): added new utility for sys.stderr
1773 unified info message handling (thin wrapper around warn()).
1778 unified info message handling (thin wrapper around warn()).
1774
1779
1775 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1780 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1776 composite (dotted) names on verbose exceptions.
1781 composite (dotted) names on verbose exceptions.
1777 (VerboseTB.nullrepr): harden against another kind of errors which
1782 (VerboseTB.nullrepr): harden against another kind of errors which
1778 Python's inspect module can trigger, and which were crashing
1783 Python's inspect module can trigger, and which were crashing
1779 IPython. Thanks to a report by Marco Lombardi
1784 IPython. Thanks to a report by Marco Lombardi
1780 <mlombard-AT-ma010192.hq.eso.org>.
1785 <mlombard-AT-ma010192.hq.eso.org>.
1781
1786
1782 2004-12-13 *** Released version 0.6.6
1787 2004-12-13 *** Released version 0.6.6
1783
1788
1784 2004-12-12 Fernando Perez <fperez@colorado.edu>
1789 2004-12-12 Fernando Perez <fperez@colorado.edu>
1785
1790
1786 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1791 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1787 generated by pygtk upon initialization if it was built without
1792 generated by pygtk upon initialization if it was built without
1788 threads (for matplotlib users). After a crash reported by
1793 threads (for matplotlib users). After a crash reported by
1789 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1794 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1790
1795
1791 * IPython/ipmaker.py (make_IPython): fix small bug in the
1796 * IPython/ipmaker.py (make_IPython): fix small bug in the
1792 import_some parameter for multiple imports.
1797 import_some parameter for multiple imports.
1793
1798
1794 * IPython/iplib.py (ipmagic): simplified the interface of
1799 * IPython/iplib.py (ipmagic): simplified the interface of
1795 ipmagic() to take a single string argument, just as it would be
1800 ipmagic() to take a single string argument, just as it would be
1796 typed at the IPython cmd line.
1801 typed at the IPython cmd line.
1797 (ipalias): Added new ipalias() with an interface identical to
1802 (ipalias): Added new ipalias() with an interface identical to
1798 ipmagic(). This completes exposing a pure python interface to the
1803 ipmagic(). This completes exposing a pure python interface to the
1799 alias and magic system, which can be used in loops or more complex
1804 alias and magic system, which can be used in loops or more complex
1800 code where IPython's automatic line mangling is not active.
1805 code where IPython's automatic line mangling is not active.
1801
1806
1802 * IPython/genutils.py (timing): changed interface of timing to
1807 * IPython/genutils.py (timing): changed interface of timing to
1803 simply run code once, which is the most common case. timings()
1808 simply run code once, which is the most common case. timings()
1804 remains unchanged, for the cases where you want multiple runs.
1809 remains unchanged, for the cases where you want multiple runs.
1805
1810
1806 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1811 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1807 bug where Python2.2 crashes with exec'ing code which does not end
1812 bug where Python2.2 crashes with exec'ing code which does not end
1808 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1813 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1809 before.
1814 before.
1810
1815
1811 2004-12-10 Fernando Perez <fperez@colorado.edu>
1816 2004-12-10 Fernando Perez <fperez@colorado.edu>
1812
1817
1813 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1818 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1814 -t to -T, to accomodate the new -t flag in %run (the %run and
1819 -t to -T, to accomodate the new -t flag in %run (the %run and
1815 %prun options are kind of intermixed, and it's not easy to change
1820 %prun options are kind of intermixed, and it's not easy to change
1816 this with the limitations of python's getopt).
1821 this with the limitations of python's getopt).
1817
1822
1818 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1823 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1819 the execution of scripts. It's not as fine-tuned as timeit.py,
1824 the execution of scripts. It's not as fine-tuned as timeit.py,
1820 but it works from inside ipython (and under 2.2, which lacks
1825 but it works from inside ipython (and under 2.2, which lacks
1821 timeit.py). Optionally a number of runs > 1 can be given for
1826 timeit.py). Optionally a number of runs > 1 can be given for
1822 timing very short-running code.
1827 timing very short-running code.
1823
1828
1824 * IPython/genutils.py (uniq_stable): new routine which returns a
1829 * IPython/genutils.py (uniq_stable): new routine which returns a
1825 list of unique elements in any iterable, but in stable order of
1830 list of unique elements in any iterable, but in stable order of
1826 appearance. I needed this for the ultraTB fixes, and it's a handy
1831 appearance. I needed this for the ultraTB fixes, and it's a handy
1827 utility.
1832 utility.
1828
1833
1829 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1834 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1830 dotted names in Verbose exceptions. This had been broken since
1835 dotted names in Verbose exceptions. This had been broken since
1831 the very start, now x.y will properly be printed in a Verbose
1836 the very start, now x.y will properly be printed in a Verbose
1832 traceback, instead of x being shown and y appearing always as an
1837 traceback, instead of x being shown and y appearing always as an
1833 'undefined global'. Getting this to work was a bit tricky,
1838 'undefined global'. Getting this to work was a bit tricky,
1834 because by default python tokenizers are stateless. Saved by
1839 because by default python tokenizers are stateless. Saved by
1835 python's ability to easily add a bit of state to an arbitrary
1840 python's ability to easily add a bit of state to an arbitrary
1836 function (without needing to build a full-blown callable object).
1841 function (without needing to build a full-blown callable object).
1837
1842
1838 Also big cleanup of this code, which had horrendous runtime
1843 Also big cleanup of this code, which had horrendous runtime
1839 lookups of zillions of attributes for colorization. Moved all
1844 lookups of zillions of attributes for colorization. Moved all
1840 this code into a few templates, which make it cleaner and quicker.
1845 this code into a few templates, which make it cleaner and quicker.
1841
1846
1842 Printout quality was also improved for Verbose exceptions: one
1847 Printout quality was also improved for Verbose exceptions: one
1843 variable per line, and memory addresses are printed (this can be
1848 variable per line, and memory addresses are printed (this can be
1844 quite handy in nasty debugging situations, which is what Verbose
1849 quite handy in nasty debugging situations, which is what Verbose
1845 is for).
1850 is for).
1846
1851
1847 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1852 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1848 the command line as scripts to be loaded by embedded instances.
1853 the command line as scripts to be loaded by embedded instances.
1849 Doing so has the potential for an infinite recursion if there are
1854 Doing so has the potential for an infinite recursion if there are
1850 exceptions thrown in the process. This fixes a strange crash
1855 exceptions thrown in the process. This fixes a strange crash
1851 reported by Philippe MULLER <muller-AT-irit.fr>.
1856 reported by Philippe MULLER <muller-AT-irit.fr>.
1852
1857
1853 2004-12-09 Fernando Perez <fperez@colorado.edu>
1858 2004-12-09 Fernando Perez <fperez@colorado.edu>
1854
1859
1855 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1860 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1856 to reflect new names in matplotlib, which now expose the
1861 to reflect new names in matplotlib, which now expose the
1857 matlab-compatible interface via a pylab module instead of the
1862 matlab-compatible interface via a pylab module instead of the
1858 'matlab' name. The new code is backwards compatible, so users of
1863 'matlab' name. The new code is backwards compatible, so users of
1859 all matplotlib versions are OK. Patch by J. Hunter.
1864 all matplotlib versions are OK. Patch by J. Hunter.
1860
1865
1861 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1866 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1862 of __init__ docstrings for instances (class docstrings are already
1867 of __init__ docstrings for instances (class docstrings are already
1863 automatically printed). Instances with customized docstrings
1868 automatically printed). Instances with customized docstrings
1864 (indep. of the class) are also recognized and all 3 separate
1869 (indep. of the class) are also recognized and all 3 separate
1865 docstrings are printed (instance, class, constructor). After some
1870 docstrings are printed (instance, class, constructor). After some
1866 comments/suggestions by J. Hunter.
1871 comments/suggestions by J. Hunter.
1867
1872
1868 2004-12-05 Fernando Perez <fperez@colorado.edu>
1873 2004-12-05 Fernando Perez <fperez@colorado.edu>
1869
1874
1870 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1875 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1871 warnings when tab-completion fails and triggers an exception.
1876 warnings when tab-completion fails and triggers an exception.
1872
1877
1873 2004-12-03 Fernando Perez <fperez@colorado.edu>
1878 2004-12-03 Fernando Perez <fperez@colorado.edu>
1874
1879
1875 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1880 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1876 be triggered when using 'run -p'. An incorrect option flag was
1881 be triggered when using 'run -p'. An incorrect option flag was
1877 being set ('d' instead of 'D').
1882 being set ('d' instead of 'D').
1878 (manpage): fix missing escaped \- sign.
1883 (manpage): fix missing escaped \- sign.
1879
1884
1880 2004-11-30 *** Released version 0.6.5
1885 2004-11-30 *** Released version 0.6.5
1881
1886
1882 2004-11-30 Fernando Perez <fperez@colorado.edu>
1887 2004-11-30 Fernando Perez <fperez@colorado.edu>
1883
1888
1884 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1889 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1885 setting with -d option.
1890 setting with -d option.
1886
1891
1887 * setup.py (docfiles): Fix problem where the doc glob I was using
1892 * setup.py (docfiles): Fix problem where the doc glob I was using
1888 was COMPLETELY BROKEN. It was giving the right files by pure
1893 was COMPLETELY BROKEN. It was giving the right files by pure
1889 accident, but failed once I tried to include ipython.el. Note:
1894 accident, but failed once I tried to include ipython.el. Note:
1890 glob() does NOT allow you to do exclusion on multiple endings!
1895 glob() does NOT allow you to do exclusion on multiple endings!
1891
1896
1892 2004-11-29 Fernando Perez <fperez@colorado.edu>
1897 2004-11-29 Fernando Perez <fperez@colorado.edu>
1893
1898
1894 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1899 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1895 the manpage as the source. Better formatting & consistency.
1900 the manpage as the source. Better formatting & consistency.
1896
1901
1897 * IPython/Magic.py (magic_run): Added new -d option, to run
1902 * IPython/Magic.py (magic_run): Added new -d option, to run
1898 scripts under the control of the python pdb debugger. Note that
1903 scripts under the control of the python pdb debugger. Note that
1899 this required changing the %prun option -d to -D, to avoid a clash
1904 this required changing the %prun option -d to -D, to avoid a clash
1900 (since %run must pass options to %prun, and getopt is too dumb to
1905 (since %run must pass options to %prun, and getopt is too dumb to
1901 handle options with string values with embedded spaces). Thanks
1906 handle options with string values with embedded spaces). Thanks
1902 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1907 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1903 (magic_who_ls): added type matching to %who and %whos, so that one
1908 (magic_who_ls): added type matching to %who and %whos, so that one
1904 can filter their output to only include variables of certain
1909 can filter their output to only include variables of certain
1905 types. Another suggestion by Matthew.
1910 types. Another suggestion by Matthew.
1906 (magic_whos): Added memory summaries in kb and Mb for arrays.
1911 (magic_whos): Added memory summaries in kb and Mb for arrays.
1907 (magic_who): Improve formatting (break lines every 9 vars).
1912 (magic_who): Improve formatting (break lines every 9 vars).
1908
1913
1909 2004-11-28 Fernando Perez <fperez@colorado.edu>
1914 2004-11-28 Fernando Perez <fperez@colorado.edu>
1910
1915
1911 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1916 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1912 cache when empty lines were present.
1917 cache when empty lines were present.
1913
1918
1914 2004-11-24 Fernando Perez <fperez@colorado.edu>
1919 2004-11-24 Fernando Perez <fperez@colorado.edu>
1915
1920
1916 * IPython/usage.py (__doc__): document the re-activated threading
1921 * IPython/usage.py (__doc__): document the re-activated threading
1917 options for WX and GTK.
1922 options for WX and GTK.
1918
1923
1919 2004-11-23 Fernando Perez <fperez@colorado.edu>
1924 2004-11-23 Fernando Perez <fperez@colorado.edu>
1920
1925
1921 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1926 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1922 the -wthread and -gthread options, along with a new -tk one to try
1927 the -wthread and -gthread options, along with a new -tk one to try
1923 and coordinate Tk threading with wx/gtk. The tk support is very
1928 and coordinate Tk threading with wx/gtk. The tk support is very
1924 platform dependent, since it seems to require Tcl and Tk to be
1929 platform dependent, since it seems to require Tcl and Tk to be
1925 built with threads (Fedora1/2 appears NOT to have it, but in
1930 built with threads (Fedora1/2 appears NOT to have it, but in
1926 Prabhu's Debian boxes it works OK). But even with some Tk
1931 Prabhu's Debian boxes it works OK). But even with some Tk
1927 limitations, this is a great improvement.
1932 limitations, this is a great improvement.
1928
1933
1929 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1934 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1930 info in user prompts. Patch by Prabhu.
1935 info in user prompts. Patch by Prabhu.
1931
1936
1932 2004-11-18 Fernando Perez <fperez@colorado.edu>
1937 2004-11-18 Fernando Perez <fperez@colorado.edu>
1933
1938
1934 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1939 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1935 EOFErrors and bail, to avoid infinite loops if a non-terminating
1940 EOFErrors and bail, to avoid infinite loops if a non-terminating
1936 file is fed into ipython. Patch submitted in issue 19 by user,
1941 file is fed into ipython. Patch submitted in issue 19 by user,
1937 many thanks.
1942 many thanks.
1938
1943
1939 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1944 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1940 autoquote/parens in continuation prompts, which can cause lots of
1945 autoquote/parens in continuation prompts, which can cause lots of
1941 problems. Closes roundup issue 20.
1946 problems. Closes roundup issue 20.
1942
1947
1943 2004-11-17 Fernando Perez <fperez@colorado.edu>
1948 2004-11-17 Fernando Perez <fperez@colorado.edu>
1944
1949
1945 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1950 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1946 reported as debian bug #280505. I'm not sure my local changelog
1951 reported as debian bug #280505. I'm not sure my local changelog
1947 entry has the proper debian format (Jack?).
1952 entry has the proper debian format (Jack?).
1948
1953
1949 2004-11-08 *** Released version 0.6.4
1954 2004-11-08 *** Released version 0.6.4
1950
1955
1951 2004-11-08 Fernando Perez <fperez@colorado.edu>
1956 2004-11-08 Fernando Perez <fperez@colorado.edu>
1952
1957
1953 * IPython/iplib.py (init_readline): Fix exit message for Windows
1958 * IPython/iplib.py (init_readline): Fix exit message for Windows
1954 when readline is active. Thanks to a report by Eric Jones
1959 when readline is active. Thanks to a report by Eric Jones
1955 <eric-AT-enthought.com>.
1960 <eric-AT-enthought.com>.
1956
1961
1957 2004-11-07 Fernando Perez <fperez@colorado.edu>
1962 2004-11-07 Fernando Perez <fperez@colorado.edu>
1958
1963
1959 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1964 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1960 sometimes seen by win2k/cygwin users.
1965 sometimes seen by win2k/cygwin users.
1961
1966
1962 2004-11-06 Fernando Perez <fperez@colorado.edu>
1967 2004-11-06 Fernando Perez <fperez@colorado.edu>
1963
1968
1964 * IPython/iplib.py (interact): Change the handling of %Exit from
1969 * IPython/iplib.py (interact): Change the handling of %Exit from
1965 trying to propagate a SystemExit to an internal ipython flag.
1970 trying to propagate a SystemExit to an internal ipython flag.
1966 This is less elegant than using Python's exception mechanism, but
1971 This is less elegant than using Python's exception mechanism, but
1967 I can't get that to work reliably with threads, so under -pylab
1972 I can't get that to work reliably with threads, so under -pylab
1968 %Exit was hanging IPython. Cross-thread exception handling is
1973 %Exit was hanging IPython. Cross-thread exception handling is
1969 really a bitch. Thaks to a bug report by Stephen Walton
1974 really a bitch. Thaks to a bug report by Stephen Walton
1970 <stephen.walton-AT-csun.edu>.
1975 <stephen.walton-AT-csun.edu>.
1971
1976
1972 2004-11-04 Fernando Perez <fperez@colorado.edu>
1977 2004-11-04 Fernando Perez <fperez@colorado.edu>
1973
1978
1974 * IPython/iplib.py (raw_input_original): store a pointer to the
1979 * IPython/iplib.py (raw_input_original): store a pointer to the
1975 true raw_input to harden against code which can modify it
1980 true raw_input to harden against code which can modify it
1976 (wx.py.PyShell does this and would otherwise crash ipython).
1981 (wx.py.PyShell does this and would otherwise crash ipython).
1977 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1982 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1978
1983
1979 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1984 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1980 Ctrl-C problem, which does not mess up the input line.
1985 Ctrl-C problem, which does not mess up the input line.
1981
1986
1982 2004-11-03 Fernando Perez <fperez@colorado.edu>
1987 2004-11-03 Fernando Perez <fperez@colorado.edu>
1983
1988
1984 * IPython/Release.py: Changed licensing to BSD, in all files.
1989 * IPython/Release.py: Changed licensing to BSD, in all files.
1985 (name): lowercase name for tarball/RPM release.
1990 (name): lowercase name for tarball/RPM release.
1986
1991
1987 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1992 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1988 use throughout ipython.
1993 use throughout ipython.
1989
1994
1990 * IPython/Magic.py (Magic._ofind): Switch to using the new
1995 * IPython/Magic.py (Magic._ofind): Switch to using the new
1991 OInspect.getdoc() function.
1996 OInspect.getdoc() function.
1992
1997
1993 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1998 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1994 of the line currently being canceled via Ctrl-C. It's extremely
1999 of the line currently being canceled via Ctrl-C. It's extremely
1995 ugly, but I don't know how to do it better (the problem is one of
2000 ugly, but I don't know how to do it better (the problem is one of
1996 handling cross-thread exceptions).
2001 handling cross-thread exceptions).
1997
2002
1998 2004-10-28 Fernando Perez <fperez@colorado.edu>
2003 2004-10-28 Fernando Perez <fperez@colorado.edu>
1999
2004
2000 * IPython/Shell.py (signal_handler): add signal handlers to trap
2005 * IPython/Shell.py (signal_handler): add signal handlers to trap
2001 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2006 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2002 report by Francesc Alted.
2007 report by Francesc Alted.
2003
2008
2004 2004-10-21 Fernando Perez <fperez@colorado.edu>
2009 2004-10-21 Fernando Perez <fperez@colorado.edu>
2005
2010
2006 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2011 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2007 to % for pysh syntax extensions.
2012 to % for pysh syntax extensions.
2008
2013
2009 2004-10-09 Fernando Perez <fperez@colorado.edu>
2014 2004-10-09 Fernando Perez <fperez@colorado.edu>
2010
2015
2011 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2016 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2012 arrays to print a more useful summary, without calling str(arr).
2017 arrays to print a more useful summary, without calling str(arr).
2013 This avoids the problem of extremely lengthy computations which
2018 This avoids the problem of extremely lengthy computations which
2014 occur if arr is large, and appear to the user as a system lockup
2019 occur if arr is large, and appear to the user as a system lockup
2015 with 100% cpu activity. After a suggestion by Kristian Sandberg
2020 with 100% cpu activity. After a suggestion by Kristian Sandberg
2016 <Kristian.Sandberg@colorado.edu>.
2021 <Kristian.Sandberg@colorado.edu>.
2017 (Magic.__init__): fix bug in global magic escapes not being
2022 (Magic.__init__): fix bug in global magic escapes not being
2018 correctly set.
2023 correctly set.
2019
2024
2020 2004-10-08 Fernando Perez <fperez@colorado.edu>
2025 2004-10-08 Fernando Perez <fperez@colorado.edu>
2021
2026
2022 * IPython/Magic.py (__license__): change to absolute imports of
2027 * IPython/Magic.py (__license__): change to absolute imports of
2023 ipython's own internal packages, to start adapting to the absolute
2028 ipython's own internal packages, to start adapting to the absolute
2024 import requirement of PEP-328.
2029 import requirement of PEP-328.
2025
2030
2026 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2031 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2027 files, and standardize author/license marks through the Release
2032 files, and standardize author/license marks through the Release
2028 module instead of having per/file stuff (except for files with
2033 module instead of having per/file stuff (except for files with
2029 particular licenses, like the MIT/PSF-licensed codes).
2034 particular licenses, like the MIT/PSF-licensed codes).
2030
2035
2031 * IPython/Debugger.py: remove dead code for python 2.1
2036 * IPython/Debugger.py: remove dead code for python 2.1
2032
2037
2033 2004-10-04 Fernando Perez <fperez@colorado.edu>
2038 2004-10-04 Fernando Perez <fperez@colorado.edu>
2034
2039
2035 * IPython/iplib.py (ipmagic): New function for accessing magics
2040 * IPython/iplib.py (ipmagic): New function for accessing magics
2036 via a normal python function call.
2041 via a normal python function call.
2037
2042
2038 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2043 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2039 from '@' to '%', to accomodate the new @decorator syntax of python
2044 from '@' to '%', to accomodate the new @decorator syntax of python
2040 2.4.
2045 2.4.
2041
2046
2042 2004-09-29 Fernando Perez <fperez@colorado.edu>
2047 2004-09-29 Fernando Perez <fperez@colorado.edu>
2043
2048
2044 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2049 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2045 matplotlib.use to prevent running scripts which try to switch
2050 matplotlib.use to prevent running scripts which try to switch
2046 interactive backends from within ipython. This will just crash
2051 interactive backends from within ipython. This will just crash
2047 the python interpreter, so we can't allow it (but a detailed error
2052 the python interpreter, so we can't allow it (but a detailed error
2048 is given to the user).
2053 is given to the user).
2049
2054
2050 2004-09-28 Fernando Perez <fperez@colorado.edu>
2055 2004-09-28 Fernando Perez <fperez@colorado.edu>
2051
2056
2052 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2057 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2053 matplotlib-related fixes so that using @run with non-matplotlib
2058 matplotlib-related fixes so that using @run with non-matplotlib
2054 scripts doesn't pop up spurious plot windows. This requires
2059 scripts doesn't pop up spurious plot windows. This requires
2055 matplotlib >= 0.63, where I had to make some changes as well.
2060 matplotlib >= 0.63, where I had to make some changes as well.
2056
2061
2057 * IPython/ipmaker.py (make_IPython): update version requirement to
2062 * IPython/ipmaker.py (make_IPython): update version requirement to
2058 python 2.2.
2063 python 2.2.
2059
2064
2060 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2065 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2061 banner arg for embedded customization.
2066 banner arg for embedded customization.
2062
2067
2063 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2068 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2064 explicit uses of __IP as the IPython's instance name. Now things
2069 explicit uses of __IP as the IPython's instance name. Now things
2065 are properly handled via the shell.name value. The actual code
2070 are properly handled via the shell.name value. The actual code
2066 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2071 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2067 is much better than before. I'll clean things completely when the
2072 is much better than before. I'll clean things completely when the
2068 magic stuff gets a real overhaul.
2073 magic stuff gets a real overhaul.
2069
2074
2070 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2075 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2071 minor changes to debian dir.
2076 minor changes to debian dir.
2072
2077
2073 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2078 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2074 pointer to the shell itself in the interactive namespace even when
2079 pointer to the shell itself in the interactive namespace even when
2075 a user-supplied dict is provided. This is needed for embedding
2080 a user-supplied dict is provided. This is needed for embedding
2076 purposes (found by tests with Michel Sanner).
2081 purposes (found by tests with Michel Sanner).
2077
2082
2078 2004-09-27 Fernando Perez <fperez@colorado.edu>
2083 2004-09-27 Fernando Perez <fperez@colorado.edu>
2079
2084
2080 * IPython/UserConfig/ipythonrc: remove []{} from
2085 * IPython/UserConfig/ipythonrc: remove []{} from
2081 readline_remove_delims, so that things like [modname.<TAB> do
2086 readline_remove_delims, so that things like [modname.<TAB> do
2082 proper completion. This disables [].TAB, but that's a less common
2087 proper completion. This disables [].TAB, but that's a less common
2083 case than module names in list comprehensions, for example.
2088 case than module names in list comprehensions, for example.
2084 Thanks to a report by Andrea Riciputi.
2089 Thanks to a report by Andrea Riciputi.
2085
2090
2086 2004-09-09 Fernando Perez <fperez@colorado.edu>
2091 2004-09-09 Fernando Perez <fperez@colorado.edu>
2087
2092
2088 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2093 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2089 blocking problems in win32 and osx. Fix by John.
2094 blocking problems in win32 and osx. Fix by John.
2090
2095
2091 2004-09-08 Fernando Perez <fperez@colorado.edu>
2096 2004-09-08 Fernando Perez <fperez@colorado.edu>
2092
2097
2093 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2098 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2094 for Win32 and OSX. Fix by John Hunter.
2099 for Win32 and OSX. Fix by John Hunter.
2095
2100
2096 2004-08-30 *** Released version 0.6.3
2101 2004-08-30 *** Released version 0.6.3
2097
2102
2098 2004-08-30 Fernando Perez <fperez@colorado.edu>
2103 2004-08-30 Fernando Perez <fperez@colorado.edu>
2099
2104
2100 * setup.py (isfile): Add manpages to list of dependent files to be
2105 * setup.py (isfile): Add manpages to list of dependent files to be
2101 updated.
2106 updated.
2102
2107
2103 2004-08-27 Fernando Perez <fperez@colorado.edu>
2108 2004-08-27 Fernando Perez <fperez@colorado.edu>
2104
2109
2105 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2110 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2106 for now. They don't really work with standalone WX/GTK code
2111 for now. They don't really work with standalone WX/GTK code
2107 (though matplotlib IS working fine with both of those backends).
2112 (though matplotlib IS working fine with both of those backends).
2108 This will neeed much more testing. I disabled most things with
2113 This will neeed much more testing. I disabled most things with
2109 comments, so turning it back on later should be pretty easy.
2114 comments, so turning it back on later should be pretty easy.
2110
2115
2111 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2116 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2112 autocalling of expressions like r'foo', by modifying the line
2117 autocalling of expressions like r'foo', by modifying the line
2113 split regexp. Closes
2118 split regexp. Closes
2114 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2119 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2115 Riley <ipythonbugs-AT-sabi.net>.
2120 Riley <ipythonbugs-AT-sabi.net>.
2116 (InteractiveShell.mainloop): honor --nobanner with banner
2121 (InteractiveShell.mainloop): honor --nobanner with banner
2117 extensions.
2122 extensions.
2118
2123
2119 * IPython/Shell.py: Significant refactoring of all classes, so
2124 * IPython/Shell.py: Significant refactoring of all classes, so
2120 that we can really support ALL matplotlib backends and threading
2125 that we can really support ALL matplotlib backends and threading
2121 models (John spotted a bug with Tk which required this). Now we
2126 models (John spotted a bug with Tk which required this). Now we
2122 should support single-threaded, WX-threads and GTK-threads, both
2127 should support single-threaded, WX-threads and GTK-threads, both
2123 for generic code and for matplotlib.
2128 for generic code and for matplotlib.
2124
2129
2125 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2130 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2126 -pylab, to simplify things for users. Will also remove the pylab
2131 -pylab, to simplify things for users. Will also remove the pylab
2127 profile, since now all of matplotlib configuration is directly
2132 profile, since now all of matplotlib configuration is directly
2128 handled here. This also reduces startup time.
2133 handled here. This also reduces startup time.
2129
2134
2130 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2135 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2131 shell wasn't being correctly called. Also in IPShellWX.
2136 shell wasn't being correctly called. Also in IPShellWX.
2132
2137
2133 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2138 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2134 fine-tune banner.
2139 fine-tune banner.
2135
2140
2136 * IPython/numutils.py (spike): Deprecate these spike functions,
2141 * IPython/numutils.py (spike): Deprecate these spike functions,
2137 delete (long deprecated) gnuplot_exec handler.
2142 delete (long deprecated) gnuplot_exec handler.
2138
2143
2139 2004-08-26 Fernando Perez <fperez@colorado.edu>
2144 2004-08-26 Fernando Perez <fperez@colorado.edu>
2140
2145
2141 * ipython.1: Update for threading options, plus some others which
2146 * ipython.1: Update for threading options, plus some others which
2142 were missing.
2147 were missing.
2143
2148
2144 * IPython/ipmaker.py (__call__): Added -wthread option for
2149 * IPython/ipmaker.py (__call__): Added -wthread option for
2145 wxpython thread handling. Make sure threading options are only
2150 wxpython thread handling. Make sure threading options are only
2146 valid at the command line.
2151 valid at the command line.
2147
2152
2148 * scripts/ipython: moved shell selection into a factory function
2153 * scripts/ipython: moved shell selection into a factory function
2149 in Shell.py, to keep the starter script to a minimum.
2154 in Shell.py, to keep the starter script to a minimum.
2150
2155
2151 2004-08-25 Fernando Perez <fperez@colorado.edu>
2156 2004-08-25 Fernando Perez <fperez@colorado.edu>
2152
2157
2153 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2158 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2154 John. Along with some recent changes he made to matplotlib, the
2159 John. Along with some recent changes he made to matplotlib, the
2155 next versions of both systems should work very well together.
2160 next versions of both systems should work very well together.
2156
2161
2157 2004-08-24 Fernando Perez <fperez@colorado.edu>
2162 2004-08-24 Fernando Perez <fperez@colorado.edu>
2158
2163
2159 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2164 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2160 tried to switch the profiling to using hotshot, but I'm getting
2165 tried to switch the profiling to using hotshot, but I'm getting
2161 strange errors from prof.runctx() there. I may be misreading the
2166 strange errors from prof.runctx() there. I may be misreading the
2162 docs, but it looks weird. For now the profiling code will
2167 docs, but it looks weird. For now the profiling code will
2163 continue to use the standard profiler.
2168 continue to use the standard profiler.
2164
2169
2165 2004-08-23 Fernando Perez <fperez@colorado.edu>
2170 2004-08-23 Fernando Perez <fperez@colorado.edu>
2166
2171
2167 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2172 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2168 threaded shell, by John Hunter. It's not quite ready yet, but
2173 threaded shell, by John Hunter. It's not quite ready yet, but
2169 close.
2174 close.
2170
2175
2171 2004-08-22 Fernando Perez <fperez@colorado.edu>
2176 2004-08-22 Fernando Perez <fperez@colorado.edu>
2172
2177
2173 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2178 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2174 in Magic and ultraTB.
2179 in Magic and ultraTB.
2175
2180
2176 * ipython.1: document threading options in manpage.
2181 * ipython.1: document threading options in manpage.
2177
2182
2178 * scripts/ipython: Changed name of -thread option to -gthread,
2183 * scripts/ipython: Changed name of -thread option to -gthread,
2179 since this is GTK specific. I want to leave the door open for a
2184 since this is GTK specific. I want to leave the door open for a
2180 -wthread option for WX, which will most likely be necessary. This
2185 -wthread option for WX, which will most likely be necessary. This
2181 change affects usage and ipmaker as well.
2186 change affects usage and ipmaker as well.
2182
2187
2183 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2188 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2184 handle the matplotlib shell issues. Code by John Hunter
2189 handle the matplotlib shell issues. Code by John Hunter
2185 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2190 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2186 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2191 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2187 broken (and disabled for end users) for now, but it puts the
2192 broken (and disabled for end users) for now, but it puts the
2188 infrastructure in place.
2193 infrastructure in place.
2189
2194
2190 2004-08-21 Fernando Perez <fperez@colorado.edu>
2195 2004-08-21 Fernando Perez <fperez@colorado.edu>
2191
2196
2192 * ipythonrc-pylab: Add matplotlib support.
2197 * ipythonrc-pylab: Add matplotlib support.
2193
2198
2194 * matplotlib_config.py: new files for matplotlib support, part of
2199 * matplotlib_config.py: new files for matplotlib support, part of
2195 the pylab profile.
2200 the pylab profile.
2196
2201
2197 * IPython/usage.py (__doc__): documented the threading options.
2202 * IPython/usage.py (__doc__): documented the threading options.
2198
2203
2199 2004-08-20 Fernando Perez <fperez@colorado.edu>
2204 2004-08-20 Fernando Perez <fperez@colorado.edu>
2200
2205
2201 * ipython: Modified the main calling routine to handle the -thread
2206 * ipython: Modified the main calling routine to handle the -thread
2202 and -mpthread options. This needs to be done as a top-level hack,
2207 and -mpthread options. This needs to be done as a top-level hack,
2203 because it determines which class to instantiate for IPython
2208 because it determines which class to instantiate for IPython
2204 itself.
2209 itself.
2205
2210
2206 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2211 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2207 classes to support multithreaded GTK operation without blocking,
2212 classes to support multithreaded GTK operation without blocking,
2208 and matplotlib with all backends. This is a lot of still very
2213 and matplotlib with all backends. This is a lot of still very
2209 experimental code, and threads are tricky. So it may still have a
2214 experimental code, and threads are tricky. So it may still have a
2210 few rough edges... This code owes a lot to
2215 few rough edges... This code owes a lot to
2211 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2216 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2212 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2217 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2213 to John Hunter for all the matplotlib work.
2218 to John Hunter for all the matplotlib work.
2214
2219
2215 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2220 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2216 options for gtk thread and matplotlib support.
2221 options for gtk thread and matplotlib support.
2217
2222
2218 2004-08-16 Fernando Perez <fperez@colorado.edu>
2223 2004-08-16 Fernando Perez <fperez@colorado.edu>
2219
2224
2220 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2225 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2221 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2226 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2222 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2227 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2223
2228
2224 2004-08-11 Fernando Perez <fperez@colorado.edu>
2229 2004-08-11 Fernando Perez <fperez@colorado.edu>
2225
2230
2226 * setup.py (isfile): Fix build so documentation gets updated for
2231 * setup.py (isfile): Fix build so documentation gets updated for
2227 rpms (it was only done for .tgz builds).
2232 rpms (it was only done for .tgz builds).
2228
2233
2229 2004-08-10 Fernando Perez <fperez@colorado.edu>
2234 2004-08-10 Fernando Perez <fperez@colorado.edu>
2230
2235
2231 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2236 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2232
2237
2233 * iplib.py : Silence syntax error exceptions in tab-completion.
2238 * iplib.py : Silence syntax error exceptions in tab-completion.
2234
2239
2235 2004-08-05 Fernando Perez <fperez@colorado.edu>
2240 2004-08-05 Fernando Perez <fperez@colorado.edu>
2236
2241
2237 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2242 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2238 'color off' mark for continuation prompts. This was causing long
2243 'color off' mark for continuation prompts. This was causing long
2239 continuation lines to mis-wrap.
2244 continuation lines to mis-wrap.
2240
2245
2241 2004-08-01 Fernando Perez <fperez@colorado.edu>
2246 2004-08-01 Fernando Perez <fperez@colorado.edu>
2242
2247
2243 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2248 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2244 for building ipython to be a parameter. All this is necessary
2249 for building ipython to be a parameter. All this is necessary
2245 right now to have a multithreaded version, but this insane
2250 right now to have a multithreaded version, but this insane
2246 non-design will be cleaned up soon. For now, it's a hack that
2251 non-design will be cleaned up soon. For now, it's a hack that
2247 works.
2252 works.
2248
2253
2249 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2254 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2250 args in various places. No bugs so far, but it's a dangerous
2255 args in various places. No bugs so far, but it's a dangerous
2251 practice.
2256 practice.
2252
2257
2253 2004-07-31 Fernando Perez <fperez@colorado.edu>
2258 2004-07-31 Fernando Perez <fperez@colorado.edu>
2254
2259
2255 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2260 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2256 fix completion of files with dots in their names under most
2261 fix completion of files with dots in their names under most
2257 profiles (pysh was OK because the completion order is different).
2262 profiles (pysh was OK because the completion order is different).
2258
2263
2259 2004-07-27 Fernando Perez <fperez@colorado.edu>
2264 2004-07-27 Fernando Perez <fperez@colorado.edu>
2260
2265
2261 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2266 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2262 keywords manually, b/c the one in keyword.py was removed in python
2267 keywords manually, b/c the one in keyword.py was removed in python
2263 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2268 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2264 This is NOT a bug under python 2.3 and earlier.
2269 This is NOT a bug under python 2.3 and earlier.
2265
2270
2266 2004-07-26 Fernando Perez <fperez@colorado.edu>
2271 2004-07-26 Fernando Perez <fperez@colorado.edu>
2267
2272
2268 * IPython/ultraTB.py (VerboseTB.text): Add another
2273 * IPython/ultraTB.py (VerboseTB.text): Add another
2269 linecache.checkcache() call to try to prevent inspect.py from
2274 linecache.checkcache() call to try to prevent inspect.py from
2270 crashing under python 2.3. I think this fixes
2275 crashing under python 2.3. I think this fixes
2271 http://www.scipy.net/roundup/ipython/issue17.
2276 http://www.scipy.net/roundup/ipython/issue17.
2272
2277
2273 2004-07-26 *** Released version 0.6.2
2278 2004-07-26 *** Released version 0.6.2
2274
2279
2275 2004-07-26 Fernando Perez <fperez@colorado.edu>
2280 2004-07-26 Fernando Perez <fperez@colorado.edu>
2276
2281
2277 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2282 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2278 fail for any number.
2283 fail for any number.
2279 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2284 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2280 empty bookmarks.
2285 empty bookmarks.
2281
2286
2282 2004-07-26 *** Released version 0.6.1
2287 2004-07-26 *** Released version 0.6.1
2283
2288
2284 2004-07-26 Fernando Perez <fperez@colorado.edu>
2289 2004-07-26 Fernando Perez <fperez@colorado.edu>
2285
2290
2286 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2291 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2287
2292
2288 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2293 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2289 escaping '()[]{}' in filenames.
2294 escaping '()[]{}' in filenames.
2290
2295
2291 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2296 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2292 Python 2.2 users who lack a proper shlex.split.
2297 Python 2.2 users who lack a proper shlex.split.
2293
2298
2294 2004-07-19 Fernando Perez <fperez@colorado.edu>
2299 2004-07-19 Fernando Perez <fperez@colorado.edu>
2295
2300
2296 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2301 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2297 for reading readline's init file. I follow the normal chain:
2302 for reading readline's init file. I follow the normal chain:
2298 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2303 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2299 report by Mike Heeter. This closes
2304 report by Mike Heeter. This closes
2300 http://www.scipy.net/roundup/ipython/issue16.
2305 http://www.scipy.net/roundup/ipython/issue16.
2301
2306
2302 2004-07-18 Fernando Perez <fperez@colorado.edu>
2307 2004-07-18 Fernando Perez <fperez@colorado.edu>
2303
2308
2304 * IPython/iplib.py (__init__): Add better handling of '\' under
2309 * IPython/iplib.py (__init__): Add better handling of '\' under
2305 Win32 for filenames. After a patch by Ville.
2310 Win32 for filenames. After a patch by Ville.
2306
2311
2307 2004-07-17 Fernando Perez <fperez@colorado.edu>
2312 2004-07-17 Fernando Perez <fperez@colorado.edu>
2308
2313
2309 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2314 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2310 autocalling would be triggered for 'foo is bar' if foo is
2315 autocalling would be triggered for 'foo is bar' if foo is
2311 callable. I also cleaned up the autocall detection code to use a
2316 callable. I also cleaned up the autocall detection code to use a
2312 regexp, which is faster. Bug reported by Alexander Schmolck.
2317 regexp, which is faster. Bug reported by Alexander Schmolck.
2313
2318
2314 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2319 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2315 '?' in them would confuse the help system. Reported by Alex
2320 '?' in them would confuse the help system. Reported by Alex
2316 Schmolck.
2321 Schmolck.
2317
2322
2318 2004-07-16 Fernando Perez <fperez@colorado.edu>
2323 2004-07-16 Fernando Perez <fperez@colorado.edu>
2319
2324
2320 * IPython/GnuplotInteractive.py (__all__): added plot2.
2325 * IPython/GnuplotInteractive.py (__all__): added plot2.
2321
2326
2322 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2327 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2323 plotting dictionaries, lists or tuples of 1d arrays.
2328 plotting dictionaries, lists or tuples of 1d arrays.
2324
2329
2325 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2330 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2326 optimizations.
2331 optimizations.
2327
2332
2328 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2333 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2329 the information which was there from Janko's original IPP code:
2334 the information which was there from Janko's original IPP code:
2330
2335
2331 03.05.99 20:53 porto.ifm.uni-kiel.de
2336 03.05.99 20:53 porto.ifm.uni-kiel.de
2332 --Started changelog.
2337 --Started changelog.
2333 --make clear do what it say it does
2338 --make clear do what it say it does
2334 --added pretty output of lines from inputcache
2339 --added pretty output of lines from inputcache
2335 --Made Logger a mixin class, simplifies handling of switches
2340 --Made Logger a mixin class, simplifies handling of switches
2336 --Added own completer class. .string<TAB> expands to last history
2341 --Added own completer class. .string<TAB> expands to last history
2337 line which starts with string. The new expansion is also present
2342 line which starts with string. The new expansion is also present
2338 with Ctrl-r from the readline library. But this shows, who this
2343 with Ctrl-r from the readline library. But this shows, who this
2339 can be done for other cases.
2344 can be done for other cases.
2340 --Added convention that all shell functions should accept a
2345 --Added convention that all shell functions should accept a
2341 parameter_string This opens the door for different behaviour for
2346 parameter_string This opens the door for different behaviour for
2342 each function. @cd is a good example of this.
2347 each function. @cd is a good example of this.
2343
2348
2344 04.05.99 12:12 porto.ifm.uni-kiel.de
2349 04.05.99 12:12 porto.ifm.uni-kiel.de
2345 --added logfile rotation
2350 --added logfile rotation
2346 --added new mainloop method which freezes first the namespace
2351 --added new mainloop method which freezes first the namespace
2347
2352
2348 07.05.99 21:24 porto.ifm.uni-kiel.de
2353 07.05.99 21:24 porto.ifm.uni-kiel.de
2349 --added the docreader classes. Now there is a help system.
2354 --added the docreader classes. Now there is a help system.
2350 -This is only a first try. Currently it's not easy to put new
2355 -This is only a first try. Currently it's not easy to put new
2351 stuff in the indices. But this is the way to go. Info would be
2356 stuff in the indices. But this is the way to go. Info would be
2352 better, but HTML is every where and not everybody has an info
2357 better, but HTML is every where and not everybody has an info
2353 system installed and it's not so easy to change html-docs to info.
2358 system installed and it's not so easy to change html-docs to info.
2354 --added global logfile option
2359 --added global logfile option
2355 --there is now a hook for object inspection method pinfo needs to
2360 --there is now a hook for object inspection method pinfo needs to
2356 be provided for this. Can be reached by two '??'.
2361 be provided for this. Can be reached by two '??'.
2357
2362
2358 08.05.99 20:51 porto.ifm.uni-kiel.de
2363 08.05.99 20:51 porto.ifm.uni-kiel.de
2359 --added a README
2364 --added a README
2360 --bug in rc file. Something has changed so functions in the rc
2365 --bug in rc file. Something has changed so functions in the rc
2361 file need to reference the shell and not self. Not clear if it's a
2366 file need to reference the shell and not self. Not clear if it's a
2362 bug or feature.
2367 bug or feature.
2363 --changed rc file for new behavior
2368 --changed rc file for new behavior
2364
2369
2365 2004-07-15 Fernando Perez <fperez@colorado.edu>
2370 2004-07-15 Fernando Perez <fperez@colorado.edu>
2366
2371
2367 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2372 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2368 cache was falling out of sync in bizarre manners when multi-line
2373 cache was falling out of sync in bizarre manners when multi-line
2369 input was present. Minor optimizations and cleanup.
2374 input was present. Minor optimizations and cleanup.
2370
2375
2371 (Logger): Remove old Changelog info for cleanup. This is the
2376 (Logger): Remove old Changelog info for cleanup. This is the
2372 information which was there from Janko's original code:
2377 information which was there from Janko's original code:
2373
2378
2374 Changes to Logger: - made the default log filename a parameter
2379 Changes to Logger: - made the default log filename a parameter
2375
2380
2376 - put a check for lines beginning with !@? in log(). Needed
2381 - put a check for lines beginning with !@? in log(). Needed
2377 (even if the handlers properly log their lines) for mid-session
2382 (even if the handlers properly log their lines) for mid-session
2378 logging activation to work properly. Without this, lines logged
2383 logging activation to work properly. Without this, lines logged
2379 in mid session, which get read from the cache, would end up
2384 in mid session, which get read from the cache, would end up
2380 'bare' (with !@? in the open) in the log. Now they are caught
2385 'bare' (with !@? in the open) in the log. Now they are caught
2381 and prepended with a #.
2386 and prepended with a #.
2382
2387
2383 * IPython/iplib.py (InteractiveShell.init_readline): added check
2388 * IPython/iplib.py (InteractiveShell.init_readline): added check
2384 in case MagicCompleter fails to be defined, so we don't crash.
2389 in case MagicCompleter fails to be defined, so we don't crash.
2385
2390
2386 2004-07-13 Fernando Perez <fperez@colorado.edu>
2391 2004-07-13 Fernando Perez <fperez@colorado.edu>
2387
2392
2388 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2393 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2389 of EPS if the requested filename ends in '.eps'.
2394 of EPS if the requested filename ends in '.eps'.
2390
2395
2391 2004-07-04 Fernando Perez <fperez@colorado.edu>
2396 2004-07-04 Fernando Perez <fperez@colorado.edu>
2392
2397
2393 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2398 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2394 escaping of quotes when calling the shell.
2399 escaping of quotes when calling the shell.
2395
2400
2396 2004-07-02 Fernando Perez <fperez@colorado.edu>
2401 2004-07-02 Fernando Perez <fperez@colorado.edu>
2397
2402
2398 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2403 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2399 gettext not working because we were clobbering '_'. Fixes
2404 gettext not working because we were clobbering '_'. Fixes
2400 http://www.scipy.net/roundup/ipython/issue6.
2405 http://www.scipy.net/roundup/ipython/issue6.
2401
2406
2402 2004-07-01 Fernando Perez <fperez@colorado.edu>
2407 2004-07-01 Fernando Perez <fperez@colorado.edu>
2403
2408
2404 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2409 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2405 into @cd. Patch by Ville.
2410 into @cd. Patch by Ville.
2406
2411
2407 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2412 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2408 new function to store things after ipmaker runs. Patch by Ville.
2413 new function to store things after ipmaker runs. Patch by Ville.
2409 Eventually this will go away once ipmaker is removed and the class
2414 Eventually this will go away once ipmaker is removed and the class
2410 gets cleaned up, but for now it's ok. Key functionality here is
2415 gets cleaned up, but for now it's ok. Key functionality here is
2411 the addition of the persistent storage mechanism, a dict for
2416 the addition of the persistent storage mechanism, a dict for
2412 keeping data across sessions (for now just bookmarks, but more can
2417 keeping data across sessions (for now just bookmarks, but more can
2413 be implemented later).
2418 be implemented later).
2414
2419
2415 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2420 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2416 persistent across sections. Patch by Ville, I modified it
2421 persistent across sections. Patch by Ville, I modified it
2417 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2422 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2418 added a '-l' option to list all bookmarks.
2423 added a '-l' option to list all bookmarks.
2419
2424
2420 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2425 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2421 center for cleanup. Registered with atexit.register(). I moved
2426 center for cleanup. Registered with atexit.register(). I moved
2422 here the old exit_cleanup(). After a patch by Ville.
2427 here the old exit_cleanup(). After a patch by Ville.
2423
2428
2424 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2429 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2425 characters in the hacked shlex_split for python 2.2.
2430 characters in the hacked shlex_split for python 2.2.
2426
2431
2427 * IPython/iplib.py (file_matches): more fixes to filenames with
2432 * IPython/iplib.py (file_matches): more fixes to filenames with
2428 whitespace in them. It's not perfect, but limitations in python's
2433 whitespace in them. It's not perfect, but limitations in python's
2429 readline make it impossible to go further.
2434 readline make it impossible to go further.
2430
2435
2431 2004-06-29 Fernando Perez <fperez@colorado.edu>
2436 2004-06-29 Fernando Perez <fperez@colorado.edu>
2432
2437
2433 * IPython/iplib.py (file_matches): escape whitespace correctly in
2438 * IPython/iplib.py (file_matches): escape whitespace correctly in
2434 filename completions. Bug reported by Ville.
2439 filename completions. Bug reported by Ville.
2435
2440
2436 2004-06-28 Fernando Perez <fperez@colorado.edu>
2441 2004-06-28 Fernando Perez <fperez@colorado.edu>
2437
2442
2438 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2443 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2439 the history file will be called 'history-PROFNAME' (or just
2444 the history file will be called 'history-PROFNAME' (or just
2440 'history' if no profile is loaded). I was getting annoyed at
2445 'history' if no profile is loaded). I was getting annoyed at
2441 getting my Numerical work history clobbered by pysh sessions.
2446 getting my Numerical work history clobbered by pysh sessions.
2442
2447
2443 * IPython/iplib.py (InteractiveShell.__init__): Internal
2448 * IPython/iplib.py (InteractiveShell.__init__): Internal
2444 getoutputerror() function so that we can honor the system_verbose
2449 getoutputerror() function so that we can honor the system_verbose
2445 flag for _all_ system calls. I also added escaping of #
2450 flag for _all_ system calls. I also added escaping of #
2446 characters here to avoid confusing Itpl.
2451 characters here to avoid confusing Itpl.
2447
2452
2448 * IPython/Magic.py (shlex_split): removed call to shell in
2453 * IPython/Magic.py (shlex_split): removed call to shell in
2449 parse_options and replaced it with shlex.split(). The annoying
2454 parse_options and replaced it with shlex.split(). The annoying
2450 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2455 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2451 to backport it from 2.3, with several frail hacks (the shlex
2456 to backport it from 2.3, with several frail hacks (the shlex
2452 module is rather limited in 2.2). Thanks to a suggestion by Ville
2457 module is rather limited in 2.2). Thanks to a suggestion by Ville
2453 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2458 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2454 problem.
2459 problem.
2455
2460
2456 (Magic.magic_system_verbose): new toggle to print the actual
2461 (Magic.magic_system_verbose): new toggle to print the actual
2457 system calls made by ipython. Mainly for debugging purposes.
2462 system calls made by ipython. Mainly for debugging purposes.
2458
2463
2459 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2464 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2460 doesn't support persistence. Reported (and fix suggested) by
2465 doesn't support persistence. Reported (and fix suggested) by
2461 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2466 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2462
2467
2463 2004-06-26 Fernando Perez <fperez@colorado.edu>
2468 2004-06-26 Fernando Perez <fperez@colorado.edu>
2464
2469
2465 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2470 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2466 continue prompts.
2471 continue prompts.
2467
2472
2468 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2473 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2469 function (basically a big docstring) and a few more things here to
2474 function (basically a big docstring) and a few more things here to
2470 speedup startup. pysh.py is now very lightweight. We want because
2475 speedup startup. pysh.py is now very lightweight. We want because
2471 it gets execfile'd, while InterpreterExec gets imported, so
2476 it gets execfile'd, while InterpreterExec gets imported, so
2472 byte-compilation saves time.
2477 byte-compilation saves time.
2473
2478
2474 2004-06-25 Fernando Perez <fperez@colorado.edu>
2479 2004-06-25 Fernando Perez <fperez@colorado.edu>
2475
2480
2476 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2481 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2477 -NUM', which was recently broken.
2482 -NUM', which was recently broken.
2478
2483
2479 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2484 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2480 in multi-line input (but not !!, which doesn't make sense there).
2485 in multi-line input (but not !!, which doesn't make sense there).
2481
2486
2482 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2487 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2483 It's just too useful, and people can turn it off in the less
2488 It's just too useful, and people can turn it off in the less
2484 common cases where it's a problem.
2489 common cases where it's a problem.
2485
2490
2486 2004-06-24 Fernando Perez <fperez@colorado.edu>
2491 2004-06-24 Fernando Perez <fperez@colorado.edu>
2487
2492
2488 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2493 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2489 special syntaxes (like alias calling) is now allied in multi-line
2494 special syntaxes (like alias calling) is now allied in multi-line
2490 input. This is still _very_ experimental, but it's necessary for
2495 input. This is still _very_ experimental, but it's necessary for
2491 efficient shell usage combining python looping syntax with system
2496 efficient shell usage combining python looping syntax with system
2492 calls. For now it's restricted to aliases, I don't think it
2497 calls. For now it's restricted to aliases, I don't think it
2493 really even makes sense to have this for magics.
2498 really even makes sense to have this for magics.
2494
2499
2495 2004-06-23 Fernando Perez <fperez@colorado.edu>
2500 2004-06-23 Fernando Perez <fperez@colorado.edu>
2496
2501
2497 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2502 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2498 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2503 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2499
2504
2500 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2505 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2501 extensions under Windows (after code sent by Gary Bishop). The
2506 extensions under Windows (after code sent by Gary Bishop). The
2502 extensions considered 'executable' are stored in IPython's rc
2507 extensions considered 'executable' are stored in IPython's rc
2503 structure as win_exec_ext.
2508 structure as win_exec_ext.
2504
2509
2505 * IPython/genutils.py (shell): new function, like system() but
2510 * IPython/genutils.py (shell): new function, like system() but
2506 without return value. Very useful for interactive shell work.
2511 without return value. Very useful for interactive shell work.
2507
2512
2508 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2513 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2509 delete aliases.
2514 delete aliases.
2510
2515
2511 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2516 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2512 sure that the alias table doesn't contain python keywords.
2517 sure that the alias table doesn't contain python keywords.
2513
2518
2514 2004-06-21 Fernando Perez <fperez@colorado.edu>
2519 2004-06-21 Fernando Perez <fperez@colorado.edu>
2515
2520
2516 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2521 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2517 non-existent items are found in $PATH. Reported by Thorsten.
2522 non-existent items are found in $PATH. Reported by Thorsten.
2518
2523
2519 2004-06-20 Fernando Perez <fperez@colorado.edu>
2524 2004-06-20 Fernando Perez <fperez@colorado.edu>
2520
2525
2521 * IPython/iplib.py (complete): modified the completer so that the
2526 * IPython/iplib.py (complete): modified the completer so that the
2522 order of priorities can be easily changed at runtime.
2527 order of priorities can be easily changed at runtime.
2523
2528
2524 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2529 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2525 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2530 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2526
2531
2527 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2532 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2528 expand Python variables prepended with $ in all system calls. The
2533 expand Python variables prepended with $ in all system calls. The
2529 same was done to InteractiveShell.handle_shell_escape. Now all
2534 same was done to InteractiveShell.handle_shell_escape. Now all
2530 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2535 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2531 expansion of python variables and expressions according to the
2536 expansion of python variables and expressions according to the
2532 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2537 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2533
2538
2534 Though PEP-215 has been rejected, a similar (but simpler) one
2539 Though PEP-215 has been rejected, a similar (but simpler) one
2535 seems like it will go into Python 2.4, PEP-292 -
2540 seems like it will go into Python 2.4, PEP-292 -
2536 http://www.python.org/peps/pep-0292.html.
2541 http://www.python.org/peps/pep-0292.html.
2537
2542
2538 I'll keep the full syntax of PEP-215, since IPython has since the
2543 I'll keep the full syntax of PEP-215, since IPython has since the
2539 start used Ka-Ping Yee's reference implementation discussed there
2544 start used Ka-Ping Yee's reference implementation discussed there
2540 (Itpl), and I actually like the powerful semantics it offers.
2545 (Itpl), and I actually like the powerful semantics it offers.
2541
2546
2542 In order to access normal shell variables, the $ has to be escaped
2547 In order to access normal shell variables, the $ has to be escaped
2543 via an extra $. For example:
2548 via an extra $. For example:
2544
2549
2545 In [7]: PATH='a python variable'
2550 In [7]: PATH='a python variable'
2546
2551
2547 In [8]: !echo $PATH
2552 In [8]: !echo $PATH
2548 a python variable
2553 a python variable
2549
2554
2550 In [9]: !echo $$PATH
2555 In [9]: !echo $$PATH
2551 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2556 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2552
2557
2553 (Magic.parse_options): escape $ so the shell doesn't evaluate
2558 (Magic.parse_options): escape $ so the shell doesn't evaluate
2554 things prematurely.
2559 things prematurely.
2555
2560
2556 * IPython/iplib.py (InteractiveShell.call_alias): added the
2561 * IPython/iplib.py (InteractiveShell.call_alias): added the
2557 ability for aliases to expand python variables via $.
2562 ability for aliases to expand python variables via $.
2558
2563
2559 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2564 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2560 system, now there's a @rehash/@rehashx pair of magics. These work
2565 system, now there's a @rehash/@rehashx pair of magics. These work
2561 like the csh rehash command, and can be invoked at any time. They
2566 like the csh rehash command, and can be invoked at any time. They
2562 build a table of aliases to everything in the user's $PATH
2567 build a table of aliases to everything in the user's $PATH
2563 (@rehash uses everything, @rehashx is slower but only adds
2568 (@rehash uses everything, @rehashx is slower but only adds
2564 executable files). With this, the pysh.py-based shell profile can
2569 executable files). With this, the pysh.py-based shell profile can
2565 now simply call rehash upon startup, and full access to all
2570 now simply call rehash upon startup, and full access to all
2566 programs in the user's path is obtained.
2571 programs in the user's path is obtained.
2567
2572
2568 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2573 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2569 functionality is now fully in place. I removed the old dynamic
2574 functionality is now fully in place. I removed the old dynamic
2570 code generation based approach, in favor of a much lighter one
2575 code generation based approach, in favor of a much lighter one
2571 based on a simple dict. The advantage is that this allows me to
2576 based on a simple dict. The advantage is that this allows me to
2572 now have thousands of aliases with negligible cost (unthinkable
2577 now have thousands of aliases with negligible cost (unthinkable
2573 with the old system).
2578 with the old system).
2574
2579
2575 2004-06-19 Fernando Perez <fperez@colorado.edu>
2580 2004-06-19 Fernando Perez <fperez@colorado.edu>
2576
2581
2577 * IPython/iplib.py (__init__): extended MagicCompleter class to
2582 * IPython/iplib.py (__init__): extended MagicCompleter class to
2578 also complete (last in priority) on user aliases.
2583 also complete (last in priority) on user aliases.
2579
2584
2580 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2585 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2581 call to eval.
2586 call to eval.
2582 (ItplNS.__init__): Added a new class which functions like Itpl,
2587 (ItplNS.__init__): Added a new class which functions like Itpl,
2583 but allows configuring the namespace for the evaluation to occur
2588 but allows configuring the namespace for the evaluation to occur
2584 in.
2589 in.
2585
2590
2586 2004-06-18 Fernando Perez <fperez@colorado.edu>
2591 2004-06-18 Fernando Perez <fperez@colorado.edu>
2587
2592
2588 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2593 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2589 better message when 'exit' or 'quit' are typed (a common newbie
2594 better message when 'exit' or 'quit' are typed (a common newbie
2590 confusion).
2595 confusion).
2591
2596
2592 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2597 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2593 check for Windows users.
2598 check for Windows users.
2594
2599
2595 * IPython/iplib.py (InteractiveShell.user_setup): removed
2600 * IPython/iplib.py (InteractiveShell.user_setup): removed
2596 disabling of colors for Windows. I'll test at runtime and issue a
2601 disabling of colors for Windows. I'll test at runtime and issue a
2597 warning if Gary's readline isn't found, as to nudge users to
2602 warning if Gary's readline isn't found, as to nudge users to
2598 download it.
2603 download it.
2599
2604
2600 2004-06-16 Fernando Perez <fperez@colorado.edu>
2605 2004-06-16 Fernando Perez <fperez@colorado.edu>
2601
2606
2602 * IPython/genutils.py (Stream.__init__): changed to print errors
2607 * IPython/genutils.py (Stream.__init__): changed to print errors
2603 to sys.stderr. I had a circular dependency here. Now it's
2608 to sys.stderr. I had a circular dependency here. Now it's
2604 possible to run ipython as IDLE's shell (consider this pre-alpha,
2609 possible to run ipython as IDLE's shell (consider this pre-alpha,
2605 since true stdout things end up in the starting terminal instead
2610 since true stdout things end up in the starting terminal instead
2606 of IDLE's out).
2611 of IDLE's out).
2607
2612
2608 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2613 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2609 users who haven't # updated their prompt_in2 definitions. Remove
2614 users who haven't # updated their prompt_in2 definitions. Remove
2610 eventually.
2615 eventually.
2611 (multiple_replace): added credit to original ASPN recipe.
2616 (multiple_replace): added credit to original ASPN recipe.
2612
2617
2613 2004-06-15 Fernando Perez <fperez@colorado.edu>
2618 2004-06-15 Fernando Perez <fperez@colorado.edu>
2614
2619
2615 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2620 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2616 list of auto-defined aliases.
2621 list of auto-defined aliases.
2617
2622
2618 2004-06-13 Fernando Perez <fperez@colorado.edu>
2623 2004-06-13 Fernando Perez <fperez@colorado.edu>
2619
2624
2620 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2625 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2621 install was really requested (so setup.py can be used for other
2626 install was really requested (so setup.py can be used for other
2622 things under Windows).
2627 things under Windows).
2623
2628
2624 2004-06-10 Fernando Perez <fperez@colorado.edu>
2629 2004-06-10 Fernando Perez <fperez@colorado.edu>
2625
2630
2626 * IPython/Logger.py (Logger.create_log): Manually remove any old
2631 * IPython/Logger.py (Logger.create_log): Manually remove any old
2627 backup, since os.remove may fail under Windows. Fixes bug
2632 backup, since os.remove may fail under Windows. Fixes bug
2628 reported by Thorsten.
2633 reported by Thorsten.
2629
2634
2630 2004-06-09 Fernando Perez <fperez@colorado.edu>
2635 2004-06-09 Fernando Perez <fperez@colorado.edu>
2631
2636
2632 * examples/example-embed.py: fixed all references to %n (replaced
2637 * examples/example-embed.py: fixed all references to %n (replaced
2633 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2638 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2634 for all examples and the manual as well.
2639 for all examples and the manual as well.
2635
2640
2636 2004-06-08 Fernando Perez <fperez@colorado.edu>
2641 2004-06-08 Fernando Perez <fperez@colorado.edu>
2637
2642
2638 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2643 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2639 alignment and color management. All 3 prompt subsystems now
2644 alignment and color management. All 3 prompt subsystems now
2640 inherit from BasePrompt.
2645 inherit from BasePrompt.
2641
2646
2642 * tools/release: updates for windows installer build and tag rpms
2647 * tools/release: updates for windows installer build and tag rpms
2643 with python version (since paths are fixed).
2648 with python version (since paths are fixed).
2644
2649
2645 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2650 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2646 which will become eventually obsolete. Also fixed the default
2651 which will become eventually obsolete. Also fixed the default
2647 prompt_in2 to use \D, so at least new users start with the correct
2652 prompt_in2 to use \D, so at least new users start with the correct
2648 defaults.
2653 defaults.
2649 WARNING: Users with existing ipythonrc files will need to apply
2654 WARNING: Users with existing ipythonrc files will need to apply
2650 this fix manually!
2655 this fix manually!
2651
2656
2652 * setup.py: make windows installer (.exe). This is finally the
2657 * setup.py: make windows installer (.exe). This is finally the
2653 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2658 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2654 which I hadn't included because it required Python 2.3 (or recent
2659 which I hadn't included because it required Python 2.3 (or recent
2655 distutils).
2660 distutils).
2656
2661
2657 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2662 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2658 usage of new '\D' escape.
2663 usage of new '\D' escape.
2659
2664
2660 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2665 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2661 lacks os.getuid())
2666 lacks os.getuid())
2662 (CachedOutput.set_colors): Added the ability to turn coloring
2667 (CachedOutput.set_colors): Added the ability to turn coloring
2663 on/off with @colors even for manually defined prompt colors. It
2668 on/off with @colors even for manually defined prompt colors. It
2664 uses a nasty global, but it works safely and via the generic color
2669 uses a nasty global, but it works safely and via the generic color
2665 handling mechanism.
2670 handling mechanism.
2666 (Prompt2.__init__): Introduced new escape '\D' for continuation
2671 (Prompt2.__init__): Introduced new escape '\D' for continuation
2667 prompts. It represents the counter ('\#') as dots.
2672 prompts. It represents the counter ('\#') as dots.
2668 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2673 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2669 need to update their ipythonrc files and replace '%n' with '\D' in
2674 need to update their ipythonrc files and replace '%n' with '\D' in
2670 their prompt_in2 settings everywhere. Sorry, but there's
2675 their prompt_in2 settings everywhere. Sorry, but there's
2671 otherwise no clean way to get all prompts to properly align. The
2676 otherwise no clean way to get all prompts to properly align. The
2672 ipythonrc shipped with IPython has been updated.
2677 ipythonrc shipped with IPython has been updated.
2673
2678
2674 2004-06-07 Fernando Perez <fperez@colorado.edu>
2679 2004-06-07 Fernando Perez <fperez@colorado.edu>
2675
2680
2676 * setup.py (isfile): Pass local_icons option to latex2html, so the
2681 * setup.py (isfile): Pass local_icons option to latex2html, so the
2677 resulting HTML file is self-contained. Thanks to
2682 resulting HTML file is self-contained. Thanks to
2678 dryice-AT-liu.com.cn for the tip.
2683 dryice-AT-liu.com.cn for the tip.
2679
2684
2680 * pysh.py: I created a new profile 'shell', which implements a
2685 * pysh.py: I created a new profile 'shell', which implements a
2681 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2686 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2682 system shell, nor will it become one anytime soon. It's mainly
2687 system shell, nor will it become one anytime soon. It's mainly
2683 meant to illustrate the use of the new flexible bash-like prompts.
2688 meant to illustrate the use of the new flexible bash-like prompts.
2684 I guess it could be used by hardy souls for true shell management,
2689 I guess it could be used by hardy souls for true shell management,
2685 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2690 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2686 profile. This uses the InterpreterExec extension provided by
2691 profile. This uses the InterpreterExec extension provided by
2687 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2692 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2688
2693
2689 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2694 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2690 auto-align itself with the length of the previous input prompt
2695 auto-align itself with the length of the previous input prompt
2691 (taking into account the invisible color escapes).
2696 (taking into account the invisible color escapes).
2692 (CachedOutput.__init__): Large restructuring of this class. Now
2697 (CachedOutput.__init__): Large restructuring of this class. Now
2693 all three prompts (primary1, primary2, output) are proper objects,
2698 all three prompts (primary1, primary2, output) are proper objects,
2694 managed by the 'parent' CachedOutput class. The code is still a
2699 managed by the 'parent' CachedOutput class. The code is still a
2695 bit hackish (all prompts share state via a pointer to the cache),
2700 bit hackish (all prompts share state via a pointer to the cache),
2696 but it's overall far cleaner than before.
2701 but it's overall far cleaner than before.
2697
2702
2698 * IPython/genutils.py (getoutputerror): modified to add verbose,
2703 * IPython/genutils.py (getoutputerror): modified to add verbose,
2699 debug and header options. This makes the interface of all getout*
2704 debug and header options. This makes the interface of all getout*
2700 functions uniform.
2705 functions uniform.
2701 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2706 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2702
2707
2703 * IPython/Magic.py (Magic.default_option): added a function to
2708 * IPython/Magic.py (Magic.default_option): added a function to
2704 allow registering default options for any magic command. This
2709 allow registering default options for any magic command. This
2705 makes it easy to have profiles which customize the magics globally
2710 makes it easy to have profiles which customize the magics globally
2706 for a certain use. The values set through this function are
2711 for a certain use. The values set through this function are
2707 picked up by the parse_options() method, which all magics should
2712 picked up by the parse_options() method, which all magics should
2708 use to parse their options.
2713 use to parse their options.
2709
2714
2710 * IPython/genutils.py (warn): modified the warnings framework to
2715 * IPython/genutils.py (warn): modified the warnings framework to
2711 use the Term I/O class. I'm trying to slowly unify all of
2716 use the Term I/O class. I'm trying to slowly unify all of
2712 IPython's I/O operations to pass through Term.
2717 IPython's I/O operations to pass through Term.
2713
2718
2714 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2719 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2715 the secondary prompt to correctly match the length of the primary
2720 the secondary prompt to correctly match the length of the primary
2716 one for any prompt. Now multi-line code will properly line up
2721 one for any prompt. Now multi-line code will properly line up
2717 even for path dependent prompts, such as the new ones available
2722 even for path dependent prompts, such as the new ones available
2718 via the prompt_specials.
2723 via the prompt_specials.
2719
2724
2720 2004-06-06 Fernando Perez <fperez@colorado.edu>
2725 2004-06-06 Fernando Perez <fperez@colorado.edu>
2721
2726
2722 * IPython/Prompts.py (prompt_specials): Added the ability to have
2727 * IPython/Prompts.py (prompt_specials): Added the ability to have
2723 bash-like special sequences in the prompts, which get
2728 bash-like special sequences in the prompts, which get
2724 automatically expanded. Things like hostname, current working
2729 automatically expanded. Things like hostname, current working
2725 directory and username are implemented already, but it's easy to
2730 directory and username are implemented already, but it's easy to
2726 add more in the future. Thanks to a patch by W.J. van der Laan
2731 add more in the future. Thanks to a patch by W.J. van der Laan
2727 <gnufnork-AT-hetdigitalegat.nl>
2732 <gnufnork-AT-hetdigitalegat.nl>
2728 (prompt_specials): Added color support for prompt strings, so
2733 (prompt_specials): Added color support for prompt strings, so
2729 users can define arbitrary color setups for their prompts.
2734 users can define arbitrary color setups for their prompts.
2730
2735
2731 2004-06-05 Fernando Perez <fperez@colorado.edu>
2736 2004-06-05 Fernando Perez <fperez@colorado.edu>
2732
2737
2733 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2738 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2734 code to load Gary Bishop's readline and configure it
2739 code to load Gary Bishop's readline and configure it
2735 automatically. Thanks to Gary for help on this.
2740 automatically. Thanks to Gary for help on this.
2736
2741
2737 2004-06-01 Fernando Perez <fperez@colorado.edu>
2742 2004-06-01 Fernando Perez <fperez@colorado.edu>
2738
2743
2739 * IPython/Logger.py (Logger.create_log): fix bug for logging
2744 * IPython/Logger.py (Logger.create_log): fix bug for logging
2740 with no filename (previous fix was incomplete).
2745 with no filename (previous fix was incomplete).
2741
2746
2742 2004-05-25 Fernando Perez <fperez@colorado.edu>
2747 2004-05-25 Fernando Perez <fperez@colorado.edu>
2743
2748
2744 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2749 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2745 parens would get passed to the shell.
2750 parens would get passed to the shell.
2746
2751
2747 2004-05-20 Fernando Perez <fperez@colorado.edu>
2752 2004-05-20 Fernando Perez <fperez@colorado.edu>
2748
2753
2749 * IPython/Magic.py (Magic.magic_prun): changed default profile
2754 * IPython/Magic.py (Magic.magic_prun): changed default profile
2750 sort order to 'time' (the more common profiling need).
2755 sort order to 'time' (the more common profiling need).
2751
2756
2752 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2757 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2753 so that source code shown is guaranteed in sync with the file on
2758 so that source code shown is guaranteed in sync with the file on
2754 disk (also changed in psource). Similar fix to the one for
2759 disk (also changed in psource). Similar fix to the one for
2755 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2760 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2756 <yann.ledu-AT-noos.fr>.
2761 <yann.ledu-AT-noos.fr>.
2757
2762
2758 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2763 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2759 with a single option would not be correctly parsed. Closes
2764 with a single option would not be correctly parsed. Closes
2760 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2765 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2761 introduced in 0.6.0 (on 2004-05-06).
2766 introduced in 0.6.0 (on 2004-05-06).
2762
2767
2763 2004-05-13 *** Released version 0.6.0
2768 2004-05-13 *** Released version 0.6.0
2764
2769
2765 2004-05-13 Fernando Perez <fperez@colorado.edu>
2770 2004-05-13 Fernando Perez <fperez@colorado.edu>
2766
2771
2767 * debian/: Added debian/ directory to CVS, so that debian support
2772 * debian/: Added debian/ directory to CVS, so that debian support
2768 is publicly accessible. The debian package is maintained by Jack
2773 is publicly accessible. The debian package is maintained by Jack
2769 Moffit <jack-AT-xiph.org>.
2774 Moffit <jack-AT-xiph.org>.
2770
2775
2771 * Documentation: included the notes about an ipython-based system
2776 * Documentation: included the notes about an ipython-based system
2772 shell (the hypothetical 'pysh') into the new_design.pdf document,
2777 shell (the hypothetical 'pysh') into the new_design.pdf document,
2773 so that these ideas get distributed to users along with the
2778 so that these ideas get distributed to users along with the
2774 official documentation.
2779 official documentation.
2775
2780
2776 2004-05-10 Fernando Perez <fperez@colorado.edu>
2781 2004-05-10 Fernando Perez <fperez@colorado.edu>
2777
2782
2778 * IPython/Logger.py (Logger.create_log): fix recently introduced
2783 * IPython/Logger.py (Logger.create_log): fix recently introduced
2779 bug (misindented line) where logstart would fail when not given an
2784 bug (misindented line) where logstart would fail when not given an
2780 explicit filename.
2785 explicit filename.
2781
2786
2782 2004-05-09 Fernando Perez <fperez@colorado.edu>
2787 2004-05-09 Fernando Perez <fperez@colorado.edu>
2783
2788
2784 * IPython/Magic.py (Magic.parse_options): skip system call when
2789 * IPython/Magic.py (Magic.parse_options): skip system call when
2785 there are no options to look for. Faster, cleaner for the common
2790 there are no options to look for. Faster, cleaner for the common
2786 case.
2791 case.
2787
2792
2788 * Documentation: many updates to the manual: describing Windows
2793 * Documentation: many updates to the manual: describing Windows
2789 support better, Gnuplot updates, credits, misc small stuff. Also
2794 support better, Gnuplot updates, credits, misc small stuff. Also
2790 updated the new_design doc a bit.
2795 updated the new_design doc a bit.
2791
2796
2792 2004-05-06 *** Released version 0.6.0.rc1
2797 2004-05-06 *** Released version 0.6.0.rc1
2793
2798
2794 2004-05-06 Fernando Perez <fperez@colorado.edu>
2799 2004-05-06 Fernando Perez <fperez@colorado.edu>
2795
2800
2796 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2801 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2797 operations to use the vastly more efficient list/''.join() method.
2802 operations to use the vastly more efficient list/''.join() method.
2798 (FormattedTB.text): Fix
2803 (FormattedTB.text): Fix
2799 http://www.scipy.net/roundup/ipython/issue12 - exception source
2804 http://www.scipy.net/roundup/ipython/issue12 - exception source
2800 extract not updated after reload. Thanks to Mike Salib
2805 extract not updated after reload. Thanks to Mike Salib
2801 <msalib-AT-mit.edu> for pinning the source of the problem.
2806 <msalib-AT-mit.edu> for pinning the source of the problem.
2802 Fortunately, the solution works inside ipython and doesn't require
2807 Fortunately, the solution works inside ipython and doesn't require
2803 any changes to python proper.
2808 any changes to python proper.
2804
2809
2805 * IPython/Magic.py (Magic.parse_options): Improved to process the
2810 * IPython/Magic.py (Magic.parse_options): Improved to process the
2806 argument list as a true shell would (by actually using the
2811 argument list as a true shell would (by actually using the
2807 underlying system shell). This way, all @magics automatically get
2812 underlying system shell). This way, all @magics automatically get
2808 shell expansion for variables. Thanks to a comment by Alex
2813 shell expansion for variables. Thanks to a comment by Alex
2809 Schmolck.
2814 Schmolck.
2810
2815
2811 2004-04-04 Fernando Perez <fperez@colorado.edu>
2816 2004-04-04 Fernando Perez <fperez@colorado.edu>
2812
2817
2813 * IPython/iplib.py (InteractiveShell.interact): Added a special
2818 * IPython/iplib.py (InteractiveShell.interact): Added a special
2814 trap for a debugger quit exception, which is basically impossible
2819 trap for a debugger quit exception, which is basically impossible
2815 to handle by normal mechanisms, given what pdb does to the stack.
2820 to handle by normal mechanisms, given what pdb does to the stack.
2816 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2821 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2817
2822
2818 2004-04-03 Fernando Perez <fperez@colorado.edu>
2823 2004-04-03 Fernando Perez <fperez@colorado.edu>
2819
2824
2820 * IPython/genutils.py (Term): Standardized the names of the Term
2825 * IPython/genutils.py (Term): Standardized the names of the Term
2821 class streams to cin/cout/cerr, following C++ naming conventions
2826 class streams to cin/cout/cerr, following C++ naming conventions
2822 (I can't use in/out/err because 'in' is not a valid attribute
2827 (I can't use in/out/err because 'in' is not a valid attribute
2823 name).
2828 name).
2824
2829
2825 * IPython/iplib.py (InteractiveShell.interact): don't increment
2830 * IPython/iplib.py (InteractiveShell.interact): don't increment
2826 the prompt if there's no user input. By Daniel 'Dang' Griffith
2831 the prompt if there's no user input. By Daniel 'Dang' Griffith
2827 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2832 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2828 Francois Pinard.
2833 Francois Pinard.
2829
2834
2830 2004-04-02 Fernando Perez <fperez@colorado.edu>
2835 2004-04-02 Fernando Perez <fperez@colorado.edu>
2831
2836
2832 * IPython/genutils.py (Stream.__init__): Modified to survive at
2837 * IPython/genutils.py (Stream.__init__): Modified to survive at
2833 least importing in contexts where stdin/out/err aren't true file
2838 least importing in contexts where stdin/out/err aren't true file
2834 objects, such as PyCrust (they lack fileno() and mode). However,
2839 objects, such as PyCrust (they lack fileno() and mode). However,
2835 the recovery facilities which rely on these things existing will
2840 the recovery facilities which rely on these things existing will
2836 not work.
2841 not work.
2837
2842
2838 2004-04-01 Fernando Perez <fperez@colorado.edu>
2843 2004-04-01 Fernando Perez <fperez@colorado.edu>
2839
2844
2840 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2845 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2841 use the new getoutputerror() function, so it properly
2846 use the new getoutputerror() function, so it properly
2842 distinguishes stdout/err.
2847 distinguishes stdout/err.
2843
2848
2844 * IPython/genutils.py (getoutputerror): added a function to
2849 * IPython/genutils.py (getoutputerror): added a function to
2845 capture separately the standard output and error of a command.
2850 capture separately the standard output and error of a command.
2846 After a comment from dang on the mailing lists. This code is
2851 After a comment from dang on the mailing lists. This code is
2847 basically a modified version of commands.getstatusoutput(), from
2852 basically a modified version of commands.getstatusoutput(), from
2848 the standard library.
2853 the standard library.
2849
2854
2850 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2855 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2851 '!!' as a special syntax (shorthand) to access @sx.
2856 '!!' as a special syntax (shorthand) to access @sx.
2852
2857
2853 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2858 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2854 command and return its output as a list split on '\n'.
2859 command and return its output as a list split on '\n'.
2855
2860
2856 2004-03-31 Fernando Perez <fperez@colorado.edu>
2861 2004-03-31 Fernando Perez <fperez@colorado.edu>
2857
2862
2858 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2863 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2859 method to dictionaries used as FakeModule instances if they lack
2864 method to dictionaries used as FakeModule instances if they lack
2860 it. At least pydoc in python2.3 breaks for runtime-defined
2865 it. At least pydoc in python2.3 breaks for runtime-defined
2861 functions without this hack. At some point I need to _really_
2866 functions without this hack. At some point I need to _really_
2862 understand what FakeModule is doing, because it's a gross hack.
2867 understand what FakeModule is doing, because it's a gross hack.
2863 But it solves Arnd's problem for now...
2868 But it solves Arnd's problem for now...
2864
2869
2865 2004-02-27 Fernando Perez <fperez@colorado.edu>
2870 2004-02-27 Fernando Perez <fperez@colorado.edu>
2866
2871
2867 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2872 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2868 mode would behave erratically. Also increased the number of
2873 mode would behave erratically. Also increased the number of
2869 possible logs in rotate mod to 999. Thanks to Rod Holland
2874 possible logs in rotate mod to 999. Thanks to Rod Holland
2870 <rhh@StructureLABS.com> for the report and fixes.
2875 <rhh@StructureLABS.com> for the report and fixes.
2871
2876
2872 2004-02-26 Fernando Perez <fperez@colorado.edu>
2877 2004-02-26 Fernando Perez <fperez@colorado.edu>
2873
2878
2874 * IPython/genutils.py (page): Check that the curses module really
2879 * IPython/genutils.py (page): Check that the curses module really
2875 has the initscr attribute before trying to use it. For some
2880 has the initscr attribute before trying to use it. For some
2876 reason, the Solaris curses module is missing this. I think this
2881 reason, the Solaris curses module is missing this. I think this
2877 should be considered a Solaris python bug, but I'm not sure.
2882 should be considered a Solaris python bug, but I'm not sure.
2878
2883
2879 2004-01-17 Fernando Perez <fperez@colorado.edu>
2884 2004-01-17 Fernando Perez <fperez@colorado.edu>
2880
2885
2881 * IPython/genutils.py (Stream.__init__): Changes to try to make
2886 * IPython/genutils.py (Stream.__init__): Changes to try to make
2882 ipython robust against stdin/out/err being closed by the user.
2887 ipython robust against stdin/out/err being closed by the user.
2883 This is 'user error' (and blocks a normal python session, at least
2888 This is 'user error' (and blocks a normal python session, at least
2884 the stdout case). However, Ipython should be able to survive such
2889 the stdout case). However, Ipython should be able to survive such
2885 instances of abuse as gracefully as possible. To simplify the
2890 instances of abuse as gracefully as possible. To simplify the
2886 coding and maintain compatibility with Gary Bishop's Term
2891 coding and maintain compatibility with Gary Bishop's Term
2887 contributions, I've made use of classmethods for this. I think
2892 contributions, I've made use of classmethods for this. I think
2888 this introduces a dependency on python 2.2.
2893 this introduces a dependency on python 2.2.
2889
2894
2890 2004-01-13 Fernando Perez <fperez@colorado.edu>
2895 2004-01-13 Fernando Perez <fperez@colorado.edu>
2891
2896
2892 * IPython/numutils.py (exp_safe): simplified the code a bit and
2897 * IPython/numutils.py (exp_safe): simplified the code a bit and
2893 removed the need for importing the kinds module altogether.
2898 removed the need for importing the kinds module altogether.
2894
2899
2895 2004-01-06 Fernando Perez <fperez@colorado.edu>
2900 2004-01-06 Fernando Perez <fperez@colorado.edu>
2896
2901
2897 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2902 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2898 a magic function instead, after some community feedback. No
2903 a magic function instead, after some community feedback. No
2899 special syntax will exist for it, but its name is deliberately
2904 special syntax will exist for it, but its name is deliberately
2900 very short.
2905 very short.
2901
2906
2902 2003-12-20 Fernando Perez <fperez@colorado.edu>
2907 2003-12-20 Fernando Perez <fperez@colorado.edu>
2903
2908
2904 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2909 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2905 new functionality, to automagically assign the result of a shell
2910 new functionality, to automagically assign the result of a shell
2906 command to a variable. I'll solicit some community feedback on
2911 command to a variable. I'll solicit some community feedback on
2907 this before making it permanent.
2912 this before making it permanent.
2908
2913
2909 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2914 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2910 requested about callables for which inspect couldn't obtain a
2915 requested about callables for which inspect couldn't obtain a
2911 proper argspec. Thanks to a crash report sent by Etienne
2916 proper argspec. Thanks to a crash report sent by Etienne
2912 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2917 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2913
2918
2914 2003-12-09 Fernando Perez <fperez@colorado.edu>
2919 2003-12-09 Fernando Perez <fperez@colorado.edu>
2915
2920
2916 * IPython/genutils.py (page): patch for the pager to work across
2921 * IPython/genutils.py (page): patch for the pager to work across
2917 various versions of Windows. By Gary Bishop.
2922 various versions of Windows. By Gary Bishop.
2918
2923
2919 2003-12-04 Fernando Perez <fperez@colorado.edu>
2924 2003-12-04 Fernando Perez <fperez@colorado.edu>
2920
2925
2921 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2926 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2922 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2927 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2923 While I tested this and it looks ok, there may still be corner
2928 While I tested this and it looks ok, there may still be corner
2924 cases I've missed.
2929 cases I've missed.
2925
2930
2926 2003-12-01 Fernando Perez <fperez@colorado.edu>
2931 2003-12-01 Fernando Perez <fperez@colorado.edu>
2927
2932
2928 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2933 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2929 where a line like 'p,q=1,2' would fail because the automagic
2934 where a line like 'p,q=1,2' would fail because the automagic
2930 system would be triggered for @p.
2935 system would be triggered for @p.
2931
2936
2932 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2937 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2933 cleanups, code unmodified.
2938 cleanups, code unmodified.
2934
2939
2935 * IPython/genutils.py (Term): added a class for IPython to handle
2940 * IPython/genutils.py (Term): added a class for IPython to handle
2936 output. In most cases it will just be a proxy for stdout/err, but
2941 output. In most cases it will just be a proxy for stdout/err, but
2937 having this allows modifications to be made for some platforms,
2942 having this allows modifications to be made for some platforms,
2938 such as handling color escapes under Windows. All of this code
2943 such as handling color escapes under Windows. All of this code
2939 was contributed by Gary Bishop, with minor modifications by me.
2944 was contributed by Gary Bishop, with minor modifications by me.
2940 The actual changes affect many files.
2945 The actual changes affect many files.
2941
2946
2942 2003-11-30 Fernando Perez <fperez@colorado.edu>
2947 2003-11-30 Fernando Perez <fperez@colorado.edu>
2943
2948
2944 * IPython/iplib.py (file_matches): new completion code, courtesy
2949 * IPython/iplib.py (file_matches): new completion code, courtesy
2945 of Jeff Collins. This enables filename completion again under
2950 of Jeff Collins. This enables filename completion again under
2946 python 2.3, which disabled it at the C level.
2951 python 2.3, which disabled it at the C level.
2947
2952
2948 2003-11-11 Fernando Perez <fperez@colorado.edu>
2953 2003-11-11 Fernando Perez <fperez@colorado.edu>
2949
2954
2950 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2955 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2951 for Numeric.array(map(...)), but often convenient.
2956 for Numeric.array(map(...)), but often convenient.
2952
2957
2953 2003-11-05 Fernando Perez <fperez@colorado.edu>
2958 2003-11-05 Fernando Perez <fperez@colorado.edu>
2954
2959
2955 * IPython/numutils.py (frange): Changed a call from int() to
2960 * IPython/numutils.py (frange): Changed a call from int() to
2956 int(round()) to prevent a problem reported with arange() in the
2961 int(round()) to prevent a problem reported with arange() in the
2957 numpy list.
2962 numpy list.
2958
2963
2959 2003-10-06 Fernando Perez <fperez@colorado.edu>
2964 2003-10-06 Fernando Perez <fperez@colorado.edu>
2960
2965
2961 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2966 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2962 prevent crashes if sys lacks an argv attribute (it happens with
2967 prevent crashes if sys lacks an argv attribute (it happens with
2963 embedded interpreters which build a bare-bones sys module).
2968 embedded interpreters which build a bare-bones sys module).
2964 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2969 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2965
2970
2966 2003-09-24 Fernando Perez <fperez@colorado.edu>
2971 2003-09-24 Fernando Perez <fperez@colorado.edu>
2967
2972
2968 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2973 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2969 to protect against poorly written user objects where __getattr__
2974 to protect against poorly written user objects where __getattr__
2970 raises exceptions other than AttributeError. Thanks to a bug
2975 raises exceptions other than AttributeError. Thanks to a bug
2971 report by Oliver Sander <osander-AT-gmx.de>.
2976 report by Oliver Sander <osander-AT-gmx.de>.
2972
2977
2973 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2978 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2974 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2979 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2975
2980
2976 2003-09-09 Fernando Perez <fperez@colorado.edu>
2981 2003-09-09 Fernando Perez <fperez@colorado.edu>
2977
2982
2978 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2983 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2979 unpacking a list whith a callable as first element would
2984 unpacking a list whith a callable as first element would
2980 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2985 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2981 Collins.
2986 Collins.
2982
2987
2983 2003-08-25 *** Released version 0.5.0
2988 2003-08-25 *** Released version 0.5.0
2984
2989
2985 2003-08-22 Fernando Perez <fperez@colorado.edu>
2990 2003-08-22 Fernando Perez <fperez@colorado.edu>
2986
2991
2987 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2992 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2988 improperly defined user exceptions. Thanks to feedback from Mark
2993 improperly defined user exceptions. Thanks to feedback from Mark
2989 Russell <mrussell-AT-verio.net>.
2994 Russell <mrussell-AT-verio.net>.
2990
2995
2991 2003-08-20 Fernando Perez <fperez@colorado.edu>
2996 2003-08-20 Fernando Perez <fperez@colorado.edu>
2992
2997
2993 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2998 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2994 printing so that it would print multi-line string forms starting
2999 printing so that it would print multi-line string forms starting
2995 with a new line. This way the formatting is better respected for
3000 with a new line. This way the formatting is better respected for
2996 objects which work hard to make nice string forms.
3001 objects which work hard to make nice string forms.
2997
3002
2998 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3003 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2999 autocall would overtake data access for objects with both
3004 autocall would overtake data access for objects with both
3000 __getitem__ and __call__.
3005 __getitem__ and __call__.
3001
3006
3002 2003-08-19 *** Released version 0.5.0-rc1
3007 2003-08-19 *** Released version 0.5.0-rc1
3003
3008
3004 2003-08-19 Fernando Perez <fperez@colorado.edu>
3009 2003-08-19 Fernando Perez <fperez@colorado.edu>
3005
3010
3006 * IPython/deep_reload.py (load_tail): single tiny change here
3011 * IPython/deep_reload.py (load_tail): single tiny change here
3007 seems to fix the long-standing bug of dreload() failing to work
3012 seems to fix the long-standing bug of dreload() failing to work
3008 for dotted names. But this module is pretty tricky, so I may have
3013 for dotted names. But this module is pretty tricky, so I may have
3009 missed some subtlety. Needs more testing!.
3014 missed some subtlety. Needs more testing!.
3010
3015
3011 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3016 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3012 exceptions which have badly implemented __str__ methods.
3017 exceptions which have badly implemented __str__ methods.
3013 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3018 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3014 which I've been getting reports about from Python 2.3 users. I
3019 which I've been getting reports about from Python 2.3 users. I
3015 wish I had a simple test case to reproduce the problem, so I could
3020 wish I had a simple test case to reproduce the problem, so I could
3016 either write a cleaner workaround or file a bug report if
3021 either write a cleaner workaround or file a bug report if
3017 necessary.
3022 necessary.
3018
3023
3019 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3024 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3020 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3025 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3021 a bug report by Tjabo Kloppenburg.
3026 a bug report by Tjabo Kloppenburg.
3022
3027
3023 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3028 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3024 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3029 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3025 seems rather unstable. Thanks to a bug report by Tjabo
3030 seems rather unstable. Thanks to a bug report by Tjabo
3026 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3031 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3027
3032
3028 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3033 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3029 this out soon because of the critical fixes in the inner loop for
3034 this out soon because of the critical fixes in the inner loop for
3030 generators.
3035 generators.
3031
3036
3032 * IPython/Magic.py (Magic.getargspec): removed. This (and
3037 * IPython/Magic.py (Magic.getargspec): removed. This (and
3033 _get_def) have been obsoleted by OInspect for a long time, I
3038 _get_def) have been obsoleted by OInspect for a long time, I
3034 hadn't noticed that they were dead code.
3039 hadn't noticed that they were dead code.
3035 (Magic._ofind): restored _ofind functionality for a few literals
3040 (Magic._ofind): restored _ofind functionality for a few literals
3036 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3041 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3037 for things like "hello".capitalize?, since that would require a
3042 for things like "hello".capitalize?, since that would require a
3038 potentially dangerous eval() again.
3043 potentially dangerous eval() again.
3039
3044
3040 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3045 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3041 logic a bit more to clean up the escapes handling and minimize the
3046 logic a bit more to clean up the escapes handling and minimize the
3042 use of _ofind to only necessary cases. The interactive 'feel' of
3047 use of _ofind to only necessary cases. The interactive 'feel' of
3043 IPython should have improved quite a bit with the changes in
3048 IPython should have improved quite a bit with the changes in
3044 _prefilter and _ofind (besides being far safer than before).
3049 _prefilter and _ofind (besides being far safer than before).
3045
3050
3046 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3051 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3047 obscure, never reported). Edit would fail to find the object to
3052 obscure, never reported). Edit would fail to find the object to
3048 edit under some circumstances.
3053 edit under some circumstances.
3049 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3054 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3050 which were causing double-calling of generators. Those eval calls
3055 which were causing double-calling of generators. Those eval calls
3051 were _very_ dangerous, since code with side effects could be
3056 were _very_ dangerous, since code with side effects could be
3052 triggered. As they say, 'eval is evil'... These were the
3057 triggered. As they say, 'eval is evil'... These were the
3053 nastiest evals in IPython. Besides, _ofind is now far simpler,
3058 nastiest evals in IPython. Besides, _ofind is now far simpler,
3054 and it should also be quite a bit faster. Its use of inspect is
3059 and it should also be quite a bit faster. Its use of inspect is
3055 also safer, so perhaps some of the inspect-related crashes I've
3060 also safer, so perhaps some of the inspect-related crashes I've
3056 seen lately with Python 2.3 might be taken care of. That will
3061 seen lately with Python 2.3 might be taken care of. That will
3057 need more testing.
3062 need more testing.
3058
3063
3059 2003-08-17 Fernando Perez <fperez@colorado.edu>
3064 2003-08-17 Fernando Perez <fperez@colorado.edu>
3060
3065
3061 * IPython/iplib.py (InteractiveShell._prefilter): significant
3066 * IPython/iplib.py (InteractiveShell._prefilter): significant
3062 simplifications to the logic for handling user escapes. Faster
3067 simplifications to the logic for handling user escapes. Faster
3063 and simpler code.
3068 and simpler code.
3064
3069
3065 2003-08-14 Fernando Perez <fperez@colorado.edu>
3070 2003-08-14 Fernando Perez <fperez@colorado.edu>
3066
3071
3067 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3072 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3068 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3073 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3069 but it should be quite a bit faster. And the recursive version
3074 but it should be quite a bit faster. And the recursive version
3070 generated O(log N) intermediate storage for all rank>1 arrays,
3075 generated O(log N) intermediate storage for all rank>1 arrays,
3071 even if they were contiguous.
3076 even if they were contiguous.
3072 (l1norm): Added this function.
3077 (l1norm): Added this function.
3073 (norm): Added this function for arbitrary norms (including
3078 (norm): Added this function for arbitrary norms (including
3074 l-infinity). l1 and l2 are still special cases for convenience
3079 l-infinity). l1 and l2 are still special cases for convenience
3075 and speed.
3080 and speed.
3076
3081
3077 2003-08-03 Fernando Perez <fperez@colorado.edu>
3082 2003-08-03 Fernando Perez <fperez@colorado.edu>
3078
3083
3079 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3084 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3080 exceptions, which now raise PendingDeprecationWarnings in Python
3085 exceptions, which now raise PendingDeprecationWarnings in Python
3081 2.3. There were some in Magic and some in Gnuplot2.
3086 2.3. There were some in Magic and some in Gnuplot2.
3082
3087
3083 2003-06-30 Fernando Perez <fperez@colorado.edu>
3088 2003-06-30 Fernando Perez <fperez@colorado.edu>
3084
3089
3085 * IPython/genutils.py (page): modified to call curses only for
3090 * IPython/genutils.py (page): modified to call curses only for
3086 terminals where TERM=='xterm'. After problems under many other
3091 terminals where TERM=='xterm'. After problems under many other
3087 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3092 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3088
3093
3089 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3094 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3090 would be triggered when readline was absent. This was just an old
3095 would be triggered when readline was absent. This was just an old
3091 debugging statement I'd forgotten to take out.
3096 debugging statement I'd forgotten to take out.
3092
3097
3093 2003-06-20 Fernando Perez <fperez@colorado.edu>
3098 2003-06-20 Fernando Perez <fperez@colorado.edu>
3094
3099
3095 * IPython/genutils.py (clock): modified to return only user time
3100 * IPython/genutils.py (clock): modified to return only user time
3096 (not counting system time), after a discussion on scipy. While
3101 (not counting system time), after a discussion on scipy. While
3097 system time may be a useful quantity occasionally, it may much
3102 system time may be a useful quantity occasionally, it may much
3098 more easily be skewed by occasional swapping or other similar
3103 more easily be skewed by occasional swapping or other similar
3099 activity.
3104 activity.
3100
3105
3101 2003-06-05 Fernando Perez <fperez@colorado.edu>
3106 2003-06-05 Fernando Perez <fperez@colorado.edu>
3102
3107
3103 * IPython/numutils.py (identity): new function, for building
3108 * IPython/numutils.py (identity): new function, for building
3104 arbitrary rank Kronecker deltas (mostly backwards compatible with
3109 arbitrary rank Kronecker deltas (mostly backwards compatible with
3105 Numeric.identity)
3110 Numeric.identity)
3106
3111
3107 2003-06-03 Fernando Perez <fperez@colorado.edu>
3112 2003-06-03 Fernando Perez <fperez@colorado.edu>
3108
3113
3109 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3114 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3110 arguments passed to magics with spaces, to allow trailing '\' to
3115 arguments passed to magics with spaces, to allow trailing '\' to
3111 work normally (mainly for Windows users).
3116 work normally (mainly for Windows users).
3112
3117
3113 2003-05-29 Fernando Perez <fperez@colorado.edu>
3118 2003-05-29 Fernando Perez <fperez@colorado.edu>
3114
3119
3115 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3120 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3116 instead of pydoc.help. This fixes a bizarre behavior where
3121 instead of pydoc.help. This fixes a bizarre behavior where
3117 printing '%s' % locals() would trigger the help system. Now
3122 printing '%s' % locals() would trigger the help system. Now
3118 ipython behaves like normal python does.
3123 ipython behaves like normal python does.
3119
3124
3120 Note that if one does 'from pydoc import help', the bizarre
3125 Note that if one does 'from pydoc import help', the bizarre
3121 behavior returns, but this will also happen in normal python, so
3126 behavior returns, but this will also happen in normal python, so
3122 it's not an ipython bug anymore (it has to do with how pydoc.help
3127 it's not an ipython bug anymore (it has to do with how pydoc.help
3123 is implemented).
3128 is implemented).
3124
3129
3125 2003-05-22 Fernando Perez <fperez@colorado.edu>
3130 2003-05-22 Fernando Perez <fperez@colorado.edu>
3126
3131
3127 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3132 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3128 return [] instead of None when nothing matches, also match to end
3133 return [] instead of None when nothing matches, also match to end
3129 of line. Patch by Gary Bishop.
3134 of line. Patch by Gary Bishop.
3130
3135
3131 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3136 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3132 protection as before, for files passed on the command line. This
3137 protection as before, for files passed on the command line. This
3133 prevents the CrashHandler from kicking in if user files call into
3138 prevents the CrashHandler from kicking in if user files call into
3134 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3139 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3135 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3140 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3136
3141
3137 2003-05-20 *** Released version 0.4.0
3142 2003-05-20 *** Released version 0.4.0
3138
3143
3139 2003-05-20 Fernando Perez <fperez@colorado.edu>
3144 2003-05-20 Fernando Perez <fperez@colorado.edu>
3140
3145
3141 * setup.py: added support for manpages. It's a bit hackish b/c of
3146 * setup.py: added support for manpages. It's a bit hackish b/c of
3142 a bug in the way the bdist_rpm distutils target handles gzipped
3147 a bug in the way the bdist_rpm distutils target handles gzipped
3143 manpages, but it works. After a patch by Jack.
3148 manpages, but it works. After a patch by Jack.
3144
3149
3145 2003-05-19 Fernando Perez <fperez@colorado.edu>
3150 2003-05-19 Fernando Perez <fperez@colorado.edu>
3146
3151
3147 * IPython/numutils.py: added a mockup of the kinds module, since
3152 * IPython/numutils.py: added a mockup of the kinds module, since
3148 it was recently removed from Numeric. This way, numutils will
3153 it was recently removed from Numeric. This way, numutils will
3149 work for all users even if they are missing kinds.
3154 work for all users even if they are missing kinds.
3150
3155
3151 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3156 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3152 failure, which can occur with SWIG-wrapped extensions. After a
3157 failure, which can occur with SWIG-wrapped extensions. After a
3153 crash report from Prabhu.
3158 crash report from Prabhu.
3154
3159
3155 2003-05-16 Fernando Perez <fperez@colorado.edu>
3160 2003-05-16 Fernando Perez <fperez@colorado.edu>
3156
3161
3157 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3162 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3158 protect ipython from user code which may call directly
3163 protect ipython from user code which may call directly
3159 sys.excepthook (this looks like an ipython crash to the user, even
3164 sys.excepthook (this looks like an ipython crash to the user, even
3160 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3165 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3161 This is especially important to help users of WxWindows, but may
3166 This is especially important to help users of WxWindows, but may
3162 also be useful in other cases.
3167 also be useful in other cases.
3163
3168
3164 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3169 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3165 an optional tb_offset to be specified, and to preserve exception
3170 an optional tb_offset to be specified, and to preserve exception
3166 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3171 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3167
3172
3168 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3173 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3169
3174
3170 2003-05-15 Fernando Perez <fperez@colorado.edu>
3175 2003-05-15 Fernando Perez <fperez@colorado.edu>
3171
3176
3172 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3177 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3173 installing for a new user under Windows.
3178 installing for a new user under Windows.
3174
3179
3175 2003-05-12 Fernando Perez <fperez@colorado.edu>
3180 2003-05-12 Fernando Perez <fperez@colorado.edu>
3176
3181
3177 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3182 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3178 handler for Emacs comint-based lines. Currently it doesn't do
3183 handler for Emacs comint-based lines. Currently it doesn't do
3179 much (but importantly, it doesn't update the history cache). In
3184 much (but importantly, it doesn't update the history cache). In
3180 the future it may be expanded if Alex needs more functionality
3185 the future it may be expanded if Alex needs more functionality
3181 there.
3186 there.
3182
3187
3183 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3188 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3184 info to crash reports.
3189 info to crash reports.
3185
3190
3186 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3191 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3187 just like Python's -c. Also fixed crash with invalid -color
3192 just like Python's -c. Also fixed crash with invalid -color
3188 option value at startup. Thanks to Will French
3193 option value at startup. Thanks to Will French
3189 <wfrench-AT-bestweb.net> for the bug report.
3194 <wfrench-AT-bestweb.net> for the bug report.
3190
3195
3191 2003-05-09 Fernando Perez <fperez@colorado.edu>
3196 2003-05-09 Fernando Perez <fperez@colorado.edu>
3192
3197
3193 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3198 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3194 to EvalDict (it's a mapping, after all) and simplified its code
3199 to EvalDict (it's a mapping, after all) and simplified its code
3195 quite a bit, after a nice discussion on c.l.py where Gustavo
3200 quite a bit, after a nice discussion on c.l.py where Gustavo
3196 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3201 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3197
3202
3198 2003-04-30 Fernando Perez <fperez@colorado.edu>
3203 2003-04-30 Fernando Perez <fperez@colorado.edu>
3199
3204
3200 * IPython/genutils.py (timings_out): modified it to reduce its
3205 * IPython/genutils.py (timings_out): modified it to reduce its
3201 overhead in the common reps==1 case.
3206 overhead in the common reps==1 case.
3202
3207
3203 2003-04-29 Fernando Perez <fperez@colorado.edu>
3208 2003-04-29 Fernando Perez <fperez@colorado.edu>
3204
3209
3205 * IPython/genutils.py (timings_out): Modified to use the resource
3210 * IPython/genutils.py (timings_out): Modified to use the resource
3206 module, which avoids the wraparound problems of time.clock().
3211 module, which avoids the wraparound problems of time.clock().
3207
3212
3208 2003-04-17 *** Released version 0.2.15pre4
3213 2003-04-17 *** Released version 0.2.15pre4
3209
3214
3210 2003-04-17 Fernando Perez <fperez@colorado.edu>
3215 2003-04-17 Fernando Perez <fperez@colorado.edu>
3211
3216
3212 * setup.py (scriptfiles): Split windows-specific stuff over to a
3217 * setup.py (scriptfiles): Split windows-specific stuff over to a
3213 separate file, in an attempt to have a Windows GUI installer.
3218 separate file, in an attempt to have a Windows GUI installer.
3214 That didn't work, but part of the groundwork is done.
3219 That didn't work, but part of the groundwork is done.
3215
3220
3216 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3221 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3217 indent/unindent with 4 spaces. Particularly useful in combination
3222 indent/unindent with 4 spaces. Particularly useful in combination
3218 with the new auto-indent option.
3223 with the new auto-indent option.
3219
3224
3220 2003-04-16 Fernando Perez <fperez@colorado.edu>
3225 2003-04-16 Fernando Perez <fperez@colorado.edu>
3221
3226
3222 * IPython/Magic.py: various replacements of self.rc for
3227 * IPython/Magic.py: various replacements of self.rc for
3223 self.shell.rc. A lot more remains to be done to fully disentangle
3228 self.shell.rc. A lot more remains to be done to fully disentangle
3224 this class from the main Shell class.
3229 this class from the main Shell class.
3225
3230
3226 * IPython/GnuplotRuntime.py: added checks for mouse support so
3231 * IPython/GnuplotRuntime.py: added checks for mouse support so
3227 that we don't try to enable it if the current gnuplot doesn't
3232 that we don't try to enable it if the current gnuplot doesn't
3228 really support it. Also added checks so that we don't try to
3233 really support it. Also added checks so that we don't try to
3229 enable persist under Windows (where Gnuplot doesn't recognize the
3234 enable persist under Windows (where Gnuplot doesn't recognize the
3230 option).
3235 option).
3231
3236
3232 * IPython/iplib.py (InteractiveShell.interact): Added optional
3237 * IPython/iplib.py (InteractiveShell.interact): Added optional
3233 auto-indenting code, after a patch by King C. Shu
3238 auto-indenting code, after a patch by King C. Shu
3234 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3239 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3235 get along well with pasting indented code. If I ever figure out
3240 get along well with pasting indented code. If I ever figure out
3236 how to make that part go well, it will become on by default.
3241 how to make that part go well, it will become on by default.
3237
3242
3238 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3243 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3239 crash ipython if there was an unmatched '%' in the user's prompt
3244 crash ipython if there was an unmatched '%' in the user's prompt
3240 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3245 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3241
3246
3242 * IPython/iplib.py (InteractiveShell.interact): removed the
3247 * IPython/iplib.py (InteractiveShell.interact): removed the
3243 ability to ask the user whether he wants to crash or not at the
3248 ability to ask the user whether he wants to crash or not at the
3244 'last line' exception handler. Calling functions at that point
3249 'last line' exception handler. Calling functions at that point
3245 changes the stack, and the error reports would have incorrect
3250 changes the stack, and the error reports would have incorrect
3246 tracebacks.
3251 tracebacks.
3247
3252
3248 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3253 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3249 pass through a peger a pretty-printed form of any object. After a
3254 pass through a peger a pretty-printed form of any object. After a
3250 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3255 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3251
3256
3252 2003-04-14 Fernando Perez <fperez@colorado.edu>
3257 2003-04-14 Fernando Perez <fperez@colorado.edu>
3253
3258
3254 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3259 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3255 all files in ~ would be modified at first install (instead of
3260 all files in ~ would be modified at first install (instead of
3256 ~/.ipython). This could be potentially disastrous, as the
3261 ~/.ipython). This could be potentially disastrous, as the
3257 modification (make line-endings native) could damage binary files.
3262 modification (make line-endings native) could damage binary files.
3258
3263
3259 2003-04-10 Fernando Perez <fperez@colorado.edu>
3264 2003-04-10 Fernando Perez <fperez@colorado.edu>
3260
3265
3261 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3266 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3262 handle only lines which are invalid python. This now means that
3267 handle only lines which are invalid python. This now means that
3263 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3268 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3264 for the bug report.
3269 for the bug report.
3265
3270
3266 2003-04-01 Fernando Perez <fperez@colorado.edu>
3271 2003-04-01 Fernando Perez <fperez@colorado.edu>
3267
3272
3268 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3273 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3269 where failing to set sys.last_traceback would crash pdb.pm().
3274 where failing to set sys.last_traceback would crash pdb.pm().
3270 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3275 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3271 report.
3276 report.
3272
3277
3273 2003-03-25 Fernando Perez <fperez@colorado.edu>
3278 2003-03-25 Fernando Perez <fperez@colorado.edu>
3274
3279
3275 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3280 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3276 before printing it (it had a lot of spurious blank lines at the
3281 before printing it (it had a lot of spurious blank lines at the
3277 end).
3282 end).
3278
3283
3279 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3284 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3280 output would be sent 21 times! Obviously people don't use this
3285 output would be sent 21 times! Obviously people don't use this
3281 too often, or I would have heard about it.
3286 too often, or I would have heard about it.
3282
3287
3283 2003-03-24 Fernando Perez <fperez@colorado.edu>
3288 2003-03-24 Fernando Perez <fperez@colorado.edu>
3284
3289
3285 * setup.py (scriptfiles): renamed the data_files parameter from
3290 * setup.py (scriptfiles): renamed the data_files parameter from
3286 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3291 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3287 for the patch.
3292 for the patch.
3288
3293
3289 2003-03-20 Fernando Perez <fperez@colorado.edu>
3294 2003-03-20 Fernando Perez <fperez@colorado.edu>
3290
3295
3291 * IPython/genutils.py (error): added error() and fatal()
3296 * IPython/genutils.py (error): added error() and fatal()
3292 functions.
3297 functions.
3293
3298
3294 2003-03-18 *** Released version 0.2.15pre3
3299 2003-03-18 *** Released version 0.2.15pre3
3295
3300
3296 2003-03-18 Fernando Perez <fperez@colorado.edu>
3301 2003-03-18 Fernando Perez <fperez@colorado.edu>
3297
3302
3298 * setupext/install_data_ext.py
3303 * setupext/install_data_ext.py
3299 (install_data_ext.initialize_options): Class contributed by Jack
3304 (install_data_ext.initialize_options): Class contributed by Jack
3300 Moffit for fixing the old distutils hack. He is sending this to
3305 Moffit for fixing the old distutils hack. He is sending this to
3301 the distutils folks so in the future we may not need it as a
3306 the distutils folks so in the future we may not need it as a
3302 private fix.
3307 private fix.
3303
3308
3304 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3309 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3305 changes for Debian packaging. See his patch for full details.
3310 changes for Debian packaging. See his patch for full details.
3306 The old distutils hack of making the ipythonrc* files carry a
3311 The old distutils hack of making the ipythonrc* files carry a
3307 bogus .py extension is gone, at last. Examples were moved to a
3312 bogus .py extension is gone, at last. Examples were moved to a
3308 separate subdir under doc/, and the separate executable scripts
3313 separate subdir under doc/, and the separate executable scripts
3309 now live in their own directory. Overall a great cleanup. The
3314 now live in their own directory. Overall a great cleanup. The
3310 manual was updated to use the new files, and setup.py has been
3315 manual was updated to use the new files, and setup.py has been
3311 fixed for this setup.
3316 fixed for this setup.
3312
3317
3313 * IPython/PyColorize.py (Parser.usage): made non-executable and
3318 * IPython/PyColorize.py (Parser.usage): made non-executable and
3314 created a pycolor wrapper around it to be included as a script.
3319 created a pycolor wrapper around it to be included as a script.
3315
3320
3316 2003-03-12 *** Released version 0.2.15pre2
3321 2003-03-12 *** Released version 0.2.15pre2
3317
3322
3318 2003-03-12 Fernando Perez <fperez@colorado.edu>
3323 2003-03-12 Fernando Perez <fperez@colorado.edu>
3319
3324
3320 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3325 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3321 long-standing problem with garbage characters in some terminals.
3326 long-standing problem with garbage characters in some terminals.
3322 The issue was really that the \001 and \002 escapes must _only_ be
3327 The issue was really that the \001 and \002 escapes must _only_ be
3323 passed to input prompts (which call readline), but _never_ to
3328 passed to input prompts (which call readline), but _never_ to
3324 normal text to be printed on screen. I changed ColorANSI to have
3329 normal text to be printed on screen. I changed ColorANSI to have
3325 two classes: TermColors and InputTermColors, each with the
3330 two classes: TermColors and InputTermColors, each with the
3326 appropriate escapes for input prompts or normal text. The code in
3331 appropriate escapes for input prompts or normal text. The code in
3327 Prompts.py got slightly more complicated, but this very old and
3332 Prompts.py got slightly more complicated, but this very old and
3328 annoying bug is finally fixed.
3333 annoying bug is finally fixed.
3329
3334
3330 All the credit for nailing down the real origin of this problem
3335 All the credit for nailing down the real origin of this problem
3331 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3336 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3332 *Many* thanks to him for spending quite a bit of effort on this.
3337 *Many* thanks to him for spending quite a bit of effort on this.
3333
3338
3334 2003-03-05 *** Released version 0.2.15pre1
3339 2003-03-05 *** Released version 0.2.15pre1
3335
3340
3336 2003-03-03 Fernando Perez <fperez@colorado.edu>
3341 2003-03-03 Fernando Perez <fperez@colorado.edu>
3337
3342
3338 * IPython/FakeModule.py: Moved the former _FakeModule to a
3343 * IPython/FakeModule.py: Moved the former _FakeModule to a
3339 separate file, because it's also needed by Magic (to fix a similar
3344 separate file, because it's also needed by Magic (to fix a similar
3340 pickle-related issue in @run).
3345 pickle-related issue in @run).
3341
3346
3342 2003-03-02 Fernando Perez <fperez@colorado.edu>
3347 2003-03-02 Fernando Perez <fperez@colorado.edu>
3343
3348
3344 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3349 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3345 the autocall option at runtime.
3350 the autocall option at runtime.
3346 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3351 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3347 across Magic.py to start separating Magic from InteractiveShell.
3352 across Magic.py to start separating Magic from InteractiveShell.
3348 (Magic._ofind): Fixed to return proper namespace for dotted
3353 (Magic._ofind): Fixed to return proper namespace for dotted
3349 names. Before, a dotted name would always return 'not currently
3354 names. Before, a dotted name would always return 'not currently
3350 defined', because it would find the 'parent'. s.x would be found,
3355 defined', because it would find the 'parent'. s.x would be found,
3351 but since 'x' isn't defined by itself, it would get confused.
3356 but since 'x' isn't defined by itself, it would get confused.
3352 (Magic.magic_run): Fixed pickling problems reported by Ralf
3357 (Magic.magic_run): Fixed pickling problems reported by Ralf
3353 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3358 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3354 that I'd used when Mike Heeter reported similar issues at the
3359 that I'd used when Mike Heeter reported similar issues at the
3355 top-level, but now for @run. It boils down to injecting the
3360 top-level, but now for @run. It boils down to injecting the
3356 namespace where code is being executed with something that looks
3361 namespace where code is being executed with something that looks
3357 enough like a module to fool pickle.dump(). Since a pickle stores
3362 enough like a module to fool pickle.dump(). Since a pickle stores
3358 a named reference to the importing module, we need this for
3363 a named reference to the importing module, we need this for
3359 pickles to save something sensible.
3364 pickles to save something sensible.
3360
3365
3361 * IPython/ipmaker.py (make_IPython): added an autocall option.
3366 * IPython/ipmaker.py (make_IPython): added an autocall option.
3362
3367
3363 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3368 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3364 the auto-eval code. Now autocalling is an option, and the code is
3369 the auto-eval code. Now autocalling is an option, and the code is
3365 also vastly safer. There is no more eval() involved at all.
3370 also vastly safer. There is no more eval() involved at all.
3366
3371
3367 2003-03-01 Fernando Perez <fperez@colorado.edu>
3372 2003-03-01 Fernando Perez <fperez@colorado.edu>
3368
3373
3369 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3374 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3370 dict with named keys instead of a tuple.
3375 dict with named keys instead of a tuple.
3371
3376
3372 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3377 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3373
3378
3374 * setup.py (make_shortcut): Fixed message about directories
3379 * setup.py (make_shortcut): Fixed message about directories
3375 created during Windows installation (the directories were ok, just
3380 created during Windows installation (the directories were ok, just
3376 the printed message was misleading). Thanks to Chris Liechti
3381 the printed message was misleading). Thanks to Chris Liechti
3377 <cliechti-AT-gmx.net> for the heads up.
3382 <cliechti-AT-gmx.net> for the heads up.
3378
3383
3379 2003-02-21 Fernando Perez <fperez@colorado.edu>
3384 2003-02-21 Fernando Perez <fperez@colorado.edu>
3380
3385
3381 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3386 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3382 of ValueError exception when checking for auto-execution. This
3387 of ValueError exception when checking for auto-execution. This
3383 one is raised by things like Numeric arrays arr.flat when the
3388 one is raised by things like Numeric arrays arr.flat when the
3384 array is non-contiguous.
3389 array is non-contiguous.
3385
3390
3386 2003-01-31 Fernando Perez <fperez@colorado.edu>
3391 2003-01-31 Fernando Perez <fperez@colorado.edu>
3387
3392
3388 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3393 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3389 not return any value at all (even though the command would get
3394 not return any value at all (even though the command would get
3390 executed).
3395 executed).
3391 (xsys): Flush stdout right after printing the command to ensure
3396 (xsys): Flush stdout right after printing the command to ensure
3392 proper ordering of commands and command output in the total
3397 proper ordering of commands and command output in the total
3393 output.
3398 output.
3394 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3399 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3395 system/getoutput as defaults. The old ones are kept for
3400 system/getoutput as defaults. The old ones are kept for
3396 compatibility reasons, so no code which uses this library needs
3401 compatibility reasons, so no code which uses this library needs
3397 changing.
3402 changing.
3398
3403
3399 2003-01-27 *** Released version 0.2.14
3404 2003-01-27 *** Released version 0.2.14
3400
3405
3401 2003-01-25 Fernando Perez <fperez@colorado.edu>
3406 2003-01-25 Fernando Perez <fperez@colorado.edu>
3402
3407
3403 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3408 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3404 functions defined in previous edit sessions could not be re-edited
3409 functions defined in previous edit sessions could not be re-edited
3405 (because the temp files were immediately removed). Now temp files
3410 (because the temp files were immediately removed). Now temp files
3406 are removed only at IPython's exit.
3411 are removed only at IPython's exit.
3407 (Magic.magic_run): Improved @run to perform shell-like expansions
3412 (Magic.magic_run): Improved @run to perform shell-like expansions
3408 on its arguments (~users and $VARS). With this, @run becomes more
3413 on its arguments (~users and $VARS). With this, @run becomes more
3409 like a normal command-line.
3414 like a normal command-line.
3410
3415
3411 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3416 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3412 bugs related to embedding and cleaned up that code. A fairly
3417 bugs related to embedding and cleaned up that code. A fairly
3413 important one was the impossibility to access the global namespace
3418 important one was the impossibility to access the global namespace
3414 through the embedded IPython (only local variables were visible).
3419 through the embedded IPython (only local variables were visible).
3415
3420
3416 2003-01-14 Fernando Perez <fperez@colorado.edu>
3421 2003-01-14 Fernando Perez <fperez@colorado.edu>
3417
3422
3418 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3423 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3419 auto-calling to be a bit more conservative. Now it doesn't get
3424 auto-calling to be a bit more conservative. Now it doesn't get
3420 triggered if any of '!=()<>' are in the rest of the input line, to
3425 triggered if any of '!=()<>' are in the rest of the input line, to
3421 allow comparing callables. Thanks to Alex for the heads up.
3426 allow comparing callables. Thanks to Alex for the heads up.
3422
3427
3423 2003-01-07 Fernando Perez <fperez@colorado.edu>
3428 2003-01-07 Fernando Perez <fperez@colorado.edu>
3424
3429
3425 * IPython/genutils.py (page): fixed estimation of the number of
3430 * IPython/genutils.py (page): fixed estimation of the number of
3426 lines in a string to be paged to simply count newlines. This
3431 lines in a string to be paged to simply count newlines. This
3427 prevents over-guessing due to embedded escape sequences. A better
3432 prevents over-guessing due to embedded escape sequences. A better
3428 long-term solution would involve stripping out the control chars
3433 long-term solution would involve stripping out the control chars
3429 for the count, but it's potentially so expensive I just don't
3434 for the count, but it's potentially so expensive I just don't
3430 think it's worth doing.
3435 think it's worth doing.
3431
3436
3432 2002-12-19 *** Released version 0.2.14pre50
3437 2002-12-19 *** Released version 0.2.14pre50
3433
3438
3434 2002-12-19 Fernando Perez <fperez@colorado.edu>
3439 2002-12-19 Fernando Perez <fperez@colorado.edu>
3435
3440
3436 * tools/release (version): Changed release scripts to inform
3441 * tools/release (version): Changed release scripts to inform
3437 Andrea and build a NEWS file with a list of recent changes.
3442 Andrea and build a NEWS file with a list of recent changes.
3438
3443
3439 * IPython/ColorANSI.py (__all__): changed terminal detection
3444 * IPython/ColorANSI.py (__all__): changed terminal detection
3440 code. Seems to work better for xterms without breaking
3445 code. Seems to work better for xterms without breaking
3441 konsole. Will need more testing to determine if WinXP and Mac OSX
3446 konsole. Will need more testing to determine if WinXP and Mac OSX
3442 also work ok.
3447 also work ok.
3443
3448
3444 2002-12-18 *** Released version 0.2.14pre49
3449 2002-12-18 *** Released version 0.2.14pre49
3445
3450
3446 2002-12-18 Fernando Perez <fperez@colorado.edu>
3451 2002-12-18 Fernando Perez <fperez@colorado.edu>
3447
3452
3448 * Docs: added new info about Mac OSX, from Andrea.
3453 * Docs: added new info about Mac OSX, from Andrea.
3449
3454
3450 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3455 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3451 allow direct plotting of python strings whose format is the same
3456 allow direct plotting of python strings whose format is the same
3452 of gnuplot data files.
3457 of gnuplot data files.
3453
3458
3454 2002-12-16 Fernando Perez <fperez@colorado.edu>
3459 2002-12-16 Fernando Perez <fperez@colorado.edu>
3455
3460
3456 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3461 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3457 value of exit question to be acknowledged.
3462 value of exit question to be acknowledged.
3458
3463
3459 2002-12-03 Fernando Perez <fperez@colorado.edu>
3464 2002-12-03 Fernando Perez <fperez@colorado.edu>
3460
3465
3461 * IPython/ipmaker.py: removed generators, which had been added
3466 * IPython/ipmaker.py: removed generators, which had been added
3462 by mistake in an earlier debugging run. This was causing trouble
3467 by mistake in an earlier debugging run. This was causing trouble
3463 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3468 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3464 for pointing this out.
3469 for pointing this out.
3465
3470
3466 2002-11-17 Fernando Perez <fperez@colorado.edu>
3471 2002-11-17 Fernando Perez <fperez@colorado.edu>
3467
3472
3468 * Manual: updated the Gnuplot section.
3473 * Manual: updated the Gnuplot section.
3469
3474
3470 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3475 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3471 a much better split of what goes in Runtime and what goes in
3476 a much better split of what goes in Runtime and what goes in
3472 Interactive.
3477 Interactive.
3473
3478
3474 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3479 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3475 being imported from iplib.
3480 being imported from iplib.
3476
3481
3477 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3482 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3478 for command-passing. Now the global Gnuplot instance is called
3483 for command-passing. Now the global Gnuplot instance is called
3479 'gp' instead of 'g', which was really a far too fragile and
3484 'gp' instead of 'g', which was really a far too fragile and
3480 common name.
3485 common name.
3481
3486
3482 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3487 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3483 bounding boxes generated by Gnuplot for square plots.
3488 bounding boxes generated by Gnuplot for square plots.
3484
3489
3485 * IPython/genutils.py (popkey): new function added. I should
3490 * IPython/genutils.py (popkey): new function added. I should
3486 suggest this on c.l.py as a dict method, it seems useful.
3491 suggest this on c.l.py as a dict method, it seems useful.
3487
3492
3488 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3493 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3489 to transparently handle PostScript generation. MUCH better than
3494 to transparently handle PostScript generation. MUCH better than
3490 the previous plot_eps/replot_eps (which I removed now). The code
3495 the previous plot_eps/replot_eps (which I removed now). The code
3491 is also fairly clean and well documented now (including
3496 is also fairly clean and well documented now (including
3492 docstrings).
3497 docstrings).
3493
3498
3494 2002-11-13 Fernando Perez <fperez@colorado.edu>
3499 2002-11-13 Fernando Perez <fperez@colorado.edu>
3495
3500
3496 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3501 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3497 (inconsistent with options).
3502 (inconsistent with options).
3498
3503
3499 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3504 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3500 manually disabled, I don't know why. Fixed it.
3505 manually disabled, I don't know why. Fixed it.
3501 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3506 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3502 eps output.
3507 eps output.
3503
3508
3504 2002-11-12 Fernando Perez <fperez@colorado.edu>
3509 2002-11-12 Fernando Perez <fperez@colorado.edu>
3505
3510
3506 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3511 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3507 don't propagate up to caller. Fixes crash reported by François
3512 don't propagate up to caller. Fixes crash reported by François
3508 Pinard.
3513 Pinard.
3509
3514
3510 2002-11-09 Fernando Perez <fperez@colorado.edu>
3515 2002-11-09 Fernando Perez <fperez@colorado.edu>
3511
3516
3512 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3517 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3513 history file for new users.
3518 history file for new users.
3514 (make_IPython): fixed bug where initial install would leave the
3519 (make_IPython): fixed bug where initial install would leave the
3515 user running in the .ipython dir.
3520 user running in the .ipython dir.
3516 (make_IPython): fixed bug where config dir .ipython would be
3521 (make_IPython): fixed bug where config dir .ipython would be
3517 created regardless of the given -ipythondir option. Thanks to Cory
3522 created regardless of the given -ipythondir option. Thanks to Cory
3518 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3523 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3519
3524
3520 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3525 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3521 type confirmations. Will need to use it in all of IPython's code
3526 type confirmations. Will need to use it in all of IPython's code
3522 consistently.
3527 consistently.
3523
3528
3524 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3529 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3525 context to print 31 lines instead of the default 5. This will make
3530 context to print 31 lines instead of the default 5. This will make
3526 the crash reports extremely detailed in case the problem is in
3531 the crash reports extremely detailed in case the problem is in
3527 libraries I don't have access to.
3532 libraries I don't have access to.
3528
3533
3529 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3534 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3530 line of defense' code to still crash, but giving users fair
3535 line of defense' code to still crash, but giving users fair
3531 warning. I don't want internal errors to go unreported: if there's
3536 warning. I don't want internal errors to go unreported: if there's
3532 an internal problem, IPython should crash and generate a full
3537 an internal problem, IPython should crash and generate a full
3533 report.
3538 report.
3534
3539
3535 2002-11-08 Fernando Perez <fperez@colorado.edu>
3540 2002-11-08 Fernando Perez <fperez@colorado.edu>
3536
3541
3537 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3542 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3538 otherwise uncaught exceptions which can appear if people set
3543 otherwise uncaught exceptions which can appear if people set
3539 sys.stdout to something badly broken. Thanks to a crash report
3544 sys.stdout to something badly broken. Thanks to a crash report
3540 from henni-AT-mail.brainbot.com.
3545 from henni-AT-mail.brainbot.com.
3541
3546
3542 2002-11-04 Fernando Perez <fperez@colorado.edu>
3547 2002-11-04 Fernando Perez <fperez@colorado.edu>
3543
3548
3544 * IPython/iplib.py (InteractiveShell.interact): added
3549 * IPython/iplib.py (InteractiveShell.interact): added
3545 __IPYTHON__active to the builtins. It's a flag which goes on when
3550 __IPYTHON__active to the builtins. It's a flag which goes on when
3546 the interaction starts and goes off again when it stops. This
3551 the interaction starts and goes off again when it stops. This
3547 allows embedding code to detect being inside IPython. Before this
3552 allows embedding code to detect being inside IPython. Before this
3548 was done via __IPYTHON__, but that only shows that an IPython
3553 was done via __IPYTHON__, but that only shows that an IPython
3549 instance has been created.
3554 instance has been created.
3550
3555
3551 * IPython/Magic.py (Magic.magic_env): I realized that in a
3556 * IPython/Magic.py (Magic.magic_env): I realized that in a
3552 UserDict, instance.data holds the data as a normal dict. So I
3557 UserDict, instance.data holds the data as a normal dict. So I
3553 modified @env to return os.environ.data instead of rebuilding a
3558 modified @env to return os.environ.data instead of rebuilding a
3554 dict by hand.
3559 dict by hand.
3555
3560
3556 2002-11-02 Fernando Perez <fperez@colorado.edu>
3561 2002-11-02 Fernando Perez <fperez@colorado.edu>
3557
3562
3558 * IPython/genutils.py (warn): changed so that level 1 prints no
3563 * IPython/genutils.py (warn): changed so that level 1 prints no
3559 header. Level 2 is now the default (with 'WARNING' header, as
3564 header. Level 2 is now the default (with 'WARNING' header, as
3560 before). I think I tracked all places where changes were needed in
3565 before). I think I tracked all places where changes were needed in
3561 IPython, but outside code using the old level numbering may have
3566 IPython, but outside code using the old level numbering may have
3562 broken.
3567 broken.
3563
3568
3564 * IPython/iplib.py (InteractiveShell.runcode): added this to
3569 * IPython/iplib.py (InteractiveShell.runcode): added this to
3565 handle the tracebacks in SystemExit traps correctly. The previous
3570 handle the tracebacks in SystemExit traps correctly. The previous
3566 code (through interact) was printing more of the stack than
3571 code (through interact) was printing more of the stack than
3567 necessary, showing IPython internal code to the user.
3572 necessary, showing IPython internal code to the user.
3568
3573
3569 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3574 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3570 default. Now that the default at the confirmation prompt is yes,
3575 default. Now that the default at the confirmation prompt is yes,
3571 it's not so intrusive. François' argument that ipython sessions
3576 it's not so intrusive. François' argument that ipython sessions
3572 tend to be complex enough not to lose them from an accidental C-d,
3577 tend to be complex enough not to lose them from an accidental C-d,
3573 is a valid one.
3578 is a valid one.
3574
3579
3575 * IPython/iplib.py (InteractiveShell.interact): added a
3580 * IPython/iplib.py (InteractiveShell.interact): added a
3576 showtraceback() call to the SystemExit trap, and modified the exit
3581 showtraceback() call to the SystemExit trap, and modified the exit
3577 confirmation to have yes as the default.
3582 confirmation to have yes as the default.
3578
3583
3579 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3584 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3580 this file. It's been gone from the code for a long time, this was
3585 this file. It's been gone from the code for a long time, this was
3581 simply leftover junk.
3586 simply leftover junk.
3582
3587
3583 2002-11-01 Fernando Perez <fperez@colorado.edu>
3588 2002-11-01 Fernando Perez <fperez@colorado.edu>
3584
3589
3585 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3590 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3586 added. If set, IPython now traps EOF and asks for
3591 added. If set, IPython now traps EOF and asks for
3587 confirmation. After a request by François Pinard.
3592 confirmation. After a request by François Pinard.
3588
3593
3589 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3594 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3590 of @abort, and with a new (better) mechanism for handling the
3595 of @abort, and with a new (better) mechanism for handling the
3591 exceptions.
3596 exceptions.
3592
3597
3593 2002-10-27 Fernando Perez <fperez@colorado.edu>
3598 2002-10-27 Fernando Perez <fperez@colorado.edu>
3594
3599
3595 * IPython/usage.py (__doc__): updated the --help information and
3600 * IPython/usage.py (__doc__): updated the --help information and
3596 the ipythonrc file to indicate that -log generates
3601 the ipythonrc file to indicate that -log generates
3597 ./ipython.log. Also fixed the corresponding info in @logstart.
3602 ./ipython.log. Also fixed the corresponding info in @logstart.
3598 This and several other fixes in the manuals thanks to reports by
3603 This and several other fixes in the manuals thanks to reports by
3599 François Pinard <pinard-AT-iro.umontreal.ca>.
3604 François Pinard <pinard-AT-iro.umontreal.ca>.
3600
3605
3601 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3606 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3602 refer to @logstart (instead of @log, which doesn't exist).
3607 refer to @logstart (instead of @log, which doesn't exist).
3603
3608
3604 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3609 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3605 AttributeError crash. Thanks to Christopher Armstrong
3610 AttributeError crash. Thanks to Christopher Armstrong
3606 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3611 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3607 introduced recently (in 0.2.14pre37) with the fix to the eval
3612 introduced recently (in 0.2.14pre37) with the fix to the eval
3608 problem mentioned below.
3613 problem mentioned below.
3609
3614
3610 2002-10-17 Fernando Perez <fperez@colorado.edu>
3615 2002-10-17 Fernando Perez <fperez@colorado.edu>
3611
3616
3612 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3617 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3613 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3618 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3614
3619
3615 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3620 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3616 this function to fix a problem reported by Alex Schmolck. He saw
3621 this function to fix a problem reported by Alex Schmolck. He saw
3617 it with list comprehensions and generators, which were getting
3622 it with list comprehensions and generators, which were getting
3618 called twice. The real problem was an 'eval' call in testing for
3623 called twice. The real problem was an 'eval' call in testing for
3619 automagic which was evaluating the input line silently.
3624 automagic which was evaluating the input line silently.
3620
3625
3621 This is a potentially very nasty bug, if the input has side
3626 This is a potentially very nasty bug, if the input has side
3622 effects which must not be repeated. The code is much cleaner now,
3627 effects which must not be repeated. The code is much cleaner now,
3623 without any blanket 'except' left and with a regexp test for
3628 without any blanket 'except' left and with a regexp test for
3624 actual function names.
3629 actual function names.
3625
3630
3626 But an eval remains, which I'm not fully comfortable with. I just
3631 But an eval remains, which I'm not fully comfortable with. I just
3627 don't know how to find out if an expression could be a callable in
3632 don't know how to find out if an expression could be a callable in
3628 the user's namespace without doing an eval on the string. However
3633 the user's namespace without doing an eval on the string. However
3629 that string is now much more strictly checked so that no code
3634 that string is now much more strictly checked so that no code
3630 slips by, so the eval should only happen for things that can
3635 slips by, so the eval should only happen for things that can
3631 really be only function/method names.
3636 really be only function/method names.
3632
3637
3633 2002-10-15 Fernando Perez <fperez@colorado.edu>
3638 2002-10-15 Fernando Perez <fperez@colorado.edu>
3634
3639
3635 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3640 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3636 OSX information to main manual, removed README_Mac_OSX file from
3641 OSX information to main manual, removed README_Mac_OSX file from
3637 distribution. Also updated credits for recent additions.
3642 distribution. Also updated credits for recent additions.
3638
3643
3639 2002-10-10 Fernando Perez <fperez@colorado.edu>
3644 2002-10-10 Fernando Perez <fperez@colorado.edu>
3640
3645
3641 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3646 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3642 terminal-related issues. Many thanks to Andrea Riciputi
3647 terminal-related issues. Many thanks to Andrea Riciputi
3643 <andrea.riciputi-AT-libero.it> for writing it.
3648 <andrea.riciputi-AT-libero.it> for writing it.
3644
3649
3645 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3650 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3646 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3651 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3647
3652
3648 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3653 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3649 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3654 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3650 <syver-en-AT-online.no> who both submitted patches for this problem.
3655 <syver-en-AT-online.no> who both submitted patches for this problem.
3651
3656
3652 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3657 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3653 global embedding to make sure that things don't overwrite user
3658 global embedding to make sure that things don't overwrite user
3654 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3659 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3655
3660
3656 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3661 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3657 compatibility. Thanks to Hayden Callow
3662 compatibility. Thanks to Hayden Callow
3658 <h.callow-AT-elec.canterbury.ac.nz>
3663 <h.callow-AT-elec.canterbury.ac.nz>
3659
3664
3660 2002-10-04 Fernando Perez <fperez@colorado.edu>
3665 2002-10-04 Fernando Perez <fperez@colorado.edu>
3661
3666
3662 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3667 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3663 Gnuplot.File objects.
3668 Gnuplot.File objects.
3664
3669
3665 2002-07-23 Fernando Perez <fperez@colorado.edu>
3670 2002-07-23 Fernando Perez <fperez@colorado.edu>
3666
3671
3667 * IPython/genutils.py (timing): Added timings() and timing() for
3672 * IPython/genutils.py (timing): Added timings() and timing() for
3668 quick access to the most commonly needed data, the execution
3673 quick access to the most commonly needed data, the execution
3669 times. Old timing() renamed to timings_out().
3674 times. Old timing() renamed to timings_out().
3670
3675
3671 2002-07-18 Fernando Perez <fperez@colorado.edu>
3676 2002-07-18 Fernando Perez <fperez@colorado.edu>
3672
3677
3673 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3678 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3674 bug with nested instances disrupting the parent's tab completion.
3679 bug with nested instances disrupting the parent's tab completion.
3675
3680
3676 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3681 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3677 all_completions code to begin the emacs integration.
3682 all_completions code to begin the emacs integration.
3678
3683
3679 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3684 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3680 argument to allow titling individual arrays when plotting.
3685 argument to allow titling individual arrays when plotting.
3681
3686
3682 2002-07-15 Fernando Perez <fperez@colorado.edu>
3687 2002-07-15 Fernando Perez <fperez@colorado.edu>
3683
3688
3684 * setup.py (make_shortcut): changed to retrieve the value of
3689 * setup.py (make_shortcut): changed to retrieve the value of
3685 'Program Files' directory from the registry (this value changes in
3690 'Program Files' directory from the registry (this value changes in
3686 non-english versions of Windows). Thanks to Thomas Fanslau
3691 non-english versions of Windows). Thanks to Thomas Fanslau
3687 <tfanslau-AT-gmx.de> for the report.
3692 <tfanslau-AT-gmx.de> for the report.
3688
3693
3689 2002-07-10 Fernando Perez <fperez@colorado.edu>
3694 2002-07-10 Fernando Perez <fperez@colorado.edu>
3690
3695
3691 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3696 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3692 a bug in pdb, which crashes if a line with only whitespace is
3697 a bug in pdb, which crashes if a line with only whitespace is
3693 entered. Bug report submitted to sourceforge.
3698 entered. Bug report submitted to sourceforge.
3694
3699
3695 2002-07-09 Fernando Perez <fperez@colorado.edu>
3700 2002-07-09 Fernando Perez <fperez@colorado.edu>
3696
3701
3697 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3702 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3698 reporting exceptions (it's a bug in inspect.py, I just set a
3703 reporting exceptions (it's a bug in inspect.py, I just set a
3699 workaround).
3704 workaround).
3700
3705
3701 2002-07-08 Fernando Perez <fperez@colorado.edu>
3706 2002-07-08 Fernando Perez <fperez@colorado.edu>
3702
3707
3703 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3708 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3704 __IPYTHON__ in __builtins__ to show up in user_ns.
3709 __IPYTHON__ in __builtins__ to show up in user_ns.
3705
3710
3706 2002-07-03 Fernando Perez <fperez@colorado.edu>
3711 2002-07-03 Fernando Perez <fperez@colorado.edu>
3707
3712
3708 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3713 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3709 name from @gp_set_instance to @gp_set_default.
3714 name from @gp_set_instance to @gp_set_default.
3710
3715
3711 * IPython/ipmaker.py (make_IPython): default editor value set to
3716 * IPython/ipmaker.py (make_IPython): default editor value set to
3712 '0' (a string), to match the rc file. Otherwise will crash when
3717 '0' (a string), to match the rc file. Otherwise will crash when
3713 .strip() is called on it.
3718 .strip() is called on it.
3714
3719
3715
3720
3716 2002-06-28 Fernando Perez <fperez@colorado.edu>
3721 2002-06-28 Fernando Perez <fperez@colorado.edu>
3717
3722
3718 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3723 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3719 of files in current directory when a file is executed via
3724 of files in current directory when a file is executed via
3720 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3725 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3721
3726
3722 * setup.py (manfiles): fix for rpm builds, submitted by RA
3727 * setup.py (manfiles): fix for rpm builds, submitted by RA
3723 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3728 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3724
3729
3725 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3730 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3726 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3731 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3727 string!). A. Schmolck caught this one.
3732 string!). A. Schmolck caught this one.
3728
3733
3729 2002-06-27 Fernando Perez <fperez@colorado.edu>
3734 2002-06-27 Fernando Perez <fperez@colorado.edu>
3730
3735
3731 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3736 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3732 defined files at the cmd line. __name__ wasn't being set to
3737 defined files at the cmd line. __name__ wasn't being set to
3733 __main__.
3738 __main__.
3734
3739
3735 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3740 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3736 regular lists and tuples besides Numeric arrays.
3741 regular lists and tuples besides Numeric arrays.
3737
3742
3738 * IPython/Prompts.py (CachedOutput.__call__): Added output
3743 * IPython/Prompts.py (CachedOutput.__call__): Added output
3739 supression for input ending with ';'. Similar to Mathematica and
3744 supression for input ending with ';'. Similar to Mathematica and
3740 Matlab. The _* vars and Out[] list are still updated, just like
3745 Matlab. The _* vars and Out[] list are still updated, just like
3741 Mathematica behaves.
3746 Mathematica behaves.
3742
3747
3743 2002-06-25 Fernando Perez <fperez@colorado.edu>
3748 2002-06-25 Fernando Perez <fperez@colorado.edu>
3744
3749
3745 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3750 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3746 .ini extensions for profiels under Windows.
3751 .ini extensions for profiels under Windows.
3747
3752
3748 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3753 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3749 string form. Fix contributed by Alexander Schmolck
3754 string form. Fix contributed by Alexander Schmolck
3750 <a.schmolck-AT-gmx.net>
3755 <a.schmolck-AT-gmx.net>
3751
3756
3752 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3757 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3753 pre-configured Gnuplot instance.
3758 pre-configured Gnuplot instance.
3754
3759
3755 2002-06-21 Fernando Perez <fperez@colorado.edu>
3760 2002-06-21 Fernando Perez <fperez@colorado.edu>
3756
3761
3757 * IPython/numutils.py (exp_safe): new function, works around the
3762 * IPython/numutils.py (exp_safe): new function, works around the
3758 underflow problems in Numeric.
3763 underflow problems in Numeric.
3759 (log2): New fn. Safe log in base 2: returns exact integer answer
3764 (log2): New fn. Safe log in base 2: returns exact integer answer
3760 for exact integer powers of 2.
3765 for exact integer powers of 2.
3761
3766
3762 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3767 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3763 properly.
3768 properly.
3764
3769
3765 2002-06-20 Fernando Perez <fperez@colorado.edu>
3770 2002-06-20 Fernando Perez <fperez@colorado.edu>
3766
3771
3767 * IPython/genutils.py (timing): new function like
3772 * IPython/genutils.py (timing): new function like
3768 Mathematica's. Similar to time_test, but returns more info.
3773 Mathematica's. Similar to time_test, but returns more info.
3769
3774
3770 2002-06-18 Fernando Perez <fperez@colorado.edu>
3775 2002-06-18 Fernando Perez <fperez@colorado.edu>
3771
3776
3772 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3777 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3773 according to Mike Heeter's suggestions.
3778 according to Mike Heeter's suggestions.
3774
3779
3775 2002-06-16 Fernando Perez <fperez@colorado.edu>
3780 2002-06-16 Fernando Perez <fperez@colorado.edu>
3776
3781
3777 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3782 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3778 system. GnuplotMagic is gone as a user-directory option. New files
3783 system. GnuplotMagic is gone as a user-directory option. New files
3779 make it easier to use all the gnuplot stuff both from external
3784 make it easier to use all the gnuplot stuff both from external
3780 programs as well as from IPython. Had to rewrite part of
3785 programs as well as from IPython. Had to rewrite part of
3781 hardcopy() b/c of a strange bug: often the ps files simply don't
3786 hardcopy() b/c of a strange bug: often the ps files simply don't
3782 get created, and require a repeat of the command (often several
3787 get created, and require a repeat of the command (often several
3783 times).
3788 times).
3784
3789
3785 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3790 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3786 resolve output channel at call time, so that if sys.stderr has
3791 resolve output channel at call time, so that if sys.stderr has
3787 been redirected by user this gets honored.
3792 been redirected by user this gets honored.
3788
3793
3789 2002-06-13 Fernando Perez <fperez@colorado.edu>
3794 2002-06-13 Fernando Perez <fperez@colorado.edu>
3790
3795
3791 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3796 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3792 IPShell. Kept a copy with the old names to avoid breaking people's
3797 IPShell. Kept a copy with the old names to avoid breaking people's
3793 embedded code.
3798 embedded code.
3794
3799
3795 * IPython/ipython: simplified it to the bare minimum after
3800 * IPython/ipython: simplified it to the bare minimum after
3796 Holger's suggestions. Added info about how to use it in
3801 Holger's suggestions. Added info about how to use it in
3797 PYTHONSTARTUP.
3802 PYTHONSTARTUP.
3798
3803
3799 * IPython/Shell.py (IPythonShell): changed the options passing
3804 * IPython/Shell.py (IPythonShell): changed the options passing
3800 from a string with funky %s replacements to a straight list. Maybe
3805 from a string with funky %s replacements to a straight list. Maybe
3801 a bit more typing, but it follows sys.argv conventions, so there's
3806 a bit more typing, but it follows sys.argv conventions, so there's
3802 less special-casing to remember.
3807 less special-casing to remember.
3803
3808
3804 2002-06-12 Fernando Perez <fperez@colorado.edu>
3809 2002-06-12 Fernando Perez <fperez@colorado.edu>
3805
3810
3806 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3811 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3807 command. Thanks to a suggestion by Mike Heeter.
3812 command. Thanks to a suggestion by Mike Heeter.
3808 (Magic.magic_pfile): added behavior to look at filenames if given
3813 (Magic.magic_pfile): added behavior to look at filenames if given
3809 arg is not a defined object.
3814 arg is not a defined object.
3810 (Magic.magic_save): New @save function to save code snippets. Also
3815 (Magic.magic_save): New @save function to save code snippets. Also
3811 a Mike Heeter idea.
3816 a Mike Heeter idea.
3812
3817
3813 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3818 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3814 plot() and replot(). Much more convenient now, especially for
3819 plot() and replot(). Much more convenient now, especially for
3815 interactive use.
3820 interactive use.
3816
3821
3817 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3822 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3818 filenames.
3823 filenames.
3819
3824
3820 2002-06-02 Fernando Perez <fperez@colorado.edu>
3825 2002-06-02 Fernando Perez <fperez@colorado.edu>
3821
3826
3822 * IPython/Struct.py (Struct.__init__): modified to admit
3827 * IPython/Struct.py (Struct.__init__): modified to admit
3823 initialization via another struct.
3828 initialization via another struct.
3824
3829
3825 * IPython/genutils.py (SystemExec.__init__): New stateful
3830 * IPython/genutils.py (SystemExec.__init__): New stateful
3826 interface to xsys and bq. Useful for writing system scripts.
3831 interface to xsys and bq. Useful for writing system scripts.
3827
3832
3828 2002-05-30 Fernando Perez <fperez@colorado.edu>
3833 2002-05-30 Fernando Perez <fperez@colorado.edu>
3829
3834
3830 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3835 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3831 documents. This will make the user download smaller (it's getting
3836 documents. This will make the user download smaller (it's getting
3832 too big).
3837 too big).
3833
3838
3834 2002-05-29 Fernando Perez <fperez@colorado.edu>
3839 2002-05-29 Fernando Perez <fperez@colorado.edu>
3835
3840
3836 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3841 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3837 fix problems with shelve and pickle. Seems to work, but I don't
3842 fix problems with shelve and pickle. Seems to work, but I don't
3838 know if corner cases break it. Thanks to Mike Heeter
3843 know if corner cases break it. Thanks to Mike Heeter
3839 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3844 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3840
3845
3841 2002-05-24 Fernando Perez <fperez@colorado.edu>
3846 2002-05-24 Fernando Perez <fperez@colorado.edu>
3842
3847
3843 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3848 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3844 macros having broken.
3849 macros having broken.
3845
3850
3846 2002-05-21 Fernando Perez <fperez@colorado.edu>
3851 2002-05-21 Fernando Perez <fperez@colorado.edu>
3847
3852
3848 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3853 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3849 introduced logging bug: all history before logging started was
3854 introduced logging bug: all history before logging started was
3850 being written one character per line! This came from the redesign
3855 being written one character per line! This came from the redesign
3851 of the input history as a special list which slices to strings,
3856 of the input history as a special list which slices to strings,
3852 not to lists.
3857 not to lists.
3853
3858
3854 2002-05-20 Fernando Perez <fperez@colorado.edu>
3859 2002-05-20 Fernando Perez <fperez@colorado.edu>
3855
3860
3856 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3861 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3857 be an attribute of all classes in this module. The design of these
3862 be an attribute of all classes in this module. The design of these
3858 classes needs some serious overhauling.
3863 classes needs some serious overhauling.
3859
3864
3860 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3865 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3861 which was ignoring '_' in option names.
3866 which was ignoring '_' in option names.
3862
3867
3863 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3868 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3864 'Verbose_novars' to 'Context' and made it the new default. It's a
3869 'Verbose_novars' to 'Context' and made it the new default. It's a
3865 bit more readable and also safer than verbose.
3870 bit more readable and also safer than verbose.
3866
3871
3867 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3872 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3868 triple-quoted strings.
3873 triple-quoted strings.
3869
3874
3870 * IPython/OInspect.py (__all__): new module exposing the object
3875 * IPython/OInspect.py (__all__): new module exposing the object
3871 introspection facilities. Now the corresponding magics are dummy
3876 introspection facilities. Now the corresponding magics are dummy
3872 wrappers around this. Having this module will make it much easier
3877 wrappers around this. Having this module will make it much easier
3873 to put these functions into our modified pdb.
3878 to put these functions into our modified pdb.
3874 This new object inspector system uses the new colorizing module,
3879 This new object inspector system uses the new colorizing module,
3875 so source code and other things are nicely syntax highlighted.
3880 so source code and other things are nicely syntax highlighted.
3876
3881
3877 2002-05-18 Fernando Perez <fperez@colorado.edu>
3882 2002-05-18 Fernando Perez <fperez@colorado.edu>
3878
3883
3879 * IPython/ColorANSI.py: Split the coloring tools into a separate
3884 * IPython/ColorANSI.py: Split the coloring tools into a separate
3880 module so I can use them in other code easier (they were part of
3885 module so I can use them in other code easier (they were part of
3881 ultraTB).
3886 ultraTB).
3882
3887
3883 2002-05-17 Fernando Perez <fperez@colorado.edu>
3888 2002-05-17 Fernando Perez <fperez@colorado.edu>
3884
3889
3885 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3890 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3886 fixed it to set the global 'g' also to the called instance, as
3891 fixed it to set the global 'g' also to the called instance, as
3887 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3892 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3888 user's 'g' variables).
3893 user's 'g' variables).
3889
3894
3890 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3895 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3891 global variables (aliases to _ih,_oh) so that users which expect
3896 global variables (aliases to _ih,_oh) so that users which expect
3892 In[5] or Out[7] to work aren't unpleasantly surprised.
3897 In[5] or Out[7] to work aren't unpleasantly surprised.
3893 (InputList.__getslice__): new class to allow executing slices of
3898 (InputList.__getslice__): new class to allow executing slices of
3894 input history directly. Very simple class, complements the use of
3899 input history directly. Very simple class, complements the use of
3895 macros.
3900 macros.
3896
3901
3897 2002-05-16 Fernando Perez <fperez@colorado.edu>
3902 2002-05-16 Fernando Perez <fperez@colorado.edu>
3898
3903
3899 * setup.py (docdirbase): make doc directory be just doc/IPython
3904 * setup.py (docdirbase): make doc directory be just doc/IPython
3900 without version numbers, it will reduce clutter for users.
3905 without version numbers, it will reduce clutter for users.
3901
3906
3902 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3907 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3903 execfile call to prevent possible memory leak. See for details:
3908 execfile call to prevent possible memory leak. See for details:
3904 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3909 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3905
3910
3906 2002-05-15 Fernando Perez <fperez@colorado.edu>
3911 2002-05-15 Fernando Perez <fperez@colorado.edu>
3907
3912
3908 * IPython/Magic.py (Magic.magic_psource): made the object
3913 * IPython/Magic.py (Magic.magic_psource): made the object
3909 introspection names be more standard: pdoc, pdef, pfile and
3914 introspection names be more standard: pdoc, pdef, pfile and
3910 psource. They all print/page their output, and it makes
3915 psource. They all print/page their output, and it makes
3911 remembering them easier. Kept old names for compatibility as
3916 remembering them easier. Kept old names for compatibility as
3912 aliases.
3917 aliases.
3913
3918
3914 2002-05-14 Fernando Perez <fperez@colorado.edu>
3919 2002-05-14 Fernando Perez <fperez@colorado.edu>
3915
3920
3916 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3921 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3917 what the mouse problem was. The trick is to use gnuplot with temp
3922 what the mouse problem was. The trick is to use gnuplot with temp
3918 files and NOT with pipes (for data communication), because having
3923 files and NOT with pipes (for data communication), because having
3919 both pipes and the mouse on is bad news.
3924 both pipes and the mouse on is bad news.
3920
3925
3921 2002-05-13 Fernando Perez <fperez@colorado.edu>
3926 2002-05-13 Fernando Perez <fperez@colorado.edu>
3922
3927
3923 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3928 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3924 bug. Information would be reported about builtins even when
3929 bug. Information would be reported about builtins even when
3925 user-defined functions overrode them.
3930 user-defined functions overrode them.
3926
3931
3927 2002-05-11 Fernando Perez <fperez@colorado.edu>
3932 2002-05-11 Fernando Perez <fperez@colorado.edu>
3928
3933
3929 * IPython/__init__.py (__all__): removed FlexCompleter from
3934 * IPython/__init__.py (__all__): removed FlexCompleter from
3930 __all__ so that things don't fail in platforms without readline.
3935 __all__ so that things don't fail in platforms without readline.
3931
3936
3932 2002-05-10 Fernando Perez <fperez@colorado.edu>
3937 2002-05-10 Fernando Perez <fperez@colorado.edu>
3933
3938
3934 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3939 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3935 it requires Numeric, effectively making Numeric a dependency for
3940 it requires Numeric, effectively making Numeric a dependency for
3936 IPython.
3941 IPython.
3937
3942
3938 * Released 0.2.13
3943 * Released 0.2.13
3939
3944
3940 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3945 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3941 profiler interface. Now all the major options from the profiler
3946 profiler interface. Now all the major options from the profiler
3942 module are directly supported in IPython, both for single
3947 module are directly supported in IPython, both for single
3943 expressions (@prun) and for full programs (@run -p).
3948 expressions (@prun) and for full programs (@run -p).
3944
3949
3945 2002-05-09 Fernando Perez <fperez@colorado.edu>
3950 2002-05-09 Fernando Perez <fperez@colorado.edu>
3946
3951
3947 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3952 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3948 magic properly formatted for screen.
3953 magic properly formatted for screen.
3949
3954
3950 * setup.py (make_shortcut): Changed things to put pdf version in
3955 * setup.py (make_shortcut): Changed things to put pdf version in
3951 doc/ instead of doc/manual (had to change lyxport a bit).
3956 doc/ instead of doc/manual (had to change lyxport a bit).
3952
3957
3953 * IPython/Magic.py (Profile.string_stats): made profile runs go
3958 * IPython/Magic.py (Profile.string_stats): made profile runs go
3954 through pager (they are long and a pager allows searching, saving,
3959 through pager (they are long and a pager allows searching, saving,
3955 etc.)
3960 etc.)
3956
3961
3957 2002-05-08 Fernando Perez <fperez@colorado.edu>
3962 2002-05-08 Fernando Perez <fperez@colorado.edu>
3958
3963
3959 * Released 0.2.12
3964 * Released 0.2.12
3960
3965
3961 2002-05-06 Fernando Perez <fperez@colorado.edu>
3966 2002-05-06 Fernando Perez <fperez@colorado.edu>
3962
3967
3963 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3968 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3964 introduced); 'hist n1 n2' was broken.
3969 introduced); 'hist n1 n2' was broken.
3965 (Magic.magic_pdb): added optional on/off arguments to @pdb
3970 (Magic.magic_pdb): added optional on/off arguments to @pdb
3966 (Magic.magic_run): added option -i to @run, which executes code in
3971 (Magic.magic_run): added option -i to @run, which executes code in
3967 the IPython namespace instead of a clean one. Also added @irun as
3972 the IPython namespace instead of a clean one. Also added @irun as
3968 an alias to @run -i.
3973 an alias to @run -i.
3969
3974
3970 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3975 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3971 fixed (it didn't really do anything, the namespaces were wrong).
3976 fixed (it didn't really do anything, the namespaces were wrong).
3972
3977
3973 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3978 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3974
3979
3975 * IPython/__init__.py (__all__): Fixed package namespace, now
3980 * IPython/__init__.py (__all__): Fixed package namespace, now
3976 'import IPython' does give access to IPython.<all> as
3981 'import IPython' does give access to IPython.<all> as
3977 expected. Also renamed __release__ to Release.
3982 expected. Also renamed __release__ to Release.
3978
3983
3979 * IPython/Debugger.py (__license__): created new Pdb class which
3984 * IPython/Debugger.py (__license__): created new Pdb class which
3980 functions like a drop-in for the normal pdb.Pdb but does NOT
3985 functions like a drop-in for the normal pdb.Pdb but does NOT
3981 import readline by default. This way it doesn't muck up IPython's
3986 import readline by default. This way it doesn't muck up IPython's
3982 readline handling, and now tab-completion finally works in the
3987 readline handling, and now tab-completion finally works in the
3983 debugger -- sort of. It completes things globally visible, but the
3988 debugger -- sort of. It completes things globally visible, but the
3984 completer doesn't track the stack as pdb walks it. That's a bit
3989 completer doesn't track the stack as pdb walks it. That's a bit
3985 tricky, and I'll have to implement it later.
3990 tricky, and I'll have to implement it later.
3986
3991
3987 2002-05-05 Fernando Perez <fperez@colorado.edu>
3992 2002-05-05 Fernando Perez <fperez@colorado.edu>
3988
3993
3989 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3994 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3990 magic docstrings when printed via ? (explicit \'s were being
3995 magic docstrings when printed via ? (explicit \'s were being
3991 printed).
3996 printed).
3992
3997
3993 * IPython/ipmaker.py (make_IPython): fixed namespace
3998 * IPython/ipmaker.py (make_IPython): fixed namespace
3994 identification bug. Now variables loaded via logs or command-line
3999 identification bug. Now variables loaded via logs or command-line
3995 files are recognized in the interactive namespace by @who.
4000 files are recognized in the interactive namespace by @who.
3996
4001
3997 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4002 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3998 log replay system stemming from the string form of Structs.
4003 log replay system stemming from the string form of Structs.
3999
4004
4000 * IPython/Magic.py (Macro.__init__): improved macros to properly
4005 * IPython/Magic.py (Macro.__init__): improved macros to properly
4001 handle magic commands in them.
4006 handle magic commands in them.
4002 (Magic.magic_logstart): usernames are now expanded so 'logstart
4007 (Magic.magic_logstart): usernames are now expanded so 'logstart
4003 ~/mylog' now works.
4008 ~/mylog' now works.
4004
4009
4005 * IPython/iplib.py (complete): fixed bug where paths starting with
4010 * IPython/iplib.py (complete): fixed bug where paths starting with
4006 '/' would be completed as magic names.
4011 '/' would be completed as magic names.
4007
4012
4008 2002-05-04 Fernando Perez <fperez@colorado.edu>
4013 2002-05-04 Fernando Perez <fperez@colorado.edu>
4009
4014
4010 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4015 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4011 allow running full programs under the profiler's control.
4016 allow running full programs under the profiler's control.
4012
4017
4013 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4018 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4014 mode to report exceptions verbosely but without formatting
4019 mode to report exceptions verbosely but without formatting
4015 variables. This addresses the issue of ipython 'freezing' (it's
4020 variables. This addresses the issue of ipython 'freezing' (it's
4016 not frozen, but caught in an expensive formatting loop) when huge
4021 not frozen, but caught in an expensive formatting loop) when huge
4017 variables are in the context of an exception.
4022 variables are in the context of an exception.
4018 (VerboseTB.text): Added '--->' markers at line where exception was
4023 (VerboseTB.text): Added '--->' markers at line where exception was
4019 triggered. Much clearer to read, especially in NoColor modes.
4024 triggered. Much clearer to read, especially in NoColor modes.
4020
4025
4021 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4026 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4022 implemented in reverse when changing to the new parse_options().
4027 implemented in reverse when changing to the new parse_options().
4023
4028
4024 2002-05-03 Fernando Perez <fperez@colorado.edu>
4029 2002-05-03 Fernando Perez <fperez@colorado.edu>
4025
4030
4026 * IPython/Magic.py (Magic.parse_options): new function so that
4031 * IPython/Magic.py (Magic.parse_options): new function so that
4027 magics can parse options easier.
4032 magics can parse options easier.
4028 (Magic.magic_prun): new function similar to profile.run(),
4033 (Magic.magic_prun): new function similar to profile.run(),
4029 suggested by Chris Hart.
4034 suggested by Chris Hart.
4030 (Magic.magic_cd): fixed behavior so that it only changes if
4035 (Magic.magic_cd): fixed behavior so that it only changes if
4031 directory actually is in history.
4036 directory actually is in history.
4032
4037
4033 * IPython/usage.py (__doc__): added information about potential
4038 * IPython/usage.py (__doc__): added information about potential
4034 slowness of Verbose exception mode when there are huge data
4039 slowness of Verbose exception mode when there are huge data
4035 structures to be formatted (thanks to Archie Paulson).
4040 structures to be formatted (thanks to Archie Paulson).
4036
4041
4037 * IPython/ipmaker.py (make_IPython): Changed default logging
4042 * IPython/ipmaker.py (make_IPython): Changed default logging
4038 (when simply called with -log) to use curr_dir/ipython.log in
4043 (when simply called with -log) to use curr_dir/ipython.log in
4039 rotate mode. Fixed crash which was occuring with -log before
4044 rotate mode. Fixed crash which was occuring with -log before
4040 (thanks to Jim Boyle).
4045 (thanks to Jim Boyle).
4041
4046
4042 2002-05-01 Fernando Perez <fperez@colorado.edu>
4047 2002-05-01 Fernando Perez <fperez@colorado.edu>
4043
4048
4044 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4049 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4045 was nasty -- though somewhat of a corner case).
4050 was nasty -- though somewhat of a corner case).
4046
4051
4047 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4052 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4048 text (was a bug).
4053 text (was a bug).
4049
4054
4050 2002-04-30 Fernando Perez <fperez@colorado.edu>
4055 2002-04-30 Fernando Perez <fperez@colorado.edu>
4051
4056
4052 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4057 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4053 a print after ^D or ^C from the user so that the In[] prompt
4058 a print after ^D or ^C from the user so that the In[] prompt
4054 doesn't over-run the gnuplot one.
4059 doesn't over-run the gnuplot one.
4055
4060
4056 2002-04-29 Fernando Perez <fperez@colorado.edu>
4061 2002-04-29 Fernando Perez <fperez@colorado.edu>
4057
4062
4058 * Released 0.2.10
4063 * Released 0.2.10
4059
4064
4060 * IPython/__release__.py (version): get date dynamically.
4065 * IPython/__release__.py (version): get date dynamically.
4061
4066
4062 * Misc. documentation updates thanks to Arnd's comments. Also ran
4067 * Misc. documentation updates thanks to Arnd's comments. Also ran
4063 a full spellcheck on the manual (hadn't been done in a while).
4068 a full spellcheck on the manual (hadn't been done in a while).
4064
4069
4065 2002-04-27 Fernando Perez <fperez@colorado.edu>
4070 2002-04-27 Fernando Perez <fperez@colorado.edu>
4066
4071
4067 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4072 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4068 starting a log in mid-session would reset the input history list.
4073 starting a log in mid-session would reset the input history list.
4069
4074
4070 2002-04-26 Fernando Perez <fperez@colorado.edu>
4075 2002-04-26 Fernando Perez <fperez@colorado.edu>
4071
4076
4072 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4077 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4073 all files were being included in an update. Now anything in
4078 all files were being included in an update. Now anything in
4074 UserConfig that matches [A-Za-z]*.py will go (this excludes
4079 UserConfig that matches [A-Za-z]*.py will go (this excludes
4075 __init__.py)
4080 __init__.py)
4076
4081
4077 2002-04-25 Fernando Perez <fperez@colorado.edu>
4082 2002-04-25 Fernando Perez <fperez@colorado.edu>
4078
4083
4079 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4084 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4080 to __builtins__ so that any form of embedded or imported code can
4085 to __builtins__ so that any form of embedded or imported code can
4081 test for being inside IPython.
4086 test for being inside IPython.
4082
4087
4083 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4088 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4084 changed to GnuplotMagic because it's now an importable module,
4089 changed to GnuplotMagic because it's now an importable module,
4085 this makes the name follow that of the standard Gnuplot module.
4090 this makes the name follow that of the standard Gnuplot module.
4086 GnuplotMagic can now be loaded at any time in mid-session.
4091 GnuplotMagic can now be loaded at any time in mid-session.
4087
4092
4088 2002-04-24 Fernando Perez <fperez@colorado.edu>
4093 2002-04-24 Fernando Perez <fperez@colorado.edu>
4089
4094
4090 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4095 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4091 the globals (IPython has its own namespace) and the
4096 the globals (IPython has its own namespace) and the
4092 PhysicalQuantity stuff is much better anyway.
4097 PhysicalQuantity stuff is much better anyway.
4093
4098
4094 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4099 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4095 embedding example to standard user directory for
4100 embedding example to standard user directory for
4096 distribution. Also put it in the manual.
4101 distribution. Also put it in the manual.
4097
4102
4098 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4103 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4099 instance as first argument (so it doesn't rely on some obscure
4104 instance as first argument (so it doesn't rely on some obscure
4100 hidden global).
4105 hidden global).
4101
4106
4102 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4107 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4103 delimiters. While it prevents ().TAB from working, it allows
4108 delimiters. While it prevents ().TAB from working, it allows
4104 completions in open (... expressions. This is by far a more common
4109 completions in open (... expressions. This is by far a more common
4105 case.
4110 case.
4106
4111
4107 2002-04-23 Fernando Perez <fperez@colorado.edu>
4112 2002-04-23 Fernando Perez <fperez@colorado.edu>
4108
4113
4109 * IPython/Extensions/InterpreterPasteInput.py: new
4114 * IPython/Extensions/InterpreterPasteInput.py: new
4110 syntax-processing module for pasting lines with >>> or ... at the
4115 syntax-processing module for pasting lines with >>> or ... at the
4111 start.
4116 start.
4112
4117
4113 * IPython/Extensions/PhysicalQ_Interactive.py
4118 * IPython/Extensions/PhysicalQ_Interactive.py
4114 (PhysicalQuantityInteractive.__int__): fixed to work with either
4119 (PhysicalQuantityInteractive.__int__): fixed to work with either
4115 Numeric or math.
4120 Numeric or math.
4116
4121
4117 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4122 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4118 provided profiles. Now we have:
4123 provided profiles. Now we have:
4119 -math -> math module as * and cmath with its own namespace.
4124 -math -> math module as * and cmath with its own namespace.
4120 -numeric -> Numeric as *, plus gnuplot & grace
4125 -numeric -> Numeric as *, plus gnuplot & grace
4121 -physics -> same as before
4126 -physics -> same as before
4122
4127
4123 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4128 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4124 user-defined magics wouldn't be found by @magic if they were
4129 user-defined magics wouldn't be found by @magic if they were
4125 defined as class methods. Also cleaned up the namespace search
4130 defined as class methods. Also cleaned up the namespace search
4126 logic and the string building (to use %s instead of many repeated
4131 logic and the string building (to use %s instead of many repeated
4127 string adds).
4132 string adds).
4128
4133
4129 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4134 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4130 of user-defined magics to operate with class methods (cleaner, in
4135 of user-defined magics to operate with class methods (cleaner, in
4131 line with the gnuplot code).
4136 line with the gnuplot code).
4132
4137
4133 2002-04-22 Fernando Perez <fperez@colorado.edu>
4138 2002-04-22 Fernando Perez <fperez@colorado.edu>
4134
4139
4135 * setup.py: updated dependency list so that manual is updated when
4140 * setup.py: updated dependency list so that manual is updated when
4136 all included files change.
4141 all included files change.
4137
4142
4138 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4143 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4139 the delimiter removal option (the fix is ugly right now).
4144 the delimiter removal option (the fix is ugly right now).
4140
4145
4141 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4146 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4142 all of the math profile (quicker loading, no conflict between
4147 all of the math profile (quicker loading, no conflict between
4143 g-9.8 and g-gnuplot).
4148 g-9.8 and g-gnuplot).
4144
4149
4145 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4150 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4146 name of post-mortem files to IPython_crash_report.txt.
4151 name of post-mortem files to IPython_crash_report.txt.
4147
4152
4148 * Cleanup/update of the docs. Added all the new readline info and
4153 * Cleanup/update of the docs. Added all the new readline info and
4149 formatted all lists as 'real lists'.
4154 formatted all lists as 'real lists'.
4150
4155
4151 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4156 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4152 tab-completion options, since the full readline parse_and_bind is
4157 tab-completion options, since the full readline parse_and_bind is
4153 now accessible.
4158 now accessible.
4154
4159
4155 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4160 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4156 handling of readline options. Now users can specify any string to
4161 handling of readline options. Now users can specify any string to
4157 be passed to parse_and_bind(), as well as the delimiters to be
4162 be passed to parse_and_bind(), as well as the delimiters to be
4158 removed.
4163 removed.
4159 (InteractiveShell.__init__): Added __name__ to the global
4164 (InteractiveShell.__init__): Added __name__ to the global
4160 namespace so that things like Itpl which rely on its existence
4165 namespace so that things like Itpl which rely on its existence
4161 don't crash.
4166 don't crash.
4162 (InteractiveShell._prefilter): Defined the default with a _ so
4167 (InteractiveShell._prefilter): Defined the default with a _ so
4163 that prefilter() is easier to override, while the default one
4168 that prefilter() is easier to override, while the default one
4164 remains available.
4169 remains available.
4165
4170
4166 2002-04-18 Fernando Perez <fperez@colorado.edu>
4171 2002-04-18 Fernando Perez <fperez@colorado.edu>
4167
4172
4168 * Added information about pdb in the docs.
4173 * Added information about pdb in the docs.
4169
4174
4170 2002-04-17 Fernando Perez <fperez@colorado.edu>
4175 2002-04-17 Fernando Perez <fperez@colorado.edu>
4171
4176
4172 * IPython/ipmaker.py (make_IPython): added rc_override option to
4177 * IPython/ipmaker.py (make_IPython): added rc_override option to
4173 allow passing config options at creation time which may override
4178 allow passing config options at creation time which may override
4174 anything set in the config files or command line. This is
4179 anything set in the config files or command line. This is
4175 particularly useful for configuring embedded instances.
4180 particularly useful for configuring embedded instances.
4176
4181
4177 2002-04-15 Fernando Perez <fperez@colorado.edu>
4182 2002-04-15 Fernando Perez <fperez@colorado.edu>
4178
4183
4179 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4184 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4180 crash embedded instances because of the input cache falling out of
4185 crash embedded instances because of the input cache falling out of
4181 sync with the output counter.
4186 sync with the output counter.
4182
4187
4183 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4188 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4184 mode which calls pdb after an uncaught exception in IPython itself.
4189 mode which calls pdb after an uncaught exception in IPython itself.
4185
4190
4186 2002-04-14 Fernando Perez <fperez@colorado.edu>
4191 2002-04-14 Fernando Perez <fperez@colorado.edu>
4187
4192
4188 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4193 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4189 readline, fix it back after each call.
4194 readline, fix it back after each call.
4190
4195
4191 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4196 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4192 method to force all access via __call__(), which guarantees that
4197 method to force all access via __call__(), which guarantees that
4193 traceback references are properly deleted.
4198 traceback references are properly deleted.
4194
4199
4195 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4200 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4196 improve printing when pprint is in use.
4201 improve printing when pprint is in use.
4197
4202
4198 2002-04-13 Fernando Perez <fperez@colorado.edu>
4203 2002-04-13 Fernando Perez <fperez@colorado.edu>
4199
4204
4200 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4205 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4201 exceptions aren't caught anymore. If the user triggers one, he
4206 exceptions aren't caught anymore. If the user triggers one, he
4202 should know why he's doing it and it should go all the way up,
4207 should know why he's doing it and it should go all the way up,
4203 just like any other exception. So now @abort will fully kill the
4208 just like any other exception. So now @abort will fully kill the
4204 embedded interpreter and the embedding code (unless that happens
4209 embedded interpreter and the embedding code (unless that happens
4205 to catch SystemExit).
4210 to catch SystemExit).
4206
4211
4207 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4212 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4208 and a debugger() method to invoke the interactive pdb debugger
4213 and a debugger() method to invoke the interactive pdb debugger
4209 after printing exception information. Also added the corresponding
4214 after printing exception information. Also added the corresponding
4210 -pdb option and @pdb magic to control this feature, and updated
4215 -pdb option and @pdb magic to control this feature, and updated
4211 the docs. After a suggestion from Christopher Hart
4216 the docs. After a suggestion from Christopher Hart
4212 (hart-AT-caltech.edu).
4217 (hart-AT-caltech.edu).
4213
4218
4214 2002-04-12 Fernando Perez <fperez@colorado.edu>
4219 2002-04-12 Fernando Perez <fperez@colorado.edu>
4215
4220
4216 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4221 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4217 the exception handlers defined by the user (not the CrashHandler)
4222 the exception handlers defined by the user (not the CrashHandler)
4218 so that user exceptions don't trigger an ipython bug report.
4223 so that user exceptions don't trigger an ipython bug report.
4219
4224
4220 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4225 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4221 configurable (it should have always been so).
4226 configurable (it should have always been so).
4222
4227
4223 2002-03-26 Fernando Perez <fperez@colorado.edu>
4228 2002-03-26 Fernando Perez <fperez@colorado.edu>
4224
4229
4225 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4230 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4226 and there to fix embedding namespace issues. This should all be
4231 and there to fix embedding namespace issues. This should all be
4227 done in a more elegant way.
4232 done in a more elegant way.
4228
4233
4229 2002-03-25 Fernando Perez <fperez@colorado.edu>
4234 2002-03-25 Fernando Perez <fperez@colorado.edu>
4230
4235
4231 * IPython/genutils.py (get_home_dir): Try to make it work under
4236 * IPython/genutils.py (get_home_dir): Try to make it work under
4232 win9x also.
4237 win9x also.
4233
4238
4234 2002-03-20 Fernando Perez <fperez@colorado.edu>
4239 2002-03-20 Fernando Perez <fperez@colorado.edu>
4235
4240
4236 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4241 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4237 sys.displayhook untouched upon __init__.
4242 sys.displayhook untouched upon __init__.
4238
4243
4239 2002-03-19 Fernando Perez <fperez@colorado.edu>
4244 2002-03-19 Fernando Perez <fperez@colorado.edu>
4240
4245
4241 * Released 0.2.9 (for embedding bug, basically).
4246 * Released 0.2.9 (for embedding bug, basically).
4242
4247
4243 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4248 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4244 exceptions so that enclosing shell's state can be restored.
4249 exceptions so that enclosing shell's state can be restored.
4245
4250
4246 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4251 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4247 naming conventions in the .ipython/ dir.
4252 naming conventions in the .ipython/ dir.
4248
4253
4249 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4254 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4250 from delimiters list so filenames with - in them get expanded.
4255 from delimiters list so filenames with - in them get expanded.
4251
4256
4252 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4257 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4253 sys.displayhook not being properly restored after an embedded call.
4258 sys.displayhook not being properly restored after an embedded call.
4254
4259
4255 2002-03-18 Fernando Perez <fperez@colorado.edu>
4260 2002-03-18 Fernando Perez <fperez@colorado.edu>
4256
4261
4257 * Released 0.2.8
4262 * Released 0.2.8
4258
4263
4259 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4264 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4260 some files weren't being included in a -upgrade.
4265 some files weren't being included in a -upgrade.
4261 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4266 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4262 on' so that the first tab completes.
4267 on' so that the first tab completes.
4263 (InteractiveShell.handle_magic): fixed bug with spaces around
4268 (InteractiveShell.handle_magic): fixed bug with spaces around
4264 quotes breaking many magic commands.
4269 quotes breaking many magic commands.
4265
4270
4266 * setup.py: added note about ignoring the syntax error messages at
4271 * setup.py: added note about ignoring the syntax error messages at
4267 installation.
4272 installation.
4268
4273
4269 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4274 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4270 streamlining the gnuplot interface, now there's only one magic @gp.
4275 streamlining the gnuplot interface, now there's only one magic @gp.
4271
4276
4272 2002-03-17 Fernando Perez <fperez@colorado.edu>
4277 2002-03-17 Fernando Perez <fperez@colorado.edu>
4273
4278
4274 * IPython/UserConfig/magic_gnuplot.py: new name for the
4279 * IPython/UserConfig/magic_gnuplot.py: new name for the
4275 example-magic_pm.py file. Much enhanced system, now with a shell
4280 example-magic_pm.py file. Much enhanced system, now with a shell
4276 for communicating directly with gnuplot, one command at a time.
4281 for communicating directly with gnuplot, one command at a time.
4277
4282
4278 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4283 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4279 setting __name__=='__main__'.
4284 setting __name__=='__main__'.
4280
4285
4281 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4286 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4282 mini-shell for accessing gnuplot from inside ipython. Should
4287 mini-shell for accessing gnuplot from inside ipython. Should
4283 extend it later for grace access too. Inspired by Arnd's
4288 extend it later for grace access too. Inspired by Arnd's
4284 suggestion.
4289 suggestion.
4285
4290
4286 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4291 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4287 calling magic functions with () in their arguments. Thanks to Arnd
4292 calling magic functions with () in their arguments. Thanks to Arnd
4288 Baecker for pointing this to me.
4293 Baecker for pointing this to me.
4289
4294
4290 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4295 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4291 infinitely for integer or complex arrays (only worked with floats).
4296 infinitely for integer or complex arrays (only worked with floats).
4292
4297
4293 2002-03-16 Fernando Perez <fperez@colorado.edu>
4298 2002-03-16 Fernando Perez <fperez@colorado.edu>
4294
4299
4295 * setup.py: Merged setup and setup_windows into a single script
4300 * setup.py: Merged setup and setup_windows into a single script
4296 which properly handles things for windows users.
4301 which properly handles things for windows users.
4297
4302
4298 2002-03-15 Fernando Perez <fperez@colorado.edu>
4303 2002-03-15 Fernando Perez <fperez@colorado.edu>
4299
4304
4300 * Big change to the manual: now the magics are all automatically
4305 * Big change to the manual: now the magics are all automatically
4301 documented. This information is generated from their docstrings
4306 documented. This information is generated from their docstrings
4302 and put in a latex file included by the manual lyx file. This way
4307 and put in a latex file included by the manual lyx file. This way
4303 we get always up to date information for the magics. The manual
4308 we get always up to date information for the magics. The manual
4304 now also has proper version information, also auto-synced.
4309 now also has proper version information, also auto-synced.
4305
4310
4306 For this to work, an undocumented --magic_docstrings option was added.
4311 For this to work, an undocumented --magic_docstrings option was added.
4307
4312
4308 2002-03-13 Fernando Perez <fperez@colorado.edu>
4313 2002-03-13 Fernando Perez <fperez@colorado.edu>
4309
4314
4310 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4315 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4311 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4316 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4312
4317
4313 2002-03-12 Fernando Perez <fperez@colorado.edu>
4318 2002-03-12 Fernando Perez <fperez@colorado.edu>
4314
4319
4315 * IPython/ultraTB.py (TermColors): changed color escapes again to
4320 * IPython/ultraTB.py (TermColors): changed color escapes again to
4316 fix the (old, reintroduced) line-wrapping bug. Basically, if
4321 fix the (old, reintroduced) line-wrapping bug. Basically, if
4317 \001..\002 aren't given in the color escapes, lines get wrapped
4322 \001..\002 aren't given in the color escapes, lines get wrapped
4318 weirdly. But giving those screws up old xterms and emacs terms. So
4323 weirdly. But giving those screws up old xterms and emacs terms. So
4319 I added some logic for emacs terms to be ok, but I can't identify old
4324 I added some logic for emacs terms to be ok, but I can't identify old
4320 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4325 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4321
4326
4322 2002-03-10 Fernando Perez <fperez@colorado.edu>
4327 2002-03-10 Fernando Perez <fperez@colorado.edu>
4323
4328
4324 * IPython/usage.py (__doc__): Various documentation cleanups and
4329 * IPython/usage.py (__doc__): Various documentation cleanups and
4325 updates, both in usage docstrings and in the manual.
4330 updates, both in usage docstrings and in the manual.
4326
4331
4327 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4332 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4328 handling of caching. Set minimum acceptabe value for having a
4333 handling of caching. Set minimum acceptabe value for having a
4329 cache at 20 values.
4334 cache at 20 values.
4330
4335
4331 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4336 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4332 install_first_time function to a method, renamed it and added an
4337 install_first_time function to a method, renamed it and added an
4333 'upgrade' mode. Now people can update their config directory with
4338 'upgrade' mode. Now people can update their config directory with
4334 a simple command line switch (-upgrade, also new).
4339 a simple command line switch (-upgrade, also new).
4335
4340
4336 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4341 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4337 @file (convenient for automagic users under Python >= 2.2).
4342 @file (convenient for automagic users under Python >= 2.2).
4338 Removed @files (it seemed more like a plural than an abbrev. of
4343 Removed @files (it seemed more like a plural than an abbrev. of
4339 'file show').
4344 'file show').
4340
4345
4341 * IPython/iplib.py (install_first_time): Fixed crash if there were
4346 * IPython/iplib.py (install_first_time): Fixed crash if there were
4342 backup files ('~') in .ipython/ install directory.
4347 backup files ('~') in .ipython/ install directory.
4343
4348
4344 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4349 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4345 system. Things look fine, but these changes are fairly
4350 system. Things look fine, but these changes are fairly
4346 intrusive. Test them for a few days.
4351 intrusive. Test them for a few days.
4347
4352
4348 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4353 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4349 the prompts system. Now all in/out prompt strings are user
4354 the prompts system. Now all in/out prompt strings are user
4350 controllable. This is particularly useful for embedding, as one
4355 controllable. This is particularly useful for embedding, as one
4351 can tag embedded instances with particular prompts.
4356 can tag embedded instances with particular prompts.
4352
4357
4353 Also removed global use of sys.ps1/2, which now allows nested
4358 Also removed global use of sys.ps1/2, which now allows nested
4354 embeddings without any problems. Added command-line options for
4359 embeddings without any problems. Added command-line options for
4355 the prompt strings.
4360 the prompt strings.
4356
4361
4357 2002-03-08 Fernando Perez <fperez@colorado.edu>
4362 2002-03-08 Fernando Perez <fperez@colorado.edu>
4358
4363
4359 * IPython/UserConfig/example-embed-short.py (ipshell): added
4364 * IPython/UserConfig/example-embed-short.py (ipshell): added
4360 example file with the bare minimum code for embedding.
4365 example file with the bare minimum code for embedding.
4361
4366
4362 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4367 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4363 functionality for the embeddable shell to be activated/deactivated
4368 functionality for the embeddable shell to be activated/deactivated
4364 either globally or at each call.
4369 either globally or at each call.
4365
4370
4366 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4371 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4367 rewriting the prompt with '--->' for auto-inputs with proper
4372 rewriting the prompt with '--->' for auto-inputs with proper
4368 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4373 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4369 this is handled by the prompts class itself, as it should.
4374 this is handled by the prompts class itself, as it should.
4370
4375
4371 2002-03-05 Fernando Perez <fperez@colorado.edu>
4376 2002-03-05 Fernando Perez <fperez@colorado.edu>
4372
4377
4373 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4378 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4374 @logstart to avoid name clashes with the math log function.
4379 @logstart to avoid name clashes with the math log function.
4375
4380
4376 * Big updates to X/Emacs section of the manual.
4381 * Big updates to X/Emacs section of the manual.
4377
4382
4378 * Removed ipython_emacs. Milan explained to me how to pass
4383 * Removed ipython_emacs. Milan explained to me how to pass
4379 arguments to ipython through Emacs. Some day I'm going to end up
4384 arguments to ipython through Emacs. Some day I'm going to end up
4380 learning some lisp...
4385 learning some lisp...
4381
4386
4382 2002-03-04 Fernando Perez <fperez@colorado.edu>
4387 2002-03-04 Fernando Perez <fperez@colorado.edu>
4383
4388
4384 * IPython/ipython_emacs: Created script to be used as the
4389 * IPython/ipython_emacs: Created script to be used as the
4385 py-python-command Emacs variable so we can pass IPython
4390 py-python-command Emacs variable so we can pass IPython
4386 parameters. I can't figure out how to tell Emacs directly to pass
4391 parameters. I can't figure out how to tell Emacs directly to pass
4387 parameters to IPython, so a dummy shell script will do it.
4392 parameters to IPython, so a dummy shell script will do it.
4388
4393
4389 Other enhancements made for things to work better under Emacs'
4394 Other enhancements made for things to work better under Emacs'
4390 various types of terminals. Many thanks to Milan Zamazal
4395 various types of terminals. Many thanks to Milan Zamazal
4391 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4396 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4392
4397
4393 2002-03-01 Fernando Perez <fperez@colorado.edu>
4398 2002-03-01 Fernando Perez <fperez@colorado.edu>
4394
4399
4395 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4400 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4396 that loading of readline is now optional. This gives better
4401 that loading of readline is now optional. This gives better
4397 control to emacs users.
4402 control to emacs users.
4398
4403
4399 * IPython/ultraTB.py (__date__): Modified color escape sequences
4404 * IPython/ultraTB.py (__date__): Modified color escape sequences
4400 and now things work fine under xterm and in Emacs' term buffers
4405 and now things work fine under xterm and in Emacs' term buffers
4401 (though not shell ones). Well, in emacs you get colors, but all
4406 (though not shell ones). Well, in emacs you get colors, but all
4402 seem to be 'light' colors (no difference between dark and light
4407 seem to be 'light' colors (no difference between dark and light
4403 ones). But the garbage chars are gone, and also in xterms. It
4408 ones). But the garbage chars are gone, and also in xterms. It
4404 seems that now I'm using 'cleaner' ansi sequences.
4409 seems that now I'm using 'cleaner' ansi sequences.
4405
4410
4406 2002-02-21 Fernando Perez <fperez@colorado.edu>
4411 2002-02-21 Fernando Perez <fperez@colorado.edu>
4407
4412
4408 * Released 0.2.7 (mainly to publish the scoping fix).
4413 * Released 0.2.7 (mainly to publish the scoping fix).
4409
4414
4410 * IPython/Logger.py (Logger.logstate): added. A corresponding
4415 * IPython/Logger.py (Logger.logstate): added. A corresponding
4411 @logstate magic was created.
4416 @logstate magic was created.
4412
4417
4413 * IPython/Magic.py: fixed nested scoping problem under Python
4418 * IPython/Magic.py: fixed nested scoping problem under Python
4414 2.1.x (automagic wasn't working).
4419 2.1.x (automagic wasn't working).
4415
4420
4416 2002-02-20 Fernando Perez <fperez@colorado.edu>
4421 2002-02-20 Fernando Perez <fperez@colorado.edu>
4417
4422
4418 * Released 0.2.6.
4423 * Released 0.2.6.
4419
4424
4420 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4425 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4421 option so that logs can come out without any headers at all.
4426 option so that logs can come out without any headers at all.
4422
4427
4423 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4428 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4424 SciPy.
4429 SciPy.
4425
4430
4426 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4431 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4427 that embedded IPython calls don't require vars() to be explicitly
4432 that embedded IPython calls don't require vars() to be explicitly
4428 passed. Now they are extracted from the caller's frame (code
4433 passed. Now they are extracted from the caller's frame (code
4429 snatched from Eric Jones' weave). Added better documentation to
4434 snatched from Eric Jones' weave). Added better documentation to
4430 the section on embedding and the example file.
4435 the section on embedding and the example file.
4431
4436
4432 * IPython/genutils.py (page): Changed so that under emacs, it just
4437 * IPython/genutils.py (page): Changed so that under emacs, it just
4433 prints the string. You can then page up and down in the emacs
4438 prints the string. You can then page up and down in the emacs
4434 buffer itself. This is how the builtin help() works.
4439 buffer itself. This is how the builtin help() works.
4435
4440
4436 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4441 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4437 macro scoping: macros need to be executed in the user's namespace
4442 macro scoping: macros need to be executed in the user's namespace
4438 to work as if they had been typed by the user.
4443 to work as if they had been typed by the user.
4439
4444
4440 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4445 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4441 execute automatically (no need to type 'exec...'). They then
4446 execute automatically (no need to type 'exec...'). They then
4442 behave like 'true macros'. The printing system was also modified
4447 behave like 'true macros'. The printing system was also modified
4443 for this to work.
4448 for this to work.
4444
4449
4445 2002-02-19 Fernando Perez <fperez@colorado.edu>
4450 2002-02-19 Fernando Perez <fperez@colorado.edu>
4446
4451
4447 * IPython/genutils.py (page_file): new function for paging files
4452 * IPython/genutils.py (page_file): new function for paging files
4448 in an OS-independent way. Also necessary for file viewing to work
4453 in an OS-independent way. Also necessary for file viewing to work
4449 well inside Emacs buffers.
4454 well inside Emacs buffers.
4450 (page): Added checks for being in an emacs buffer.
4455 (page): Added checks for being in an emacs buffer.
4451 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4456 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4452 same bug in iplib.
4457 same bug in iplib.
4453
4458
4454 2002-02-18 Fernando Perez <fperez@colorado.edu>
4459 2002-02-18 Fernando Perez <fperez@colorado.edu>
4455
4460
4456 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4461 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4457 of readline so that IPython can work inside an Emacs buffer.
4462 of readline so that IPython can work inside an Emacs buffer.
4458
4463
4459 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4464 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4460 method signatures (they weren't really bugs, but it looks cleaner
4465 method signatures (they weren't really bugs, but it looks cleaner
4461 and keeps PyChecker happy).
4466 and keeps PyChecker happy).
4462
4467
4463 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4468 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4464 for implementing various user-defined hooks. Currently only
4469 for implementing various user-defined hooks. Currently only
4465 display is done.
4470 display is done.
4466
4471
4467 * IPython/Prompts.py (CachedOutput._display): changed display
4472 * IPython/Prompts.py (CachedOutput._display): changed display
4468 functions so that they can be dynamically changed by users easily.
4473 functions so that they can be dynamically changed by users easily.
4469
4474
4470 * IPython/Extensions/numeric_formats.py (num_display): added an
4475 * IPython/Extensions/numeric_formats.py (num_display): added an
4471 extension for printing NumPy arrays in flexible manners. It
4476 extension for printing NumPy arrays in flexible manners. It
4472 doesn't do anything yet, but all the structure is in
4477 doesn't do anything yet, but all the structure is in
4473 place. Ultimately the plan is to implement output format control
4478 place. Ultimately the plan is to implement output format control
4474 like in Octave.
4479 like in Octave.
4475
4480
4476 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4481 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4477 methods are found at run-time by all the automatic machinery.
4482 methods are found at run-time by all the automatic machinery.
4478
4483
4479 2002-02-17 Fernando Perez <fperez@colorado.edu>
4484 2002-02-17 Fernando Perez <fperez@colorado.edu>
4480
4485
4481 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4486 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4482 whole file a little.
4487 whole file a little.
4483
4488
4484 * ToDo: closed this document. Now there's a new_design.lyx
4489 * ToDo: closed this document. Now there's a new_design.lyx
4485 document for all new ideas. Added making a pdf of it for the
4490 document for all new ideas. Added making a pdf of it for the
4486 end-user distro.
4491 end-user distro.
4487
4492
4488 * IPython/Logger.py (Logger.switch_log): Created this to replace
4493 * IPython/Logger.py (Logger.switch_log): Created this to replace
4489 logon() and logoff(). It also fixes a nasty crash reported by
4494 logon() and logoff(). It also fixes a nasty crash reported by
4490 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4495 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4491
4496
4492 * IPython/iplib.py (complete): got auto-completion to work with
4497 * IPython/iplib.py (complete): got auto-completion to work with
4493 automagic (I had wanted this for a long time).
4498 automagic (I had wanted this for a long time).
4494
4499
4495 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4500 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4496 to @file, since file() is now a builtin and clashes with automagic
4501 to @file, since file() is now a builtin and clashes with automagic
4497 for @file.
4502 for @file.
4498
4503
4499 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4504 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4500 of this was previously in iplib, which had grown to more than 2000
4505 of this was previously in iplib, which had grown to more than 2000
4501 lines, way too long. No new functionality, but it makes managing
4506 lines, way too long. No new functionality, but it makes managing
4502 the code a bit easier.
4507 the code a bit easier.
4503
4508
4504 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4509 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4505 information to crash reports.
4510 information to crash reports.
4506
4511
4507 2002-02-12 Fernando Perez <fperez@colorado.edu>
4512 2002-02-12 Fernando Perez <fperez@colorado.edu>
4508
4513
4509 * Released 0.2.5.
4514 * Released 0.2.5.
4510
4515
4511 2002-02-11 Fernando Perez <fperez@colorado.edu>
4516 2002-02-11 Fernando Perez <fperez@colorado.edu>
4512
4517
4513 * Wrote a relatively complete Windows installer. It puts
4518 * Wrote a relatively complete Windows installer. It puts
4514 everything in place, creates Start Menu entries and fixes the
4519 everything in place, creates Start Menu entries and fixes the
4515 color issues. Nothing fancy, but it works.
4520 color issues. Nothing fancy, but it works.
4516
4521
4517 2002-02-10 Fernando Perez <fperez@colorado.edu>
4522 2002-02-10 Fernando Perez <fperez@colorado.edu>
4518
4523
4519 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4524 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4520 os.path.expanduser() call so that we can type @run ~/myfile.py and
4525 os.path.expanduser() call so that we can type @run ~/myfile.py and
4521 have thigs work as expected.
4526 have thigs work as expected.
4522
4527
4523 * IPython/genutils.py (page): fixed exception handling so things
4528 * IPython/genutils.py (page): fixed exception handling so things
4524 work both in Unix and Windows correctly. Quitting a pager triggers
4529 work both in Unix and Windows correctly. Quitting a pager triggers
4525 an IOError/broken pipe in Unix, and in windows not finding a pager
4530 an IOError/broken pipe in Unix, and in windows not finding a pager
4526 is also an IOError, so I had to actually look at the return value
4531 is also an IOError, so I had to actually look at the return value
4527 of the exception, not just the exception itself. Should be ok now.
4532 of the exception, not just the exception itself. Should be ok now.
4528
4533
4529 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4534 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4530 modified to allow case-insensitive color scheme changes.
4535 modified to allow case-insensitive color scheme changes.
4531
4536
4532 2002-02-09 Fernando Perez <fperez@colorado.edu>
4537 2002-02-09 Fernando Perez <fperez@colorado.edu>
4533
4538
4534 * IPython/genutils.py (native_line_ends): new function to leave
4539 * IPython/genutils.py (native_line_ends): new function to leave
4535 user config files with os-native line-endings.
4540 user config files with os-native line-endings.
4536
4541
4537 * README and manual updates.
4542 * README and manual updates.
4538
4543
4539 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4544 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4540 instead of StringType to catch Unicode strings.
4545 instead of StringType to catch Unicode strings.
4541
4546
4542 * IPython/genutils.py (filefind): fixed bug for paths with
4547 * IPython/genutils.py (filefind): fixed bug for paths with
4543 embedded spaces (very common in Windows).
4548 embedded spaces (very common in Windows).
4544
4549
4545 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4550 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4546 files under Windows, so that they get automatically associated
4551 files under Windows, so that they get automatically associated
4547 with a text editor. Windows makes it a pain to handle
4552 with a text editor. Windows makes it a pain to handle
4548 extension-less files.
4553 extension-less files.
4549
4554
4550 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4555 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4551 warning about readline only occur for Posix. In Windows there's no
4556 warning about readline only occur for Posix. In Windows there's no
4552 way to get readline, so why bother with the warning.
4557 way to get readline, so why bother with the warning.
4553
4558
4554 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4559 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4555 for __str__ instead of dir(self), since dir() changed in 2.2.
4560 for __str__ instead of dir(self), since dir() changed in 2.2.
4556
4561
4557 * Ported to Windows! Tested on XP, I suspect it should work fine
4562 * Ported to Windows! Tested on XP, I suspect it should work fine
4558 on NT/2000, but I don't think it will work on 98 et al. That
4563 on NT/2000, but I don't think it will work on 98 et al. That
4559 series of Windows is such a piece of junk anyway that I won't try
4564 series of Windows is such a piece of junk anyway that I won't try
4560 porting it there. The XP port was straightforward, showed a few
4565 porting it there. The XP port was straightforward, showed a few
4561 bugs here and there (fixed all), in particular some string
4566 bugs here and there (fixed all), in particular some string
4562 handling stuff which required considering Unicode strings (which
4567 handling stuff which required considering Unicode strings (which
4563 Windows uses). This is good, but hasn't been too tested :) No
4568 Windows uses). This is good, but hasn't been too tested :) No
4564 fancy installer yet, I'll put a note in the manual so people at
4569 fancy installer yet, I'll put a note in the manual so people at
4565 least make manually a shortcut.
4570 least make manually a shortcut.
4566
4571
4567 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4572 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4568 into a single one, "colors". This now controls both prompt and
4573 into a single one, "colors". This now controls both prompt and
4569 exception color schemes, and can be changed both at startup
4574 exception color schemes, and can be changed both at startup
4570 (either via command-line switches or via ipythonrc files) and at
4575 (either via command-line switches or via ipythonrc files) and at
4571 runtime, with @colors.
4576 runtime, with @colors.
4572 (Magic.magic_run): renamed @prun to @run and removed the old
4577 (Magic.magic_run): renamed @prun to @run and removed the old
4573 @run. The two were too similar to warrant keeping both.
4578 @run. The two were too similar to warrant keeping both.
4574
4579
4575 2002-02-03 Fernando Perez <fperez@colorado.edu>
4580 2002-02-03 Fernando Perez <fperez@colorado.edu>
4576
4581
4577 * IPython/iplib.py (install_first_time): Added comment on how to
4582 * IPython/iplib.py (install_first_time): Added comment on how to
4578 configure the color options for first-time users. Put a <return>
4583 configure the color options for first-time users. Put a <return>
4579 request at the end so that small-terminal users get a chance to
4584 request at the end so that small-terminal users get a chance to
4580 read the startup info.
4585 read the startup info.
4581
4586
4582 2002-01-23 Fernando Perez <fperez@colorado.edu>
4587 2002-01-23 Fernando Perez <fperez@colorado.edu>
4583
4588
4584 * IPython/iplib.py (CachedOutput.update): Changed output memory
4589 * IPython/iplib.py (CachedOutput.update): Changed output memory
4585 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4590 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4586 input history we still use _i. Did this b/c these variable are
4591 input history we still use _i. Did this b/c these variable are
4587 very commonly used in interactive work, so the less we need to
4592 very commonly used in interactive work, so the less we need to
4588 type the better off we are.
4593 type the better off we are.
4589 (Magic.magic_prun): updated @prun to better handle the namespaces
4594 (Magic.magic_prun): updated @prun to better handle the namespaces
4590 the file will run in, including a fix for __name__ not being set
4595 the file will run in, including a fix for __name__ not being set
4591 before.
4596 before.
4592
4597
4593 2002-01-20 Fernando Perez <fperez@colorado.edu>
4598 2002-01-20 Fernando Perez <fperez@colorado.edu>
4594
4599
4595 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4600 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4596 extra garbage for Python 2.2. Need to look more carefully into
4601 extra garbage for Python 2.2. Need to look more carefully into
4597 this later.
4602 this later.
4598
4603
4599 2002-01-19 Fernando Perez <fperez@colorado.edu>
4604 2002-01-19 Fernando Perez <fperez@colorado.edu>
4600
4605
4601 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4606 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4602 display SyntaxError exceptions properly formatted when they occur
4607 display SyntaxError exceptions properly formatted when they occur
4603 (they can be triggered by imported code).
4608 (they can be triggered by imported code).
4604
4609
4605 2002-01-18 Fernando Perez <fperez@colorado.edu>
4610 2002-01-18 Fernando Perez <fperez@colorado.edu>
4606
4611
4607 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4612 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4608 SyntaxError exceptions are reported nicely formatted, instead of
4613 SyntaxError exceptions are reported nicely formatted, instead of
4609 spitting out only offset information as before.
4614 spitting out only offset information as before.
4610 (Magic.magic_prun): Added the @prun function for executing
4615 (Magic.magic_prun): Added the @prun function for executing
4611 programs with command line args inside IPython.
4616 programs with command line args inside IPython.
4612
4617
4613 2002-01-16 Fernando Perez <fperez@colorado.edu>
4618 2002-01-16 Fernando Perez <fperez@colorado.edu>
4614
4619
4615 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4620 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4616 to *not* include the last item given in a range. This brings their
4621 to *not* include the last item given in a range. This brings their
4617 behavior in line with Python's slicing:
4622 behavior in line with Python's slicing:
4618 a[n1:n2] -> a[n1]...a[n2-1]
4623 a[n1:n2] -> a[n1]...a[n2-1]
4619 It may be a bit less convenient, but I prefer to stick to Python's
4624 It may be a bit less convenient, but I prefer to stick to Python's
4620 conventions *everywhere*, so users never have to wonder.
4625 conventions *everywhere*, so users never have to wonder.
4621 (Magic.magic_macro): Added @macro function to ease the creation of
4626 (Magic.magic_macro): Added @macro function to ease the creation of
4622 macros.
4627 macros.
4623
4628
4624 2002-01-05 Fernando Perez <fperez@colorado.edu>
4629 2002-01-05 Fernando Perez <fperez@colorado.edu>
4625
4630
4626 * Released 0.2.4.
4631 * Released 0.2.4.
4627
4632
4628 * IPython/iplib.py (Magic.magic_pdef):
4633 * IPython/iplib.py (Magic.magic_pdef):
4629 (InteractiveShell.safe_execfile): report magic lines and error
4634 (InteractiveShell.safe_execfile): report magic lines and error
4630 lines without line numbers so one can easily copy/paste them for
4635 lines without line numbers so one can easily copy/paste them for
4631 re-execution.
4636 re-execution.
4632
4637
4633 * Updated manual with recent changes.
4638 * Updated manual with recent changes.
4634
4639
4635 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4640 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4636 docstring printing when class? is called. Very handy for knowing
4641 docstring printing when class? is called. Very handy for knowing
4637 how to create class instances (as long as __init__ is well
4642 how to create class instances (as long as __init__ is well
4638 documented, of course :)
4643 documented, of course :)
4639 (Magic.magic_doc): print both class and constructor docstrings.
4644 (Magic.magic_doc): print both class and constructor docstrings.
4640 (Magic.magic_pdef): give constructor info if passed a class and
4645 (Magic.magic_pdef): give constructor info if passed a class and
4641 __call__ info for callable object instances.
4646 __call__ info for callable object instances.
4642
4647
4643 2002-01-04 Fernando Perez <fperez@colorado.edu>
4648 2002-01-04 Fernando Perez <fperez@colorado.edu>
4644
4649
4645 * Made deep_reload() off by default. It doesn't always work
4650 * Made deep_reload() off by default. It doesn't always work
4646 exactly as intended, so it's probably safer to have it off. It's
4651 exactly as intended, so it's probably safer to have it off. It's
4647 still available as dreload() anyway, so nothing is lost.
4652 still available as dreload() anyway, so nothing is lost.
4648
4653
4649 2002-01-02 Fernando Perez <fperez@colorado.edu>
4654 2002-01-02 Fernando Perez <fperez@colorado.edu>
4650
4655
4651 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4656 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4652 so I wanted an updated release).
4657 so I wanted an updated release).
4653
4658
4654 2001-12-27 Fernando Perez <fperez@colorado.edu>
4659 2001-12-27 Fernando Perez <fperez@colorado.edu>
4655
4660
4656 * IPython/iplib.py (InteractiveShell.interact): Added the original
4661 * IPython/iplib.py (InteractiveShell.interact): Added the original
4657 code from 'code.py' for this module in order to change the
4662 code from 'code.py' for this module in order to change the
4658 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4663 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4659 the history cache would break when the user hit Ctrl-C, and
4664 the history cache would break when the user hit Ctrl-C, and
4660 interact() offers no way to add any hooks to it.
4665 interact() offers no way to add any hooks to it.
4661
4666
4662 2001-12-23 Fernando Perez <fperez@colorado.edu>
4667 2001-12-23 Fernando Perez <fperez@colorado.edu>
4663
4668
4664 * setup.py: added check for 'MANIFEST' before trying to remove
4669 * setup.py: added check for 'MANIFEST' before trying to remove
4665 it. Thanks to Sean Reifschneider.
4670 it. Thanks to Sean Reifschneider.
4666
4671
4667 2001-12-22 Fernando Perez <fperez@colorado.edu>
4672 2001-12-22 Fernando Perez <fperez@colorado.edu>
4668
4673
4669 * Released 0.2.2.
4674 * Released 0.2.2.
4670
4675
4671 * Finished (reasonably) writing the manual. Later will add the
4676 * Finished (reasonably) writing the manual. Later will add the
4672 python-standard navigation stylesheets, but for the time being
4677 python-standard navigation stylesheets, but for the time being
4673 it's fairly complete. Distribution will include html and pdf
4678 it's fairly complete. Distribution will include html and pdf
4674 versions.
4679 versions.
4675
4680
4676 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4681 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4677 (MayaVi author).
4682 (MayaVi author).
4678
4683
4679 2001-12-21 Fernando Perez <fperez@colorado.edu>
4684 2001-12-21 Fernando Perez <fperez@colorado.edu>
4680
4685
4681 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4686 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4682 good public release, I think (with the manual and the distutils
4687 good public release, I think (with the manual and the distutils
4683 installer). The manual can use some work, but that can go
4688 installer). The manual can use some work, but that can go
4684 slowly. Otherwise I think it's quite nice for end users. Next
4689 slowly. Otherwise I think it's quite nice for end users. Next
4685 summer, rewrite the guts of it...
4690 summer, rewrite the guts of it...
4686
4691
4687 * Changed format of ipythonrc files to use whitespace as the
4692 * Changed format of ipythonrc files to use whitespace as the
4688 separator instead of an explicit '='. Cleaner.
4693 separator instead of an explicit '='. Cleaner.
4689
4694
4690 2001-12-20 Fernando Perez <fperez@colorado.edu>
4695 2001-12-20 Fernando Perez <fperez@colorado.edu>
4691
4696
4692 * Started a manual in LyX. For now it's just a quick merge of the
4697 * Started a manual in LyX. For now it's just a quick merge of the
4693 various internal docstrings and READMEs. Later it may grow into a
4698 various internal docstrings and READMEs. Later it may grow into a
4694 nice, full-blown manual.
4699 nice, full-blown manual.
4695
4700
4696 * Set up a distutils based installer. Installation should now be
4701 * Set up a distutils based installer. Installation should now be
4697 trivially simple for end-users.
4702 trivially simple for end-users.
4698
4703
4699 2001-12-11 Fernando Perez <fperez@colorado.edu>
4704 2001-12-11 Fernando Perez <fperez@colorado.edu>
4700
4705
4701 * Released 0.2.0. First public release, announced it at
4706 * Released 0.2.0. First public release, announced it at
4702 comp.lang.python. From now on, just bugfixes...
4707 comp.lang.python. From now on, just bugfixes...
4703
4708
4704 * Went through all the files, set copyright/license notices and
4709 * Went through all the files, set copyright/license notices and
4705 cleaned up things. Ready for release.
4710 cleaned up things. Ready for release.
4706
4711
4707 2001-12-10 Fernando Perez <fperez@colorado.edu>
4712 2001-12-10 Fernando Perez <fperez@colorado.edu>
4708
4713
4709 * Changed the first-time installer not to use tarfiles. It's more
4714 * Changed the first-time installer not to use tarfiles. It's more
4710 robust now and less unix-dependent. Also makes it easier for
4715 robust now and less unix-dependent. Also makes it easier for
4711 people to later upgrade versions.
4716 people to later upgrade versions.
4712
4717
4713 * Changed @exit to @abort to reflect the fact that it's pretty
4718 * Changed @exit to @abort to reflect the fact that it's pretty
4714 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4719 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4715 becomes significant only when IPyhton is embedded: in that case,
4720 becomes significant only when IPyhton is embedded: in that case,
4716 C-D closes IPython only, but @abort kills the enclosing program
4721 C-D closes IPython only, but @abort kills the enclosing program
4717 too (unless it had called IPython inside a try catching
4722 too (unless it had called IPython inside a try catching
4718 SystemExit).
4723 SystemExit).
4719
4724
4720 * Created Shell module which exposes the actuall IPython Shell
4725 * Created Shell module which exposes the actuall IPython Shell
4721 classes, currently the normal and the embeddable one. This at
4726 classes, currently the normal and the embeddable one. This at
4722 least offers a stable interface we won't need to change when
4727 least offers a stable interface we won't need to change when
4723 (later) the internals are rewritten. That rewrite will be confined
4728 (later) the internals are rewritten. That rewrite will be confined
4724 to iplib and ipmaker, but the Shell interface should remain as is.
4729 to iplib and ipmaker, but the Shell interface should remain as is.
4725
4730
4726 * Added embed module which offers an embeddable IPShell object,
4731 * Added embed module which offers an embeddable IPShell object,
4727 useful to fire up IPython *inside* a running program. Great for
4732 useful to fire up IPython *inside* a running program. Great for
4728 debugging or dynamical data analysis.
4733 debugging or dynamical data analysis.
4729
4734
4730 2001-12-08 Fernando Perez <fperez@colorado.edu>
4735 2001-12-08 Fernando Perez <fperez@colorado.edu>
4731
4736
4732 * Fixed small bug preventing seeing info from methods of defined
4737 * Fixed small bug preventing seeing info from methods of defined
4733 objects (incorrect namespace in _ofind()).
4738 objects (incorrect namespace in _ofind()).
4734
4739
4735 * Documentation cleanup. Moved the main usage docstrings to a
4740 * Documentation cleanup. Moved the main usage docstrings to a
4736 separate file, usage.py (cleaner to maintain, and hopefully in the
4741 separate file, usage.py (cleaner to maintain, and hopefully in the
4737 future some perlpod-like way of producing interactive, man and
4742 future some perlpod-like way of producing interactive, man and
4738 html docs out of it will be found).
4743 html docs out of it will be found).
4739
4744
4740 * Added @profile to see your profile at any time.
4745 * Added @profile to see your profile at any time.
4741
4746
4742 * Added @p as an alias for 'print'. It's especially convenient if
4747 * Added @p as an alias for 'print'. It's especially convenient if
4743 using automagic ('p x' prints x).
4748 using automagic ('p x' prints x).
4744
4749
4745 * Small cleanups and fixes after a pychecker run.
4750 * Small cleanups and fixes after a pychecker run.
4746
4751
4747 * Changed the @cd command to handle @cd - and @cd -<n> for
4752 * Changed the @cd command to handle @cd - and @cd -<n> for
4748 visiting any directory in _dh.
4753 visiting any directory in _dh.
4749
4754
4750 * Introduced _dh, a history of visited directories. @dhist prints
4755 * Introduced _dh, a history of visited directories. @dhist prints
4751 it out with numbers.
4756 it out with numbers.
4752
4757
4753 2001-12-07 Fernando Perez <fperez@colorado.edu>
4758 2001-12-07 Fernando Perez <fperez@colorado.edu>
4754
4759
4755 * Released 0.1.22
4760 * Released 0.1.22
4756
4761
4757 * Made initialization a bit more robust against invalid color
4762 * Made initialization a bit more robust against invalid color
4758 options in user input (exit, not traceback-crash).
4763 options in user input (exit, not traceback-crash).
4759
4764
4760 * Changed the bug crash reporter to write the report only in the
4765 * Changed the bug crash reporter to write the report only in the
4761 user's .ipython directory. That way IPython won't litter people's
4766 user's .ipython directory. That way IPython won't litter people's
4762 hard disks with crash files all over the place. Also print on
4767 hard disks with crash files all over the place. Also print on
4763 screen the necessary mail command.
4768 screen the necessary mail command.
4764
4769
4765 * With the new ultraTB, implemented LightBG color scheme for light
4770 * With the new ultraTB, implemented LightBG color scheme for light
4766 background terminals. A lot of people like white backgrounds, so I
4771 background terminals. A lot of people like white backgrounds, so I
4767 guess we should at least give them something readable.
4772 guess we should at least give them something readable.
4768
4773
4769 2001-12-06 Fernando Perez <fperez@colorado.edu>
4774 2001-12-06 Fernando Perez <fperez@colorado.edu>
4770
4775
4771 * Modified the structure of ultraTB. Now there's a proper class
4776 * Modified the structure of ultraTB. Now there's a proper class
4772 for tables of color schemes which allow adding schemes easily and
4777 for tables of color schemes which allow adding schemes easily and
4773 switching the active scheme without creating a new instance every
4778 switching the active scheme without creating a new instance every
4774 time (which was ridiculous). The syntax for creating new schemes
4779 time (which was ridiculous). The syntax for creating new schemes
4775 is also cleaner. I think ultraTB is finally done, with a clean
4780 is also cleaner. I think ultraTB is finally done, with a clean
4776 class structure. Names are also much cleaner (now there's proper
4781 class structure. Names are also much cleaner (now there's proper
4777 color tables, no need for every variable to also have 'color' in
4782 color tables, no need for every variable to also have 'color' in
4778 its name).
4783 its name).
4779
4784
4780 * Broke down genutils into separate files. Now genutils only
4785 * Broke down genutils into separate files. Now genutils only
4781 contains utility functions, and classes have been moved to their
4786 contains utility functions, and classes have been moved to their
4782 own files (they had enough independent functionality to warrant
4787 own files (they had enough independent functionality to warrant
4783 it): ConfigLoader, OutputTrap, Struct.
4788 it): ConfigLoader, OutputTrap, Struct.
4784
4789
4785 2001-12-05 Fernando Perez <fperez@colorado.edu>
4790 2001-12-05 Fernando Perez <fperez@colorado.edu>
4786
4791
4787 * IPython turns 21! Released version 0.1.21, as a candidate for
4792 * IPython turns 21! Released version 0.1.21, as a candidate for
4788 public consumption. If all goes well, release in a few days.
4793 public consumption. If all goes well, release in a few days.
4789
4794
4790 * Fixed path bug (files in Extensions/ directory wouldn't be found
4795 * Fixed path bug (files in Extensions/ directory wouldn't be found
4791 unless IPython/ was explicitly in sys.path).
4796 unless IPython/ was explicitly in sys.path).
4792
4797
4793 * Extended the FlexCompleter class as MagicCompleter to allow
4798 * Extended the FlexCompleter class as MagicCompleter to allow
4794 completion of @-starting lines.
4799 completion of @-starting lines.
4795
4800
4796 * Created __release__.py file as a central repository for release
4801 * Created __release__.py file as a central repository for release
4797 info that other files can read from.
4802 info that other files can read from.
4798
4803
4799 * Fixed small bug in logging: when logging was turned on in
4804 * Fixed small bug in logging: when logging was turned on in
4800 mid-session, old lines with special meanings (!@?) were being
4805 mid-session, old lines with special meanings (!@?) were being
4801 logged without the prepended comment, which is necessary since
4806 logged without the prepended comment, which is necessary since
4802 they are not truly valid python syntax. This should make session
4807 they are not truly valid python syntax. This should make session
4803 restores produce less errors.
4808 restores produce less errors.
4804
4809
4805 * The namespace cleanup forced me to make a FlexCompleter class
4810 * The namespace cleanup forced me to make a FlexCompleter class
4806 which is nothing but a ripoff of rlcompleter, but with selectable
4811 which is nothing but a ripoff of rlcompleter, but with selectable
4807 namespace (rlcompleter only works in __main__.__dict__). I'll try
4812 namespace (rlcompleter only works in __main__.__dict__). I'll try
4808 to submit a note to the authors to see if this change can be
4813 to submit a note to the authors to see if this change can be
4809 incorporated in future rlcompleter releases (Dec.6: done)
4814 incorporated in future rlcompleter releases (Dec.6: done)
4810
4815
4811 * More fixes to namespace handling. It was a mess! Now all
4816 * More fixes to namespace handling. It was a mess! Now all
4812 explicit references to __main__.__dict__ are gone (except when
4817 explicit references to __main__.__dict__ are gone (except when
4813 really needed) and everything is handled through the namespace
4818 really needed) and everything is handled through the namespace
4814 dicts in the IPython instance. We seem to be getting somewhere
4819 dicts in the IPython instance. We seem to be getting somewhere
4815 with this, finally...
4820 with this, finally...
4816
4821
4817 * Small documentation updates.
4822 * Small documentation updates.
4818
4823
4819 * Created the Extensions directory under IPython (with an
4824 * Created the Extensions directory under IPython (with an
4820 __init__.py). Put the PhysicalQ stuff there. This directory should
4825 __init__.py). Put the PhysicalQ stuff there. This directory should
4821 be used for all special-purpose extensions.
4826 be used for all special-purpose extensions.
4822
4827
4823 * File renaming:
4828 * File renaming:
4824 ipythonlib --> ipmaker
4829 ipythonlib --> ipmaker
4825 ipplib --> iplib
4830 ipplib --> iplib
4826 This makes a bit more sense in terms of what these files actually do.
4831 This makes a bit more sense in terms of what these files actually do.
4827
4832
4828 * Moved all the classes and functions in ipythonlib to ipplib, so
4833 * Moved all the classes and functions in ipythonlib to ipplib, so
4829 now ipythonlib only has make_IPython(). This will ease up its
4834 now ipythonlib only has make_IPython(). This will ease up its
4830 splitting in smaller functional chunks later.
4835 splitting in smaller functional chunks later.
4831
4836
4832 * Cleaned up (done, I think) output of @whos. Better column
4837 * Cleaned up (done, I think) output of @whos. Better column
4833 formatting, and now shows str(var) for as much as it can, which is
4838 formatting, and now shows str(var) for as much as it can, which is
4834 typically what one gets with a 'print var'.
4839 typically what one gets with a 'print var'.
4835
4840
4836 2001-12-04 Fernando Perez <fperez@colorado.edu>
4841 2001-12-04 Fernando Perez <fperez@colorado.edu>
4837
4842
4838 * Fixed namespace problems. Now builtin/IPyhton/user names get
4843 * Fixed namespace problems. Now builtin/IPyhton/user names get
4839 properly reported in their namespace. Internal namespace handling
4844 properly reported in their namespace. Internal namespace handling
4840 is finally getting decent (not perfect yet, but much better than
4845 is finally getting decent (not perfect yet, but much better than
4841 the ad-hoc mess we had).
4846 the ad-hoc mess we had).
4842
4847
4843 * Removed -exit option. If people just want to run a python
4848 * Removed -exit option. If people just want to run a python
4844 script, that's what the normal interpreter is for. Less
4849 script, that's what the normal interpreter is for. Less
4845 unnecessary options, less chances for bugs.
4850 unnecessary options, less chances for bugs.
4846
4851
4847 * Added a crash handler which generates a complete post-mortem if
4852 * Added a crash handler which generates a complete post-mortem if
4848 IPython crashes. This will help a lot in tracking bugs down the
4853 IPython crashes. This will help a lot in tracking bugs down the
4849 road.
4854 road.
4850
4855
4851 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4856 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4852 which were boud to functions being reassigned would bypass the
4857 which were boud to functions being reassigned would bypass the
4853 logger, breaking the sync of _il with the prompt counter. This
4858 logger, breaking the sync of _il with the prompt counter. This
4854 would then crash IPython later when a new line was logged.
4859 would then crash IPython later when a new line was logged.
4855
4860
4856 2001-12-02 Fernando Perez <fperez@colorado.edu>
4861 2001-12-02 Fernando Perez <fperez@colorado.edu>
4857
4862
4858 * Made IPython a package. This means people don't have to clutter
4863 * Made IPython a package. This means people don't have to clutter
4859 their sys.path with yet another directory. Changed the INSTALL
4864 their sys.path with yet another directory. Changed the INSTALL
4860 file accordingly.
4865 file accordingly.
4861
4866
4862 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4867 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4863 sorts its output (so @who shows it sorted) and @whos formats the
4868 sorts its output (so @who shows it sorted) and @whos formats the
4864 table according to the width of the first column. Nicer, easier to
4869 table according to the width of the first column. Nicer, easier to
4865 read. Todo: write a generic table_format() which takes a list of
4870 read. Todo: write a generic table_format() which takes a list of
4866 lists and prints it nicely formatted, with optional row/column
4871 lists and prints it nicely formatted, with optional row/column
4867 separators and proper padding and justification.
4872 separators and proper padding and justification.
4868
4873
4869 * Released 0.1.20
4874 * Released 0.1.20
4870
4875
4871 * Fixed bug in @log which would reverse the inputcache list (a
4876 * Fixed bug in @log which would reverse the inputcache list (a
4872 copy operation was missing).
4877 copy operation was missing).
4873
4878
4874 * Code cleanup. @config was changed to use page(). Better, since
4879 * Code cleanup. @config was changed to use page(). Better, since
4875 its output is always quite long.
4880 its output is always quite long.
4876
4881
4877 * Itpl is back as a dependency. I was having too many problems
4882 * Itpl is back as a dependency. I was having too many problems
4878 getting the parametric aliases to work reliably, and it's just
4883 getting the parametric aliases to work reliably, and it's just
4879 easier to code weird string operations with it than playing %()s
4884 easier to code weird string operations with it than playing %()s
4880 games. It's only ~6k, so I don't think it's too big a deal.
4885 games. It's only ~6k, so I don't think it's too big a deal.
4881
4886
4882 * Found (and fixed) a very nasty bug with history. !lines weren't
4887 * Found (and fixed) a very nasty bug with history. !lines weren't
4883 getting cached, and the out of sync caches would crash
4888 getting cached, and the out of sync caches would crash
4884 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4889 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4885 division of labor a bit better. Bug fixed, cleaner structure.
4890 division of labor a bit better. Bug fixed, cleaner structure.
4886
4891
4887 2001-12-01 Fernando Perez <fperez@colorado.edu>
4892 2001-12-01 Fernando Perez <fperez@colorado.edu>
4888
4893
4889 * Released 0.1.19
4894 * Released 0.1.19
4890
4895
4891 * Added option -n to @hist to prevent line number printing. Much
4896 * Added option -n to @hist to prevent line number printing. Much
4892 easier to copy/paste code this way.
4897 easier to copy/paste code this way.
4893
4898
4894 * Created global _il to hold the input list. Allows easy
4899 * Created global _il to hold the input list. Allows easy
4895 re-execution of blocks of code by slicing it (inspired by Janko's
4900 re-execution of blocks of code by slicing it (inspired by Janko's
4896 comment on 'macros').
4901 comment on 'macros').
4897
4902
4898 * Small fixes and doc updates.
4903 * Small fixes and doc updates.
4899
4904
4900 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4905 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4901 much too fragile with automagic. Handles properly multi-line
4906 much too fragile with automagic. Handles properly multi-line
4902 statements and takes parameters.
4907 statements and takes parameters.
4903
4908
4904 2001-11-30 Fernando Perez <fperez@colorado.edu>
4909 2001-11-30 Fernando Perez <fperez@colorado.edu>
4905
4910
4906 * Version 0.1.18 released.
4911 * Version 0.1.18 released.
4907
4912
4908 * Fixed nasty namespace bug in initial module imports.
4913 * Fixed nasty namespace bug in initial module imports.
4909
4914
4910 * Added copyright/license notes to all code files (except
4915 * Added copyright/license notes to all code files (except
4911 DPyGetOpt). For the time being, LGPL. That could change.
4916 DPyGetOpt). For the time being, LGPL. That could change.
4912
4917
4913 * Rewrote a much nicer README, updated INSTALL, cleaned up
4918 * Rewrote a much nicer README, updated INSTALL, cleaned up
4914 ipythonrc-* samples.
4919 ipythonrc-* samples.
4915
4920
4916 * Overall code/documentation cleanup. Basically ready for
4921 * Overall code/documentation cleanup. Basically ready for
4917 release. Only remaining thing: licence decision (LGPL?).
4922 release. Only remaining thing: licence decision (LGPL?).
4918
4923
4919 * Converted load_config to a class, ConfigLoader. Now recursion
4924 * Converted load_config to a class, ConfigLoader. Now recursion
4920 control is better organized. Doesn't include the same file twice.
4925 control is better organized. Doesn't include the same file twice.
4921
4926
4922 2001-11-29 Fernando Perez <fperez@colorado.edu>
4927 2001-11-29 Fernando Perez <fperez@colorado.edu>
4923
4928
4924 * Got input history working. Changed output history variables from
4929 * Got input history working. Changed output history variables from
4925 _p to _o so that _i is for input and _o for output. Just cleaner
4930 _p to _o so that _i is for input and _o for output. Just cleaner
4926 convention.
4931 convention.
4927
4932
4928 * Implemented parametric aliases. This pretty much allows the
4933 * Implemented parametric aliases. This pretty much allows the
4929 alias system to offer full-blown shell convenience, I think.
4934 alias system to offer full-blown shell convenience, I think.
4930
4935
4931 * Version 0.1.17 released, 0.1.18 opened.
4936 * Version 0.1.17 released, 0.1.18 opened.
4932
4937
4933 * dot_ipython/ipythonrc (alias): added documentation.
4938 * dot_ipython/ipythonrc (alias): added documentation.
4934 (xcolor): Fixed small bug (xcolors -> xcolor)
4939 (xcolor): Fixed small bug (xcolors -> xcolor)
4935
4940
4936 * Changed the alias system. Now alias is a magic command to define
4941 * Changed the alias system. Now alias is a magic command to define
4937 aliases just like the shell. Rationale: the builtin magics should
4942 aliases just like the shell. Rationale: the builtin magics should
4938 be there for things deeply connected to IPython's
4943 be there for things deeply connected to IPython's
4939 architecture. And this is a much lighter system for what I think
4944 architecture. And this is a much lighter system for what I think
4940 is the really important feature: allowing users to define quickly
4945 is the really important feature: allowing users to define quickly
4941 magics that will do shell things for them, so they can customize
4946 magics that will do shell things for them, so they can customize
4942 IPython easily to match their work habits. If someone is really
4947 IPython easily to match their work habits. If someone is really
4943 desperate to have another name for a builtin alias, they can
4948 desperate to have another name for a builtin alias, they can
4944 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4949 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4945 works.
4950 works.
4946
4951
4947 2001-11-28 Fernando Perez <fperez@colorado.edu>
4952 2001-11-28 Fernando Perez <fperez@colorado.edu>
4948
4953
4949 * Changed @file so that it opens the source file at the proper
4954 * Changed @file so that it opens the source file at the proper
4950 line. Since it uses less, if your EDITOR environment is
4955 line. Since it uses less, if your EDITOR environment is
4951 configured, typing v will immediately open your editor of choice
4956 configured, typing v will immediately open your editor of choice
4952 right at the line where the object is defined. Not as quick as
4957 right at the line where the object is defined. Not as quick as
4953 having a direct @edit command, but for all intents and purposes it
4958 having a direct @edit command, but for all intents and purposes it
4954 works. And I don't have to worry about writing @edit to deal with
4959 works. And I don't have to worry about writing @edit to deal with
4955 all the editors, less does that.
4960 all the editors, less does that.
4956
4961
4957 * Version 0.1.16 released, 0.1.17 opened.
4962 * Version 0.1.16 released, 0.1.17 opened.
4958
4963
4959 * Fixed some nasty bugs in the page/page_dumb combo that could
4964 * Fixed some nasty bugs in the page/page_dumb combo that could
4960 crash IPython.
4965 crash IPython.
4961
4966
4962 2001-11-27 Fernando Perez <fperez@colorado.edu>
4967 2001-11-27 Fernando Perez <fperez@colorado.edu>
4963
4968
4964 * Version 0.1.15 released, 0.1.16 opened.
4969 * Version 0.1.15 released, 0.1.16 opened.
4965
4970
4966 * Finally got ? and ?? to work for undefined things: now it's
4971 * Finally got ? and ?? to work for undefined things: now it's
4967 possible to type {}.get? and get information about the get method
4972 possible to type {}.get? and get information about the get method
4968 of dicts, or os.path? even if only os is defined (so technically
4973 of dicts, or os.path? even if only os is defined (so technically
4969 os.path isn't). Works at any level. For example, after import os,
4974 os.path isn't). Works at any level. For example, after import os,
4970 os?, os.path?, os.path.abspath? all work. This is great, took some
4975 os?, os.path?, os.path.abspath? all work. This is great, took some
4971 work in _ofind.
4976 work in _ofind.
4972
4977
4973 * Fixed more bugs with logging. The sanest way to do it was to add
4978 * Fixed more bugs with logging. The sanest way to do it was to add
4974 to @log a 'mode' parameter. Killed two in one shot (this mode
4979 to @log a 'mode' parameter. Killed two in one shot (this mode
4975 option was a request of Janko's). I think it's finally clean
4980 option was a request of Janko's). I think it's finally clean
4976 (famous last words).
4981 (famous last words).
4977
4982
4978 * Added a page_dumb() pager which does a decent job of paging on
4983 * Added a page_dumb() pager which does a decent job of paging on
4979 screen, if better things (like less) aren't available. One less
4984 screen, if better things (like less) aren't available. One less
4980 unix dependency (someday maybe somebody will port this to
4985 unix dependency (someday maybe somebody will port this to
4981 windows).
4986 windows).
4982
4987
4983 * Fixed problem in magic_log: would lock of logging out if log
4988 * Fixed problem in magic_log: would lock of logging out if log
4984 creation failed (because it would still think it had succeeded).
4989 creation failed (because it would still think it had succeeded).
4985
4990
4986 * Improved the page() function using curses to auto-detect screen
4991 * Improved the page() function using curses to auto-detect screen
4987 size. Now it can make a much better decision on whether to print
4992 size. Now it can make a much better decision on whether to print
4988 or page a string. Option screen_length was modified: a value 0
4993 or page a string. Option screen_length was modified: a value 0
4989 means auto-detect, and that's the default now.
4994 means auto-detect, and that's the default now.
4990
4995
4991 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4996 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4992 go out. I'll test it for a few days, then talk to Janko about
4997 go out. I'll test it for a few days, then talk to Janko about
4993 licences and announce it.
4998 licences and announce it.
4994
4999
4995 * Fixed the length of the auto-generated ---> prompt which appears
5000 * Fixed the length of the auto-generated ---> prompt which appears
4996 for auto-parens and auto-quotes. Getting this right isn't trivial,
5001 for auto-parens and auto-quotes. Getting this right isn't trivial,
4997 with all the color escapes, different prompt types and optional
5002 with all the color escapes, different prompt types and optional
4998 separators. But it seems to be working in all the combinations.
5003 separators. But it seems to be working in all the combinations.
4999
5004
5000 2001-11-26 Fernando Perez <fperez@colorado.edu>
5005 2001-11-26 Fernando Perez <fperez@colorado.edu>
5001
5006
5002 * Wrote a regexp filter to get option types from the option names
5007 * Wrote a regexp filter to get option types from the option names
5003 string. This eliminates the need to manually keep two duplicate
5008 string. This eliminates the need to manually keep two duplicate
5004 lists.
5009 lists.
5005
5010
5006 * Removed the unneeded check_option_names. Now options are handled
5011 * Removed the unneeded check_option_names. Now options are handled
5007 in a much saner manner and it's easy to visually check that things
5012 in a much saner manner and it's easy to visually check that things
5008 are ok.
5013 are ok.
5009
5014
5010 * Updated version numbers on all files I modified to carry a
5015 * Updated version numbers on all files I modified to carry a
5011 notice so Janko and Nathan have clear version markers.
5016 notice so Janko and Nathan have clear version markers.
5012
5017
5013 * Updated docstring for ultraTB with my changes. I should send
5018 * Updated docstring for ultraTB with my changes. I should send
5014 this to Nathan.
5019 this to Nathan.
5015
5020
5016 * Lots of small fixes. Ran everything through pychecker again.
5021 * Lots of small fixes. Ran everything through pychecker again.
5017
5022
5018 * Made loading of deep_reload an cmd line option. If it's not too
5023 * Made loading of deep_reload an cmd line option. If it's not too
5019 kosher, now people can just disable it. With -nodeep_reload it's
5024 kosher, now people can just disable it. With -nodeep_reload it's
5020 still available as dreload(), it just won't overwrite reload().
5025 still available as dreload(), it just won't overwrite reload().
5021
5026
5022 * Moved many options to the no| form (-opt and -noopt
5027 * Moved many options to the no| form (-opt and -noopt
5023 accepted). Cleaner.
5028 accepted). Cleaner.
5024
5029
5025 * Changed magic_log so that if called with no parameters, it uses
5030 * Changed magic_log so that if called with no parameters, it uses
5026 'rotate' mode. That way auto-generated logs aren't automatically
5031 'rotate' mode. That way auto-generated logs aren't automatically
5027 over-written. For normal logs, now a backup is made if it exists
5032 over-written. For normal logs, now a backup is made if it exists
5028 (only 1 level of backups). A new 'backup' mode was added to the
5033 (only 1 level of backups). A new 'backup' mode was added to the
5029 Logger class to support this. This was a request by Janko.
5034 Logger class to support this. This was a request by Janko.
5030
5035
5031 * Added @logoff/@logon to stop/restart an active log.
5036 * Added @logoff/@logon to stop/restart an active log.
5032
5037
5033 * Fixed a lot of bugs in log saving/replay. It was pretty
5038 * Fixed a lot of bugs in log saving/replay. It was pretty
5034 broken. Now special lines (!@,/) appear properly in the command
5039 broken. Now special lines (!@,/) appear properly in the command
5035 history after a log replay.
5040 history after a log replay.
5036
5041
5037 * Tried and failed to implement full session saving via pickle. My
5042 * Tried and failed to implement full session saving via pickle. My
5038 idea was to pickle __main__.__dict__, but modules can't be
5043 idea was to pickle __main__.__dict__, but modules can't be
5039 pickled. This would be a better alternative to replaying logs, but
5044 pickled. This would be a better alternative to replaying logs, but
5040 seems quite tricky to get to work. Changed -session to be called
5045 seems quite tricky to get to work. Changed -session to be called
5041 -logplay, which more accurately reflects what it does. And if we
5046 -logplay, which more accurately reflects what it does. And if we
5042 ever get real session saving working, -session is now available.
5047 ever get real session saving working, -session is now available.
5043
5048
5044 * Implemented color schemes for prompts also. As for tracebacks,
5049 * Implemented color schemes for prompts also. As for tracebacks,
5045 currently only NoColor and Linux are supported. But now the
5050 currently only NoColor and Linux are supported. But now the
5046 infrastructure is in place, based on a generic ColorScheme
5051 infrastructure is in place, based on a generic ColorScheme
5047 class. So writing and activating new schemes both for the prompts
5052 class. So writing and activating new schemes both for the prompts
5048 and the tracebacks should be straightforward.
5053 and the tracebacks should be straightforward.
5049
5054
5050 * Version 0.1.13 released, 0.1.14 opened.
5055 * Version 0.1.13 released, 0.1.14 opened.
5051
5056
5052 * Changed handling of options for output cache. Now counter is
5057 * Changed handling of options for output cache. Now counter is
5053 hardwired starting at 1 and one specifies the maximum number of
5058 hardwired starting at 1 and one specifies the maximum number of
5054 entries *in the outcache* (not the max prompt counter). This is
5059 entries *in the outcache* (not the max prompt counter). This is
5055 much better, since many statements won't increase the cache
5060 much better, since many statements won't increase the cache
5056 count. It also eliminated some confusing options, now there's only
5061 count. It also eliminated some confusing options, now there's only
5057 one: cache_size.
5062 one: cache_size.
5058
5063
5059 * Added 'alias' magic function and magic_alias option in the
5064 * Added 'alias' magic function and magic_alias option in the
5060 ipythonrc file. Now the user can easily define whatever names he
5065 ipythonrc file. Now the user can easily define whatever names he
5061 wants for the magic functions without having to play weird
5066 wants for the magic functions without having to play weird
5062 namespace games. This gives IPython a real shell-like feel.
5067 namespace games. This gives IPython a real shell-like feel.
5063
5068
5064 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5069 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5065 @ or not).
5070 @ or not).
5066
5071
5067 This was one of the last remaining 'visible' bugs (that I know
5072 This was one of the last remaining 'visible' bugs (that I know
5068 of). I think if I can clean up the session loading so it works
5073 of). I think if I can clean up the session loading so it works
5069 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5074 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5070 about licensing).
5075 about licensing).
5071
5076
5072 2001-11-25 Fernando Perez <fperez@colorado.edu>
5077 2001-11-25 Fernando Perez <fperez@colorado.edu>
5073
5078
5074 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5079 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5075 there's a cleaner distinction between what ? and ?? show.
5080 there's a cleaner distinction between what ? and ?? show.
5076
5081
5077 * Added screen_length option. Now the user can define his own
5082 * Added screen_length option. Now the user can define his own
5078 screen size for page() operations.
5083 screen size for page() operations.
5079
5084
5080 * Implemented magic shell-like functions with automatic code
5085 * Implemented magic shell-like functions with automatic code
5081 generation. Now adding another function is just a matter of adding
5086 generation. Now adding another function is just a matter of adding
5082 an entry to a dict, and the function is dynamically generated at
5087 an entry to a dict, and the function is dynamically generated at
5083 run-time. Python has some really cool features!
5088 run-time. Python has some really cool features!
5084
5089
5085 * Renamed many options to cleanup conventions a little. Now all
5090 * Renamed many options to cleanup conventions a little. Now all
5086 are lowercase, and only underscores where needed. Also in the code
5091 are lowercase, and only underscores where needed. Also in the code
5087 option name tables are clearer.
5092 option name tables are clearer.
5088
5093
5089 * Changed prompts a little. Now input is 'In [n]:' instead of
5094 * Changed prompts a little. Now input is 'In [n]:' instead of
5090 'In[n]:='. This allows it the numbers to be aligned with the
5095 'In[n]:='. This allows it the numbers to be aligned with the
5091 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5096 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5092 Python (it was a Mathematica thing). The '...' continuation prompt
5097 Python (it was a Mathematica thing). The '...' continuation prompt
5093 was also changed a little to align better.
5098 was also changed a little to align better.
5094
5099
5095 * Fixed bug when flushing output cache. Not all _p<n> variables
5100 * Fixed bug when flushing output cache. Not all _p<n> variables
5096 exist, so their deletion needs to be wrapped in a try:
5101 exist, so their deletion needs to be wrapped in a try:
5097
5102
5098 * Figured out how to properly use inspect.formatargspec() (it
5103 * Figured out how to properly use inspect.formatargspec() (it
5099 requires the args preceded by *). So I removed all the code from
5104 requires the args preceded by *). So I removed all the code from
5100 _get_pdef in Magic, which was just replicating that.
5105 _get_pdef in Magic, which was just replicating that.
5101
5106
5102 * Added test to prefilter to allow redefining magic function names
5107 * Added test to prefilter to allow redefining magic function names
5103 as variables. This is ok, since the @ form is always available,
5108 as variables. This is ok, since the @ form is always available,
5104 but whe should allow the user to define a variable called 'ls' if
5109 but whe should allow the user to define a variable called 'ls' if
5105 he needs it.
5110 he needs it.
5106
5111
5107 * Moved the ToDo information from README into a separate ToDo.
5112 * Moved the ToDo information from README into a separate ToDo.
5108
5113
5109 * General code cleanup and small bugfixes. I think it's close to a
5114 * General code cleanup and small bugfixes. I think it's close to a
5110 state where it can be released, obviously with a big 'beta'
5115 state where it can be released, obviously with a big 'beta'
5111 warning on it.
5116 warning on it.
5112
5117
5113 * Got the magic function split to work. Now all magics are defined
5118 * Got the magic function split to work. Now all magics are defined
5114 in a separate class. It just organizes things a bit, and now
5119 in a separate class. It just organizes things a bit, and now
5115 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5120 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5116 was too long).
5121 was too long).
5117
5122
5118 * Changed @clear to @reset to avoid potential confusions with
5123 * Changed @clear to @reset to avoid potential confusions with
5119 the shell command clear. Also renamed @cl to @clear, which does
5124 the shell command clear. Also renamed @cl to @clear, which does
5120 exactly what people expect it to from their shell experience.
5125 exactly what people expect it to from their shell experience.
5121
5126
5122 Added a check to the @reset command (since it's so
5127 Added a check to the @reset command (since it's so
5123 destructive, it's probably a good idea to ask for confirmation).
5128 destructive, it's probably a good idea to ask for confirmation).
5124 But now reset only works for full namespace resetting. Since the
5129 But now reset only works for full namespace resetting. Since the
5125 del keyword is already there for deleting a few specific
5130 del keyword is already there for deleting a few specific
5126 variables, I don't see the point of having a redundant magic
5131 variables, I don't see the point of having a redundant magic
5127 function for the same task.
5132 function for the same task.
5128
5133
5129 2001-11-24 Fernando Perez <fperez@colorado.edu>
5134 2001-11-24 Fernando Perez <fperez@colorado.edu>
5130
5135
5131 * Updated the builtin docs (esp. the ? ones).
5136 * Updated the builtin docs (esp. the ? ones).
5132
5137
5133 * Ran all the code through pychecker. Not terribly impressed with
5138 * Ran all the code through pychecker. Not terribly impressed with
5134 it: lots of spurious warnings and didn't really find anything of
5139 it: lots of spurious warnings and didn't really find anything of
5135 substance (just a few modules being imported and not used).
5140 substance (just a few modules being imported and not used).
5136
5141
5137 * Implemented the new ultraTB functionality into IPython. New
5142 * Implemented the new ultraTB functionality into IPython. New
5138 option: xcolors. This chooses color scheme. xmode now only selects
5143 option: xcolors. This chooses color scheme. xmode now only selects
5139 between Plain and Verbose. Better orthogonality.
5144 between Plain and Verbose. Better orthogonality.
5140
5145
5141 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5146 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5142 mode and color scheme for the exception handlers. Now it's
5147 mode and color scheme for the exception handlers. Now it's
5143 possible to have the verbose traceback with no coloring.
5148 possible to have the verbose traceback with no coloring.
5144
5149
5145 2001-11-23 Fernando Perez <fperez@colorado.edu>
5150 2001-11-23 Fernando Perez <fperez@colorado.edu>
5146
5151
5147 * Version 0.1.12 released, 0.1.13 opened.
5152 * Version 0.1.12 released, 0.1.13 opened.
5148
5153
5149 * Removed option to set auto-quote and auto-paren escapes by
5154 * Removed option to set auto-quote and auto-paren escapes by
5150 user. The chances of breaking valid syntax are just too high. If
5155 user. The chances of breaking valid syntax are just too high. If
5151 someone *really* wants, they can always dig into the code.
5156 someone *really* wants, they can always dig into the code.
5152
5157
5153 * Made prompt separators configurable.
5158 * Made prompt separators configurable.
5154
5159
5155 2001-11-22 Fernando Perez <fperez@colorado.edu>
5160 2001-11-22 Fernando Perez <fperez@colorado.edu>
5156
5161
5157 * Small bugfixes in many places.
5162 * Small bugfixes in many places.
5158
5163
5159 * Removed the MyCompleter class from ipplib. It seemed redundant
5164 * Removed the MyCompleter class from ipplib. It seemed redundant
5160 with the C-p,C-n history search functionality. Less code to
5165 with the C-p,C-n history search functionality. Less code to
5161 maintain.
5166 maintain.
5162
5167
5163 * Moved all the original ipython.py code into ipythonlib.py. Right
5168 * Moved all the original ipython.py code into ipythonlib.py. Right
5164 now it's just one big dump into a function called make_IPython, so
5169 now it's just one big dump into a function called make_IPython, so
5165 no real modularity has been gained. But at least it makes the
5170 no real modularity has been gained. But at least it makes the
5166 wrapper script tiny, and since ipythonlib is a module, it gets
5171 wrapper script tiny, and since ipythonlib is a module, it gets
5167 compiled and startup is much faster.
5172 compiled and startup is much faster.
5168
5173
5169 This is a reasobably 'deep' change, so we should test it for a
5174 This is a reasobably 'deep' change, so we should test it for a
5170 while without messing too much more with the code.
5175 while without messing too much more with the code.
5171
5176
5172 2001-11-21 Fernando Perez <fperez@colorado.edu>
5177 2001-11-21 Fernando Perez <fperez@colorado.edu>
5173
5178
5174 * Version 0.1.11 released, 0.1.12 opened for further work.
5179 * Version 0.1.11 released, 0.1.12 opened for further work.
5175
5180
5176 * Removed dependency on Itpl. It was only needed in one place. It
5181 * Removed dependency on Itpl. It was only needed in one place. It
5177 would be nice if this became part of python, though. It makes life
5182 would be nice if this became part of python, though. It makes life
5178 *a lot* easier in some cases.
5183 *a lot* easier in some cases.
5179
5184
5180 * Simplified the prefilter code a bit. Now all handlers are
5185 * Simplified the prefilter code a bit. Now all handlers are
5181 expected to explicitly return a value (at least a blank string).
5186 expected to explicitly return a value (at least a blank string).
5182
5187
5183 * Heavy edits in ipplib. Removed the help system altogether. Now
5188 * Heavy edits in ipplib. Removed the help system altogether. Now
5184 obj?/?? is used for inspecting objects, a magic @doc prints
5189 obj?/?? is used for inspecting objects, a magic @doc prints
5185 docstrings, and full-blown Python help is accessed via the 'help'
5190 docstrings, and full-blown Python help is accessed via the 'help'
5186 keyword. This cleans up a lot of code (less to maintain) and does
5191 keyword. This cleans up a lot of code (less to maintain) and does
5187 the job. Since 'help' is now a standard Python component, might as
5192 the job. Since 'help' is now a standard Python component, might as
5188 well use it and remove duplicate functionality.
5193 well use it and remove duplicate functionality.
5189
5194
5190 Also removed the option to use ipplib as a standalone program. By
5195 Also removed the option to use ipplib as a standalone program. By
5191 now it's too dependent on other parts of IPython to function alone.
5196 now it's too dependent on other parts of IPython to function alone.
5192
5197
5193 * Fixed bug in genutils.pager. It would crash if the pager was
5198 * Fixed bug in genutils.pager. It would crash if the pager was
5194 exited immediately after opening (broken pipe).
5199 exited immediately after opening (broken pipe).
5195
5200
5196 * Trimmed down the VerboseTB reporting a little. The header is
5201 * Trimmed down the VerboseTB reporting a little. The header is
5197 much shorter now and the repeated exception arguments at the end
5202 much shorter now and the repeated exception arguments at the end
5198 have been removed. For interactive use the old header seemed a bit
5203 have been removed. For interactive use the old header seemed a bit
5199 excessive.
5204 excessive.
5200
5205
5201 * Fixed small bug in output of @whos for variables with multi-word
5206 * Fixed small bug in output of @whos for variables with multi-word
5202 types (only first word was displayed).
5207 types (only first word was displayed).
5203
5208
5204 2001-11-17 Fernando Perez <fperez@colorado.edu>
5209 2001-11-17 Fernando Perez <fperez@colorado.edu>
5205
5210
5206 * Version 0.1.10 released, 0.1.11 opened for further work.
5211 * Version 0.1.10 released, 0.1.11 opened for further work.
5207
5212
5208 * Modified dirs and friends. dirs now *returns* the stack (not
5213 * Modified dirs and friends. dirs now *returns* the stack (not
5209 prints), so one can manipulate it as a variable. Convenient to
5214 prints), so one can manipulate it as a variable. Convenient to
5210 travel along many directories.
5215 travel along many directories.
5211
5216
5212 * Fixed bug in magic_pdef: would only work with functions with
5217 * Fixed bug in magic_pdef: would only work with functions with
5213 arguments with default values.
5218 arguments with default values.
5214
5219
5215 2001-11-14 Fernando Perez <fperez@colorado.edu>
5220 2001-11-14 Fernando Perez <fperez@colorado.edu>
5216
5221
5217 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5222 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5218 example with IPython. Various other minor fixes and cleanups.
5223 example with IPython. Various other minor fixes and cleanups.
5219
5224
5220 * Version 0.1.9 released, 0.1.10 opened for further work.
5225 * Version 0.1.9 released, 0.1.10 opened for further work.
5221
5226
5222 * Added sys.path to the list of directories searched in the
5227 * Added sys.path to the list of directories searched in the
5223 execfile= option. It used to be the current directory and the
5228 execfile= option. It used to be the current directory and the
5224 user's IPYTHONDIR only.
5229 user's IPYTHONDIR only.
5225
5230
5226 2001-11-13 Fernando Perez <fperez@colorado.edu>
5231 2001-11-13 Fernando Perez <fperez@colorado.edu>
5227
5232
5228 * Reinstated the raw_input/prefilter separation that Janko had
5233 * Reinstated the raw_input/prefilter separation that Janko had
5229 initially. This gives a more convenient setup for extending the
5234 initially. This gives a more convenient setup for extending the
5230 pre-processor from the outside: raw_input always gets a string,
5235 pre-processor from the outside: raw_input always gets a string,
5231 and prefilter has to process it. We can then redefine prefilter
5236 and prefilter has to process it. We can then redefine prefilter
5232 from the outside and implement extensions for special
5237 from the outside and implement extensions for special
5233 purposes.
5238 purposes.
5234
5239
5235 Today I got one for inputting PhysicalQuantity objects
5240 Today I got one for inputting PhysicalQuantity objects
5236 (from Scientific) without needing any function calls at
5241 (from Scientific) without needing any function calls at
5237 all. Extremely convenient, and it's all done as a user-level
5242 all. Extremely convenient, and it's all done as a user-level
5238 extension (no IPython code was touched). Now instead of:
5243 extension (no IPython code was touched). Now instead of:
5239 a = PhysicalQuantity(4.2,'m/s**2')
5244 a = PhysicalQuantity(4.2,'m/s**2')
5240 one can simply say
5245 one can simply say
5241 a = 4.2 m/s**2
5246 a = 4.2 m/s**2
5242 or even
5247 or even
5243 a = 4.2 m/s^2
5248 a = 4.2 m/s^2
5244
5249
5245 I use this, but it's also a proof of concept: IPython really is
5250 I use this, but it's also a proof of concept: IPython really is
5246 fully user-extensible, even at the level of the parsing of the
5251 fully user-extensible, even at the level of the parsing of the
5247 command line. It's not trivial, but it's perfectly doable.
5252 command line. It's not trivial, but it's perfectly doable.
5248
5253
5249 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5254 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5250 the problem of modules being loaded in the inverse order in which
5255 the problem of modules being loaded in the inverse order in which
5251 they were defined in
5256 they were defined in
5252
5257
5253 * Version 0.1.8 released, 0.1.9 opened for further work.
5258 * Version 0.1.8 released, 0.1.9 opened for further work.
5254
5259
5255 * Added magics pdef, source and file. They respectively show the
5260 * Added magics pdef, source and file. They respectively show the
5256 definition line ('prototype' in C), source code and full python
5261 definition line ('prototype' in C), source code and full python
5257 file for any callable object. The object inspector oinfo uses
5262 file for any callable object. The object inspector oinfo uses
5258 these to show the same information.
5263 these to show the same information.
5259
5264
5260 * Version 0.1.7 released, 0.1.8 opened for further work.
5265 * Version 0.1.7 released, 0.1.8 opened for further work.
5261
5266
5262 * Separated all the magic functions into a class called Magic. The
5267 * Separated all the magic functions into a class called Magic. The
5263 InteractiveShell class was becoming too big for Xemacs to handle
5268 InteractiveShell class was becoming too big for Xemacs to handle
5264 (de-indenting a line would lock it up for 10 seconds while it
5269 (de-indenting a line would lock it up for 10 seconds while it
5265 backtracked on the whole class!)
5270 backtracked on the whole class!)
5266
5271
5267 FIXME: didn't work. It can be done, but right now namespaces are
5272 FIXME: didn't work. It can be done, but right now namespaces are
5268 all messed up. Do it later (reverted it for now, so at least
5273 all messed up. Do it later (reverted it for now, so at least
5269 everything works as before).
5274 everything works as before).
5270
5275
5271 * Got the object introspection system (magic_oinfo) working! I
5276 * Got the object introspection system (magic_oinfo) working! I
5272 think this is pretty much ready for release to Janko, so he can
5277 think this is pretty much ready for release to Janko, so he can
5273 test it for a while and then announce it. Pretty much 100% of what
5278 test it for a while and then announce it. Pretty much 100% of what
5274 I wanted for the 'phase 1' release is ready. Happy, tired.
5279 I wanted for the 'phase 1' release is ready. Happy, tired.
5275
5280
5276 2001-11-12 Fernando Perez <fperez@colorado.edu>
5281 2001-11-12 Fernando Perez <fperez@colorado.edu>
5277
5282
5278 * Version 0.1.6 released, 0.1.7 opened for further work.
5283 * Version 0.1.6 released, 0.1.7 opened for further work.
5279
5284
5280 * Fixed bug in printing: it used to test for truth before
5285 * Fixed bug in printing: it used to test for truth before
5281 printing, so 0 wouldn't print. Now checks for None.
5286 printing, so 0 wouldn't print. Now checks for None.
5282
5287
5283 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5288 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5284 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5289 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5285 reaches by hand into the outputcache. Think of a better way to do
5290 reaches by hand into the outputcache. Think of a better way to do
5286 this later.
5291 this later.
5287
5292
5288 * Various small fixes thanks to Nathan's comments.
5293 * Various small fixes thanks to Nathan's comments.
5289
5294
5290 * Changed magic_pprint to magic_Pprint. This way it doesn't
5295 * Changed magic_pprint to magic_Pprint. This way it doesn't
5291 collide with pprint() and the name is consistent with the command
5296 collide with pprint() and the name is consistent with the command
5292 line option.
5297 line option.
5293
5298
5294 * Changed prompt counter behavior to be fully like
5299 * Changed prompt counter behavior to be fully like
5295 Mathematica's. That is, even input that doesn't return a result
5300 Mathematica's. That is, even input that doesn't return a result
5296 raises the prompt counter. The old behavior was kind of confusing
5301 raises the prompt counter. The old behavior was kind of confusing
5297 (getting the same prompt number several times if the operation
5302 (getting the same prompt number several times if the operation
5298 didn't return a result).
5303 didn't return a result).
5299
5304
5300 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5305 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5301
5306
5302 * Fixed -Classic mode (wasn't working anymore).
5307 * Fixed -Classic mode (wasn't working anymore).
5303
5308
5304 * Added colored prompts using Nathan's new code. Colors are
5309 * Added colored prompts using Nathan's new code. Colors are
5305 currently hardwired, they can be user-configurable. For
5310 currently hardwired, they can be user-configurable. For
5306 developers, they can be chosen in file ipythonlib.py, at the
5311 developers, they can be chosen in file ipythonlib.py, at the
5307 beginning of the CachedOutput class def.
5312 beginning of the CachedOutput class def.
5308
5313
5309 2001-11-11 Fernando Perez <fperez@colorado.edu>
5314 2001-11-11 Fernando Perez <fperez@colorado.edu>
5310
5315
5311 * Version 0.1.5 released, 0.1.6 opened for further work.
5316 * Version 0.1.5 released, 0.1.6 opened for further work.
5312
5317
5313 * Changed magic_env to *return* the environment as a dict (not to
5318 * Changed magic_env to *return* the environment as a dict (not to
5314 print it). This way it prints, but it can also be processed.
5319 print it). This way it prints, but it can also be processed.
5315
5320
5316 * Added Verbose exception reporting to interactive
5321 * Added Verbose exception reporting to interactive
5317 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5322 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5318 traceback. Had to make some changes to the ultraTB file. This is
5323 traceback. Had to make some changes to the ultraTB file. This is
5319 probably the last 'big' thing in my mental todo list. This ties
5324 probably the last 'big' thing in my mental todo list. This ties
5320 in with the next entry:
5325 in with the next entry:
5321
5326
5322 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5327 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5323 has to specify is Plain, Color or Verbose for all exception
5328 has to specify is Plain, Color or Verbose for all exception
5324 handling.
5329 handling.
5325
5330
5326 * Removed ShellServices option. All this can really be done via
5331 * Removed ShellServices option. All this can really be done via
5327 the magic system. It's easier to extend, cleaner and has automatic
5332 the magic system. It's easier to extend, cleaner and has automatic
5328 namespace protection and documentation.
5333 namespace protection and documentation.
5329
5334
5330 2001-11-09 Fernando Perez <fperez@colorado.edu>
5335 2001-11-09 Fernando Perez <fperez@colorado.edu>
5331
5336
5332 * Fixed bug in output cache flushing (missing parameter to
5337 * Fixed bug in output cache flushing (missing parameter to
5333 __init__). Other small bugs fixed (found using pychecker).
5338 __init__). Other small bugs fixed (found using pychecker).
5334
5339
5335 * Version 0.1.4 opened for bugfixing.
5340 * Version 0.1.4 opened for bugfixing.
5336
5341
5337 2001-11-07 Fernando Perez <fperez@colorado.edu>
5342 2001-11-07 Fernando Perez <fperez@colorado.edu>
5338
5343
5339 * Version 0.1.3 released, mainly because of the raw_input bug.
5344 * Version 0.1.3 released, mainly because of the raw_input bug.
5340
5345
5341 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5346 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5342 and when testing for whether things were callable, a call could
5347 and when testing for whether things were callable, a call could
5343 actually be made to certain functions. They would get called again
5348 actually be made to certain functions. They would get called again
5344 once 'really' executed, with a resulting double call. A disaster
5349 once 'really' executed, with a resulting double call. A disaster
5345 in many cases (list.reverse() would never work!).
5350 in many cases (list.reverse() would never work!).
5346
5351
5347 * Removed prefilter() function, moved its code to raw_input (which
5352 * Removed prefilter() function, moved its code to raw_input (which
5348 after all was just a near-empty caller for prefilter). This saves
5353 after all was just a near-empty caller for prefilter). This saves
5349 a function call on every prompt, and simplifies the class a tiny bit.
5354 a function call on every prompt, and simplifies the class a tiny bit.
5350
5355
5351 * Fix _ip to __ip name in magic example file.
5356 * Fix _ip to __ip name in magic example file.
5352
5357
5353 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5358 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5354 work with non-gnu versions of tar.
5359 work with non-gnu versions of tar.
5355
5360
5356 2001-11-06 Fernando Perez <fperez@colorado.edu>
5361 2001-11-06 Fernando Perez <fperez@colorado.edu>
5357
5362
5358 * Version 0.1.2. Just to keep track of the recent changes.
5363 * Version 0.1.2. Just to keep track of the recent changes.
5359
5364
5360 * Fixed nasty bug in output prompt routine. It used to check 'if
5365 * Fixed nasty bug in output prompt routine. It used to check 'if
5361 arg != None...'. Problem is, this fails if arg implements a
5366 arg != None...'. Problem is, this fails if arg implements a
5362 special comparison (__cmp__) which disallows comparing to
5367 special comparison (__cmp__) which disallows comparing to
5363 None. Found it when trying to use the PhysicalQuantity module from
5368 None. Found it when trying to use the PhysicalQuantity module from
5364 ScientificPython.
5369 ScientificPython.
5365
5370
5366 2001-11-05 Fernando Perez <fperez@colorado.edu>
5371 2001-11-05 Fernando Perez <fperez@colorado.edu>
5367
5372
5368 * Also added dirs. Now the pushd/popd/dirs family functions
5373 * Also added dirs. Now the pushd/popd/dirs family functions
5369 basically like the shell, with the added convenience of going home
5374 basically like the shell, with the added convenience of going home
5370 when called with no args.
5375 when called with no args.
5371
5376
5372 * pushd/popd slightly modified to mimic shell behavior more
5377 * pushd/popd slightly modified to mimic shell behavior more
5373 closely.
5378 closely.
5374
5379
5375 * Added env,pushd,popd from ShellServices as magic functions. I
5380 * Added env,pushd,popd from ShellServices as magic functions. I
5376 think the cleanest will be to port all desired functions from
5381 think the cleanest will be to port all desired functions from
5377 ShellServices as magics and remove ShellServices altogether. This
5382 ShellServices as magics and remove ShellServices altogether. This
5378 will provide a single, clean way of adding functionality
5383 will provide a single, clean way of adding functionality
5379 (shell-type or otherwise) to IP.
5384 (shell-type or otherwise) to IP.
5380
5385
5381 2001-11-04 Fernando Perez <fperez@colorado.edu>
5386 2001-11-04 Fernando Perez <fperez@colorado.edu>
5382
5387
5383 * Added .ipython/ directory to sys.path. This way users can keep
5388 * Added .ipython/ directory to sys.path. This way users can keep
5384 customizations there and access them via import.
5389 customizations there and access them via import.
5385
5390
5386 2001-11-03 Fernando Perez <fperez@colorado.edu>
5391 2001-11-03 Fernando Perez <fperez@colorado.edu>
5387
5392
5388 * Opened version 0.1.1 for new changes.
5393 * Opened version 0.1.1 for new changes.
5389
5394
5390 * Changed version number to 0.1.0: first 'public' release, sent to
5395 * Changed version number to 0.1.0: first 'public' release, sent to
5391 Nathan and Janko.
5396 Nathan and Janko.
5392
5397
5393 * Lots of small fixes and tweaks.
5398 * Lots of small fixes and tweaks.
5394
5399
5395 * Minor changes to whos format. Now strings are shown, snipped if
5400 * Minor changes to whos format. Now strings are shown, snipped if
5396 too long.
5401 too long.
5397
5402
5398 * Changed ShellServices to work on __main__ so they show up in @who
5403 * Changed ShellServices to work on __main__ so they show up in @who
5399
5404
5400 * Help also works with ? at the end of a line:
5405 * Help also works with ? at the end of a line:
5401 ?sin and sin?
5406 ?sin and sin?
5402 both produce the same effect. This is nice, as often I use the
5407 both produce the same effect. This is nice, as often I use the
5403 tab-complete to find the name of a method, but I used to then have
5408 tab-complete to find the name of a method, but I used to then have
5404 to go to the beginning of the line to put a ? if I wanted more
5409 to go to the beginning of the line to put a ? if I wanted more
5405 info. Now I can just add the ? and hit return. Convenient.
5410 info. Now I can just add the ? and hit return. Convenient.
5406
5411
5407 2001-11-02 Fernando Perez <fperez@colorado.edu>
5412 2001-11-02 Fernando Perez <fperez@colorado.edu>
5408
5413
5409 * Python version check (>=2.1) added.
5414 * Python version check (>=2.1) added.
5410
5415
5411 * Added LazyPython documentation. At this point the docs are quite
5416 * Added LazyPython documentation. At this point the docs are quite
5412 a mess. A cleanup is in order.
5417 a mess. A cleanup is in order.
5413
5418
5414 * Auto-installer created. For some bizarre reason, the zipfiles
5419 * Auto-installer created. For some bizarre reason, the zipfiles
5415 module isn't working on my system. So I made a tar version
5420 module isn't working on my system. So I made a tar version
5416 (hopefully the command line options in various systems won't kill
5421 (hopefully the command line options in various systems won't kill
5417 me).
5422 me).
5418
5423
5419 * Fixes to Struct in genutils. Now all dictionary-like methods are
5424 * Fixes to Struct in genutils. Now all dictionary-like methods are
5420 protected (reasonably).
5425 protected (reasonably).
5421
5426
5422 * Added pager function to genutils and changed ? to print usage
5427 * Added pager function to genutils and changed ? to print usage
5423 note through it (it was too long).
5428 note through it (it was too long).
5424
5429
5425 * Added the LazyPython functionality. Works great! I changed the
5430 * Added the LazyPython functionality. Works great! I changed the
5426 auto-quote escape to ';', it's on home row and next to '. But
5431 auto-quote escape to ';', it's on home row and next to '. But
5427 both auto-quote and auto-paren (still /) escapes are command-line
5432 both auto-quote and auto-paren (still /) escapes are command-line
5428 parameters.
5433 parameters.
5429
5434
5430
5435
5431 2001-11-01 Fernando Perez <fperez@colorado.edu>
5436 2001-11-01 Fernando Perez <fperez@colorado.edu>
5432
5437
5433 * Version changed to 0.0.7. Fairly large change: configuration now
5438 * Version changed to 0.0.7. Fairly large change: configuration now
5434 is all stored in a directory, by default .ipython. There, all
5439 is all stored in a directory, by default .ipython. There, all
5435 config files have normal looking names (not .names)
5440 config files have normal looking names (not .names)
5436
5441
5437 * Version 0.0.6 Released first to Lucas and Archie as a test
5442 * Version 0.0.6 Released first to Lucas and Archie as a test
5438 run. Since it's the first 'semi-public' release, change version to
5443 run. Since it's the first 'semi-public' release, change version to
5439 > 0.0.6 for any changes now.
5444 > 0.0.6 for any changes now.
5440
5445
5441 * Stuff I had put in the ipplib.py changelog:
5446 * Stuff I had put in the ipplib.py changelog:
5442
5447
5443 Changes to InteractiveShell:
5448 Changes to InteractiveShell:
5444
5449
5445 - Made the usage message a parameter.
5450 - Made the usage message a parameter.
5446
5451
5447 - Require the name of the shell variable to be given. It's a bit
5452 - Require the name of the shell variable to be given. It's a bit
5448 of a hack, but allows the name 'shell' not to be hardwire in the
5453 of a hack, but allows the name 'shell' not to be hardwire in the
5449 magic (@) handler, which is problematic b/c it requires
5454 magic (@) handler, which is problematic b/c it requires
5450 polluting the global namespace with 'shell'. This in turn is
5455 polluting the global namespace with 'shell'. This in turn is
5451 fragile: if a user redefines a variable called shell, things
5456 fragile: if a user redefines a variable called shell, things
5452 break.
5457 break.
5453
5458
5454 - magic @: all functions available through @ need to be defined
5459 - magic @: all functions available through @ need to be defined
5455 as magic_<name>, even though they can be called simply as
5460 as magic_<name>, even though they can be called simply as
5456 @<name>. This allows the special command @magic to gather
5461 @<name>. This allows the special command @magic to gather
5457 information automatically about all existing magic functions,
5462 information automatically about all existing magic functions,
5458 even if they are run-time user extensions, by parsing the shell
5463 even if they are run-time user extensions, by parsing the shell
5459 instance __dict__ looking for special magic_ names.
5464 instance __dict__ looking for special magic_ names.
5460
5465
5461 - mainloop: added *two* local namespace parameters. This allows
5466 - mainloop: added *two* local namespace parameters. This allows
5462 the class to differentiate between parameters which were there
5467 the class to differentiate between parameters which were there
5463 before and after command line initialization was processed. This
5468 before and after command line initialization was processed. This
5464 way, later @who can show things loaded at startup by the
5469 way, later @who can show things loaded at startup by the
5465 user. This trick was necessary to make session saving/reloading
5470 user. This trick was necessary to make session saving/reloading
5466 really work: ideally after saving/exiting/reloading a session,
5471 really work: ideally after saving/exiting/reloading a session,
5467 *everythin* should look the same, including the output of @who. I
5472 *everythin* should look the same, including the output of @who. I
5468 was only able to make this work with this double namespace
5473 was only able to make this work with this double namespace
5469 trick.
5474 trick.
5470
5475
5471 - added a header to the logfile which allows (almost) full
5476 - added a header to the logfile which allows (almost) full
5472 session restoring.
5477 session restoring.
5473
5478
5474 - prepend lines beginning with @ or !, with a and log
5479 - prepend lines beginning with @ or !, with a and log
5475 them. Why? !lines: may be useful to know what you did @lines:
5480 them. Why? !lines: may be useful to know what you did @lines:
5476 they may affect session state. So when restoring a session, at
5481 they may affect session state. So when restoring a session, at
5477 least inform the user of their presence. I couldn't quite get
5482 least inform the user of their presence. I couldn't quite get
5478 them to properly re-execute, but at least the user is warned.
5483 them to properly re-execute, but at least the user is warned.
5479
5484
5480 * Started ChangeLog.
5485 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now