##// END OF EJS Templates
Pprint works again
vivainio -
Show More
@@ -1,2808 +1,2808 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 1140 2006-02-10 17:07:11Z vivainio $"""
4 $Id: Magic.py 1163 2006-02-15 14:10:49Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import sys
29 import sys
30 import re
30 import re
31 import tempfile
31 import tempfile
32 import time
32 import time
33 import cPickle as pickle
33 import cPickle as pickle
34 import textwrap
34 import textwrap
35 from cStringIO import StringIO
35 from cStringIO import StringIO
36 from getopt import getopt,GetoptError
36 from getopt import getopt,GetoptError
37 from pprint import pprint, pformat
37 from pprint import pprint, pformat
38
38
39 # profile isn't bundled by default in Debian for license reasons
39 # profile isn't bundled by default in Debian for license reasons
40 try:
40 try:
41 import profile,pstats
41 import profile,pstats
42 except ImportError:
42 except ImportError:
43 profile = pstats = None
43 profile = pstats = None
44
44
45 # Homebrewed
45 # Homebrewed
46 from IPython import Debugger, OInspect, wildcard
46 from IPython import Debugger, OInspect, wildcard
47 from IPython.FakeModule import FakeModule
47 from IPython.FakeModule import FakeModule
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.PyColorize import Parser
49 from IPython.PyColorize import Parser
50 from IPython.ipstruct import Struct
50 from IPython.ipstruct import Struct
51 from IPython.macro import Macro
51 from IPython.macro import Macro
52 from IPython.genutils import *
52 from IPython.genutils import *
53 from IPython import platutils
53 from IPython import platutils
54
54
55 #***************************************************************************
55 #***************************************************************************
56 # Utility functions
56 # Utility functions
57 def on_off(tag):
57 def on_off(tag):
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 return ['OFF','ON'][tag]
59 return ['OFF','ON'][tag]
60
60
61 class Bunch: pass
61 class Bunch: pass
62
62
63 #***************************************************************************
63 #***************************************************************************
64 # Main class implementing Magic functionality
64 # Main class implementing Magic functionality
65 class Magic:
65 class Magic:
66 """Magic functions for InteractiveShell.
66 """Magic functions for InteractiveShell.
67
67
68 Shell functions which can be reached as %function_name. All magic
68 Shell functions which can be reached as %function_name. All magic
69 functions should accept a string, which they can parse for their own
69 functions should accept a string, which they can parse for their own
70 needs. This can make some functions easier to type, eg `%cd ../`
70 needs. This can make some functions easier to type, eg `%cd ../`
71 vs. `%cd("../")`
71 vs. `%cd("../")`
72
72
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 at the command line, but it is is needed in the definition. """
74 at the command line, but it is is needed in the definition. """
75
75
76 # class globals
76 # class globals
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 'Automagic is ON, % prefix NOT needed for magic functions.']
78 'Automagic is ON, % prefix NOT needed for magic functions.']
79
79
80 #......................................................................
80 #......................................................................
81 # some utility functions
81 # some utility functions
82
82
83 def __init__(self,shell):
83 def __init__(self,shell):
84
84
85 self.options_table = {}
85 self.options_table = {}
86 if profile is None:
86 if profile is None:
87 self.magic_prun = self.profile_missing_notice
87 self.magic_prun = self.profile_missing_notice
88 self.shell = shell
88 self.shell = shell
89
89
90 # namespace for holding state we may need
90 # namespace for holding state we may need
91 self._magic_state = Bunch()
91 self._magic_state = Bunch()
92
92
93 def profile_missing_notice(self, *args, **kwargs):
93 def profile_missing_notice(self, *args, **kwargs):
94 error("""\
94 error("""\
95 The profile module could not be found. If you are a Debian user,
95 The profile module could not be found. If you are a Debian user,
96 it has been removed from the standard Debian package because of its non-free
96 it has been removed from the standard Debian package because of its non-free
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98
98
99 def default_option(self,fn,optstr):
99 def default_option(self,fn,optstr):
100 """Make an entry in the options_table for fn, with value optstr"""
100 """Make an entry in the options_table for fn, with value optstr"""
101
101
102 if fn not in self.lsmagic():
102 if fn not in self.lsmagic():
103 error("%s is not a magic function" % fn)
103 error("%s is not a magic function" % fn)
104 self.options_table[fn] = optstr
104 self.options_table[fn] = optstr
105
105
106 def lsmagic(self):
106 def lsmagic(self):
107 """Return a list of currently available magic functions.
107 """Return a list of currently available magic functions.
108
108
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 ['magic_ls','magic_cd',...]"""
110 ['magic_ls','magic_cd',...]"""
111
111
112 # FIXME. This needs a cleanup, in the way the magics list is built.
112 # FIXME. This needs a cleanup, in the way the magics list is built.
113
113
114 # magics in class definition
114 # magics in class definition
115 class_magic = lambda fn: fn.startswith('magic_') and \
115 class_magic = lambda fn: fn.startswith('magic_') and \
116 callable(Magic.__dict__[fn])
116 callable(Magic.__dict__[fn])
117 # in instance namespace (run-time user additions)
117 # in instance namespace (run-time user additions)
118 inst_magic = lambda fn: fn.startswith('magic_') and \
118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 callable(self.__dict__[fn])
119 callable(self.__dict__[fn])
120 # and bound magics by user (so they can access self):
120 # and bound magics by user (so they can access self):
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 callable(self.__class__.__dict__[fn])
122 callable(self.__class__.__dict__[fn])
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
124 filter(inst_magic,self.__dict__.keys()) + \
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 out = []
126 out = []
127 for fn in magics:
127 for fn in magics:
128 out.append(fn.replace('magic_','',1))
128 out.append(fn.replace('magic_','',1))
129 out.sort()
129 out.sort()
130 return out
130 return out
131
131
132 def extract_input_slices(self,slices,raw=False):
132 def extract_input_slices(self,slices,raw=False):
133 """Return as a string a set of input history slices.
133 """Return as a string a set of input history slices.
134
134
135 Inputs:
135 Inputs:
136
136
137 - slices: the set of slices is given as a list of strings (like
137 - slices: the set of slices is given as a list of strings (like
138 ['1','4:8','9'], since this function is for use by magic functions
138 ['1','4:8','9'], since this function is for use by magic functions
139 which get their arguments as strings.
139 which get their arguments as strings.
140
140
141 Optional inputs:
141 Optional inputs:
142
142
143 - raw(False): by default, the processed input is used. If this is
143 - raw(False): by default, the processed input is used. If this is
144 true, the raw input history is used instead.
144 true, the raw input history is used instead.
145
145
146 Note that slices can be called with two notations:
146 Note that slices can be called with two notations:
147
147
148 N:M -> standard python form, means including items N...(M-1).
148 N:M -> standard python form, means including items N...(M-1).
149
149
150 N-M -> include items N..M (closed endpoint)."""
150 N-M -> include items N..M (closed endpoint)."""
151
151
152 if raw:
152 if raw:
153 hist = self.shell.input_hist_raw
153 hist = self.shell.input_hist_raw
154 else:
154 else:
155 hist = self.shell.input_hist
155 hist = self.shell.input_hist
156
156
157 cmds = []
157 cmds = []
158 for chunk in slices:
158 for chunk in slices:
159 if ':' in chunk:
159 if ':' in chunk:
160 ini,fin = map(int,chunk.split(':'))
160 ini,fin = map(int,chunk.split(':'))
161 elif '-' in chunk:
161 elif '-' in chunk:
162 ini,fin = map(int,chunk.split('-'))
162 ini,fin = map(int,chunk.split('-'))
163 fin += 1
163 fin += 1
164 else:
164 else:
165 ini = int(chunk)
165 ini = int(chunk)
166 fin = ini+1
166 fin = ini+1
167 cmds.append(hist[ini:fin])
167 cmds.append(hist[ini:fin])
168 return cmds
168 return cmds
169
169
170 def _ofind(self,oname):
170 def _ofind(self,oname):
171 """Find an object in the available namespaces.
171 """Find an object in the available namespaces.
172
172
173 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
173 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
174
174
175 Has special code to detect magic functions.
175 Has special code to detect magic functions.
176 """
176 """
177
177
178 oname = oname.strip()
178 oname = oname.strip()
179
179
180 # Namespaces to search in:
180 # Namespaces to search in:
181 user_ns = self.shell.user_ns
181 user_ns = self.shell.user_ns
182 internal_ns = self.shell.internal_ns
182 internal_ns = self.shell.internal_ns
183 builtin_ns = __builtin__.__dict__
183 builtin_ns = __builtin__.__dict__
184 alias_ns = self.shell.alias_table
184 alias_ns = self.shell.alias_table
185
185
186 # Put them in a list. The order is important so that we find things in
186 # Put them in a list. The order is important so that we find things in
187 # the same order that Python finds them.
187 # the same order that Python finds them.
188 namespaces = [ ('Interactive',user_ns),
188 namespaces = [ ('Interactive',user_ns),
189 ('IPython internal',internal_ns),
189 ('IPython internal',internal_ns),
190 ('Python builtin',builtin_ns),
190 ('Python builtin',builtin_ns),
191 ('Alias',alias_ns),
191 ('Alias',alias_ns),
192 ]
192 ]
193
193
194 # initialize results to 'null'
194 # initialize results to 'null'
195 found = 0; obj = None; ospace = None; ds = None;
195 found = 0; obj = None; ospace = None; ds = None;
196 ismagic = 0; isalias = 0
196 ismagic = 0; isalias = 0
197
197
198 # Look for the given name by splitting it in parts. If the head is
198 # Look for the given name by splitting it in parts. If the head is
199 # found, then we look for all the remaining parts as members, and only
199 # found, then we look for all the remaining parts as members, and only
200 # declare success if we can find them all.
200 # declare success if we can find them all.
201 oname_parts = oname.split('.')
201 oname_parts = oname.split('.')
202 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
202 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
203 for nsname,ns in namespaces:
203 for nsname,ns in namespaces:
204 try:
204 try:
205 obj = ns[oname_head]
205 obj = ns[oname_head]
206 except KeyError:
206 except KeyError:
207 continue
207 continue
208 else:
208 else:
209 for part in oname_rest:
209 for part in oname_rest:
210 try:
210 try:
211 obj = getattr(obj,part)
211 obj = getattr(obj,part)
212 except:
212 except:
213 # Blanket except b/c some badly implemented objects
213 # Blanket except b/c some badly implemented objects
214 # allow __getattr__ to raise exceptions other than
214 # allow __getattr__ to raise exceptions other than
215 # AttributeError, which then crashes IPython.
215 # AttributeError, which then crashes IPython.
216 break
216 break
217 else:
217 else:
218 # If we finish the for loop (no break), we got all members
218 # If we finish the for loop (no break), we got all members
219 found = 1
219 found = 1
220 ospace = nsname
220 ospace = nsname
221 if ns == alias_ns:
221 if ns == alias_ns:
222 isalias = 1
222 isalias = 1
223 break # namespace loop
223 break # namespace loop
224
224
225 # Try to see if it's magic
225 # Try to see if it's magic
226 if not found:
226 if not found:
227 if oname.startswith(self.shell.ESC_MAGIC):
227 if oname.startswith(self.shell.ESC_MAGIC):
228 oname = oname[1:]
228 oname = oname[1:]
229 obj = getattr(self,'magic_'+oname,None)
229 obj = getattr(self,'magic_'+oname,None)
230 if obj is not None:
230 if obj is not None:
231 found = 1
231 found = 1
232 ospace = 'IPython internal'
232 ospace = 'IPython internal'
233 ismagic = 1
233 ismagic = 1
234
234
235 # Last try: special-case some literals like '', [], {}, etc:
235 # Last try: special-case some literals like '', [], {}, etc:
236 if not found and oname_head in ["''",'""','[]','{}','()']:
236 if not found and oname_head in ["''",'""','[]','{}','()']:
237 obj = eval(oname_head)
237 obj = eval(oname_head)
238 found = 1
238 found = 1
239 ospace = 'Interactive'
239 ospace = 'Interactive'
240
240
241 return {'found':found, 'obj':obj, 'namespace':ospace,
241 return {'found':found, 'obj':obj, 'namespace':ospace,
242 'ismagic':ismagic, 'isalias':isalias}
242 'ismagic':ismagic, 'isalias':isalias}
243
243
244 def arg_err(self,func):
244 def arg_err(self,func):
245 """Print docstring if incorrect arguments were passed"""
245 """Print docstring if incorrect arguments were passed"""
246 print 'Error in arguments:'
246 print 'Error in arguments:'
247 print OInspect.getdoc(func)
247 print OInspect.getdoc(func)
248
248
249 def format_latex(self,strng):
249 def format_latex(self,strng):
250 """Format a string for latex inclusion."""
250 """Format a string for latex inclusion."""
251
251
252 # Characters that need to be escaped for latex:
252 # Characters that need to be escaped for latex:
253 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
253 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
254 # Magic command names as headers:
254 # Magic command names as headers:
255 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
255 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
256 re.MULTILINE)
256 re.MULTILINE)
257 # Magic commands
257 # Magic commands
258 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
258 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
259 re.MULTILINE)
259 re.MULTILINE)
260 # Paragraph continue
260 # Paragraph continue
261 par_re = re.compile(r'\\$',re.MULTILINE)
261 par_re = re.compile(r'\\$',re.MULTILINE)
262
262
263 # The "\n" symbol
263 # The "\n" symbol
264 newline_re = re.compile(r'\\n')
264 newline_re = re.compile(r'\\n')
265
265
266 # Now build the string for output:
266 # Now build the string for output:
267 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
267 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
268 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
268 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
269 strng)
269 strng)
270 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
270 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
271 strng = par_re.sub(r'\\\\',strng)
271 strng = par_re.sub(r'\\\\',strng)
272 strng = escape_re.sub(r'\\\1',strng)
272 strng = escape_re.sub(r'\\\1',strng)
273 strng = newline_re.sub(r'\\textbackslash{}n',strng)
273 strng = newline_re.sub(r'\\textbackslash{}n',strng)
274 return strng
274 return strng
275
275
276 def format_screen(self,strng):
276 def format_screen(self,strng):
277 """Format a string for screen printing.
277 """Format a string for screen printing.
278
278
279 This removes some latex-type format codes."""
279 This removes some latex-type format codes."""
280 # Paragraph continue
280 # Paragraph continue
281 par_re = re.compile(r'\\$',re.MULTILINE)
281 par_re = re.compile(r'\\$',re.MULTILINE)
282 strng = par_re.sub('',strng)
282 strng = par_re.sub('',strng)
283 return strng
283 return strng
284
284
285 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
285 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
286 """Parse options passed to an argument string.
286 """Parse options passed to an argument string.
287
287
288 The interface is similar to that of getopt(), but it returns back a
288 The interface is similar to that of getopt(), but it returns back a
289 Struct with the options as keys and the stripped argument string still
289 Struct with the options as keys and the stripped argument string still
290 as a string.
290 as a string.
291
291
292 arg_str is quoted as a true sys.argv vector by using shlex.split.
292 arg_str is quoted as a true sys.argv vector by using shlex.split.
293 This allows us to easily expand variables, glob files, quote
293 This allows us to easily expand variables, glob files, quote
294 arguments, etc.
294 arguments, etc.
295
295
296 Options:
296 Options:
297 -mode: default 'string'. If given as 'list', the argument string is
297 -mode: default 'string'. If given as 'list', the argument string is
298 returned as a list (split on whitespace) instead of a string.
298 returned as a list (split on whitespace) instead of a string.
299
299
300 -list_all: put all option values in lists. Normally only options
300 -list_all: put all option values in lists. Normally only options
301 appearing more than once are put in a list."""
301 appearing more than once are put in a list."""
302
302
303 # inject default options at the beginning of the input line
303 # inject default options at the beginning of the input line
304 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
304 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
305 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
305 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
306
306
307 mode = kw.get('mode','string')
307 mode = kw.get('mode','string')
308 if mode not in ['string','list']:
308 if mode not in ['string','list']:
309 raise ValueError,'incorrect mode given: %s' % mode
309 raise ValueError,'incorrect mode given: %s' % mode
310 # Get options
310 # Get options
311 list_all = kw.get('list_all',0)
311 list_all = kw.get('list_all',0)
312
312
313 # Check if we have more than one argument to warrant extra processing:
313 # Check if we have more than one argument to warrant extra processing:
314 odict = {} # Dictionary with options
314 odict = {} # Dictionary with options
315 args = arg_str.split()
315 args = arg_str.split()
316 if len(args) >= 1:
316 if len(args) >= 1:
317 # If the list of inputs only has 0 or 1 thing in it, there's no
317 # If the list of inputs only has 0 or 1 thing in it, there's no
318 # need to look for options
318 # need to look for options
319 argv = shlex_split(arg_str)
319 argv = shlex_split(arg_str)
320 # Do regular option processing
320 # Do regular option processing
321 try:
321 try:
322 opts,args = getopt(argv,opt_str,*long_opts)
322 opts,args = getopt(argv,opt_str,*long_opts)
323 except GetoptError,e:
323 except GetoptError,e:
324 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
324 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
325 " ".join(long_opts)))
325 " ".join(long_opts)))
326 for o,a in opts:
326 for o,a in opts:
327 if o.startswith('--'):
327 if o.startswith('--'):
328 o = o[2:]
328 o = o[2:]
329 else:
329 else:
330 o = o[1:]
330 o = o[1:]
331 try:
331 try:
332 odict[o].append(a)
332 odict[o].append(a)
333 except AttributeError:
333 except AttributeError:
334 odict[o] = [odict[o],a]
334 odict[o] = [odict[o],a]
335 except KeyError:
335 except KeyError:
336 if list_all:
336 if list_all:
337 odict[o] = [a]
337 odict[o] = [a]
338 else:
338 else:
339 odict[o] = a
339 odict[o] = a
340
340
341 # Prepare opts,args for return
341 # Prepare opts,args for return
342 opts = Struct(odict)
342 opts = Struct(odict)
343 if mode == 'string':
343 if mode == 'string':
344 args = ' '.join(args)
344 args = ' '.join(args)
345
345
346 return opts,args
346 return opts,args
347
347
348 #......................................................................
348 #......................................................................
349 # And now the actual magic functions
349 # And now the actual magic functions
350
350
351 # Functions for IPython shell work (vars,funcs, config, etc)
351 # Functions for IPython shell work (vars,funcs, config, etc)
352 def magic_lsmagic(self, parameter_s = ''):
352 def magic_lsmagic(self, parameter_s = ''):
353 """List currently available magic functions."""
353 """List currently available magic functions."""
354 mesc = self.shell.ESC_MAGIC
354 mesc = self.shell.ESC_MAGIC
355 print 'Available magic functions:\n'+mesc+\
355 print 'Available magic functions:\n'+mesc+\
356 (' '+mesc).join(self.lsmagic())
356 (' '+mesc).join(self.lsmagic())
357 print '\n' + Magic.auto_status[self.shell.rc.automagic]
357 print '\n' + Magic.auto_status[self.shell.rc.automagic]
358 return None
358 return None
359
359
360 def magic_magic(self, parameter_s = ''):
360 def magic_magic(self, parameter_s = ''):
361 """Print information about the magic function system."""
361 """Print information about the magic function system."""
362
362
363 mode = ''
363 mode = ''
364 try:
364 try:
365 if parameter_s.split()[0] == '-latex':
365 if parameter_s.split()[0] == '-latex':
366 mode = 'latex'
366 mode = 'latex'
367 except:
367 except:
368 pass
368 pass
369
369
370 magic_docs = []
370 magic_docs = []
371 for fname in self.lsmagic():
371 for fname in self.lsmagic():
372 mname = 'magic_' + fname
372 mname = 'magic_' + fname
373 for space in (Magic,self,self.__class__):
373 for space in (Magic,self,self.__class__):
374 try:
374 try:
375 fn = space.__dict__[mname]
375 fn = space.__dict__[mname]
376 except KeyError:
376 except KeyError:
377 pass
377 pass
378 else:
378 else:
379 break
379 break
380 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
380 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
381 fname,fn.__doc__))
381 fname,fn.__doc__))
382 magic_docs = ''.join(magic_docs)
382 magic_docs = ''.join(magic_docs)
383
383
384 if mode == 'latex':
384 if mode == 'latex':
385 print self.format_latex(magic_docs)
385 print self.format_latex(magic_docs)
386 return
386 return
387 else:
387 else:
388 magic_docs = self.format_screen(magic_docs)
388 magic_docs = self.format_screen(magic_docs)
389
389
390 outmsg = """
390 outmsg = """
391 IPython's 'magic' functions
391 IPython's 'magic' functions
392 ===========================
392 ===========================
393
393
394 The magic function system provides a series of functions which allow you to
394 The magic function system provides a series of functions which allow you to
395 control the behavior of IPython itself, plus a lot of system-type
395 control the behavior of IPython itself, plus a lot of system-type
396 features. All these functions are prefixed with a % character, but parameters
396 features. All these functions are prefixed with a % character, but parameters
397 are given without parentheses or quotes.
397 are given without parentheses or quotes.
398
398
399 NOTE: If you have 'automagic' enabled (via the command line option or with the
399 NOTE: If you have 'automagic' enabled (via the command line option or with the
400 %automagic function), you don't need to type in the % explicitly. By default,
400 %automagic function), you don't need to type in the % explicitly. By default,
401 IPython ships with automagic on, so you should only rarely need the % escape.
401 IPython ships with automagic on, so you should only rarely need the % escape.
402
402
403 Example: typing '%cd mydir' (without the quotes) changes you working directory
403 Example: typing '%cd mydir' (without the quotes) changes you working directory
404 to 'mydir', if it exists.
404 to 'mydir', if it exists.
405
405
406 You can define your own magic functions to extend the system. See the supplied
406 You can define your own magic functions to extend the system. See the supplied
407 ipythonrc and example-magic.py files for details (in your ipython
407 ipythonrc and example-magic.py files for details (in your ipython
408 configuration directory, typically $HOME/.ipython/).
408 configuration directory, typically $HOME/.ipython/).
409
409
410 You can also define your own aliased names for magic functions. In your
410 You can also define your own aliased names for magic functions. In your
411 ipythonrc file, placing a line like:
411 ipythonrc file, placing a line like:
412
412
413 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
413 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
414
414
415 will define %pf as a new name for %profile.
415 will define %pf as a new name for %profile.
416
416
417 You can also call magics in code using the ipmagic() function, which IPython
417 You can also call magics in code using the ipmagic() function, which IPython
418 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
418 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
419
419
420 For a list of the available magic functions, use %lsmagic. For a description
420 For a list of the available magic functions, use %lsmagic. For a description
421 of any of them, type %magic_name?, e.g. '%cd?'.
421 of any of them, type %magic_name?, e.g. '%cd?'.
422
422
423 Currently the magic system has the following functions:\n"""
423 Currently the magic system has the following functions:\n"""
424
424
425 mesc = self.shell.ESC_MAGIC
425 mesc = self.shell.ESC_MAGIC
426 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
426 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
427 "\n\n%s%s\n\n%s" % (outmsg,
427 "\n\n%s%s\n\n%s" % (outmsg,
428 magic_docs,mesc,mesc,
428 magic_docs,mesc,mesc,
429 (' '+mesc).join(self.lsmagic()),
429 (' '+mesc).join(self.lsmagic()),
430 Magic.auto_status[self.shell.rc.automagic] ) )
430 Magic.auto_status[self.shell.rc.automagic] ) )
431
431
432 page(outmsg,screen_lines=self.shell.rc.screen_length)
432 page(outmsg,screen_lines=self.shell.rc.screen_length)
433
433
434 def magic_automagic(self, parameter_s = ''):
434 def magic_automagic(self, parameter_s = ''):
435 """Make magic functions callable without having to type the initial %.
435 """Make magic functions callable without having to type the initial %.
436
436
437 Toggles on/off (when off, you must call it as %automagic, of
437 Toggles on/off (when off, you must call it as %automagic, of
438 course). Note that magic functions have lowest priority, so if there's
438 course). Note that magic functions have lowest priority, so if there's
439 a variable whose name collides with that of a magic fn, automagic
439 a variable whose name collides with that of a magic fn, automagic
440 won't work for that function (you get the variable instead). However,
440 won't work for that function (you get the variable instead). However,
441 if you delete the variable (del var), the previously shadowed magic
441 if you delete the variable (del var), the previously shadowed magic
442 function becomes visible to automagic again."""
442 function becomes visible to automagic again."""
443
443
444 rc = self.shell.rc
444 rc = self.shell.rc
445 rc.automagic = not rc.automagic
445 rc.automagic = not rc.automagic
446 print '\n' + Magic.auto_status[rc.automagic]
446 print '\n' + Magic.auto_status[rc.automagic]
447
447
448 def magic_autocall(self, parameter_s = ''):
448 def magic_autocall(self, parameter_s = ''):
449 """Make functions callable without having to type parentheses.
449 """Make functions callable without having to type parentheses.
450
450
451 Usage:
451 Usage:
452
452
453 %autocall [mode]
453 %autocall [mode]
454
454
455 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
455 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
456 value is toggled on and off (remembering the previous state)."""
456 value is toggled on and off (remembering the previous state)."""
457
457
458 rc = self.shell.rc
458 rc = self.shell.rc
459
459
460 if parameter_s:
460 if parameter_s:
461 arg = int(parameter_s)
461 arg = int(parameter_s)
462 else:
462 else:
463 arg = 'toggle'
463 arg = 'toggle'
464
464
465 if not arg in (0,1,2,'toggle'):
465 if not arg in (0,1,2,'toggle'):
466 error('Valid modes: (0->Off, 1->Smart, 2->Full')
466 error('Valid modes: (0->Off, 1->Smart, 2->Full')
467 return
467 return
468
468
469 if arg in (0,1,2):
469 if arg in (0,1,2):
470 rc.autocall = arg
470 rc.autocall = arg
471 else: # toggle
471 else: # toggle
472 if rc.autocall:
472 if rc.autocall:
473 self._magic_state.autocall_save = rc.autocall
473 self._magic_state.autocall_save = rc.autocall
474 rc.autocall = 0
474 rc.autocall = 0
475 else:
475 else:
476 try:
476 try:
477 rc.autocall = self._magic_state.autocall_save
477 rc.autocall = self._magic_state.autocall_save
478 except AttributeError:
478 except AttributeError:
479 rc.autocall = self._magic_state.autocall_save = 1
479 rc.autocall = self._magic_state.autocall_save = 1
480
480
481 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
481 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
482
482
483 def magic_autoindent(self, parameter_s = ''):
483 def magic_autoindent(self, parameter_s = ''):
484 """Toggle autoindent on/off (if available)."""
484 """Toggle autoindent on/off (if available)."""
485
485
486 self.shell.set_autoindent()
486 self.shell.set_autoindent()
487 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
487 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
488
488
489 def magic_system_verbose(self, parameter_s = ''):
489 def magic_system_verbose(self, parameter_s = ''):
490 """Toggle verbose printing of system calls on/off."""
490 """Toggle verbose printing of system calls on/off."""
491
491
492 self.shell.rc_set_toggle('system_verbose')
492 self.shell.rc_set_toggle('system_verbose')
493 print "System verbose printing is:",\
493 print "System verbose printing is:",\
494 ['OFF','ON'][self.shell.rc.system_verbose]
494 ['OFF','ON'][self.shell.rc.system_verbose]
495
495
496 def magic_history(self, parameter_s = ''):
496 def magic_history(self, parameter_s = ''):
497 """Print input history (_i<n> variables), with most recent last.
497 """Print input history (_i<n> variables), with most recent last.
498
498
499 %history -> print at most 40 inputs (some may be multi-line)\\
499 %history -> print at most 40 inputs (some may be multi-line)\\
500 %history n -> print at most n inputs\\
500 %history n -> print at most n inputs\\
501 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
501 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
502
502
503 Each input's number <n> is shown, and is accessible as the
503 Each input's number <n> is shown, and is accessible as the
504 automatically generated variable _i<n>. Multi-line statements are
504 automatically generated variable _i<n>. Multi-line statements are
505 printed starting at a new line for easy copy/paste.
505 printed starting at a new line for easy copy/paste.
506
506
507
507
508 Options:
508 Options:
509
509
510 -n: do NOT print line numbers. This is useful if you want to get a
510 -n: do NOT print line numbers. This is useful if you want to get a
511 printout of many lines which can be directly pasted into a text
511 printout of many lines which can be directly pasted into a text
512 editor.
512 editor.
513
513
514 This feature is only available if numbered prompts are in use.
514 This feature is only available if numbered prompts are in use.
515
515
516 -r: print the 'raw' history. IPython filters your input and
516 -r: print the 'raw' history. IPython filters your input and
517 converts it all into valid Python source before executing it (things
517 converts it all into valid Python source before executing it (things
518 like magics or aliases are turned into function calls, for
518 like magics or aliases are turned into function calls, for
519 example). With this option, you'll see the unfiltered history
519 example). With this option, you'll see the unfiltered history
520 instead of the filtered version: '%cd /' will be seen as '%cd /'
520 instead of the filtered version: '%cd /' will be seen as '%cd /'
521 instead of '_ip.magic("%cd /")'.
521 instead of '_ip.magic("%cd /")'.
522 """
522 """
523
523
524 shell = self.shell
524 shell = self.shell
525 if not shell.outputcache.do_full_cache:
525 if not shell.outputcache.do_full_cache:
526 print 'This feature is only available if numbered prompts are in use.'
526 print 'This feature is only available if numbered prompts are in use.'
527 return
527 return
528 opts,args = self.parse_options(parameter_s,'nr',mode='list')
528 opts,args = self.parse_options(parameter_s,'nr',mode='list')
529
529
530 if opts.has_key('r'):
530 if opts.has_key('r'):
531 input_hist = shell.input_hist_raw
531 input_hist = shell.input_hist_raw
532 else:
532 else:
533 input_hist = shell.input_hist
533 input_hist = shell.input_hist
534
534
535 default_length = 40
535 default_length = 40
536 if len(args) == 0:
536 if len(args) == 0:
537 final = len(input_hist)
537 final = len(input_hist)
538 init = max(1,final-default_length)
538 init = max(1,final-default_length)
539 elif len(args) == 1:
539 elif len(args) == 1:
540 final = len(input_hist)
540 final = len(input_hist)
541 init = max(1,final-int(args[0]))
541 init = max(1,final-int(args[0]))
542 elif len(args) == 2:
542 elif len(args) == 2:
543 init,final = map(int,args)
543 init,final = map(int,args)
544 else:
544 else:
545 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
545 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
546 print self.magic_hist.__doc__
546 print self.magic_hist.__doc__
547 return
547 return
548 width = len(str(final))
548 width = len(str(final))
549 line_sep = ['','\n']
549 line_sep = ['','\n']
550 print_nums = not opts.has_key('n')
550 print_nums = not opts.has_key('n')
551 for in_num in range(init,final):
551 for in_num in range(init,final):
552 inline = input_hist[in_num]
552 inline = input_hist[in_num]
553 multiline = int(inline.count('\n') > 1)
553 multiline = int(inline.count('\n') > 1)
554 if print_nums:
554 if print_nums:
555 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
555 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
556 print inline,
556 print inline,
557
557
558 def magic_hist(self, parameter_s=''):
558 def magic_hist(self, parameter_s=''):
559 """Alternate name for %history."""
559 """Alternate name for %history."""
560 return self.magic_history(parameter_s)
560 return self.magic_history(parameter_s)
561
561
562 def magic_p(self, parameter_s=''):
562 def magic_p(self, parameter_s=''):
563 """Just a short alias for Python's 'print'."""
563 """Just a short alias for Python's 'print'."""
564 exec 'print ' + parameter_s in self.shell.user_ns
564 exec 'print ' + parameter_s in self.shell.user_ns
565
565
566 def magic_r(self, parameter_s=''):
566 def magic_r(self, parameter_s=''):
567 """Repeat previous input.
567 """Repeat previous input.
568
568
569 If given an argument, repeats the previous command which starts with
569 If given an argument, repeats the previous command which starts with
570 the same string, otherwise it just repeats the previous input.
570 the same string, otherwise it just repeats the previous input.
571
571
572 Shell escaped commands (with ! as first character) are not recognized
572 Shell escaped commands (with ! as first character) are not recognized
573 by this system, only pure python code and magic commands.
573 by this system, only pure python code and magic commands.
574 """
574 """
575
575
576 start = parameter_s.strip()
576 start = parameter_s.strip()
577 esc_magic = self.shell.ESC_MAGIC
577 esc_magic = self.shell.ESC_MAGIC
578 # Identify magic commands even if automagic is on (which means
578 # Identify magic commands even if automagic is on (which means
579 # the in-memory version is different from that typed by the user).
579 # the in-memory version is different from that typed by the user).
580 if self.shell.rc.automagic:
580 if self.shell.rc.automagic:
581 start_magic = esc_magic+start
581 start_magic = esc_magic+start
582 else:
582 else:
583 start_magic = start
583 start_magic = start
584 # Look through the input history in reverse
584 # Look through the input history in reverse
585 for n in range(len(self.shell.input_hist)-2,0,-1):
585 for n in range(len(self.shell.input_hist)-2,0,-1):
586 input = self.shell.input_hist[n]
586 input = self.shell.input_hist[n]
587 # skip plain 'r' lines so we don't recurse to infinity
587 # skip plain 'r' lines so we don't recurse to infinity
588 if input != '_ip.magic("r")\n' and \
588 if input != '_ip.magic("r")\n' and \
589 (input.startswith(start) or input.startswith(start_magic)):
589 (input.startswith(start) or input.startswith(start_magic)):
590 #print 'match',`input` # dbg
590 #print 'match',`input` # dbg
591 print 'Executing:',input,
591 print 'Executing:',input,
592 self.shell.runlines(input)
592 self.shell.runlines(input)
593 return
593 return
594 print 'No previous input matching `%s` found.' % start
594 print 'No previous input matching `%s` found.' % start
595
595
596 def magic_page(self, parameter_s=''):
596 def magic_page(self, parameter_s=''):
597 """Pretty print the object and display it through a pager.
597 """Pretty print the object and display it through a pager.
598
598
599 If no parameter is given, use _ (last output)."""
599 If no parameter is given, use _ (last output)."""
600 # After a function contributed by Olivier Aubert, slightly modified.
600 # After a function contributed by Olivier Aubert, slightly modified.
601
601
602 oname = parameter_s and parameter_s or '_'
602 oname = parameter_s and parameter_s or '_'
603 info = self._ofind(oname)
603 info = self._ofind(oname)
604 if info['found']:
604 if info['found']:
605 page(pformat(info['obj']))
605 page(pformat(info['obj']))
606 else:
606 else:
607 print 'Object `%s` not found' % oname
607 print 'Object `%s` not found' % oname
608
608
609 def magic_profile(self, parameter_s=''):
609 def magic_profile(self, parameter_s=''):
610 """Print your currently active IPyhton profile."""
610 """Print your currently active IPyhton profile."""
611 if self.shell.rc.profile:
611 if self.shell.rc.profile:
612 printpl('Current IPython profile: $self.shell.rc.profile.')
612 printpl('Current IPython profile: $self.shell.rc.profile.')
613 else:
613 else:
614 print 'No profile active.'
614 print 'No profile active.'
615
615
616 def _inspect(self,meth,oname,**kw):
616 def _inspect(self,meth,oname,**kw):
617 """Generic interface to the inspector system.
617 """Generic interface to the inspector system.
618
618
619 This function is meant to be called by pdef, pdoc & friends."""
619 This function is meant to be called by pdef, pdoc & friends."""
620
620
621 oname = oname.strip()
621 oname = oname.strip()
622 info = Struct(self._ofind(oname))
622 info = Struct(self._ofind(oname))
623 if info.found:
623 if info.found:
624 pmethod = getattr(self.shell.inspector,meth)
624 pmethod = getattr(self.shell.inspector,meth)
625 formatter = info.ismagic and self.format_screen or None
625 formatter = info.ismagic and self.format_screen or None
626 if meth == 'pdoc':
626 if meth == 'pdoc':
627 pmethod(info.obj,oname,formatter)
627 pmethod(info.obj,oname,formatter)
628 elif meth == 'pinfo':
628 elif meth == 'pinfo':
629 pmethod(info.obj,oname,formatter,info,**kw)
629 pmethod(info.obj,oname,formatter,info,**kw)
630 else:
630 else:
631 pmethod(info.obj,oname)
631 pmethod(info.obj,oname)
632 else:
632 else:
633 print 'Object `%s` not found.' % oname
633 print 'Object `%s` not found.' % oname
634 return 'not found' # so callers can take other action
634 return 'not found' # so callers can take other action
635
635
636 def magic_pdef(self, parameter_s=''):
636 def magic_pdef(self, parameter_s=''):
637 """Print the definition header for any callable object.
637 """Print the definition header for any callable object.
638
638
639 If the object is a class, print the constructor information."""
639 If the object is a class, print the constructor information."""
640 self._inspect('pdef',parameter_s)
640 self._inspect('pdef',parameter_s)
641
641
642 def magic_pdoc(self, parameter_s=''):
642 def magic_pdoc(self, parameter_s=''):
643 """Print the docstring for an object.
643 """Print the docstring for an object.
644
644
645 If the given object is a class, it will print both the class and the
645 If the given object is a class, it will print both the class and the
646 constructor docstrings."""
646 constructor docstrings."""
647 self._inspect('pdoc',parameter_s)
647 self._inspect('pdoc',parameter_s)
648
648
649 def magic_psource(self, parameter_s=''):
649 def magic_psource(self, parameter_s=''):
650 """Print (or run through pager) the source code for an object."""
650 """Print (or run through pager) the source code for an object."""
651 self._inspect('psource',parameter_s)
651 self._inspect('psource',parameter_s)
652
652
653 def magic_pfile(self, parameter_s=''):
653 def magic_pfile(self, parameter_s=''):
654 """Print (or run through pager) the file where an object is defined.
654 """Print (or run through pager) the file where an object is defined.
655
655
656 The file opens at the line where the object definition begins. IPython
656 The file opens at the line where the object definition begins. IPython
657 will honor the environment variable PAGER if set, and otherwise will
657 will honor the environment variable PAGER if set, and otherwise will
658 do its best to print the file in a convenient form.
658 do its best to print the file in a convenient form.
659
659
660 If the given argument is not an object currently defined, IPython will
660 If the given argument is not an object currently defined, IPython will
661 try to interpret it as a filename (automatically adding a .py extension
661 try to interpret it as a filename (automatically adding a .py extension
662 if needed). You can thus use %pfile as a syntax highlighting code
662 if needed). You can thus use %pfile as a syntax highlighting code
663 viewer."""
663 viewer."""
664
664
665 # first interpret argument as an object name
665 # first interpret argument as an object name
666 out = self._inspect('pfile',parameter_s)
666 out = self._inspect('pfile',parameter_s)
667 # if not, try the input as a filename
667 # if not, try the input as a filename
668 if out == 'not found':
668 if out == 'not found':
669 try:
669 try:
670 filename = get_py_filename(parameter_s)
670 filename = get_py_filename(parameter_s)
671 except IOError,msg:
671 except IOError,msg:
672 print msg
672 print msg
673 return
673 return
674 page(self.shell.inspector.format(file(filename).read()))
674 page(self.shell.inspector.format(file(filename).read()))
675
675
676 def magic_pinfo(self, parameter_s=''):
676 def magic_pinfo(self, parameter_s=''):
677 """Provide detailed information about an object.
677 """Provide detailed information about an object.
678
678
679 '%pinfo object' is just a synonym for object? or ?object."""
679 '%pinfo object' is just a synonym for object? or ?object."""
680
680
681 #print 'pinfo par: <%s>' % parameter_s # dbg
681 #print 'pinfo par: <%s>' % parameter_s # dbg
682
682
683 # detail_level: 0 -> obj? , 1 -> obj??
683 # detail_level: 0 -> obj? , 1 -> obj??
684 detail_level = 0
684 detail_level = 0
685 # We need to detect if we got called as 'pinfo pinfo foo', which can
685 # We need to detect if we got called as 'pinfo pinfo foo', which can
686 # happen if the user types 'pinfo foo?' at the cmd line.
686 # happen if the user types 'pinfo foo?' at the cmd line.
687 pinfo,qmark1,oname,qmark2 = \
687 pinfo,qmark1,oname,qmark2 = \
688 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
688 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
689 if pinfo or qmark1 or qmark2:
689 if pinfo or qmark1 or qmark2:
690 detail_level = 1
690 detail_level = 1
691 if "*" in oname:
691 if "*" in oname:
692 self.magic_psearch(oname)
692 self.magic_psearch(oname)
693 else:
693 else:
694 self._inspect('pinfo',oname,detail_level=detail_level)
694 self._inspect('pinfo',oname,detail_level=detail_level)
695
695
696 def magic_psearch(self, parameter_s=''):
696 def magic_psearch(self, parameter_s=''):
697 """Search for object in namespaces by wildcard.
697 """Search for object in namespaces by wildcard.
698
698
699 %psearch [options] PATTERN [OBJECT TYPE]
699 %psearch [options] PATTERN [OBJECT TYPE]
700
700
701 Note: ? can be used as a synonym for %psearch, at the beginning or at
701 Note: ? can be used as a synonym for %psearch, at the beginning or at
702 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
702 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
703 rest of the command line must be unchanged (options come first), so
703 rest of the command line must be unchanged (options come first), so
704 for example the following forms are equivalent
704 for example the following forms are equivalent
705
705
706 %psearch -i a* function
706 %psearch -i a* function
707 -i a* function?
707 -i a* function?
708 ?-i a* function
708 ?-i a* function
709
709
710 Arguments:
710 Arguments:
711
711
712 PATTERN
712 PATTERN
713
713
714 where PATTERN is a string containing * as a wildcard similar to its
714 where PATTERN is a string containing * as a wildcard similar to its
715 use in a shell. The pattern is matched in all namespaces on the
715 use in a shell. The pattern is matched in all namespaces on the
716 search path. By default objects starting with a single _ are not
716 search path. By default objects starting with a single _ are not
717 matched, many IPython generated objects have a single
717 matched, many IPython generated objects have a single
718 underscore. The default is case insensitive matching. Matching is
718 underscore. The default is case insensitive matching. Matching is
719 also done on the attributes of objects and not only on the objects
719 also done on the attributes of objects and not only on the objects
720 in a module.
720 in a module.
721
721
722 [OBJECT TYPE]
722 [OBJECT TYPE]
723
723
724 Is the name of a python type from the types module. The name is
724 Is the name of a python type from the types module. The name is
725 given in lowercase without the ending type, ex. StringType is
725 given in lowercase without the ending type, ex. StringType is
726 written string. By adding a type here only objects matching the
726 written string. By adding a type here only objects matching the
727 given type are matched. Using all here makes the pattern match all
727 given type are matched. Using all here makes the pattern match all
728 types (this is the default).
728 types (this is the default).
729
729
730 Options:
730 Options:
731
731
732 -a: makes the pattern match even objects whose names start with a
732 -a: makes the pattern match even objects whose names start with a
733 single underscore. These names are normally ommitted from the
733 single underscore. These names are normally ommitted from the
734 search.
734 search.
735
735
736 -i/-c: make the pattern case insensitive/sensitive. If neither of
736 -i/-c: make the pattern case insensitive/sensitive. If neither of
737 these options is given, the default is read from your ipythonrc
737 these options is given, the default is read from your ipythonrc
738 file. The option name which sets this value is
738 file. The option name which sets this value is
739 'wildcards_case_sensitive'. If this option is not specified in your
739 'wildcards_case_sensitive'. If this option is not specified in your
740 ipythonrc file, IPython's internal default is to do a case sensitive
740 ipythonrc file, IPython's internal default is to do a case sensitive
741 search.
741 search.
742
742
743 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
743 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
744 specifiy can be searched in any of the following namespaces:
744 specifiy can be searched in any of the following namespaces:
745 'builtin', 'user', 'user_global','internal', 'alias', where
745 'builtin', 'user', 'user_global','internal', 'alias', where
746 'builtin' and 'user' are the search defaults. Note that you should
746 'builtin' and 'user' are the search defaults. Note that you should
747 not use quotes when specifying namespaces.
747 not use quotes when specifying namespaces.
748
748
749 'Builtin' contains the python module builtin, 'user' contains all
749 'Builtin' contains the python module builtin, 'user' contains all
750 user data, 'alias' only contain the shell aliases and no python
750 user data, 'alias' only contain the shell aliases and no python
751 objects, 'internal' contains objects used by IPython. The
751 objects, 'internal' contains objects used by IPython. The
752 'user_global' namespace is only used by embedded IPython instances,
752 'user_global' namespace is only used by embedded IPython instances,
753 and it contains module-level globals. You can add namespaces to the
753 and it contains module-level globals. You can add namespaces to the
754 search with -s or exclude them with -e (these options can be given
754 search with -s or exclude them with -e (these options can be given
755 more than once).
755 more than once).
756
756
757 Examples:
757 Examples:
758
758
759 %psearch a* -> objects beginning with an a
759 %psearch a* -> objects beginning with an a
760 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
760 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
761 %psearch a* function -> all functions beginning with an a
761 %psearch a* function -> all functions beginning with an a
762 %psearch re.e* -> objects beginning with an e in module re
762 %psearch re.e* -> objects beginning with an e in module re
763 %psearch r*.e* -> objects that start with e in modules starting in r
763 %psearch r*.e* -> objects that start with e in modules starting in r
764 %psearch r*.* string -> all strings in modules beginning with r
764 %psearch r*.* string -> all strings in modules beginning with r
765
765
766 Case sensitve search:
766 Case sensitve search:
767
767
768 %psearch -c a* list all object beginning with lower case a
768 %psearch -c a* list all object beginning with lower case a
769
769
770 Show objects beginning with a single _:
770 Show objects beginning with a single _:
771
771
772 %psearch -a _* list objects beginning with a single underscore"""
772 %psearch -a _* list objects beginning with a single underscore"""
773
773
774 # default namespaces to be searched
774 # default namespaces to be searched
775 def_search = ['user','builtin']
775 def_search = ['user','builtin']
776
776
777 # Process options/args
777 # Process options/args
778 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
778 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
779 opt = opts.get
779 opt = opts.get
780 shell = self.shell
780 shell = self.shell
781 psearch = shell.inspector.psearch
781 psearch = shell.inspector.psearch
782
782
783 # select case options
783 # select case options
784 if opts.has_key('i'):
784 if opts.has_key('i'):
785 ignore_case = True
785 ignore_case = True
786 elif opts.has_key('c'):
786 elif opts.has_key('c'):
787 ignore_case = False
787 ignore_case = False
788 else:
788 else:
789 ignore_case = not shell.rc.wildcards_case_sensitive
789 ignore_case = not shell.rc.wildcards_case_sensitive
790
790
791 # Build list of namespaces to search from user options
791 # Build list of namespaces to search from user options
792 def_search.extend(opt('s',[]))
792 def_search.extend(opt('s',[]))
793 ns_exclude = ns_exclude=opt('e',[])
793 ns_exclude = ns_exclude=opt('e',[])
794 ns_search = [nm for nm in def_search if nm not in ns_exclude]
794 ns_search = [nm for nm in def_search if nm not in ns_exclude]
795
795
796 # Call the actual search
796 # Call the actual search
797 try:
797 try:
798 psearch(args,shell.ns_table,ns_search,
798 psearch(args,shell.ns_table,ns_search,
799 show_all=opt('a'),ignore_case=ignore_case)
799 show_all=opt('a'),ignore_case=ignore_case)
800 except:
800 except:
801 shell.showtraceback()
801 shell.showtraceback()
802
802
803 def magic_who_ls(self, parameter_s=''):
803 def magic_who_ls(self, parameter_s=''):
804 """Return a sorted list of all interactive variables.
804 """Return a sorted list of all interactive variables.
805
805
806 If arguments are given, only variables of types matching these
806 If arguments are given, only variables of types matching these
807 arguments are returned."""
807 arguments are returned."""
808
808
809 user_ns = self.shell.user_ns
809 user_ns = self.shell.user_ns
810 internal_ns = self.shell.internal_ns
810 internal_ns = self.shell.internal_ns
811 user_config_ns = self.shell.user_config_ns
811 user_config_ns = self.shell.user_config_ns
812 out = []
812 out = []
813 typelist = parameter_s.split()
813 typelist = parameter_s.split()
814
814
815 for i in user_ns:
815 for i in user_ns:
816 if not (i.startswith('_') or i.startswith('_i')) \
816 if not (i.startswith('_') or i.startswith('_i')) \
817 and not (i in internal_ns or i in user_config_ns):
817 and not (i in internal_ns or i in user_config_ns):
818 if typelist:
818 if typelist:
819 if type(user_ns[i]).__name__ in typelist:
819 if type(user_ns[i]).__name__ in typelist:
820 out.append(i)
820 out.append(i)
821 else:
821 else:
822 out.append(i)
822 out.append(i)
823 out.sort()
823 out.sort()
824 return out
824 return out
825
825
826 def magic_who(self, parameter_s=''):
826 def magic_who(self, parameter_s=''):
827 """Print all interactive variables, with some minimal formatting.
827 """Print all interactive variables, with some minimal formatting.
828
828
829 If any arguments are given, only variables whose type matches one of
829 If any arguments are given, only variables whose type matches one of
830 these are printed. For example:
830 these are printed. For example:
831
831
832 %who function str
832 %who function str
833
833
834 will only list functions and strings, excluding all other types of
834 will only list functions and strings, excluding all other types of
835 variables. To find the proper type names, simply use type(var) at a
835 variables. To find the proper type names, simply use type(var) at a
836 command line to see how python prints type names. For example:
836 command line to see how python prints type names. For example:
837
837
838 In [1]: type('hello')\\
838 In [1]: type('hello')\\
839 Out[1]: <type 'str'>
839 Out[1]: <type 'str'>
840
840
841 indicates that the type name for strings is 'str'.
841 indicates that the type name for strings is 'str'.
842
842
843 %who always excludes executed names loaded through your configuration
843 %who always excludes executed names loaded through your configuration
844 file and things which are internal to IPython.
844 file and things which are internal to IPython.
845
845
846 This is deliberate, as typically you may load many modules and the
846 This is deliberate, as typically you may load many modules and the
847 purpose of %who is to show you only what you've manually defined."""
847 purpose of %who is to show you only what you've manually defined."""
848
848
849 varlist = self.magic_who_ls(parameter_s)
849 varlist = self.magic_who_ls(parameter_s)
850 if not varlist:
850 if not varlist:
851 print 'Interactive namespace is empty.'
851 print 'Interactive namespace is empty.'
852 return
852 return
853
853
854 # if we have variables, move on...
854 # if we have variables, move on...
855
855
856 # stupid flushing problem: when prompts have no separators, stdout is
856 # stupid flushing problem: when prompts have no separators, stdout is
857 # getting lost. I'm starting to think this is a python bug. I'm having
857 # getting lost. I'm starting to think this is a python bug. I'm having
858 # to force a flush with a print because even a sys.stdout.flush
858 # to force a flush with a print because even a sys.stdout.flush
859 # doesn't seem to do anything!
859 # doesn't seem to do anything!
860
860
861 count = 0
861 count = 0
862 for i in varlist:
862 for i in varlist:
863 print i+'\t',
863 print i+'\t',
864 count += 1
864 count += 1
865 if count > 8:
865 if count > 8:
866 count = 0
866 count = 0
867 print
867 print
868 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
868 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
869
869
870 print # well, this does force a flush at the expense of an extra \n
870 print # well, this does force a flush at the expense of an extra \n
871
871
872 def magic_whos(self, parameter_s=''):
872 def magic_whos(self, parameter_s=''):
873 """Like %who, but gives some extra information about each variable.
873 """Like %who, but gives some extra information about each variable.
874
874
875 The same type filtering of %who can be applied here.
875 The same type filtering of %who can be applied here.
876
876
877 For all variables, the type is printed. Additionally it prints:
877 For all variables, the type is printed. Additionally it prints:
878
878
879 - For {},[],(): their length.
879 - For {},[],(): their length.
880
880
881 - For Numeric arrays, a summary with shape, number of elements,
881 - For Numeric arrays, a summary with shape, number of elements,
882 typecode and size in memory.
882 typecode and size in memory.
883
883
884 - Everything else: a string representation, snipping their middle if
884 - Everything else: a string representation, snipping their middle if
885 too long."""
885 too long."""
886
886
887 varnames = self.magic_who_ls(parameter_s)
887 varnames = self.magic_who_ls(parameter_s)
888 if not varnames:
888 if not varnames:
889 print 'Interactive namespace is empty.'
889 print 'Interactive namespace is empty.'
890 return
890 return
891
891
892 # if we have variables, move on...
892 # if we have variables, move on...
893
893
894 # for these types, show len() instead of data:
894 # for these types, show len() instead of data:
895 seq_types = [types.DictType,types.ListType,types.TupleType]
895 seq_types = [types.DictType,types.ListType,types.TupleType]
896
896
897 # for Numeric arrays, display summary info
897 # for Numeric arrays, display summary info
898 try:
898 try:
899 import Numeric
899 import Numeric
900 except ImportError:
900 except ImportError:
901 array_type = None
901 array_type = None
902 else:
902 else:
903 array_type = Numeric.ArrayType.__name__
903 array_type = Numeric.ArrayType.__name__
904
904
905 # Find all variable names and types so we can figure out column sizes
905 # Find all variable names and types so we can figure out column sizes
906 get_vars = lambda i: self.shell.user_ns[i]
906 get_vars = lambda i: self.shell.user_ns[i]
907 type_name = lambda v: type(v).__name__
907 type_name = lambda v: type(v).__name__
908 varlist = map(get_vars,varnames)
908 varlist = map(get_vars,varnames)
909
909
910 typelist = []
910 typelist = []
911 for vv in varlist:
911 for vv in varlist:
912 tt = type_name(vv)
912 tt = type_name(vv)
913 if tt=='instance':
913 if tt=='instance':
914 typelist.append(str(vv.__class__))
914 typelist.append(str(vv.__class__))
915 else:
915 else:
916 typelist.append(tt)
916 typelist.append(tt)
917
917
918 # column labels and # of spaces as separator
918 # column labels and # of spaces as separator
919 varlabel = 'Variable'
919 varlabel = 'Variable'
920 typelabel = 'Type'
920 typelabel = 'Type'
921 datalabel = 'Data/Info'
921 datalabel = 'Data/Info'
922 colsep = 3
922 colsep = 3
923 # variable format strings
923 # variable format strings
924 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
924 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
925 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
925 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
926 aformat = "%s: %s elems, type `%s`, %s bytes"
926 aformat = "%s: %s elems, type `%s`, %s bytes"
927 # find the size of the columns to format the output nicely
927 # find the size of the columns to format the output nicely
928 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
928 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
929 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
929 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
930 # table header
930 # table header
931 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
931 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
932 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
932 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
933 # and the table itself
933 # and the table itself
934 kb = 1024
934 kb = 1024
935 Mb = 1048576 # kb**2
935 Mb = 1048576 # kb**2
936 for vname,var,vtype in zip(varnames,varlist,typelist):
936 for vname,var,vtype in zip(varnames,varlist,typelist):
937 print itpl(vformat),
937 print itpl(vformat),
938 if vtype in seq_types:
938 if vtype in seq_types:
939 print len(var)
939 print len(var)
940 elif vtype==array_type:
940 elif vtype==array_type:
941 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
941 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
942 vsize = Numeric.size(var)
942 vsize = Numeric.size(var)
943 vbytes = vsize*var.itemsize()
943 vbytes = vsize*var.itemsize()
944 if vbytes < 100000:
944 if vbytes < 100000:
945 print aformat % (vshape,vsize,var.typecode(),vbytes)
945 print aformat % (vshape,vsize,var.typecode(),vbytes)
946 else:
946 else:
947 print aformat % (vshape,vsize,var.typecode(),vbytes),
947 print aformat % (vshape,vsize,var.typecode(),vbytes),
948 if vbytes < Mb:
948 if vbytes < Mb:
949 print '(%s kb)' % (vbytes/kb,)
949 print '(%s kb)' % (vbytes/kb,)
950 else:
950 else:
951 print '(%s Mb)' % (vbytes/Mb,)
951 print '(%s Mb)' % (vbytes/Mb,)
952 else:
952 else:
953 vstr = str(var).replace('\n','\\n')
953 vstr = str(var).replace('\n','\\n')
954 if len(vstr) < 50:
954 if len(vstr) < 50:
955 print vstr
955 print vstr
956 else:
956 else:
957 printpl(vfmt_short)
957 printpl(vfmt_short)
958
958
959 def magic_reset(self, parameter_s=''):
959 def magic_reset(self, parameter_s=''):
960 """Resets the namespace by removing all names defined by the user.
960 """Resets the namespace by removing all names defined by the user.
961
961
962 Input/Output history are left around in case you need them."""
962 Input/Output history are left around in case you need them."""
963
963
964 ans = raw_input(
964 ans = raw_input(
965 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
965 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
966 if not ans.lower() == 'y':
966 if not ans.lower() == 'y':
967 print 'Nothing done.'
967 print 'Nothing done.'
968 return
968 return
969 user_ns = self.shell.user_ns
969 user_ns = self.shell.user_ns
970 for i in self.magic_who_ls():
970 for i in self.magic_who_ls():
971 del(user_ns[i])
971 del(user_ns[i])
972
972
973 def magic_config(self,parameter_s=''):
973 def magic_config(self,parameter_s=''):
974 """Show IPython's internal configuration."""
974 """Show IPython's internal configuration."""
975
975
976 page('Current configuration structure:\n'+
976 page('Current configuration structure:\n'+
977 pformat(self.shell.rc.dict()))
977 pformat(self.shell.rc.dict()))
978
978
979 def magic_logstart(self,parameter_s=''):
979 def magic_logstart(self,parameter_s=''):
980 """Start logging anywhere in a session.
980 """Start logging anywhere in a session.
981
981
982 %logstart [-o|-t] [log_name [log_mode]]
982 %logstart [-o|-t] [log_name [log_mode]]
983
983
984 If no name is given, it defaults to a file named 'ipython_log.py' in your
984 If no name is given, it defaults to a file named 'ipython_log.py' in your
985 current directory, in 'rotate' mode (see below).
985 current directory, in 'rotate' mode (see below).
986
986
987 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
987 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
988 history up to that point and then continues logging.
988 history up to that point and then continues logging.
989
989
990 %logstart takes a second optional parameter: logging mode. This can be one
990 %logstart takes a second optional parameter: logging mode. This can be one
991 of (note that the modes are given unquoted):\\
991 of (note that the modes are given unquoted):\\
992 append: well, that says it.\\
992 append: well, that says it.\\
993 backup: rename (if exists) to name~ and start name.\\
993 backup: rename (if exists) to name~ and start name.\\
994 global: single logfile in your home dir, appended to.\\
994 global: single logfile in your home dir, appended to.\\
995 over : overwrite existing log.\\
995 over : overwrite existing log.\\
996 rotate: create rotating logs name.1~, name.2~, etc.
996 rotate: create rotating logs name.1~, name.2~, etc.
997
997
998 Options:
998 Options:
999
999
1000 -o: log also IPython's output. In this mode, all commands which
1000 -o: log also IPython's output. In this mode, all commands which
1001 generate an Out[NN] prompt are recorded to the logfile, right after
1001 generate an Out[NN] prompt are recorded to the logfile, right after
1002 their corresponding input line. The output lines are always
1002 their corresponding input line. The output lines are always
1003 prepended with a '#[Out]# ' marker, so that the log remains valid
1003 prepended with a '#[Out]# ' marker, so that the log remains valid
1004 Python code.
1004 Python code.
1005
1005
1006 Since this marker is always the same, filtering only the output from
1006 Since this marker is always the same, filtering only the output from
1007 a log is very easy, using for example a simple awk call:
1007 a log is very easy, using for example a simple awk call:
1008
1008
1009 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1009 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1010
1010
1011 -t: put timestamps before each input line logged (these are put in
1011 -t: put timestamps before each input line logged (these are put in
1012 comments)."""
1012 comments)."""
1013
1013
1014 opts,par = self.parse_options(parameter_s,'ot')
1014 opts,par = self.parse_options(parameter_s,'ot')
1015 log_output = 'o' in opts
1015 log_output = 'o' in opts
1016 timestamp = 't' in opts
1016 timestamp = 't' in opts
1017
1017
1018 rc = self.shell.rc
1018 rc = self.shell.rc
1019 logger = self.shell.logger
1019 logger = self.shell.logger
1020
1020
1021 # if no args are given, the defaults set in the logger constructor by
1021 # if no args are given, the defaults set in the logger constructor by
1022 # ipytohn remain valid
1022 # ipytohn remain valid
1023 if par:
1023 if par:
1024 try:
1024 try:
1025 logfname,logmode = par.split()
1025 logfname,logmode = par.split()
1026 except:
1026 except:
1027 logfname = par
1027 logfname = par
1028 logmode = 'backup'
1028 logmode = 'backup'
1029 else:
1029 else:
1030 logfname = logger.logfname
1030 logfname = logger.logfname
1031 logmode = logger.logmode
1031 logmode = logger.logmode
1032 # put logfname into rc struct as if it had been called on the command
1032 # put logfname into rc struct as if it had been called on the command
1033 # line, so it ends up saved in the log header Save it in case we need
1033 # line, so it ends up saved in the log header Save it in case we need
1034 # to restore it...
1034 # to restore it...
1035 old_logfile = rc.opts.get('logfile','')
1035 old_logfile = rc.opts.get('logfile','')
1036 if logfname:
1036 if logfname:
1037 logfname = os.path.expanduser(logfname)
1037 logfname = os.path.expanduser(logfname)
1038 rc.opts.logfile = logfname
1038 rc.opts.logfile = logfname
1039 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1039 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1040 try:
1040 try:
1041 started = logger.logstart(logfname,loghead,logmode,
1041 started = logger.logstart(logfname,loghead,logmode,
1042 log_output,timestamp)
1042 log_output,timestamp)
1043 except:
1043 except:
1044 rc.opts.logfile = old_logfile
1044 rc.opts.logfile = old_logfile
1045 warn("Couldn't start log: %s" % sys.exc_info()[1])
1045 warn("Couldn't start log: %s" % sys.exc_info()[1])
1046 else:
1046 else:
1047 # log input history up to this point, optionally interleaving
1047 # log input history up to this point, optionally interleaving
1048 # output if requested
1048 # output if requested
1049
1049
1050 if timestamp:
1050 if timestamp:
1051 # disable timestamping for the previous history, since we've
1051 # disable timestamping for the previous history, since we've
1052 # lost those already (no time machine here).
1052 # lost those already (no time machine here).
1053 logger.timestamp = False
1053 logger.timestamp = False
1054 if log_output:
1054 if log_output:
1055 log_write = logger.log_write
1055 log_write = logger.log_write
1056 input_hist = self.shell.input_hist
1056 input_hist = self.shell.input_hist
1057 output_hist = self.shell.output_hist
1057 output_hist = self.shell.output_hist
1058 for n in range(1,len(input_hist)-1):
1058 for n in range(1,len(input_hist)-1):
1059 log_write(input_hist[n].rstrip())
1059 log_write(input_hist[n].rstrip())
1060 if n in output_hist:
1060 if n in output_hist:
1061 log_write(repr(output_hist[n]),'output')
1061 log_write(repr(output_hist[n]),'output')
1062 else:
1062 else:
1063 logger.log_write(self.shell.input_hist[1:])
1063 logger.log_write(self.shell.input_hist[1:])
1064 if timestamp:
1064 if timestamp:
1065 # re-enable timestamping
1065 # re-enable timestamping
1066 logger.timestamp = True
1066 logger.timestamp = True
1067
1067
1068 print ('Activating auto-logging. '
1068 print ('Activating auto-logging. '
1069 'Current session state plus future input saved.')
1069 'Current session state plus future input saved.')
1070 logger.logstate()
1070 logger.logstate()
1071
1071
1072 def magic_logoff(self,parameter_s=''):
1072 def magic_logoff(self,parameter_s=''):
1073 """Temporarily stop logging.
1073 """Temporarily stop logging.
1074
1074
1075 You must have previously started logging."""
1075 You must have previously started logging."""
1076 self.shell.logger.switch_log(0)
1076 self.shell.logger.switch_log(0)
1077
1077
1078 def magic_logon(self,parameter_s=''):
1078 def magic_logon(self,parameter_s=''):
1079 """Restart logging.
1079 """Restart logging.
1080
1080
1081 This function is for restarting logging which you've temporarily
1081 This function is for restarting logging which you've temporarily
1082 stopped with %logoff. For starting logging for the first time, you
1082 stopped with %logoff. For starting logging for the first time, you
1083 must use the %logstart function, which allows you to specify an
1083 must use the %logstart function, which allows you to specify an
1084 optional log filename."""
1084 optional log filename."""
1085
1085
1086 self.shell.logger.switch_log(1)
1086 self.shell.logger.switch_log(1)
1087
1087
1088 def magic_logstate(self,parameter_s=''):
1088 def magic_logstate(self,parameter_s=''):
1089 """Print the status of the logging system."""
1089 """Print the status of the logging system."""
1090
1090
1091 self.shell.logger.logstate()
1091 self.shell.logger.logstate()
1092
1092
1093 def magic_pdb(self, parameter_s=''):
1093 def magic_pdb(self, parameter_s=''):
1094 """Control the calling of the pdb interactive debugger.
1094 """Control the calling of the pdb interactive debugger.
1095
1095
1096 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1096 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1097 argument it works as a toggle.
1097 argument it works as a toggle.
1098
1098
1099 When an exception is triggered, IPython can optionally call the
1099 When an exception is triggered, IPython can optionally call the
1100 interactive pdb debugger after the traceback printout. %pdb toggles
1100 interactive pdb debugger after the traceback printout. %pdb toggles
1101 this feature on and off."""
1101 this feature on and off."""
1102
1102
1103 par = parameter_s.strip().lower()
1103 par = parameter_s.strip().lower()
1104
1104
1105 if par:
1105 if par:
1106 try:
1106 try:
1107 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1107 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1108 except KeyError:
1108 except KeyError:
1109 print ('Incorrect argument. Use on/1, off/0, '
1109 print ('Incorrect argument. Use on/1, off/0, '
1110 'or nothing for a toggle.')
1110 'or nothing for a toggle.')
1111 return
1111 return
1112 else:
1112 else:
1113 # toggle
1113 # toggle
1114 new_pdb = not self.shell.InteractiveTB.call_pdb
1114 new_pdb = not self.shell.InteractiveTB.call_pdb
1115
1115
1116 # set on the shell
1116 # set on the shell
1117 self.shell.call_pdb = new_pdb
1117 self.shell.call_pdb = new_pdb
1118 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1118 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1119
1119
1120 def magic_prun(self, parameter_s ='',user_mode=1,
1120 def magic_prun(self, parameter_s ='',user_mode=1,
1121 opts=None,arg_lst=None,prog_ns=None):
1121 opts=None,arg_lst=None,prog_ns=None):
1122
1122
1123 """Run a statement through the python code profiler.
1123 """Run a statement through the python code profiler.
1124
1124
1125 Usage:\\
1125 Usage:\\
1126 %prun [options] statement
1126 %prun [options] statement
1127
1127
1128 The given statement (which doesn't require quote marks) is run via the
1128 The given statement (which doesn't require quote marks) is run via the
1129 python profiler in a manner similar to the profile.run() function.
1129 python profiler in a manner similar to the profile.run() function.
1130 Namespaces are internally managed to work correctly; profile.run
1130 Namespaces are internally managed to work correctly; profile.run
1131 cannot be used in IPython because it makes certain assumptions about
1131 cannot be used in IPython because it makes certain assumptions about
1132 namespaces which do not hold under IPython.
1132 namespaces which do not hold under IPython.
1133
1133
1134 Options:
1134 Options:
1135
1135
1136 -l <limit>: you can place restrictions on what or how much of the
1136 -l <limit>: you can place restrictions on what or how much of the
1137 profile gets printed. The limit value can be:
1137 profile gets printed. The limit value can be:
1138
1138
1139 * A string: only information for function names containing this string
1139 * A string: only information for function names containing this string
1140 is printed.
1140 is printed.
1141
1141
1142 * An integer: only these many lines are printed.
1142 * An integer: only these many lines are printed.
1143
1143
1144 * A float (between 0 and 1): this fraction of the report is printed
1144 * A float (between 0 and 1): this fraction of the report is printed
1145 (for example, use a limit of 0.4 to see the topmost 40% only).
1145 (for example, use a limit of 0.4 to see the topmost 40% only).
1146
1146
1147 You can combine several limits with repeated use of the option. For
1147 You can combine several limits with repeated use of the option. For
1148 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1148 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1149 information about class constructors.
1149 information about class constructors.
1150
1150
1151 -r: return the pstats.Stats object generated by the profiling. This
1151 -r: return the pstats.Stats object generated by the profiling. This
1152 object has all the information about the profile in it, and you can
1152 object has all the information about the profile in it, and you can
1153 later use it for further analysis or in other functions.
1153 later use it for further analysis or in other functions.
1154
1154
1155 Since magic functions have a particular form of calling which prevents
1155 Since magic functions have a particular form of calling which prevents
1156 you from writing something like:\\
1156 you from writing something like:\\
1157 In [1]: p = %prun -r print 4 # invalid!\\
1157 In [1]: p = %prun -r print 4 # invalid!\\
1158 you must instead use IPython's automatic variables to assign this:\\
1158 you must instead use IPython's automatic variables to assign this:\\
1159 In [1]: %prun -r print 4 \\
1159 In [1]: %prun -r print 4 \\
1160 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1160 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1161 In [2]: stats = _
1161 In [2]: stats = _
1162
1162
1163 If you really need to assign this value via an explicit function call,
1163 If you really need to assign this value via an explicit function call,
1164 you can always tap directly into the true name of the magic function
1164 you can always tap directly into the true name of the magic function
1165 by using the _ip.magic function:\\
1165 by using the _ip.magic function:\\
1166 In [3]: stats = _ip.magic('prun','-r print 4')
1166 In [3]: stats = _ip.magic('prun','-r print 4')
1167
1167
1168 You can type _ip.magic? for more details.
1168 You can type _ip.magic? for more details.
1169
1169
1170 -s <key>: sort profile by given key. You can provide more than one key
1170 -s <key>: sort profile by given key. You can provide more than one key
1171 by using the option several times: '-s key1 -s key2 -s key3...'. The
1171 by using the option several times: '-s key1 -s key2 -s key3...'. The
1172 default sorting key is 'time'.
1172 default sorting key is 'time'.
1173
1173
1174 The following is copied verbatim from the profile documentation
1174 The following is copied verbatim from the profile documentation
1175 referenced below:
1175 referenced below:
1176
1176
1177 When more than one key is provided, additional keys are used as
1177 When more than one key is provided, additional keys are used as
1178 secondary criteria when the there is equality in all keys selected
1178 secondary criteria when the there is equality in all keys selected
1179 before them.
1179 before them.
1180
1180
1181 Abbreviations can be used for any key names, as long as the
1181 Abbreviations can be used for any key names, as long as the
1182 abbreviation is unambiguous. The following are the keys currently
1182 abbreviation is unambiguous. The following are the keys currently
1183 defined:
1183 defined:
1184
1184
1185 Valid Arg Meaning\\
1185 Valid Arg Meaning\\
1186 "calls" call count\\
1186 "calls" call count\\
1187 "cumulative" cumulative time\\
1187 "cumulative" cumulative time\\
1188 "file" file name\\
1188 "file" file name\\
1189 "module" file name\\
1189 "module" file name\\
1190 "pcalls" primitive call count\\
1190 "pcalls" primitive call count\\
1191 "line" line number\\
1191 "line" line number\\
1192 "name" function name\\
1192 "name" function name\\
1193 "nfl" name/file/line\\
1193 "nfl" name/file/line\\
1194 "stdname" standard name\\
1194 "stdname" standard name\\
1195 "time" internal time
1195 "time" internal time
1196
1196
1197 Note that all sorts on statistics are in descending order (placing
1197 Note that all sorts on statistics are in descending order (placing
1198 most time consuming items first), where as name, file, and line number
1198 most time consuming items first), where as name, file, and line number
1199 searches are in ascending order (i.e., alphabetical). The subtle
1199 searches are in ascending order (i.e., alphabetical). The subtle
1200 distinction between "nfl" and "stdname" is that the standard name is a
1200 distinction between "nfl" and "stdname" is that the standard name is a
1201 sort of the name as printed, which means that the embedded line
1201 sort of the name as printed, which means that the embedded line
1202 numbers get compared in an odd way. For example, lines 3, 20, and 40
1202 numbers get compared in an odd way. For example, lines 3, 20, and 40
1203 would (if the file names were the same) appear in the string order
1203 would (if the file names were the same) appear in the string order
1204 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1204 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1205 line numbers. In fact, sort_stats("nfl") is the same as
1205 line numbers. In fact, sort_stats("nfl") is the same as
1206 sort_stats("name", "file", "line").
1206 sort_stats("name", "file", "line").
1207
1207
1208 -T <filename>: save profile results as shown on screen to a text
1208 -T <filename>: save profile results as shown on screen to a text
1209 file. The profile is still shown on screen.
1209 file. The profile is still shown on screen.
1210
1210
1211 -D <filename>: save (via dump_stats) profile statistics to given
1211 -D <filename>: save (via dump_stats) profile statistics to given
1212 filename. This data is in a format understod by the pstats module, and
1212 filename. This data is in a format understod by the pstats module, and
1213 is generated by a call to the dump_stats() method of profile
1213 is generated by a call to the dump_stats() method of profile
1214 objects. The profile is still shown on screen.
1214 objects. The profile is still shown on screen.
1215
1215
1216 If you want to run complete programs under the profiler's control, use
1216 If you want to run complete programs under the profiler's control, use
1217 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1217 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1218 contains profiler specific options as described here.
1218 contains profiler specific options as described here.
1219
1219
1220 You can read the complete documentation for the profile module with:\\
1220 You can read the complete documentation for the profile module with:\\
1221 In [1]: import profile; profile.help() """
1221 In [1]: import profile; profile.help() """
1222
1222
1223 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1223 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1224 # protect user quote marks
1224 # protect user quote marks
1225 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1225 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1226
1226
1227 if user_mode: # regular user call
1227 if user_mode: # regular user call
1228 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1228 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1229 list_all=1)
1229 list_all=1)
1230 namespace = self.shell.user_ns
1230 namespace = self.shell.user_ns
1231 else: # called to run a program by %run -p
1231 else: # called to run a program by %run -p
1232 try:
1232 try:
1233 filename = get_py_filename(arg_lst[0])
1233 filename = get_py_filename(arg_lst[0])
1234 except IOError,msg:
1234 except IOError,msg:
1235 error(msg)
1235 error(msg)
1236 return
1236 return
1237
1237
1238 arg_str = 'execfile(filename,prog_ns)'
1238 arg_str = 'execfile(filename,prog_ns)'
1239 namespace = locals()
1239 namespace = locals()
1240
1240
1241 opts.merge(opts_def)
1241 opts.merge(opts_def)
1242
1242
1243 prof = profile.Profile()
1243 prof = profile.Profile()
1244 try:
1244 try:
1245 prof = prof.runctx(arg_str,namespace,namespace)
1245 prof = prof.runctx(arg_str,namespace,namespace)
1246 sys_exit = ''
1246 sys_exit = ''
1247 except SystemExit:
1247 except SystemExit:
1248 sys_exit = """*** SystemExit exception caught in code being profiled."""
1248 sys_exit = """*** SystemExit exception caught in code being profiled."""
1249
1249
1250 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1250 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1251
1251
1252 lims = opts.l
1252 lims = opts.l
1253 if lims:
1253 if lims:
1254 lims = [] # rebuild lims with ints/floats/strings
1254 lims = [] # rebuild lims with ints/floats/strings
1255 for lim in opts.l:
1255 for lim in opts.l:
1256 try:
1256 try:
1257 lims.append(int(lim))
1257 lims.append(int(lim))
1258 except ValueError:
1258 except ValueError:
1259 try:
1259 try:
1260 lims.append(float(lim))
1260 lims.append(float(lim))
1261 except ValueError:
1261 except ValueError:
1262 lims.append(lim)
1262 lims.append(lim)
1263
1263
1264 # trap output
1264 # trap output
1265 sys_stdout = sys.stdout
1265 sys_stdout = sys.stdout
1266 stdout_trap = StringIO()
1266 stdout_trap = StringIO()
1267 try:
1267 try:
1268 sys.stdout = stdout_trap
1268 sys.stdout = stdout_trap
1269 stats.print_stats(*lims)
1269 stats.print_stats(*lims)
1270 finally:
1270 finally:
1271 sys.stdout = sys_stdout
1271 sys.stdout = sys_stdout
1272 output = stdout_trap.getvalue()
1272 output = stdout_trap.getvalue()
1273 output = output.rstrip()
1273 output = output.rstrip()
1274
1274
1275 page(output,screen_lines=self.shell.rc.screen_length)
1275 page(output,screen_lines=self.shell.rc.screen_length)
1276 print sys_exit,
1276 print sys_exit,
1277
1277
1278 dump_file = opts.D[0]
1278 dump_file = opts.D[0]
1279 text_file = opts.T[0]
1279 text_file = opts.T[0]
1280 if dump_file:
1280 if dump_file:
1281 prof.dump_stats(dump_file)
1281 prof.dump_stats(dump_file)
1282 print '\n*** Profile stats marshalled to file',\
1282 print '\n*** Profile stats marshalled to file',\
1283 `dump_file`+'.',sys_exit
1283 `dump_file`+'.',sys_exit
1284 if text_file:
1284 if text_file:
1285 file(text_file,'w').write(output)
1285 file(text_file,'w').write(output)
1286 print '\n*** Profile printout saved to text file',\
1286 print '\n*** Profile printout saved to text file',\
1287 `text_file`+'.',sys_exit
1287 `text_file`+'.',sys_exit
1288
1288
1289 if opts.has_key('r'):
1289 if opts.has_key('r'):
1290 return stats
1290 return stats
1291 else:
1291 else:
1292 return None
1292 return None
1293
1293
1294 def magic_run(self, parameter_s ='',runner=None):
1294 def magic_run(self, parameter_s ='',runner=None):
1295 """Run the named file inside IPython as a program.
1295 """Run the named file inside IPython as a program.
1296
1296
1297 Usage:\\
1297 Usage:\\
1298 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1298 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1299
1299
1300 Parameters after the filename are passed as command-line arguments to
1300 Parameters after the filename are passed as command-line arguments to
1301 the program (put in sys.argv). Then, control returns to IPython's
1301 the program (put in sys.argv). Then, control returns to IPython's
1302 prompt.
1302 prompt.
1303
1303
1304 This is similar to running at a system prompt:\\
1304 This is similar to running at a system prompt:\\
1305 $ python file args\\
1305 $ python file args\\
1306 but with the advantage of giving you IPython's tracebacks, and of
1306 but with the advantage of giving you IPython's tracebacks, and of
1307 loading all variables into your interactive namespace for further use
1307 loading all variables into your interactive namespace for further use
1308 (unless -p is used, see below).
1308 (unless -p is used, see below).
1309
1309
1310 The file is executed in a namespace initially consisting only of
1310 The file is executed in a namespace initially consisting only of
1311 __name__=='__main__' and sys.argv constructed as indicated. It thus
1311 __name__=='__main__' and sys.argv constructed as indicated. It thus
1312 sees its environment as if it were being run as a stand-alone
1312 sees its environment as if it were being run as a stand-alone
1313 program. But after execution, the IPython interactive namespace gets
1313 program. But after execution, the IPython interactive namespace gets
1314 updated with all variables defined in the program (except for __name__
1314 updated with all variables defined in the program (except for __name__
1315 and sys.argv). This allows for very convenient loading of code for
1315 and sys.argv). This allows for very convenient loading of code for
1316 interactive work, while giving each program a 'clean sheet' to run in.
1316 interactive work, while giving each program a 'clean sheet' to run in.
1317
1317
1318 Options:
1318 Options:
1319
1319
1320 -n: __name__ is NOT set to '__main__', but to the running file's name
1320 -n: __name__ is NOT set to '__main__', but to the running file's name
1321 without extension (as python does under import). This allows running
1321 without extension (as python does under import). This allows running
1322 scripts and reloading the definitions in them without calling code
1322 scripts and reloading the definitions in them without calling code
1323 protected by an ' if __name__ == "__main__" ' clause.
1323 protected by an ' if __name__ == "__main__" ' clause.
1324
1324
1325 -i: run the file in IPython's namespace instead of an empty one. This
1325 -i: run the file in IPython's namespace instead of an empty one. This
1326 is useful if you are experimenting with code written in a text editor
1326 is useful if you are experimenting with code written in a text editor
1327 which depends on variables defined interactively.
1327 which depends on variables defined interactively.
1328
1328
1329 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1329 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1330 being run. This is particularly useful if IPython is being used to
1330 being run. This is particularly useful if IPython is being used to
1331 run unittests, which always exit with a sys.exit() call. In such
1331 run unittests, which always exit with a sys.exit() call. In such
1332 cases you are interested in the output of the test results, not in
1332 cases you are interested in the output of the test results, not in
1333 seeing a traceback of the unittest module.
1333 seeing a traceback of the unittest module.
1334
1334
1335 -t: print timing information at the end of the run. IPython will give
1335 -t: print timing information at the end of the run. IPython will give
1336 you an estimated CPU time consumption for your script, which under
1336 you an estimated CPU time consumption for your script, which under
1337 Unix uses the resource module to avoid the wraparound problems of
1337 Unix uses the resource module to avoid the wraparound problems of
1338 time.clock(). Under Unix, an estimate of time spent on system tasks
1338 time.clock(). Under Unix, an estimate of time spent on system tasks
1339 is also given (for Windows platforms this is reported as 0.0).
1339 is also given (for Windows platforms this is reported as 0.0).
1340
1340
1341 If -t is given, an additional -N<N> option can be given, where <N>
1341 If -t is given, an additional -N<N> option can be given, where <N>
1342 must be an integer indicating how many times you want the script to
1342 must be an integer indicating how many times you want the script to
1343 run. The final timing report will include total and per run results.
1343 run. The final timing report will include total and per run results.
1344
1344
1345 For example (testing the script uniq_stable.py):
1345 For example (testing the script uniq_stable.py):
1346
1346
1347 In [1]: run -t uniq_stable
1347 In [1]: run -t uniq_stable
1348
1348
1349 IPython CPU timings (estimated):\\
1349 IPython CPU timings (estimated):\\
1350 User : 0.19597 s.\\
1350 User : 0.19597 s.\\
1351 System: 0.0 s.\\
1351 System: 0.0 s.\\
1352
1352
1353 In [2]: run -t -N5 uniq_stable
1353 In [2]: run -t -N5 uniq_stable
1354
1354
1355 IPython CPU timings (estimated):\\
1355 IPython CPU timings (estimated):\\
1356 Total runs performed: 5\\
1356 Total runs performed: 5\\
1357 Times : Total Per run\\
1357 Times : Total Per run\\
1358 User : 0.910862 s, 0.1821724 s.\\
1358 User : 0.910862 s, 0.1821724 s.\\
1359 System: 0.0 s, 0.0 s.
1359 System: 0.0 s, 0.0 s.
1360
1360
1361 -d: run your program under the control of pdb, the Python debugger.
1361 -d: run your program under the control of pdb, the Python debugger.
1362 This allows you to execute your program step by step, watch variables,
1362 This allows you to execute your program step by step, watch variables,
1363 etc. Internally, what IPython does is similar to calling:
1363 etc. Internally, what IPython does is similar to calling:
1364
1364
1365 pdb.run('execfile("YOURFILENAME")')
1365 pdb.run('execfile("YOURFILENAME")')
1366
1366
1367 with a breakpoint set on line 1 of your file. You can change the line
1367 with a breakpoint set on line 1 of your file. You can change the line
1368 number for this automatic breakpoint to be <N> by using the -bN option
1368 number for this automatic breakpoint to be <N> by using the -bN option
1369 (where N must be an integer). For example:
1369 (where N must be an integer). For example:
1370
1370
1371 %run -d -b40 myscript
1371 %run -d -b40 myscript
1372
1372
1373 will set the first breakpoint at line 40 in myscript.py. Note that
1373 will set the first breakpoint at line 40 in myscript.py. Note that
1374 the first breakpoint must be set on a line which actually does
1374 the first breakpoint must be set on a line which actually does
1375 something (not a comment or docstring) for it to stop execution.
1375 something (not a comment or docstring) for it to stop execution.
1376
1376
1377 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1377 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1378 first enter 'c' (without qoutes) to start execution up to the first
1378 first enter 'c' (without qoutes) to start execution up to the first
1379 breakpoint.
1379 breakpoint.
1380
1380
1381 Entering 'help' gives information about the use of the debugger. You
1381 Entering 'help' gives information about the use of the debugger. You
1382 can easily see pdb's full documentation with "import pdb;pdb.help()"
1382 can easily see pdb's full documentation with "import pdb;pdb.help()"
1383 at a prompt.
1383 at a prompt.
1384
1384
1385 -p: run program under the control of the Python profiler module (which
1385 -p: run program under the control of the Python profiler module (which
1386 prints a detailed report of execution times, function calls, etc).
1386 prints a detailed report of execution times, function calls, etc).
1387
1387
1388 You can pass other options after -p which affect the behavior of the
1388 You can pass other options after -p which affect the behavior of the
1389 profiler itself. See the docs for %prun for details.
1389 profiler itself. See the docs for %prun for details.
1390
1390
1391 In this mode, the program's variables do NOT propagate back to the
1391 In this mode, the program's variables do NOT propagate back to the
1392 IPython interactive namespace (because they remain in the namespace
1392 IPython interactive namespace (because they remain in the namespace
1393 where the profiler executes them).
1393 where the profiler executes them).
1394
1394
1395 Internally this triggers a call to %prun, see its documentation for
1395 Internally this triggers a call to %prun, see its documentation for
1396 details on the options available specifically for profiling."""
1396 details on the options available specifically for profiling."""
1397
1397
1398 # get arguments and set sys.argv for program to be run.
1398 # get arguments and set sys.argv for program to be run.
1399 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1399 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1400 mode='list',list_all=1)
1400 mode='list',list_all=1)
1401
1401
1402 try:
1402 try:
1403 filename = get_py_filename(arg_lst[0])
1403 filename = get_py_filename(arg_lst[0])
1404 except IndexError:
1404 except IndexError:
1405 warn('you must provide at least a filename.')
1405 warn('you must provide at least a filename.')
1406 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1406 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1407 return
1407 return
1408 except IOError,msg:
1408 except IOError,msg:
1409 error(msg)
1409 error(msg)
1410 return
1410 return
1411
1411
1412 # Control the response to exit() calls made by the script being run
1412 # Control the response to exit() calls made by the script being run
1413 exit_ignore = opts.has_key('e')
1413 exit_ignore = opts.has_key('e')
1414
1414
1415 # Make sure that the running script gets a proper sys.argv as if it
1415 # Make sure that the running script gets a proper sys.argv as if it
1416 # were run from a system shell.
1416 # were run from a system shell.
1417 save_argv = sys.argv # save it for later restoring
1417 save_argv = sys.argv # save it for later restoring
1418 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1418 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1419
1419
1420 if opts.has_key('i'):
1420 if opts.has_key('i'):
1421 prog_ns = self.shell.user_ns
1421 prog_ns = self.shell.user_ns
1422 __name__save = self.shell.user_ns['__name__']
1422 __name__save = self.shell.user_ns['__name__']
1423 prog_ns['__name__'] = '__main__'
1423 prog_ns['__name__'] = '__main__'
1424 else:
1424 else:
1425 if opts.has_key('n'):
1425 if opts.has_key('n'):
1426 name = os.path.splitext(os.path.basename(filename))[0]
1426 name = os.path.splitext(os.path.basename(filename))[0]
1427 else:
1427 else:
1428 name = '__main__'
1428 name = '__main__'
1429 prog_ns = {'__name__':name}
1429 prog_ns = {'__name__':name}
1430
1430
1431 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1431 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1432 # set the __file__ global in the script's namespace
1432 # set the __file__ global in the script's namespace
1433 prog_ns['__file__'] = filename
1433 prog_ns['__file__'] = filename
1434
1434
1435 # pickle fix. See iplib for an explanation. But we need to make sure
1435 # pickle fix. See iplib for an explanation. But we need to make sure
1436 # that, if we overwrite __main__, we replace it at the end
1436 # that, if we overwrite __main__, we replace it at the end
1437 if prog_ns['__name__'] == '__main__':
1437 if prog_ns['__name__'] == '__main__':
1438 restore_main = sys.modules['__main__']
1438 restore_main = sys.modules['__main__']
1439 else:
1439 else:
1440 restore_main = False
1440 restore_main = False
1441
1441
1442 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1442 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1443
1443
1444 stats = None
1444 stats = None
1445 try:
1445 try:
1446 if opts.has_key('p'):
1446 if opts.has_key('p'):
1447 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1447 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1448 else:
1448 else:
1449 if opts.has_key('d'):
1449 if opts.has_key('d'):
1450 deb = Debugger.Pdb(self.shell.rc.colors)
1450 deb = Debugger.Pdb(self.shell.rc.colors)
1451 # reset Breakpoint state, which is moronically kept
1451 # reset Breakpoint state, which is moronically kept
1452 # in a class
1452 # in a class
1453 bdb.Breakpoint.next = 1
1453 bdb.Breakpoint.next = 1
1454 bdb.Breakpoint.bplist = {}
1454 bdb.Breakpoint.bplist = {}
1455 bdb.Breakpoint.bpbynumber = [None]
1455 bdb.Breakpoint.bpbynumber = [None]
1456 # Set an initial breakpoint to stop execution
1456 # Set an initial breakpoint to stop execution
1457 maxtries = 10
1457 maxtries = 10
1458 bp = int(opts.get('b',[1])[0])
1458 bp = int(opts.get('b',[1])[0])
1459 checkline = deb.checkline(filename,bp)
1459 checkline = deb.checkline(filename,bp)
1460 if not checkline:
1460 if not checkline:
1461 for bp in range(bp+1,bp+maxtries+1):
1461 for bp in range(bp+1,bp+maxtries+1):
1462 if deb.checkline(filename,bp):
1462 if deb.checkline(filename,bp):
1463 break
1463 break
1464 else:
1464 else:
1465 msg = ("\nI failed to find a valid line to set "
1465 msg = ("\nI failed to find a valid line to set "
1466 "a breakpoint\n"
1466 "a breakpoint\n"
1467 "after trying up to line: %s.\n"
1467 "after trying up to line: %s.\n"
1468 "Please set a valid breakpoint manually "
1468 "Please set a valid breakpoint manually "
1469 "with the -b option." % bp)
1469 "with the -b option." % bp)
1470 error(msg)
1470 error(msg)
1471 return
1471 return
1472 # if we find a good linenumber, set the breakpoint
1472 # if we find a good linenumber, set the breakpoint
1473 deb.do_break('%s:%s' % (filename,bp))
1473 deb.do_break('%s:%s' % (filename,bp))
1474 # Start file run
1474 # Start file run
1475 print "NOTE: Enter 'c' at the",
1475 print "NOTE: Enter 'c' at the",
1476 print "ipdb> prompt to start your script."
1476 print "ipdb> prompt to start your script."
1477 try:
1477 try:
1478 deb.run('execfile("%s")' % filename,prog_ns)
1478 deb.run('execfile("%s")' % filename,prog_ns)
1479 except:
1479 except:
1480 etype, value, tb = sys.exc_info()
1480 etype, value, tb = sys.exc_info()
1481 # Skip three frames in the traceback: the %run one,
1481 # Skip three frames in the traceback: the %run one,
1482 # one inside bdb.py, and the command-line typed by the
1482 # one inside bdb.py, and the command-line typed by the
1483 # user (run by exec in pdb itself).
1483 # user (run by exec in pdb itself).
1484 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1484 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1485 else:
1485 else:
1486 if runner is None:
1486 if runner is None:
1487 runner = self.shell.safe_execfile
1487 runner = self.shell.safe_execfile
1488 if opts.has_key('t'):
1488 if opts.has_key('t'):
1489 try:
1489 try:
1490 nruns = int(opts['N'][0])
1490 nruns = int(opts['N'][0])
1491 if nruns < 1:
1491 if nruns < 1:
1492 error('Number of runs must be >=1')
1492 error('Number of runs must be >=1')
1493 return
1493 return
1494 except (KeyError):
1494 except (KeyError):
1495 nruns = 1
1495 nruns = 1
1496 if nruns == 1:
1496 if nruns == 1:
1497 t0 = clock2()
1497 t0 = clock2()
1498 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1498 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1499 t1 = clock2()
1499 t1 = clock2()
1500 t_usr = t1[0]-t0[0]
1500 t_usr = t1[0]-t0[0]
1501 t_sys = t1[1]-t1[1]
1501 t_sys = t1[1]-t1[1]
1502 print "\nIPython CPU timings (estimated):"
1502 print "\nIPython CPU timings (estimated):"
1503 print " User : %10s s." % t_usr
1503 print " User : %10s s." % t_usr
1504 print " System: %10s s." % t_sys
1504 print " System: %10s s." % t_sys
1505 else:
1505 else:
1506 runs = range(nruns)
1506 runs = range(nruns)
1507 t0 = clock2()
1507 t0 = clock2()
1508 for nr in runs:
1508 for nr in runs:
1509 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1509 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1510 t1 = clock2()
1510 t1 = clock2()
1511 t_usr = t1[0]-t0[0]
1511 t_usr = t1[0]-t0[0]
1512 t_sys = t1[1]-t1[1]
1512 t_sys = t1[1]-t1[1]
1513 print "\nIPython CPU timings (estimated):"
1513 print "\nIPython CPU timings (estimated):"
1514 print "Total runs performed:",nruns
1514 print "Total runs performed:",nruns
1515 print " Times : %10s %10s" % ('Total','Per run')
1515 print " Times : %10s %10s" % ('Total','Per run')
1516 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1516 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1517 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1517 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1518
1518
1519 else:
1519 else:
1520 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1520 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1521 if opts.has_key('i'):
1521 if opts.has_key('i'):
1522 self.shell.user_ns['__name__'] = __name__save
1522 self.shell.user_ns['__name__'] = __name__save
1523 else:
1523 else:
1524 # update IPython interactive namespace
1524 # update IPython interactive namespace
1525 del prog_ns['__name__']
1525 del prog_ns['__name__']
1526 self.shell.user_ns.update(prog_ns)
1526 self.shell.user_ns.update(prog_ns)
1527 finally:
1527 finally:
1528 sys.argv = save_argv
1528 sys.argv = save_argv
1529 if restore_main:
1529 if restore_main:
1530 sys.modules['__main__'] = restore_main
1530 sys.modules['__main__'] = restore_main
1531 return stats
1531 return stats
1532
1532
1533 def magic_runlog(self, parameter_s =''):
1533 def magic_runlog(self, parameter_s =''):
1534 """Run files as logs.
1534 """Run files as logs.
1535
1535
1536 Usage:\\
1536 Usage:\\
1537 %runlog file1 file2 ...
1537 %runlog file1 file2 ...
1538
1538
1539 Run the named files (treating them as log files) in sequence inside
1539 Run the named files (treating them as log files) in sequence inside
1540 the interpreter, and return to the prompt. This is much slower than
1540 the interpreter, and return to the prompt. This is much slower than
1541 %run because each line is executed in a try/except block, but it
1541 %run because each line is executed in a try/except block, but it
1542 allows running files with syntax errors in them.
1542 allows running files with syntax errors in them.
1543
1543
1544 Normally IPython will guess when a file is one of its own logfiles, so
1544 Normally IPython will guess when a file is one of its own logfiles, so
1545 you can typically use %run even for logs. This shorthand allows you to
1545 you can typically use %run even for logs. This shorthand allows you to
1546 force any file to be treated as a log file."""
1546 force any file to be treated as a log file."""
1547
1547
1548 for f in parameter_s.split():
1548 for f in parameter_s.split():
1549 self.shell.safe_execfile(f,self.shell.user_ns,
1549 self.shell.safe_execfile(f,self.shell.user_ns,
1550 self.shell.user_ns,islog=1)
1550 self.shell.user_ns,islog=1)
1551
1551
1552 def magic_time(self,parameter_s = ''):
1552 def magic_time(self,parameter_s = ''):
1553 """Time execution of a Python statement or expression.
1553 """Time execution of a Python statement or expression.
1554
1554
1555 The CPU and wall clock times are printed, and the value of the
1555 The CPU and wall clock times are printed, and the value of the
1556 expression (if any) is returned. Note that under Win32, system time
1556 expression (if any) is returned. Note that under Win32, system time
1557 is always reported as 0, since it can not be measured.
1557 is always reported as 0, since it can not be measured.
1558
1558
1559 This function provides very basic timing functionality. In Python
1559 This function provides very basic timing functionality. In Python
1560 2.3, the timeit module offers more control and sophistication, but for
1560 2.3, the timeit module offers more control and sophistication, but for
1561 now IPython supports Python 2.2, so we can not rely on timeit being
1561 now IPython supports Python 2.2, so we can not rely on timeit being
1562 present.
1562 present.
1563
1563
1564 Some examples:
1564 Some examples:
1565
1565
1566 In [1]: time 2**128
1566 In [1]: time 2**128
1567 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1567 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1568 Wall time: 0.00
1568 Wall time: 0.00
1569 Out[1]: 340282366920938463463374607431768211456L
1569 Out[1]: 340282366920938463463374607431768211456L
1570
1570
1571 In [2]: n = 1000000
1571 In [2]: n = 1000000
1572
1572
1573 In [3]: time sum(range(n))
1573 In [3]: time sum(range(n))
1574 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1574 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1575 Wall time: 1.37
1575 Wall time: 1.37
1576 Out[3]: 499999500000L
1576 Out[3]: 499999500000L
1577
1577
1578 In [4]: time print 'hello world'
1578 In [4]: time print 'hello world'
1579 hello world
1579 hello world
1580 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1580 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1581 Wall time: 0.00
1581 Wall time: 0.00
1582 """
1582 """
1583
1583
1584 # fail immediately if the given expression can't be compiled
1584 # fail immediately if the given expression can't be compiled
1585 try:
1585 try:
1586 mode = 'eval'
1586 mode = 'eval'
1587 code = compile(parameter_s,'<timed eval>',mode)
1587 code = compile(parameter_s,'<timed eval>',mode)
1588 except SyntaxError:
1588 except SyntaxError:
1589 mode = 'exec'
1589 mode = 'exec'
1590 code = compile(parameter_s,'<timed exec>',mode)
1590 code = compile(parameter_s,'<timed exec>',mode)
1591 # skew measurement as little as possible
1591 # skew measurement as little as possible
1592 glob = self.shell.user_ns
1592 glob = self.shell.user_ns
1593 clk = clock2
1593 clk = clock2
1594 wtime = time.time
1594 wtime = time.time
1595 # time execution
1595 # time execution
1596 wall_st = wtime()
1596 wall_st = wtime()
1597 if mode=='eval':
1597 if mode=='eval':
1598 st = clk()
1598 st = clk()
1599 out = eval(code,glob)
1599 out = eval(code,glob)
1600 end = clk()
1600 end = clk()
1601 else:
1601 else:
1602 st = clk()
1602 st = clk()
1603 exec code in glob
1603 exec code in glob
1604 end = clk()
1604 end = clk()
1605 out = None
1605 out = None
1606 wall_end = wtime()
1606 wall_end = wtime()
1607 # Compute actual times and report
1607 # Compute actual times and report
1608 wall_time = wall_end-wall_st
1608 wall_time = wall_end-wall_st
1609 cpu_user = end[0]-st[0]
1609 cpu_user = end[0]-st[0]
1610 cpu_sys = end[1]-st[1]
1610 cpu_sys = end[1]-st[1]
1611 cpu_tot = cpu_user+cpu_sys
1611 cpu_tot = cpu_user+cpu_sys
1612 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1612 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1613 (cpu_user,cpu_sys,cpu_tot)
1613 (cpu_user,cpu_sys,cpu_tot)
1614 print "Wall time: %.2f" % wall_time
1614 print "Wall time: %.2f" % wall_time
1615 return out
1615 return out
1616
1616
1617 def magic_macro(self,parameter_s = ''):
1617 def magic_macro(self,parameter_s = ''):
1618 """Define a set of input lines as a macro for future re-execution.
1618 """Define a set of input lines as a macro for future re-execution.
1619
1619
1620 Usage:\\
1620 Usage:\\
1621 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1621 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1622
1622
1623 Options:
1623 Options:
1624
1624
1625 -r: use 'raw' input. By default, the 'processed' history is used,
1625 -r: use 'raw' input. By default, the 'processed' history is used,
1626 so that magics are loaded in their transformed version to valid
1626 so that magics are loaded in their transformed version to valid
1627 Python. If this option is given, the raw input as typed as the
1627 Python. If this option is given, the raw input as typed as the
1628 command line is used instead.
1628 command line is used instead.
1629
1629
1630 This will define a global variable called `name` which is a string
1630 This will define a global variable called `name` which is a string
1631 made of joining the slices and lines you specify (n1,n2,... numbers
1631 made of joining the slices and lines you specify (n1,n2,... numbers
1632 above) from your input history into a single string. This variable
1632 above) from your input history into a single string. This variable
1633 acts like an automatic function which re-executes those lines as if
1633 acts like an automatic function which re-executes those lines as if
1634 you had typed them. You just type 'name' at the prompt and the code
1634 you had typed them. You just type 'name' at the prompt and the code
1635 executes.
1635 executes.
1636
1636
1637 The notation for indicating number ranges is: n1-n2 means 'use line
1637 The notation for indicating number ranges is: n1-n2 means 'use line
1638 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1638 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1639 using the lines numbered 5,6 and 7.
1639 using the lines numbered 5,6 and 7.
1640
1640
1641 Note: as a 'hidden' feature, you can also use traditional python slice
1641 Note: as a 'hidden' feature, you can also use traditional python slice
1642 notation, where N:M means numbers N through M-1.
1642 notation, where N:M means numbers N through M-1.
1643
1643
1644 For example, if your history contains (%hist prints it):
1644 For example, if your history contains (%hist prints it):
1645
1645
1646 44: x=1\\
1646 44: x=1\\
1647 45: y=3\\
1647 45: y=3\\
1648 46: z=x+y\\
1648 46: z=x+y\\
1649 47: print x\\
1649 47: print x\\
1650 48: a=5\\
1650 48: a=5\\
1651 49: print 'x',x,'y',y\\
1651 49: print 'x',x,'y',y\\
1652
1652
1653 you can create a macro with lines 44 through 47 (included) and line 49
1653 you can create a macro with lines 44 through 47 (included) and line 49
1654 called my_macro with:
1654 called my_macro with:
1655
1655
1656 In [51]: %macro my_macro 44-47 49
1656 In [51]: %macro my_macro 44-47 49
1657
1657
1658 Now, typing `my_macro` (without quotes) will re-execute all this code
1658 Now, typing `my_macro` (without quotes) will re-execute all this code
1659 in one pass.
1659 in one pass.
1660
1660
1661 You don't need to give the line-numbers in order, and any given line
1661 You don't need to give the line-numbers in order, and any given line
1662 number can appear multiple times. You can assemble macros with any
1662 number can appear multiple times. You can assemble macros with any
1663 lines from your input history in any order.
1663 lines from your input history in any order.
1664
1664
1665 The macro is a simple object which holds its value in an attribute,
1665 The macro is a simple object which holds its value in an attribute,
1666 but IPython's display system checks for macros and executes them as
1666 but IPython's display system checks for macros and executes them as
1667 code instead of printing them when you type their name.
1667 code instead of printing them when you type their name.
1668
1668
1669 You can view a macro's contents by explicitly printing it with:
1669 You can view a macro's contents by explicitly printing it with:
1670
1670
1671 'print macro_name'.
1671 'print macro_name'.
1672
1672
1673 For one-off cases which DON'T contain magic function calls in them you
1673 For one-off cases which DON'T contain magic function calls in them you
1674 can obtain similar results by explicitly executing slices from your
1674 can obtain similar results by explicitly executing slices from your
1675 input history with:
1675 input history with:
1676
1676
1677 In [60]: exec In[44:48]+In[49]"""
1677 In [60]: exec In[44:48]+In[49]"""
1678
1678
1679 opts,args = self.parse_options(parameter_s,'r')
1679 opts,args = self.parse_options(parameter_s,'r')
1680 name,ranges = args[0], args[1:]
1680 name,ranges = args[0], args[1:]
1681 #print 'rng',ranges # dbg
1681 #print 'rng',ranges # dbg
1682 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1682 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1683 macro = Macro(lines)
1683 macro = Macro(lines)
1684 self.shell.user_ns.update({name:macro})
1684 self.shell.user_ns.update({name:macro})
1685 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1685 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1686 print 'Macro contents:'
1686 print 'Macro contents:'
1687 print macro,
1687 print macro,
1688
1688
1689 def magic_save(self,parameter_s = ''):
1689 def magic_save(self,parameter_s = ''):
1690 """Save a set of lines to a given filename.
1690 """Save a set of lines to a given filename.
1691
1691
1692 Usage:\\
1692 Usage:\\
1693 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1693 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1694
1694
1695 Options:
1695 Options:
1696
1696
1697 -r: use 'raw' input. By default, the 'processed' history is used,
1697 -r: use 'raw' input. By default, the 'processed' history is used,
1698 so that magics are loaded in their transformed version to valid
1698 so that magics are loaded in their transformed version to valid
1699 Python. If this option is given, the raw input as typed as the
1699 Python. If this option is given, the raw input as typed as the
1700 command line is used instead.
1700 command line is used instead.
1701
1701
1702 This function uses the same syntax as %macro for line extraction, but
1702 This function uses the same syntax as %macro for line extraction, but
1703 instead of creating a macro it saves the resulting string to the
1703 instead of creating a macro it saves the resulting string to the
1704 filename you specify.
1704 filename you specify.
1705
1705
1706 It adds a '.py' extension to the file if you don't do so yourself, and
1706 It adds a '.py' extension to the file if you don't do so yourself, and
1707 it asks for confirmation before overwriting existing files."""
1707 it asks for confirmation before overwriting existing files."""
1708
1708
1709 opts,args = self.parse_options(parameter_s,'r')
1709 opts,args = self.parse_options(parameter_s,'r')
1710 fname,ranges = args[0], args[1:]
1710 fname,ranges = args[0], args[1:]
1711 if not fname.endswith('.py'):
1711 if not fname.endswith('.py'):
1712 fname += '.py'
1712 fname += '.py'
1713 if os.path.isfile(fname):
1713 if os.path.isfile(fname):
1714 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1714 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1715 if ans.lower() not in ['y','yes']:
1715 if ans.lower() not in ['y','yes']:
1716 print 'Operation cancelled.'
1716 print 'Operation cancelled.'
1717 return
1717 return
1718 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1718 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1719 f = file(fname,'w')
1719 f = file(fname,'w')
1720 f.write(cmds)
1720 f.write(cmds)
1721 f.close()
1721 f.close()
1722 print 'The following commands were written to file `%s`:' % fname
1722 print 'The following commands were written to file `%s`:' % fname
1723 print cmds
1723 print cmds
1724
1724
1725 def _edit_macro(self,mname,macro):
1725 def _edit_macro(self,mname,macro):
1726 """open an editor with the macro data in a file"""
1726 """open an editor with the macro data in a file"""
1727 filename = self.shell.mktempfile(macro.value)
1727 filename = self.shell.mktempfile(macro.value)
1728 self.shell.hooks.editor(filename)
1728 self.shell.hooks.editor(filename)
1729
1729
1730 # and make a new macro object, to replace the old one
1730 # and make a new macro object, to replace the old one
1731 mfile = open(filename)
1731 mfile = open(filename)
1732 mvalue = mfile.read()
1732 mvalue = mfile.read()
1733 mfile.close()
1733 mfile.close()
1734 self.shell.user_ns[mname] = Macro(mvalue)
1734 self.shell.user_ns[mname] = Macro(mvalue)
1735
1735
1736 def magic_ed(self,parameter_s=''):
1736 def magic_ed(self,parameter_s=''):
1737 """Alias to %edit."""
1737 """Alias to %edit."""
1738 return self.magic_edit(parameter_s)
1738 return self.magic_edit(parameter_s)
1739
1739
1740 def magic_edit(self,parameter_s='',last_call=['','']):
1740 def magic_edit(self,parameter_s='',last_call=['','']):
1741 """Bring up an editor and execute the resulting code.
1741 """Bring up an editor and execute the resulting code.
1742
1742
1743 Usage:
1743 Usage:
1744 %edit [options] [args]
1744 %edit [options] [args]
1745
1745
1746 %edit runs IPython's editor hook. The default version of this hook is
1746 %edit runs IPython's editor hook. The default version of this hook is
1747 set to call the __IPYTHON__.rc.editor command. This is read from your
1747 set to call the __IPYTHON__.rc.editor command. This is read from your
1748 environment variable $EDITOR. If this isn't found, it will default to
1748 environment variable $EDITOR. If this isn't found, it will default to
1749 vi under Linux/Unix and to notepad under Windows. See the end of this
1749 vi under Linux/Unix and to notepad under Windows. See the end of this
1750 docstring for how to change the editor hook.
1750 docstring for how to change the editor hook.
1751
1751
1752 You can also set the value of this editor via the command line option
1752 You can also set the value of this editor via the command line option
1753 '-editor' or in your ipythonrc file. This is useful if you wish to use
1753 '-editor' or in your ipythonrc file. This is useful if you wish to use
1754 specifically for IPython an editor different from your typical default
1754 specifically for IPython an editor different from your typical default
1755 (and for Windows users who typically don't set environment variables).
1755 (and for Windows users who typically don't set environment variables).
1756
1756
1757 This command allows you to conveniently edit multi-line code right in
1757 This command allows you to conveniently edit multi-line code right in
1758 your IPython session.
1758 your IPython session.
1759
1759
1760 If called without arguments, %edit opens up an empty editor with a
1760 If called without arguments, %edit opens up an empty editor with a
1761 temporary file and will execute the contents of this file when you
1761 temporary file and will execute the contents of this file when you
1762 close it (don't forget to save it!).
1762 close it (don't forget to save it!).
1763
1763
1764
1764
1765 Options:
1765 Options:
1766
1766
1767 -p: this will call the editor with the same data as the previous time
1767 -p: this will call the editor with the same data as the previous time
1768 it was used, regardless of how long ago (in your current session) it
1768 it was used, regardless of how long ago (in your current session) it
1769 was.
1769 was.
1770
1770
1771 -r: use 'raw' input. This option only applies to input taken from the
1771 -r: use 'raw' input. This option only applies to input taken from the
1772 user's history. By default, the 'processed' history is used, so that
1772 user's history. By default, the 'processed' history is used, so that
1773 magics are loaded in their transformed version to valid Python. If
1773 magics are loaded in their transformed version to valid Python. If
1774 this option is given, the raw input as typed as the command line is
1774 this option is given, the raw input as typed as the command line is
1775 used instead. When you exit the editor, it will be executed by
1775 used instead. When you exit the editor, it will be executed by
1776 IPython's own processor.
1776 IPython's own processor.
1777
1777
1778 -x: do not execute the edited code immediately upon exit. This is
1778 -x: do not execute the edited code immediately upon exit. This is
1779 mainly useful if you are editing programs which need to be called with
1779 mainly useful if you are editing programs which need to be called with
1780 command line arguments, which you can then do using %run.
1780 command line arguments, which you can then do using %run.
1781
1781
1782
1782
1783 Arguments:
1783 Arguments:
1784
1784
1785 If arguments are given, the following possibilites exist:
1785 If arguments are given, the following possibilites exist:
1786
1786
1787 - The arguments are numbers or pairs of colon-separated numbers (like
1787 - The arguments are numbers or pairs of colon-separated numbers (like
1788 1 4:8 9). These are interpreted as lines of previous input to be
1788 1 4:8 9). These are interpreted as lines of previous input to be
1789 loaded into the editor. The syntax is the same of the %macro command.
1789 loaded into the editor. The syntax is the same of the %macro command.
1790
1790
1791 - If the argument doesn't start with a number, it is evaluated as a
1791 - If the argument doesn't start with a number, it is evaluated as a
1792 variable and its contents loaded into the editor. You can thus edit
1792 variable and its contents loaded into the editor. You can thus edit
1793 any string which contains python code (including the result of
1793 any string which contains python code (including the result of
1794 previous edits).
1794 previous edits).
1795
1795
1796 - If the argument is the name of an object (other than a string),
1796 - If the argument is the name of an object (other than a string),
1797 IPython will try to locate the file where it was defined and open the
1797 IPython will try to locate the file where it was defined and open the
1798 editor at the point where it is defined. You can use `%edit function`
1798 editor at the point where it is defined. You can use `%edit function`
1799 to load an editor exactly at the point where 'function' is defined,
1799 to load an editor exactly at the point where 'function' is defined,
1800 edit it and have the file be executed automatically.
1800 edit it and have the file be executed automatically.
1801
1801
1802 If the object is a macro (see %macro for details), this opens up your
1802 If the object is a macro (see %macro for details), this opens up your
1803 specified editor with a temporary file containing the macro's data.
1803 specified editor with a temporary file containing the macro's data.
1804 Upon exit, the macro is reloaded with the contents of the file.
1804 Upon exit, the macro is reloaded with the contents of the file.
1805
1805
1806 Note: opening at an exact line is only supported under Unix, and some
1806 Note: opening at an exact line is only supported under Unix, and some
1807 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1807 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1808 '+NUMBER' parameter necessary for this feature. Good editors like
1808 '+NUMBER' parameter necessary for this feature. Good editors like
1809 (X)Emacs, vi, jed, pico and joe all do.
1809 (X)Emacs, vi, jed, pico and joe all do.
1810
1810
1811 - If the argument is not found as a variable, IPython will look for a
1811 - If the argument is not found as a variable, IPython will look for a
1812 file with that name (adding .py if necessary) and load it into the
1812 file with that name (adding .py if necessary) and load it into the
1813 editor. It will execute its contents with execfile() when you exit,
1813 editor. It will execute its contents with execfile() when you exit,
1814 loading any code in the file into your interactive namespace.
1814 loading any code in the file into your interactive namespace.
1815
1815
1816 After executing your code, %edit will return as output the code you
1816 After executing your code, %edit will return as output the code you
1817 typed in the editor (except when it was an existing file). This way
1817 typed in the editor (except when it was an existing file). This way
1818 you can reload the code in further invocations of %edit as a variable,
1818 you can reload the code in further invocations of %edit as a variable,
1819 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1819 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1820 the output.
1820 the output.
1821
1821
1822 Note that %edit is also available through the alias %ed.
1822 Note that %edit is also available through the alias %ed.
1823
1823
1824 This is an example of creating a simple function inside the editor and
1824 This is an example of creating a simple function inside the editor and
1825 then modifying it. First, start up the editor:
1825 then modifying it. First, start up the editor:
1826
1826
1827 In [1]: ed\\
1827 In [1]: ed\\
1828 Editing... done. Executing edited code...\\
1828 Editing... done. Executing edited code...\\
1829 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1829 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1830
1830
1831 We can then call the function foo():
1831 We can then call the function foo():
1832
1832
1833 In [2]: foo()\\
1833 In [2]: foo()\\
1834 foo() was defined in an editing session
1834 foo() was defined in an editing session
1835
1835
1836 Now we edit foo. IPython automatically loads the editor with the
1836 Now we edit foo. IPython automatically loads the editor with the
1837 (temporary) file where foo() was previously defined:
1837 (temporary) file where foo() was previously defined:
1838
1838
1839 In [3]: ed foo\\
1839 In [3]: ed foo\\
1840 Editing... done. Executing edited code...
1840 Editing... done. Executing edited code...
1841
1841
1842 And if we call foo() again we get the modified version:
1842 And if we call foo() again we get the modified version:
1843
1843
1844 In [4]: foo()\\
1844 In [4]: foo()\\
1845 foo() has now been changed!
1845 foo() has now been changed!
1846
1846
1847 Here is an example of how to edit a code snippet successive
1847 Here is an example of how to edit a code snippet successive
1848 times. First we call the editor:
1848 times. First we call the editor:
1849
1849
1850 In [8]: ed\\
1850 In [8]: ed\\
1851 Editing... done. Executing edited code...\\
1851 Editing... done. Executing edited code...\\
1852 hello\\
1852 hello\\
1853 Out[8]: "print 'hello'\\n"
1853 Out[8]: "print 'hello'\\n"
1854
1854
1855 Now we call it again with the previous output (stored in _):
1855 Now we call it again with the previous output (stored in _):
1856
1856
1857 In [9]: ed _\\
1857 In [9]: ed _\\
1858 Editing... done. Executing edited code...\\
1858 Editing... done. Executing edited code...\\
1859 hello world\\
1859 hello world\\
1860 Out[9]: "print 'hello world'\\n"
1860 Out[9]: "print 'hello world'\\n"
1861
1861
1862 Now we call it with the output #8 (stored in _8, also as Out[8]):
1862 Now we call it with the output #8 (stored in _8, also as Out[8]):
1863
1863
1864 In [10]: ed _8\\
1864 In [10]: ed _8\\
1865 Editing... done. Executing edited code...\\
1865 Editing... done. Executing edited code...\\
1866 hello again\\
1866 hello again\\
1867 Out[10]: "print 'hello again'\\n"
1867 Out[10]: "print 'hello again'\\n"
1868
1868
1869
1869
1870 Changing the default editor hook:
1870 Changing the default editor hook:
1871
1871
1872 If you wish to write your own editor hook, you can put it in a
1872 If you wish to write your own editor hook, you can put it in a
1873 configuration file which you load at startup time. The default hook
1873 configuration file which you load at startup time. The default hook
1874 is defined in the IPython.hooks module, and you can use that as a
1874 is defined in the IPython.hooks module, and you can use that as a
1875 starting example for further modifications. That file also has
1875 starting example for further modifications. That file also has
1876 general instructions on how to set a new hook for use once you've
1876 general instructions on how to set a new hook for use once you've
1877 defined it."""
1877 defined it."""
1878
1878
1879 # FIXME: This function has become a convoluted mess. It needs a
1879 # FIXME: This function has become a convoluted mess. It needs a
1880 # ground-up rewrite with clean, simple logic.
1880 # ground-up rewrite with clean, simple logic.
1881
1881
1882 def make_filename(arg):
1882 def make_filename(arg):
1883 "Make a filename from the given args"
1883 "Make a filename from the given args"
1884 try:
1884 try:
1885 filename = get_py_filename(arg)
1885 filename = get_py_filename(arg)
1886 except IOError:
1886 except IOError:
1887 if args.endswith('.py'):
1887 if args.endswith('.py'):
1888 filename = arg
1888 filename = arg
1889 else:
1889 else:
1890 filename = None
1890 filename = None
1891 return filename
1891 return filename
1892
1892
1893 # custom exceptions
1893 # custom exceptions
1894 class DataIsObject(Exception): pass
1894 class DataIsObject(Exception): pass
1895
1895
1896 opts,args = self.parse_options(parameter_s,'prx')
1896 opts,args = self.parse_options(parameter_s,'prx')
1897 # Set a few locals from the options for convenience:
1897 # Set a few locals from the options for convenience:
1898 opts_p = opts.has_key('p')
1898 opts_p = opts.has_key('p')
1899 opts_r = opts.has_key('r')
1899 opts_r = opts.has_key('r')
1900
1900
1901 # Default line number value
1901 # Default line number value
1902 lineno = None
1902 lineno = None
1903 if opts_p:
1903 if opts_p:
1904 args = '_%s' % last_call[0]
1904 args = '_%s' % last_call[0]
1905 if not self.shell.user_ns.has_key(args):
1905 if not self.shell.user_ns.has_key(args):
1906 args = last_call[1]
1906 args = last_call[1]
1907
1907
1908 # use last_call to remember the state of the previous call, but don't
1908 # use last_call to remember the state of the previous call, but don't
1909 # let it be clobbered by successive '-p' calls.
1909 # let it be clobbered by successive '-p' calls.
1910 try:
1910 try:
1911 last_call[0] = self.shell.outputcache.prompt_count
1911 last_call[0] = self.shell.outputcache.prompt_count
1912 if not opts_p:
1912 if not opts_p:
1913 last_call[1] = parameter_s
1913 last_call[1] = parameter_s
1914 except:
1914 except:
1915 pass
1915 pass
1916
1916
1917 # by default this is done with temp files, except when the given
1917 # by default this is done with temp files, except when the given
1918 # arg is a filename
1918 # arg is a filename
1919 use_temp = 1
1919 use_temp = 1
1920
1920
1921 if re.match(r'\d',args):
1921 if re.match(r'\d',args):
1922 # Mode where user specifies ranges of lines, like in %macro.
1922 # Mode where user specifies ranges of lines, like in %macro.
1923 # This means that you can't edit files whose names begin with
1923 # This means that you can't edit files whose names begin with
1924 # numbers this way. Tough.
1924 # numbers this way. Tough.
1925 ranges = args.split()
1925 ranges = args.split()
1926 data = ''.join(self.extract_input_slices(ranges,opts_r))
1926 data = ''.join(self.extract_input_slices(ranges,opts_r))
1927 elif args.endswith('.py'):
1927 elif args.endswith('.py'):
1928 filename = make_filename(args)
1928 filename = make_filename(args)
1929 data = ''
1929 data = ''
1930 use_temp = 0
1930 use_temp = 0
1931 elif args:
1931 elif args:
1932 try:
1932 try:
1933 # Load the parameter given as a variable. If not a string,
1933 # Load the parameter given as a variable. If not a string,
1934 # process it as an object instead (below)
1934 # process it as an object instead (below)
1935
1935
1936 #print '*** args',args,'type',type(args) # dbg
1936 #print '*** args',args,'type',type(args) # dbg
1937 data = eval(args,self.shell.user_ns)
1937 data = eval(args,self.shell.user_ns)
1938 if not type(data) in StringTypes:
1938 if not type(data) in StringTypes:
1939 raise DataIsObject
1939 raise DataIsObject
1940
1940
1941 except (NameError,SyntaxError):
1941 except (NameError,SyntaxError):
1942 # given argument is not a variable, try as a filename
1942 # given argument is not a variable, try as a filename
1943 filename = make_filename(args)
1943 filename = make_filename(args)
1944 if filename is None:
1944 if filename is None:
1945 warn("Argument given (%s) can't be found as a variable "
1945 warn("Argument given (%s) can't be found as a variable "
1946 "or as a filename." % args)
1946 "or as a filename." % args)
1947 return
1947 return
1948
1948
1949 data = ''
1949 data = ''
1950 use_temp = 0
1950 use_temp = 0
1951 except DataIsObject:
1951 except DataIsObject:
1952
1952
1953 # macros have a special edit function
1953 # macros have a special edit function
1954 if isinstance(data,Macro):
1954 if isinstance(data,Macro):
1955 self._edit_macro(args,data)
1955 self._edit_macro(args,data)
1956 return
1956 return
1957
1957
1958 # For objects, try to edit the file where they are defined
1958 # For objects, try to edit the file where they are defined
1959 try:
1959 try:
1960 filename = inspect.getabsfile(data)
1960 filename = inspect.getabsfile(data)
1961 datafile = 1
1961 datafile = 1
1962 except TypeError:
1962 except TypeError:
1963 filename = make_filename(args)
1963 filename = make_filename(args)
1964 datafile = 1
1964 datafile = 1
1965 warn('Could not find file where `%s` is defined.\n'
1965 warn('Could not find file where `%s` is defined.\n'
1966 'Opening a file named `%s`' % (args,filename))
1966 'Opening a file named `%s`' % (args,filename))
1967 # Now, make sure we can actually read the source (if it was in
1967 # Now, make sure we can actually read the source (if it was in
1968 # a temp file it's gone by now).
1968 # a temp file it's gone by now).
1969 if datafile:
1969 if datafile:
1970 try:
1970 try:
1971 lineno = inspect.getsourcelines(data)[1]
1971 lineno = inspect.getsourcelines(data)[1]
1972 except IOError:
1972 except IOError:
1973 filename = make_filename(args)
1973 filename = make_filename(args)
1974 if filename is None:
1974 if filename is None:
1975 warn('The file `%s` where `%s` was defined cannot '
1975 warn('The file `%s` where `%s` was defined cannot '
1976 'be read.' % (filename,data))
1976 'be read.' % (filename,data))
1977 return
1977 return
1978 use_temp = 0
1978 use_temp = 0
1979 else:
1979 else:
1980 data = ''
1980 data = ''
1981
1981
1982 if use_temp:
1982 if use_temp:
1983 filename = self.shell.mktempfile(data)
1983 filename = self.shell.mktempfile(data)
1984 print 'IPython will make a temporary file named:',filename
1984 print 'IPython will make a temporary file named:',filename
1985
1985
1986 # do actual editing here
1986 # do actual editing here
1987 print 'Editing...',
1987 print 'Editing...',
1988 sys.stdout.flush()
1988 sys.stdout.flush()
1989 self.shell.hooks.editor(filename,lineno)
1989 self.shell.hooks.editor(filename,lineno)
1990 if opts.has_key('x'): # -x prevents actual execution
1990 if opts.has_key('x'): # -x prevents actual execution
1991 print
1991 print
1992 else:
1992 else:
1993 print 'done. Executing edited code...'
1993 print 'done. Executing edited code...'
1994 if opts_r:
1994 if opts_r:
1995 self.shell.runlines(file_read(filename))
1995 self.shell.runlines(file_read(filename))
1996 else:
1996 else:
1997 self.shell.safe_execfile(filename,self.shell.user_ns)
1997 self.shell.safe_execfile(filename,self.shell.user_ns)
1998 if use_temp:
1998 if use_temp:
1999 try:
1999 try:
2000 return open(filename).read()
2000 return open(filename).read()
2001 except IOError,msg:
2001 except IOError,msg:
2002 if msg.filename == filename:
2002 if msg.filename == filename:
2003 warn('File not found. Did you forget to save?')
2003 warn('File not found. Did you forget to save?')
2004 return
2004 return
2005 else:
2005 else:
2006 self.shell.showtraceback()
2006 self.shell.showtraceback()
2007
2007
2008 def magic_xmode(self,parameter_s = ''):
2008 def magic_xmode(self,parameter_s = ''):
2009 """Switch modes for the exception handlers.
2009 """Switch modes for the exception handlers.
2010
2010
2011 Valid modes: Plain, Context and Verbose.
2011 Valid modes: Plain, Context and Verbose.
2012
2012
2013 If called without arguments, acts as a toggle."""
2013 If called without arguments, acts as a toggle."""
2014
2014
2015 def xmode_switch_err(name):
2015 def xmode_switch_err(name):
2016 warn('Error changing %s exception modes.\n%s' %
2016 warn('Error changing %s exception modes.\n%s' %
2017 (name,sys.exc_info()[1]))
2017 (name,sys.exc_info()[1]))
2018
2018
2019 shell = self.shell
2019 shell = self.shell
2020 new_mode = parameter_s.strip().capitalize()
2020 new_mode = parameter_s.strip().capitalize()
2021 try:
2021 try:
2022 shell.InteractiveTB.set_mode(mode=new_mode)
2022 shell.InteractiveTB.set_mode(mode=new_mode)
2023 print 'Exception reporting mode:',shell.InteractiveTB.mode
2023 print 'Exception reporting mode:',shell.InteractiveTB.mode
2024 except:
2024 except:
2025 xmode_switch_err('user')
2025 xmode_switch_err('user')
2026
2026
2027 # threaded shells use a special handler in sys.excepthook
2027 # threaded shells use a special handler in sys.excepthook
2028 if shell.isthreaded:
2028 if shell.isthreaded:
2029 try:
2029 try:
2030 shell.sys_excepthook.set_mode(mode=new_mode)
2030 shell.sys_excepthook.set_mode(mode=new_mode)
2031 except:
2031 except:
2032 xmode_switch_err('threaded')
2032 xmode_switch_err('threaded')
2033
2033
2034 def magic_colors(self,parameter_s = ''):
2034 def magic_colors(self,parameter_s = ''):
2035 """Switch color scheme for prompts, info system and exception handlers.
2035 """Switch color scheme for prompts, info system and exception handlers.
2036
2036
2037 Currently implemented schemes: NoColor, Linux, LightBG.
2037 Currently implemented schemes: NoColor, Linux, LightBG.
2038
2038
2039 Color scheme names are not case-sensitive."""
2039 Color scheme names are not case-sensitive."""
2040
2040
2041 def color_switch_err(name):
2041 def color_switch_err(name):
2042 warn('Error changing %s color schemes.\n%s' %
2042 warn('Error changing %s color schemes.\n%s' %
2043 (name,sys.exc_info()[1]))
2043 (name,sys.exc_info()[1]))
2044
2044
2045
2045
2046 new_scheme = parameter_s.strip()
2046 new_scheme = parameter_s.strip()
2047 if not new_scheme:
2047 if not new_scheme:
2048 print 'You must specify a color scheme.'
2048 print 'You must specify a color scheme.'
2049 return
2049 return
2050 import IPython.rlineimpl as readline
2050 import IPython.rlineimpl as readline
2051 if not readline.have_readline:
2051 if not readline.have_readline:
2052 msg = """\
2052 msg = """\
2053 Proper color support under MS Windows requires Gary Bishop's readline library.
2053 Proper color support under MS Windows requires Gary Bishop's readline library.
2054 You can find it at:
2054 You can find it at:
2055 http://sourceforge.net/projects/uncpythontools
2055 http://sourceforge.net/projects/uncpythontools
2056 Gary's readline needs the ctypes module, from:
2056 Gary's readline needs the ctypes module, from:
2057 http://starship.python.net/crew/theller/ctypes
2057 http://starship.python.net/crew/theller/ctypes
2058
2058
2059 Defaulting color scheme to 'NoColor'"""
2059 Defaulting color scheme to 'NoColor'"""
2060 new_scheme = 'NoColor'
2060 new_scheme = 'NoColor'
2061 warn(msg)
2061 warn(msg)
2062 # local shortcut
2062 # local shortcut
2063 shell = self.shell
2063 shell = self.shell
2064
2064
2065 # Set prompt colors
2065 # Set prompt colors
2066 try:
2066 try:
2067 shell.outputcache.set_colors(new_scheme)
2067 shell.outputcache.set_colors(new_scheme)
2068 except:
2068 except:
2069 color_switch_err('prompt')
2069 color_switch_err('prompt')
2070 else:
2070 else:
2071 shell.rc.colors = \
2071 shell.rc.colors = \
2072 shell.outputcache.color_table.active_scheme_name
2072 shell.outputcache.color_table.active_scheme_name
2073 # Set exception colors
2073 # Set exception colors
2074 try:
2074 try:
2075 shell.InteractiveTB.set_colors(scheme = new_scheme)
2075 shell.InteractiveTB.set_colors(scheme = new_scheme)
2076 shell.SyntaxTB.set_colors(scheme = new_scheme)
2076 shell.SyntaxTB.set_colors(scheme = new_scheme)
2077 except:
2077 except:
2078 color_switch_err('exception')
2078 color_switch_err('exception')
2079
2079
2080 # threaded shells use a verbose traceback in sys.excepthook
2080 # threaded shells use a verbose traceback in sys.excepthook
2081 if shell.isthreaded:
2081 if shell.isthreaded:
2082 try:
2082 try:
2083 shell.sys_excepthook.set_colors(scheme=new_scheme)
2083 shell.sys_excepthook.set_colors(scheme=new_scheme)
2084 except:
2084 except:
2085 color_switch_err('system exception handler')
2085 color_switch_err('system exception handler')
2086
2086
2087 # Set info (for 'object?') colors
2087 # Set info (for 'object?') colors
2088 if shell.rc.color_info:
2088 if shell.rc.color_info:
2089 try:
2089 try:
2090 shell.inspector.set_active_scheme(new_scheme)
2090 shell.inspector.set_active_scheme(new_scheme)
2091 except:
2091 except:
2092 color_switch_err('object inspector')
2092 color_switch_err('object inspector')
2093 else:
2093 else:
2094 shell.inspector.set_active_scheme('NoColor')
2094 shell.inspector.set_active_scheme('NoColor')
2095
2095
2096 def magic_color_info(self,parameter_s = ''):
2096 def magic_color_info(self,parameter_s = ''):
2097 """Toggle color_info.
2097 """Toggle color_info.
2098
2098
2099 The color_info configuration parameter controls whether colors are
2099 The color_info configuration parameter controls whether colors are
2100 used for displaying object details (by things like %psource, %pfile or
2100 used for displaying object details (by things like %psource, %pfile or
2101 the '?' system). This function toggles this value with each call.
2101 the '?' system). This function toggles this value with each call.
2102
2102
2103 Note that unless you have a fairly recent pager (less works better
2103 Note that unless you have a fairly recent pager (less works better
2104 than more) in your system, using colored object information displays
2104 than more) in your system, using colored object information displays
2105 will not work properly. Test it and see."""
2105 will not work properly. Test it and see."""
2106
2106
2107 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2107 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2108 self.magic_colors(self.shell.rc.colors)
2108 self.magic_colors(self.shell.rc.colors)
2109 print 'Object introspection functions have now coloring:',
2109 print 'Object introspection functions have now coloring:',
2110 print ['OFF','ON'][self.shell.rc.color_info]
2110 print ['OFF','ON'][self.shell.rc.color_info]
2111
2111
2112 def magic_Pprint(self, parameter_s=''):
2112 def magic_Pprint(self, parameter_s=''):
2113 """Toggle pretty printing on/off."""
2113 """Toggle pretty printing on/off."""
2114
2114
2115 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2115 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2116 print 'Pretty printing has been turned', \
2116 print 'Pretty printing has been turned', \
2117 ['OFF','ON'][self.shell.outputcache.Pprint]
2117 ['OFF','ON'][self.shell.rc.pprint]
2118
2118
2119 def magic_exit(self, parameter_s=''):
2119 def magic_exit(self, parameter_s=''):
2120 """Exit IPython, confirming if configured to do so.
2120 """Exit IPython, confirming if configured to do so.
2121
2121
2122 You can configure whether IPython asks for confirmation upon exit by
2122 You can configure whether IPython asks for confirmation upon exit by
2123 setting the confirm_exit flag in the ipythonrc file."""
2123 setting the confirm_exit flag in the ipythonrc file."""
2124
2124
2125 self.shell.exit()
2125 self.shell.exit()
2126
2126
2127 def magic_quit(self, parameter_s=''):
2127 def magic_quit(self, parameter_s=''):
2128 """Exit IPython, confirming if configured to do so (like %exit)"""
2128 """Exit IPython, confirming if configured to do so (like %exit)"""
2129
2129
2130 self.shell.exit()
2130 self.shell.exit()
2131
2131
2132 def magic_Exit(self, parameter_s=''):
2132 def magic_Exit(self, parameter_s=''):
2133 """Exit IPython without confirmation."""
2133 """Exit IPython without confirmation."""
2134
2134
2135 self.shell.exit_now = True
2135 self.shell.exit_now = True
2136
2136
2137 def magic_Quit(self, parameter_s=''):
2137 def magic_Quit(self, parameter_s=''):
2138 """Exit IPython without confirmation (like %Exit)."""
2138 """Exit IPython without confirmation (like %Exit)."""
2139
2139
2140 self.shell.exit_now = True
2140 self.shell.exit_now = True
2141
2141
2142 #......................................................................
2142 #......................................................................
2143 # Functions to implement unix shell-type things
2143 # Functions to implement unix shell-type things
2144
2144
2145 def magic_alias(self, parameter_s = ''):
2145 def magic_alias(self, parameter_s = ''):
2146 """Define an alias for a system command.
2146 """Define an alias for a system command.
2147
2147
2148 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2148 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2149
2149
2150 Then, typing 'alias_name params' will execute the system command 'cmd
2150 Then, typing 'alias_name params' will execute the system command 'cmd
2151 params' (from your underlying operating system).
2151 params' (from your underlying operating system).
2152
2152
2153 Aliases have lower precedence than magic functions and Python normal
2153 Aliases have lower precedence than magic functions and Python normal
2154 variables, so if 'foo' is both a Python variable and an alias, the
2154 variables, so if 'foo' is both a Python variable and an alias, the
2155 alias can not be executed until 'del foo' removes the Python variable.
2155 alias can not be executed until 'del foo' removes the Python variable.
2156
2156
2157 You can use the %l specifier in an alias definition to represent the
2157 You can use the %l specifier in an alias definition to represent the
2158 whole line when the alias is called. For example:
2158 whole line when the alias is called. For example:
2159
2159
2160 In [2]: alias all echo "Input in brackets: <%l>"\\
2160 In [2]: alias all echo "Input in brackets: <%l>"\\
2161 In [3]: all hello world\\
2161 In [3]: all hello world\\
2162 Input in brackets: <hello world>
2162 Input in brackets: <hello world>
2163
2163
2164 You can also define aliases with parameters using %s specifiers (one
2164 You can also define aliases with parameters using %s specifiers (one
2165 per parameter):
2165 per parameter):
2166
2166
2167 In [1]: alias parts echo first %s second %s\\
2167 In [1]: alias parts echo first %s second %s\\
2168 In [2]: %parts A B\\
2168 In [2]: %parts A B\\
2169 first A second B\\
2169 first A second B\\
2170 In [3]: %parts A\\
2170 In [3]: %parts A\\
2171 Incorrect number of arguments: 2 expected.\\
2171 Incorrect number of arguments: 2 expected.\\
2172 parts is an alias to: 'echo first %s second %s'
2172 parts is an alias to: 'echo first %s second %s'
2173
2173
2174 Note that %l and %s are mutually exclusive. You can only use one or
2174 Note that %l and %s are mutually exclusive. You can only use one or
2175 the other in your aliases.
2175 the other in your aliases.
2176
2176
2177 Aliases expand Python variables just like system calls using ! or !!
2177 Aliases expand Python variables just like system calls using ! or !!
2178 do: all expressions prefixed with '$' get expanded. For details of
2178 do: all expressions prefixed with '$' get expanded. For details of
2179 the semantic rules, see PEP-215:
2179 the semantic rules, see PEP-215:
2180 http://www.python.org/peps/pep-0215.html. This is the library used by
2180 http://www.python.org/peps/pep-0215.html. This is the library used by
2181 IPython for variable expansion. If you want to access a true shell
2181 IPython for variable expansion. If you want to access a true shell
2182 variable, an extra $ is necessary to prevent its expansion by IPython:
2182 variable, an extra $ is necessary to prevent its expansion by IPython:
2183
2183
2184 In [6]: alias show echo\\
2184 In [6]: alias show echo\\
2185 In [7]: PATH='A Python string'\\
2185 In [7]: PATH='A Python string'\\
2186 In [8]: show $PATH\\
2186 In [8]: show $PATH\\
2187 A Python string\\
2187 A Python string\\
2188 In [9]: show $$PATH\\
2188 In [9]: show $$PATH\\
2189 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2189 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2190
2190
2191 You can use the alias facility to acess all of $PATH. See the %rehash
2191 You can use the alias facility to acess all of $PATH. See the %rehash
2192 and %rehashx functions, which automatically create aliases for the
2192 and %rehashx functions, which automatically create aliases for the
2193 contents of your $PATH.
2193 contents of your $PATH.
2194
2194
2195 If called with no parameters, %alias prints the current alias table."""
2195 If called with no parameters, %alias prints the current alias table."""
2196
2196
2197 par = parameter_s.strip()
2197 par = parameter_s.strip()
2198 if not par:
2198 if not par:
2199 if self.shell.rc.automagic:
2199 if self.shell.rc.automagic:
2200 prechar = ''
2200 prechar = ''
2201 else:
2201 else:
2202 prechar = self.shell.ESC_MAGIC
2202 prechar = self.shell.ESC_MAGIC
2203 #print 'Alias\t\tSystem Command\n'+'-'*30
2203 #print 'Alias\t\tSystem Command\n'+'-'*30
2204 atab = self.shell.alias_table
2204 atab = self.shell.alias_table
2205 aliases = atab.keys()
2205 aliases = atab.keys()
2206 aliases.sort()
2206 aliases.sort()
2207 res = []
2207 res = []
2208 for alias in aliases:
2208 for alias in aliases:
2209 res.append((alias, atab[alias][1]))
2209 res.append((alias, atab[alias][1]))
2210 print "Total number of aliases:",len(aliases)
2210 print "Total number of aliases:",len(aliases)
2211 return res
2211 return res
2212 try:
2212 try:
2213 alias,cmd = par.split(None,1)
2213 alias,cmd = par.split(None,1)
2214 except:
2214 except:
2215 print OInspect.getdoc(self.magic_alias)
2215 print OInspect.getdoc(self.magic_alias)
2216 else:
2216 else:
2217 nargs = cmd.count('%s')
2217 nargs = cmd.count('%s')
2218 if nargs>0 and cmd.find('%l')>=0:
2218 if nargs>0 and cmd.find('%l')>=0:
2219 error('The %s and %l specifiers are mutually exclusive '
2219 error('The %s and %l specifiers are mutually exclusive '
2220 'in alias definitions.')
2220 'in alias definitions.')
2221 else: # all looks OK
2221 else: # all looks OK
2222 self.shell.alias_table[alias] = (nargs,cmd)
2222 self.shell.alias_table[alias] = (nargs,cmd)
2223 self.shell.alias_table_validate(verbose=0)
2223 self.shell.alias_table_validate(verbose=0)
2224 # end magic_alias
2224 # end magic_alias
2225
2225
2226 def magic_unalias(self, parameter_s = ''):
2226 def magic_unalias(self, parameter_s = ''):
2227 """Remove an alias"""
2227 """Remove an alias"""
2228
2228
2229 aname = parameter_s.strip()
2229 aname = parameter_s.strip()
2230 if aname in self.shell.alias_table:
2230 if aname in self.shell.alias_table:
2231 del self.shell.alias_table[aname]
2231 del self.shell.alias_table[aname]
2232
2232
2233 def magic_rehash(self, parameter_s = ''):
2233 def magic_rehash(self, parameter_s = ''):
2234 """Update the alias table with all entries in $PATH.
2234 """Update the alias table with all entries in $PATH.
2235
2235
2236 This version does no checks on execute permissions or whether the
2236 This version does no checks on execute permissions or whether the
2237 contents of $PATH are truly files (instead of directories or something
2237 contents of $PATH are truly files (instead of directories or something
2238 else). For such a safer (but slower) version, use %rehashx."""
2238 else). For such a safer (but slower) version, use %rehashx."""
2239
2239
2240 # This function (and rehashx) manipulate the alias_table directly
2240 # This function (and rehashx) manipulate the alias_table directly
2241 # rather than calling magic_alias, for speed reasons. A rehash on a
2241 # rather than calling magic_alias, for speed reasons. A rehash on a
2242 # typical Linux box involves several thousand entries, so efficiency
2242 # typical Linux box involves several thousand entries, so efficiency
2243 # here is a top concern.
2243 # here is a top concern.
2244
2244
2245 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2245 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2246 alias_table = self.shell.alias_table
2246 alias_table = self.shell.alias_table
2247 for pdir in path:
2247 for pdir in path:
2248 for ff in os.listdir(pdir):
2248 for ff in os.listdir(pdir):
2249 # each entry in the alias table must be (N,name), where
2249 # each entry in the alias table must be (N,name), where
2250 # N is the number of positional arguments of the alias.
2250 # N is the number of positional arguments of the alias.
2251 alias_table[ff] = (0,ff)
2251 alias_table[ff] = (0,ff)
2252 # Make sure the alias table doesn't contain keywords or builtins
2252 # Make sure the alias table doesn't contain keywords or builtins
2253 self.shell.alias_table_validate()
2253 self.shell.alias_table_validate()
2254 # Call again init_auto_alias() so we get 'rm -i' and other modified
2254 # Call again init_auto_alias() so we get 'rm -i' and other modified
2255 # aliases since %rehash will probably clobber them
2255 # aliases since %rehash will probably clobber them
2256 self.shell.init_auto_alias()
2256 self.shell.init_auto_alias()
2257
2257
2258 def magic_rehashx(self, parameter_s = ''):
2258 def magic_rehashx(self, parameter_s = ''):
2259 """Update the alias table with all executable files in $PATH.
2259 """Update the alias table with all executable files in $PATH.
2260
2260
2261 This version explicitly checks that every entry in $PATH is a file
2261 This version explicitly checks that every entry in $PATH is a file
2262 with execute access (os.X_OK), so it is much slower than %rehash.
2262 with execute access (os.X_OK), so it is much slower than %rehash.
2263
2263
2264 Under Windows, it checks executability as a match agains a
2264 Under Windows, it checks executability as a match agains a
2265 '|'-separated string of extensions, stored in the IPython config
2265 '|'-separated string of extensions, stored in the IPython config
2266 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2266 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2267
2267
2268 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2268 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2269 alias_table = self.shell.alias_table
2269 alias_table = self.shell.alias_table
2270 syscmdlist = []
2270 syscmdlist = []
2271 if os.name == 'posix':
2271 if os.name == 'posix':
2272 isexec = lambda fname:os.path.isfile(fname) and \
2272 isexec = lambda fname:os.path.isfile(fname) and \
2273 os.access(fname,os.X_OK)
2273 os.access(fname,os.X_OK)
2274 else:
2274 else:
2275
2275
2276 try:
2276 try:
2277 winext = os.environ['pathext'].replace(';','|').replace('.','')
2277 winext = os.environ['pathext'].replace(';','|').replace('.','')
2278 except KeyError:
2278 except KeyError:
2279 winext = 'exe|com|bat'
2279 winext = 'exe|com|bat'
2280
2280
2281 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2281 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2282 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2282 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2283 savedir = os.getcwd()
2283 savedir = os.getcwd()
2284 try:
2284 try:
2285 # write the whole loop for posix/Windows so we don't have an if in
2285 # write the whole loop for posix/Windows so we don't have an if in
2286 # the innermost part
2286 # the innermost part
2287 if os.name == 'posix':
2287 if os.name == 'posix':
2288 for pdir in path:
2288 for pdir in path:
2289 os.chdir(pdir)
2289 os.chdir(pdir)
2290 for ff in os.listdir(pdir):
2290 for ff in os.listdir(pdir):
2291 if isexec(ff):
2291 if isexec(ff):
2292 # each entry in the alias table must be (N,name),
2292 # each entry in the alias table must be (N,name),
2293 # where N is the number of positional arguments of the
2293 # where N is the number of positional arguments of the
2294 # alias.
2294 # alias.
2295 alias_table[ff] = (0,ff)
2295 alias_table[ff] = (0,ff)
2296 syscmdlist.append(ff)
2296 syscmdlist.append(ff)
2297 else:
2297 else:
2298 for pdir in path:
2298 for pdir in path:
2299 os.chdir(pdir)
2299 os.chdir(pdir)
2300 for ff in os.listdir(pdir):
2300 for ff in os.listdir(pdir):
2301 if isexec(ff):
2301 if isexec(ff):
2302 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2302 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2303 syscmdlist.append(ff)
2303 syscmdlist.append(ff)
2304 # Make sure the alias table doesn't contain keywords or builtins
2304 # Make sure the alias table doesn't contain keywords or builtins
2305 self.shell.alias_table_validate()
2305 self.shell.alias_table_validate()
2306 # Call again init_auto_alias() so we get 'rm -i' and other
2306 # Call again init_auto_alias() so we get 'rm -i' and other
2307 # modified aliases since %rehashx will probably clobber them
2307 # modified aliases since %rehashx will probably clobber them
2308 self.shell.init_auto_alias()
2308 self.shell.init_auto_alias()
2309 db = self.getapi().getdb()
2309 db = self.getapi().getdb()
2310 db['syscmdlist'] = syscmdlist
2310 db['syscmdlist'] = syscmdlist
2311 finally:
2311 finally:
2312 os.chdir(savedir)
2312 os.chdir(savedir)
2313
2313
2314 def magic_pwd(self, parameter_s = ''):
2314 def magic_pwd(self, parameter_s = ''):
2315 """Return the current working directory path."""
2315 """Return the current working directory path."""
2316 return os.getcwd()
2316 return os.getcwd()
2317
2317
2318 def magic_cd(self, parameter_s=''):
2318 def magic_cd(self, parameter_s=''):
2319 """Change the current working directory.
2319 """Change the current working directory.
2320
2320
2321 This command automatically maintains an internal list of directories
2321 This command automatically maintains an internal list of directories
2322 you visit during your IPython session, in the variable _dh. The
2322 you visit during your IPython session, in the variable _dh. The
2323 command %dhist shows this history nicely formatted.
2323 command %dhist shows this history nicely formatted.
2324
2324
2325 Usage:
2325 Usage:
2326
2326
2327 cd 'dir': changes to directory 'dir'.
2327 cd 'dir': changes to directory 'dir'.
2328
2328
2329 cd -: changes to the last visited directory.
2329 cd -: changes to the last visited directory.
2330
2330
2331 cd -<n>: changes to the n-th directory in the directory history.
2331 cd -<n>: changes to the n-th directory in the directory history.
2332
2332
2333 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2333 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2334 (note: cd <bookmark_name> is enough if there is no
2334 (note: cd <bookmark_name> is enough if there is no
2335 directory <bookmark_name>, but a bookmark with the name exists.)
2335 directory <bookmark_name>, but a bookmark with the name exists.)
2336
2336
2337 Options:
2337 Options:
2338
2338
2339 -q: quiet. Do not print the working directory after the cd command is
2339 -q: quiet. Do not print the working directory after the cd command is
2340 executed. By default IPython's cd command does print this directory,
2340 executed. By default IPython's cd command does print this directory,
2341 since the default prompts do not display path information.
2341 since the default prompts do not display path information.
2342
2342
2343 Note that !cd doesn't work for this purpose because the shell where
2343 Note that !cd doesn't work for this purpose because the shell where
2344 !command runs is immediately discarded after executing 'command'."""
2344 !command runs is immediately discarded after executing 'command'."""
2345
2345
2346 parameter_s = parameter_s.strip()
2346 parameter_s = parameter_s.strip()
2347 #bkms = self.shell.persist.get("bookmarks",{})
2347 #bkms = self.shell.persist.get("bookmarks",{})
2348
2348
2349 numcd = re.match(r'(-)(\d+)$',parameter_s)
2349 numcd = re.match(r'(-)(\d+)$',parameter_s)
2350 # jump in directory history by number
2350 # jump in directory history by number
2351 if numcd:
2351 if numcd:
2352 nn = int(numcd.group(2))
2352 nn = int(numcd.group(2))
2353 try:
2353 try:
2354 ps = self.shell.user_ns['_dh'][nn]
2354 ps = self.shell.user_ns['_dh'][nn]
2355 except IndexError:
2355 except IndexError:
2356 print 'The requested directory does not exist in history.'
2356 print 'The requested directory does not exist in history.'
2357 return
2357 return
2358 else:
2358 else:
2359 opts = {}
2359 opts = {}
2360 else:
2360 else:
2361 #turn all non-space-escaping backslashes to slashes,
2361 #turn all non-space-escaping backslashes to slashes,
2362 # for c:\windows\directory\names\
2362 # for c:\windows\directory\names\
2363 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2363 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2364 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2364 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2365 # jump to previous
2365 # jump to previous
2366 if ps == '-':
2366 if ps == '-':
2367 try:
2367 try:
2368 ps = self.shell.user_ns['_dh'][-2]
2368 ps = self.shell.user_ns['_dh'][-2]
2369 except IndexError:
2369 except IndexError:
2370 print 'No previous directory to change to.'
2370 print 'No previous directory to change to.'
2371 return
2371 return
2372 # jump to bookmark if needed
2372 # jump to bookmark if needed
2373 else:
2373 else:
2374 if not os.path.isdir(ps) or opts.has_key('b'):
2374 if not os.path.isdir(ps) or opts.has_key('b'):
2375 bkms = self.db.get('bookmarks', {})
2375 bkms = self.db.get('bookmarks', {})
2376
2376
2377 if bkms.has_key(ps):
2377 if bkms.has_key(ps):
2378 target = bkms[ps]
2378 target = bkms[ps]
2379 print '(bookmark:%s) -> %s' % (ps,target)
2379 print '(bookmark:%s) -> %s' % (ps,target)
2380 ps = target
2380 ps = target
2381 else:
2381 else:
2382 if opts.has_key('b'):
2382 if opts.has_key('b'):
2383 error("Bookmark '%s' not found. "
2383 error("Bookmark '%s' not found. "
2384 "Use '%%bookmark -l' to see your bookmarks." % ps)
2384 "Use '%%bookmark -l' to see your bookmarks." % ps)
2385 return
2385 return
2386
2386
2387 # at this point ps should point to the target dir
2387 # at this point ps should point to the target dir
2388 if ps:
2388 if ps:
2389 try:
2389 try:
2390 os.chdir(os.path.expanduser(ps))
2390 os.chdir(os.path.expanduser(ps))
2391 ttitle = ("IPy:" + (
2391 ttitle = ("IPy:" + (
2392 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2392 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2393 platutils.set_term_title(ttitle)
2393 platutils.set_term_title(ttitle)
2394 except OSError:
2394 except OSError:
2395 print sys.exc_info()[1]
2395 print sys.exc_info()[1]
2396 else:
2396 else:
2397 self.shell.user_ns['_dh'].append(os.getcwd())
2397 self.shell.user_ns['_dh'].append(os.getcwd())
2398 else:
2398 else:
2399 os.chdir(self.shell.home_dir)
2399 os.chdir(self.shell.home_dir)
2400 platutils.set_term_title("IPy:~")
2400 platutils.set_term_title("IPy:~")
2401 self.shell.user_ns['_dh'].append(os.getcwd())
2401 self.shell.user_ns['_dh'].append(os.getcwd())
2402 if not 'q' in opts:
2402 if not 'q' in opts:
2403 print self.shell.user_ns['_dh'][-1]
2403 print self.shell.user_ns['_dh'][-1]
2404
2404
2405 def magic_dhist(self, parameter_s=''):
2405 def magic_dhist(self, parameter_s=''):
2406 """Print your history of visited directories.
2406 """Print your history of visited directories.
2407
2407
2408 %dhist -> print full history\\
2408 %dhist -> print full history\\
2409 %dhist n -> print last n entries only\\
2409 %dhist n -> print last n entries only\\
2410 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2410 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2411
2411
2412 This history is automatically maintained by the %cd command, and
2412 This history is automatically maintained by the %cd command, and
2413 always available as the global list variable _dh. You can use %cd -<n>
2413 always available as the global list variable _dh. You can use %cd -<n>
2414 to go to directory number <n>."""
2414 to go to directory number <n>."""
2415
2415
2416 dh = self.shell.user_ns['_dh']
2416 dh = self.shell.user_ns['_dh']
2417 if parameter_s:
2417 if parameter_s:
2418 try:
2418 try:
2419 args = map(int,parameter_s.split())
2419 args = map(int,parameter_s.split())
2420 except:
2420 except:
2421 self.arg_err(Magic.magic_dhist)
2421 self.arg_err(Magic.magic_dhist)
2422 return
2422 return
2423 if len(args) == 1:
2423 if len(args) == 1:
2424 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2424 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2425 elif len(args) == 2:
2425 elif len(args) == 2:
2426 ini,fin = args
2426 ini,fin = args
2427 else:
2427 else:
2428 self.arg_err(Magic.magic_dhist)
2428 self.arg_err(Magic.magic_dhist)
2429 return
2429 return
2430 else:
2430 else:
2431 ini,fin = 0,len(dh)
2431 ini,fin = 0,len(dh)
2432 nlprint(dh,
2432 nlprint(dh,
2433 header = 'Directory history (kept in _dh)',
2433 header = 'Directory history (kept in _dh)',
2434 start=ini,stop=fin)
2434 start=ini,stop=fin)
2435
2435
2436 def magic_env(self, parameter_s=''):
2436 def magic_env(self, parameter_s=''):
2437 """List environment variables."""
2437 """List environment variables."""
2438
2438
2439 return os.environ.data
2439 return os.environ.data
2440
2440
2441 def magic_pushd(self, parameter_s=''):
2441 def magic_pushd(self, parameter_s=''):
2442 """Place the current dir on stack and change directory.
2442 """Place the current dir on stack and change directory.
2443
2443
2444 Usage:\\
2444 Usage:\\
2445 %pushd ['dirname']
2445 %pushd ['dirname']
2446
2446
2447 %pushd with no arguments does a %pushd to your home directory.
2447 %pushd with no arguments does a %pushd to your home directory.
2448 """
2448 """
2449 if parameter_s == '': parameter_s = '~'
2449 if parameter_s == '': parameter_s = '~'
2450 dir_s = self.shell.dir_stack
2450 dir_s = self.shell.dir_stack
2451 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2451 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2452 os.path.expanduser(self.shell.dir_stack[0]):
2452 os.path.expanduser(self.shell.dir_stack[0]):
2453 try:
2453 try:
2454 self.magic_cd(parameter_s)
2454 self.magic_cd(parameter_s)
2455 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2455 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2456 self.magic_dirs()
2456 self.magic_dirs()
2457 except:
2457 except:
2458 print 'Invalid directory'
2458 print 'Invalid directory'
2459 else:
2459 else:
2460 print 'You are already there!'
2460 print 'You are already there!'
2461
2461
2462 def magic_popd(self, parameter_s=''):
2462 def magic_popd(self, parameter_s=''):
2463 """Change to directory popped off the top of the stack.
2463 """Change to directory popped off the top of the stack.
2464 """
2464 """
2465 if len (self.shell.dir_stack) > 1:
2465 if len (self.shell.dir_stack) > 1:
2466 self.shell.dir_stack.pop(0)
2466 self.shell.dir_stack.pop(0)
2467 self.magic_cd(self.shell.dir_stack[0])
2467 self.magic_cd(self.shell.dir_stack[0])
2468 print self.shell.dir_stack[0]
2468 print self.shell.dir_stack[0]
2469 else:
2469 else:
2470 print "You can't remove the starting directory from the stack:",\
2470 print "You can't remove the starting directory from the stack:",\
2471 self.shell.dir_stack
2471 self.shell.dir_stack
2472
2472
2473 def magic_dirs(self, parameter_s=''):
2473 def magic_dirs(self, parameter_s=''):
2474 """Return the current directory stack."""
2474 """Return the current directory stack."""
2475
2475
2476 return self.shell.dir_stack[:]
2476 return self.shell.dir_stack[:]
2477
2477
2478 def magic_sc(self, parameter_s=''):
2478 def magic_sc(self, parameter_s=''):
2479 """Shell capture - execute a shell command and capture its output.
2479 """Shell capture - execute a shell command and capture its output.
2480
2480
2481 DEPRECATED. Suboptimal, retained for backwards compatibility.
2481 DEPRECATED. Suboptimal, retained for backwards compatibility.
2482
2482
2483 You should use the form 'var = !command' instead. Example:
2483 You should use the form 'var = !command' instead. Example:
2484
2484
2485 "%sc -l myfiles = ls ~" should now be written as
2485 "%sc -l myfiles = ls ~" should now be written as
2486
2486
2487 "myfiles = !ls ~"
2487 "myfiles = !ls ~"
2488
2488
2489 myfiles.s, myfiles.l and myfiles.n still apply as documented
2489 myfiles.s, myfiles.l and myfiles.n still apply as documented
2490 below.
2490 below.
2491
2491
2492 --
2492 --
2493 %sc [options] varname=command
2493 %sc [options] varname=command
2494
2494
2495 IPython will run the given command using commands.getoutput(), and
2495 IPython will run the given command using commands.getoutput(), and
2496 will then update the user's interactive namespace with a variable
2496 will then update the user's interactive namespace with a variable
2497 called varname, containing the value of the call. Your command can
2497 called varname, containing the value of the call. Your command can
2498 contain shell wildcards, pipes, etc.
2498 contain shell wildcards, pipes, etc.
2499
2499
2500 The '=' sign in the syntax is mandatory, and the variable name you
2500 The '=' sign in the syntax is mandatory, and the variable name you
2501 supply must follow Python's standard conventions for valid names.
2501 supply must follow Python's standard conventions for valid names.
2502
2502
2503 (A special format without variable name exists for internal use)
2503 (A special format without variable name exists for internal use)
2504
2504
2505 Options:
2505 Options:
2506
2506
2507 -l: list output. Split the output on newlines into a list before
2507 -l: list output. Split the output on newlines into a list before
2508 assigning it to the given variable. By default the output is stored
2508 assigning it to the given variable. By default the output is stored
2509 as a single string.
2509 as a single string.
2510
2510
2511 -v: verbose. Print the contents of the variable.
2511 -v: verbose. Print the contents of the variable.
2512
2512
2513 In most cases you should not need to split as a list, because the
2513 In most cases you should not need to split as a list, because the
2514 returned value is a special type of string which can automatically
2514 returned value is a special type of string which can automatically
2515 provide its contents either as a list (split on newlines) or as a
2515 provide its contents either as a list (split on newlines) or as a
2516 space-separated string. These are convenient, respectively, either
2516 space-separated string. These are convenient, respectively, either
2517 for sequential processing or to be passed to a shell command.
2517 for sequential processing or to be passed to a shell command.
2518
2518
2519 For example:
2519 For example:
2520
2520
2521 # Capture into variable a
2521 # Capture into variable a
2522 In [9]: sc a=ls *py
2522 In [9]: sc a=ls *py
2523
2523
2524 # a is a string with embedded newlines
2524 # a is a string with embedded newlines
2525 In [10]: a
2525 In [10]: a
2526 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2526 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2527
2527
2528 # which can be seen as a list:
2528 # which can be seen as a list:
2529 In [11]: a.l
2529 In [11]: a.l
2530 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2530 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2531
2531
2532 # or as a whitespace-separated string:
2532 # or as a whitespace-separated string:
2533 In [12]: a.s
2533 In [12]: a.s
2534 Out[12]: 'setup.py win32_manual_post_install.py'
2534 Out[12]: 'setup.py win32_manual_post_install.py'
2535
2535
2536 # a.s is useful to pass as a single command line:
2536 # a.s is useful to pass as a single command line:
2537 In [13]: !wc -l $a.s
2537 In [13]: !wc -l $a.s
2538 146 setup.py
2538 146 setup.py
2539 130 win32_manual_post_install.py
2539 130 win32_manual_post_install.py
2540 276 total
2540 276 total
2541
2541
2542 # while the list form is useful to loop over:
2542 # while the list form is useful to loop over:
2543 In [14]: for f in a.l:
2543 In [14]: for f in a.l:
2544 ....: !wc -l $f
2544 ....: !wc -l $f
2545 ....:
2545 ....:
2546 146 setup.py
2546 146 setup.py
2547 130 win32_manual_post_install.py
2547 130 win32_manual_post_install.py
2548
2548
2549 Similiarly, the lists returned by the -l option are also special, in
2549 Similiarly, the lists returned by the -l option are also special, in
2550 the sense that you can equally invoke the .s attribute on them to
2550 the sense that you can equally invoke the .s attribute on them to
2551 automatically get a whitespace-separated string from their contents:
2551 automatically get a whitespace-separated string from their contents:
2552
2552
2553 In [1]: sc -l b=ls *py
2553 In [1]: sc -l b=ls *py
2554
2554
2555 In [2]: b
2555 In [2]: b
2556 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2556 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2557
2557
2558 In [3]: b.s
2558 In [3]: b.s
2559 Out[3]: 'setup.py win32_manual_post_install.py'
2559 Out[3]: 'setup.py win32_manual_post_install.py'
2560
2560
2561 In summary, both the lists and strings used for ouptut capture have
2561 In summary, both the lists and strings used for ouptut capture have
2562 the following special attributes:
2562 the following special attributes:
2563
2563
2564 .l (or .list) : value as list.
2564 .l (or .list) : value as list.
2565 .n (or .nlstr): value as newline-separated string.
2565 .n (or .nlstr): value as newline-separated string.
2566 .s (or .spstr): value as space-separated string.
2566 .s (or .spstr): value as space-separated string.
2567 """
2567 """
2568
2568
2569 opts,args = self.parse_options(parameter_s,'lv')
2569 opts,args = self.parse_options(parameter_s,'lv')
2570 # Try to get a variable name and command to run
2570 # Try to get a variable name and command to run
2571 try:
2571 try:
2572 # the variable name must be obtained from the parse_options
2572 # the variable name must be obtained from the parse_options
2573 # output, which uses shlex.split to strip options out.
2573 # output, which uses shlex.split to strip options out.
2574 var,_ = args.split('=',1)
2574 var,_ = args.split('=',1)
2575 var = var.strip()
2575 var = var.strip()
2576 # But the the command has to be extracted from the original input
2576 # But the the command has to be extracted from the original input
2577 # parameter_s, not on what parse_options returns, to avoid the
2577 # parameter_s, not on what parse_options returns, to avoid the
2578 # quote stripping which shlex.split performs on it.
2578 # quote stripping which shlex.split performs on it.
2579 _,cmd = parameter_s.split('=',1)
2579 _,cmd = parameter_s.split('=',1)
2580 except ValueError:
2580 except ValueError:
2581 var,cmd = '',''
2581 var,cmd = '',''
2582 # If all looks ok, proceed
2582 # If all looks ok, proceed
2583 out,err = self.shell.getoutputerror(cmd)
2583 out,err = self.shell.getoutputerror(cmd)
2584 if err:
2584 if err:
2585 print >> Term.cerr,err
2585 print >> Term.cerr,err
2586 if opts.has_key('l'):
2586 if opts.has_key('l'):
2587 out = SList(out.split('\n'))
2587 out = SList(out.split('\n'))
2588 else:
2588 else:
2589 out = LSString(out)
2589 out = LSString(out)
2590 if opts.has_key('v'):
2590 if opts.has_key('v'):
2591 print '%s ==\n%s' % (var,pformat(out))
2591 print '%s ==\n%s' % (var,pformat(out))
2592 if var:
2592 if var:
2593 self.shell.user_ns.update({var:out})
2593 self.shell.user_ns.update({var:out})
2594 else:
2594 else:
2595 return out
2595 return out
2596
2596
2597 def magic_sx(self, parameter_s=''):
2597 def magic_sx(self, parameter_s=''):
2598 """Shell execute - run a shell command and capture its output.
2598 """Shell execute - run a shell command and capture its output.
2599
2599
2600 %sx command
2600 %sx command
2601
2601
2602 IPython will run the given command using commands.getoutput(), and
2602 IPython will run the given command using commands.getoutput(), and
2603 return the result formatted as a list (split on '\\n'). Since the
2603 return the result formatted as a list (split on '\\n'). Since the
2604 output is _returned_, it will be stored in ipython's regular output
2604 output is _returned_, it will be stored in ipython's regular output
2605 cache Out[N] and in the '_N' automatic variables.
2605 cache Out[N] and in the '_N' automatic variables.
2606
2606
2607 Notes:
2607 Notes:
2608
2608
2609 1) If an input line begins with '!!', then %sx is automatically
2609 1) If an input line begins with '!!', then %sx is automatically
2610 invoked. That is, while:
2610 invoked. That is, while:
2611 !ls
2611 !ls
2612 causes ipython to simply issue system('ls'), typing
2612 causes ipython to simply issue system('ls'), typing
2613 !!ls
2613 !!ls
2614 is a shorthand equivalent to:
2614 is a shorthand equivalent to:
2615 %sx ls
2615 %sx ls
2616
2616
2617 2) %sx differs from %sc in that %sx automatically splits into a list,
2617 2) %sx differs from %sc in that %sx automatically splits into a list,
2618 like '%sc -l'. The reason for this is to make it as easy as possible
2618 like '%sc -l'. The reason for this is to make it as easy as possible
2619 to process line-oriented shell output via further python commands.
2619 to process line-oriented shell output via further python commands.
2620 %sc is meant to provide much finer control, but requires more
2620 %sc is meant to provide much finer control, but requires more
2621 typing.
2621 typing.
2622
2622
2623 3) Just like %sc -l, this is a list with special attributes:
2623 3) Just like %sc -l, this is a list with special attributes:
2624
2624
2625 .l (or .list) : value as list.
2625 .l (or .list) : value as list.
2626 .n (or .nlstr): value as newline-separated string.
2626 .n (or .nlstr): value as newline-separated string.
2627 .s (or .spstr): value as whitespace-separated string.
2627 .s (or .spstr): value as whitespace-separated string.
2628
2628
2629 This is very useful when trying to use such lists as arguments to
2629 This is very useful when trying to use such lists as arguments to
2630 system commands."""
2630 system commands."""
2631
2631
2632 if parameter_s:
2632 if parameter_s:
2633 out,err = self.shell.getoutputerror(parameter_s)
2633 out,err = self.shell.getoutputerror(parameter_s)
2634 if err:
2634 if err:
2635 print >> Term.cerr,err
2635 print >> Term.cerr,err
2636 return SList(out.split('\n'))
2636 return SList(out.split('\n'))
2637
2637
2638 def magic_bg(self, parameter_s=''):
2638 def magic_bg(self, parameter_s=''):
2639 """Run a job in the background, in a separate thread.
2639 """Run a job in the background, in a separate thread.
2640
2640
2641 For example,
2641 For example,
2642
2642
2643 %bg myfunc(x,y,z=1)
2643 %bg myfunc(x,y,z=1)
2644
2644
2645 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2645 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2646 execution starts, a message will be printed indicating the job
2646 execution starts, a message will be printed indicating the job
2647 number. If your job number is 5, you can use
2647 number. If your job number is 5, you can use
2648
2648
2649 myvar = jobs.result(5) or myvar = jobs[5].result
2649 myvar = jobs.result(5) or myvar = jobs[5].result
2650
2650
2651 to assign this result to variable 'myvar'.
2651 to assign this result to variable 'myvar'.
2652
2652
2653 IPython has a job manager, accessible via the 'jobs' object. You can
2653 IPython has a job manager, accessible via the 'jobs' object. You can
2654 type jobs? to get more information about it, and use jobs.<TAB> to see
2654 type jobs? to get more information about it, and use jobs.<TAB> to see
2655 its attributes. All attributes not starting with an underscore are
2655 its attributes. All attributes not starting with an underscore are
2656 meant for public use.
2656 meant for public use.
2657
2657
2658 In particular, look at the jobs.new() method, which is used to create
2658 In particular, look at the jobs.new() method, which is used to create
2659 new jobs. This magic %bg function is just a convenience wrapper
2659 new jobs. This magic %bg function is just a convenience wrapper
2660 around jobs.new(), for expression-based jobs. If you want to create a
2660 around jobs.new(), for expression-based jobs. If you want to create a
2661 new job with an explicit function object and arguments, you must call
2661 new job with an explicit function object and arguments, you must call
2662 jobs.new() directly.
2662 jobs.new() directly.
2663
2663
2664 The jobs.new docstring also describes in detail several important
2664 The jobs.new docstring also describes in detail several important
2665 caveats associated with a thread-based model for background job
2665 caveats associated with a thread-based model for background job
2666 execution. Type jobs.new? for details.
2666 execution. Type jobs.new? for details.
2667
2667
2668 You can check the status of all jobs with jobs.status().
2668 You can check the status of all jobs with jobs.status().
2669
2669
2670 The jobs variable is set by IPython into the Python builtin namespace.
2670 The jobs variable is set by IPython into the Python builtin namespace.
2671 If you ever declare a variable named 'jobs', you will shadow this
2671 If you ever declare a variable named 'jobs', you will shadow this
2672 name. You can either delete your global jobs variable to regain
2672 name. You can either delete your global jobs variable to regain
2673 access to the job manager, or make a new name and assign it manually
2673 access to the job manager, or make a new name and assign it manually
2674 to the manager (stored in IPython's namespace). For example, to
2674 to the manager (stored in IPython's namespace). For example, to
2675 assign the job manager to the Jobs name, use:
2675 assign the job manager to the Jobs name, use:
2676
2676
2677 Jobs = __builtins__.jobs"""
2677 Jobs = __builtins__.jobs"""
2678
2678
2679 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2679 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2680
2680
2681
2681
2682 def magic_bookmark(self, parameter_s=''):
2682 def magic_bookmark(self, parameter_s=''):
2683 """Manage IPython's bookmark system.
2683 """Manage IPython's bookmark system.
2684
2684
2685 %bookmark <name> - set bookmark to current dir
2685 %bookmark <name> - set bookmark to current dir
2686 %bookmark <name> <dir> - set bookmark to <dir>
2686 %bookmark <name> <dir> - set bookmark to <dir>
2687 %bookmark -l - list all bookmarks
2687 %bookmark -l - list all bookmarks
2688 %bookmark -d <name> - remove bookmark
2688 %bookmark -d <name> - remove bookmark
2689 %bookmark -r - remove all bookmarks
2689 %bookmark -r - remove all bookmarks
2690
2690
2691 You can later on access a bookmarked folder with:
2691 You can later on access a bookmarked folder with:
2692 %cd -b <name>
2692 %cd -b <name>
2693 or simply '%cd <name>' if there is no directory called <name> AND
2693 or simply '%cd <name>' if there is no directory called <name> AND
2694 there is such a bookmark defined.
2694 there is such a bookmark defined.
2695
2695
2696 Your bookmarks persist through IPython sessions, but they are
2696 Your bookmarks persist through IPython sessions, but they are
2697 associated with each profile."""
2697 associated with each profile."""
2698
2698
2699 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2699 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2700 if len(args) > 2:
2700 if len(args) > 2:
2701 error('You can only give at most two arguments')
2701 error('You can only give at most two arguments')
2702 return
2702 return
2703
2703
2704 bkms = self.db.get('bookmarks',{})
2704 bkms = self.db.get('bookmarks',{})
2705
2705
2706 if opts.has_key('d'):
2706 if opts.has_key('d'):
2707 try:
2707 try:
2708 todel = args[0]
2708 todel = args[0]
2709 except IndexError:
2709 except IndexError:
2710 error('You must provide a bookmark to delete')
2710 error('You must provide a bookmark to delete')
2711 else:
2711 else:
2712 try:
2712 try:
2713 del bkms[todel]
2713 del bkms[todel]
2714 except:
2714 except:
2715 error("Can't delete bookmark '%s'" % todel)
2715 error("Can't delete bookmark '%s'" % todel)
2716 elif opts.has_key('r'):
2716 elif opts.has_key('r'):
2717 bkms = {}
2717 bkms = {}
2718 elif opts.has_key('l'):
2718 elif opts.has_key('l'):
2719 bks = bkms.keys()
2719 bks = bkms.keys()
2720 bks.sort()
2720 bks.sort()
2721 if bks:
2721 if bks:
2722 size = max(map(len,bks))
2722 size = max(map(len,bks))
2723 else:
2723 else:
2724 size = 0
2724 size = 0
2725 fmt = '%-'+str(size)+'s -> %s'
2725 fmt = '%-'+str(size)+'s -> %s'
2726 print 'Current bookmarks:'
2726 print 'Current bookmarks:'
2727 for bk in bks:
2727 for bk in bks:
2728 print fmt % (bk,bkms[bk])
2728 print fmt % (bk,bkms[bk])
2729 else:
2729 else:
2730 if not args:
2730 if not args:
2731 error("You must specify the bookmark name")
2731 error("You must specify the bookmark name")
2732 elif len(args)==1:
2732 elif len(args)==1:
2733 bkms[args[0]] = os.getcwd()
2733 bkms[args[0]] = os.getcwd()
2734 elif len(args)==2:
2734 elif len(args)==2:
2735 bkms[args[0]] = args[1]
2735 bkms[args[0]] = args[1]
2736 self.db['bookmarks'] = bkms
2736 self.db['bookmarks'] = bkms
2737
2737
2738 def magic_pycat(self, parameter_s=''):
2738 def magic_pycat(self, parameter_s=''):
2739 """Show a syntax-highlighted file through a pager.
2739 """Show a syntax-highlighted file through a pager.
2740
2740
2741 This magic is similar to the cat utility, but it will assume the file
2741 This magic is similar to the cat utility, but it will assume the file
2742 to be Python source and will show it with syntax highlighting. """
2742 to be Python source and will show it with syntax highlighting. """
2743
2743
2744 try:
2744 try:
2745 filename = get_py_filename(parameter_s)
2745 filename = get_py_filename(parameter_s)
2746 cont = file_read(filename)
2746 cont = file_read(filename)
2747 except IOError:
2747 except IOError:
2748 try:
2748 try:
2749 cont = eval(parameter_s,self.user_ns)
2749 cont = eval(parameter_s,self.user_ns)
2750 except NameError:
2750 except NameError:
2751 cont = None
2751 cont = None
2752 if cont is None:
2752 if cont is None:
2753 print "Error: no such file or variable"
2753 print "Error: no such file or variable"
2754 return
2754 return
2755
2755
2756 page(self.shell.pycolorize(cont),
2756 page(self.shell.pycolorize(cont),
2757 screen_lines=self.shell.rc.screen_length)
2757 screen_lines=self.shell.rc.screen_length)
2758
2758
2759 def magic_cpaste(self, parameter_s=''):
2759 def magic_cpaste(self, parameter_s=''):
2760 """Allows you to paste & execute a pre-formatted code block from
2760 """Allows you to paste & execute a pre-formatted code block from
2761 clipboard.
2761 clipboard.
2762
2762
2763 You must terminate the block with '--' (two minus-signs) alone on the
2763 You must terminate the block with '--' (two minus-signs) alone on the
2764 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2764 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2765 is the new sentinel for this operation)
2765 is the new sentinel for this operation)
2766
2766
2767 The block is dedented prior to execution to enable execution of
2767 The block is dedented prior to execution to enable execution of
2768 method definitions. The executed block is also assigned to variable
2768 method definitions. The executed block is also assigned to variable
2769 named 'pasted_block' for later editing with '%edit pasted_block'.
2769 named 'pasted_block' for later editing with '%edit pasted_block'.
2770
2770
2771 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2771 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2772 This assigns the pasted block to variable 'foo' as string, without
2772 This assigns the pasted block to variable 'foo' as string, without
2773 dedenting or executing it.
2773 dedenting or executing it.
2774
2774
2775 Do not be alarmed by garbled output on Windows (it's a readline bug).
2775 Do not be alarmed by garbled output on Windows (it's a readline bug).
2776 Just press enter and type -- (and press enter again) and the block
2776 Just press enter and type -- (and press enter again) and the block
2777 will be what was just pasted.
2777 will be what was just pasted.
2778
2778
2779 IPython statements (magics, shell escapes) are not supported (yet).
2779 IPython statements (magics, shell escapes) are not supported (yet).
2780 """
2780 """
2781 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2781 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2782 par = args.strip()
2782 par = args.strip()
2783 sentinel = opts.get('s','--')
2783 sentinel = opts.get('s','--')
2784
2784
2785 from IPython import iplib
2785 from IPython import iplib
2786 lines = []
2786 lines = []
2787 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2787 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2788 while 1:
2788 while 1:
2789 l = iplib.raw_input_original(':')
2789 l = iplib.raw_input_original(':')
2790 if l ==sentinel:
2790 if l ==sentinel:
2791 break
2791 break
2792 lines.append(l)
2792 lines.append(l)
2793 block = "\n".join(lines) + '\n'
2793 block = "\n".join(lines) + '\n'
2794 #print "block:\n",block
2794 #print "block:\n",block
2795 if not par:
2795 if not par:
2796 b = textwrap.dedent(block)
2796 b = textwrap.dedent(block)
2797 exec b in self.user_ns
2797 exec b in self.user_ns
2798 self.user_ns['pasted_block'] = b
2798 self.user_ns['pasted_block'] = b
2799 else:
2799 else:
2800 self.user_ns[par] = block
2800 self.user_ns[par] = block
2801 print "Block assigned to '%s'" % par
2801 print "Block assigned to '%s'" % par
2802 def magic_quickref(self,arg):
2802 def magic_quickref(self,arg):
2803 import IPython.usage
2803 import IPython.usage
2804 page(IPython.usage.quick_reference)
2804 page(IPython.usage.quick_reference)
2805 del IPython.usage
2805 del IPython.usage
2806
2806
2807
2807
2808 # end Magic
2808 # end Magic
@@ -1,5212 +1,5216 b''
1 2006-02-15 Ville Vainio <vivainio@gmail.com>
2
3 * Magic.py: %Pprint work again
4
1 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
5 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
2
6
3 * IPython/hooks.py (editor): quote the call to the editor command,
7 * IPython/hooks.py (editor): quote the call to the editor command,
4 to allow commands with spaces in them. Problem noted by watching
8 to allow commands with spaces in them. Problem noted by watching
5 Ian Oswald's video about textpad under win32 at
9 Ian Oswald's video about textpad under win32 at
6 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
10 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
7
11
8 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
12 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
9 describing magics (we haven't used @ for a loong time).
13 describing magics (we haven't used @ for a loong time).
10
14
11 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
15 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
12 contributed by marienz to close
16 contributed by marienz to close
13 http://www.scipy.net/roundup/ipython/issue53.
17 http://www.scipy.net/roundup/ipython/issue53.
14
18
15 2006-02-10 Ville Vainio <vivainio@gmail.com>
19 2006-02-10 Ville Vainio <vivainio@gmail.com>
16
20
17 * genutils.py: getoutput now works in win32 too
21 * genutils.py: getoutput now works in win32 too
18
22
19 * completer.py: alias and magic completion only invoked
23 * completer.py: alias and magic completion only invoked
20 at the first "item" in the line, to avoid "cd %store"
24 at the first "item" in the line, to avoid "cd %store"
21 nonsense.
25 nonsense.
22
26
23 2006-02-09 Ville Vainio <vivainio@gmail.com>
27 2006-02-09 Ville Vainio <vivainio@gmail.com>
24
28
25 * test/*: Added a unit testing framework (finally).
29 * test/*: Added a unit testing framework (finally).
26 '%run runtests.py' to run test_*.
30 '%run runtests.py' to run test_*.
27
31
28 * ipapi.py: Exposed runlines and set_custom_exc
32 * ipapi.py: Exposed runlines and set_custom_exc
29
33
30 2006-02-07 Ville Vainio <vivainio@gmail.com>
34 2006-02-07 Ville Vainio <vivainio@gmail.com>
31
35
32 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
36 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
33 instead use "f(1 2)" as before.
37 instead use "f(1 2)" as before.
34
38
35 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
39 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
36
40
37 * IPython/demo.py (IPythonDemo): Add new classes to the demo
41 * IPython/demo.py (IPythonDemo): Add new classes to the demo
38 facilities, for demos processed by the IPython input filter
42 facilities, for demos processed by the IPython input filter
39 (IPythonDemo), and for running a script one-line-at-a-time as a
43 (IPythonDemo), and for running a script one-line-at-a-time as a
40 demo, both for pure Python (LineDemo) and for IPython-processed
44 demo, both for pure Python (LineDemo) and for IPython-processed
41 input (IPythonLineDemo). After a request by Dave Kohel, from the
45 input (IPythonLineDemo). After a request by Dave Kohel, from the
42 SAGE team.
46 SAGE team.
43 (Demo.edit): added and edit() method to the demo objects, to edit
47 (Demo.edit): added and edit() method to the demo objects, to edit
44 the in-memory copy of the last executed block.
48 the in-memory copy of the last executed block.
45
49
46 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
50 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
47 processing to %edit, %macro and %save. These commands can now be
51 processing to %edit, %macro and %save. These commands can now be
48 invoked on the unprocessed input as it was typed by the user
52 invoked on the unprocessed input as it was typed by the user
49 (without any prefilters applied). After requests by the SAGE team
53 (without any prefilters applied). After requests by the SAGE team
50 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
54 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
51
55
52 2006-02-01 Ville Vainio <vivainio@gmail.com>
56 2006-02-01 Ville Vainio <vivainio@gmail.com>
53
57
54 * setup.py, eggsetup.py: easy_install ipython==dev works
58 * setup.py, eggsetup.py: easy_install ipython==dev works
55 correctly now (on Linux)
59 correctly now (on Linux)
56
60
57 * ipy_user_conf,ipmaker: user config changes, removed spurious
61 * ipy_user_conf,ipmaker: user config changes, removed spurious
58 warnings
62 warnings
59
63
60 * iplib: if rc.banner is string, use it as is.
64 * iplib: if rc.banner is string, use it as is.
61
65
62 * Magic: %pycat accepts a string argument and pages it's contents.
66 * Magic: %pycat accepts a string argument and pages it's contents.
63
67
64
68
65 2006-01-30 Ville Vainio <vivainio@gmail.com>
69 2006-01-30 Ville Vainio <vivainio@gmail.com>
66
70
67 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
71 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
68 Now %store and bookmarks work through PickleShare, meaning that
72 Now %store and bookmarks work through PickleShare, meaning that
69 concurrent access is possible and all ipython sessions see the
73 concurrent access is possible and all ipython sessions see the
70 same database situation all the time, instead of snapshot of
74 same database situation all the time, instead of snapshot of
71 the situation when the session was started. Hence, %bookmark
75 the situation when the session was started. Hence, %bookmark
72 results are immediately accessible from othes sessions. The database
76 results are immediately accessible from othes sessions. The database
73 is also available for use by user extensions. See:
77 is also available for use by user extensions. See:
74 http://www.python.org/pypi/pickleshare
78 http://www.python.org/pypi/pickleshare
75
79
76 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
80 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
77
81
78 * aliases can now be %store'd
82 * aliases can now be %store'd
79
83
80 * path.py move to Extensions so that pickleshare does not need
84 * path.py move to Extensions so that pickleshare does not need
81 IPython-specific import. Extensions added to pythonpath right
85 IPython-specific import. Extensions added to pythonpath right
82 at __init__.
86 at __init__.
83
87
84 * iplib.py: ipalias deprecated/redundant; aliases are converted and
88 * iplib.py: ipalias deprecated/redundant; aliases are converted and
85 called with _ip.system and the pre-transformed command string.
89 called with _ip.system and the pre-transformed command string.
86
90
87 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
91 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
88
92
89 * IPython/iplib.py (interact): Fix that we were not catching
93 * IPython/iplib.py (interact): Fix that we were not catching
90 KeyboardInterrupt exceptions properly. I'm not quite sure why the
94 KeyboardInterrupt exceptions properly. I'm not quite sure why the
91 logic here had to change, but it's fixed now.
95 logic here had to change, but it's fixed now.
92
96
93 2006-01-29 Ville Vainio <vivainio@gmail.com>
97 2006-01-29 Ville Vainio <vivainio@gmail.com>
94
98
95 * iplib.py: Try to import pyreadline on Windows.
99 * iplib.py: Try to import pyreadline on Windows.
96
100
97 2006-01-27 Ville Vainio <vivainio@gmail.com>
101 2006-01-27 Ville Vainio <vivainio@gmail.com>
98
102
99 * iplib.py: Expose ipapi as _ip in builtin namespace.
103 * iplib.py: Expose ipapi as _ip in builtin namespace.
100 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
104 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
101 and ip_set_hook (-> _ip.set_hook) redundant. % and !
105 and ip_set_hook (-> _ip.set_hook) redundant. % and !
102 syntax now produce _ip.* variant of the commands.
106 syntax now produce _ip.* variant of the commands.
103
107
104 * "_ip.options().autoedit_syntax = 2" automatically throws
108 * "_ip.options().autoedit_syntax = 2" automatically throws
105 user to editor for syntax error correction without prompting.
109 user to editor for syntax error correction without prompting.
106
110
107 2006-01-27 Ville Vainio <vivainio@gmail.com>
111 2006-01-27 Ville Vainio <vivainio@gmail.com>
108
112
109 * ipmaker.py: Give "realistic" sys.argv for scripts (without
113 * ipmaker.py: Give "realistic" sys.argv for scripts (without
110 'ipython' at argv[0]) executed through command line.
114 'ipython' at argv[0]) executed through command line.
111 NOTE: this DEPRECATES calling ipython with multiple scripts
115 NOTE: this DEPRECATES calling ipython with multiple scripts
112 ("ipython a.py b.py c.py")
116 ("ipython a.py b.py c.py")
113
117
114 * iplib.py, hooks.py: Added configurable input prefilter,
118 * iplib.py, hooks.py: Added configurable input prefilter,
115 named 'input_prefilter'. See ext_rescapture.py for example
119 named 'input_prefilter'. See ext_rescapture.py for example
116 usage.
120 usage.
117
121
118 * ext_rescapture.py, Magic.py: Better system command output capture
122 * ext_rescapture.py, Magic.py: Better system command output capture
119 through 'var = !ls' (deprecates user-visible %sc). Same notation
123 through 'var = !ls' (deprecates user-visible %sc). Same notation
120 applies for magics, 'var = %alias' assigns alias list to var.
124 applies for magics, 'var = %alias' assigns alias list to var.
121
125
122 * ipapi.py: added meta() for accessing extension-usable data store.
126 * ipapi.py: added meta() for accessing extension-usable data store.
123
127
124 * iplib.py: added InteractiveShell.getapi(). New magics should be
128 * iplib.py: added InteractiveShell.getapi(). New magics should be
125 written doing self.getapi() instead of using the shell directly.
129 written doing self.getapi() instead of using the shell directly.
126
130
127 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
131 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
128 %store foo >> ~/myfoo.txt to store variables to files (in clean
132 %store foo >> ~/myfoo.txt to store variables to files (in clean
129 textual form, not a restorable pickle).
133 textual form, not a restorable pickle).
130
134
131 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
135 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
132
136
133 * usage.py, Magic.py: added %quickref
137 * usage.py, Magic.py: added %quickref
134
138
135 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
139 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
136
140
137 * GetoptErrors when invoking magics etc. with wrong args
141 * GetoptErrors when invoking magics etc. with wrong args
138 are now more helpful:
142 are now more helpful:
139 GetoptError: option -l not recognized (allowed: "qb" )
143 GetoptError: option -l not recognized (allowed: "qb" )
140
144
141 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
145 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
142
146
143 * IPython/demo.py (Demo.show): Flush stdout after each block, so
147 * IPython/demo.py (Demo.show): Flush stdout after each block, so
144 computationally intensive blocks don't appear to stall the demo.
148 computationally intensive blocks don't appear to stall the demo.
145
149
146 2006-01-24 Ville Vainio <vivainio@gmail.com>
150 2006-01-24 Ville Vainio <vivainio@gmail.com>
147
151
148 * iplib.py, hooks.py: 'result_display' hook can return a non-None
152 * iplib.py, hooks.py: 'result_display' hook can return a non-None
149 value to manipulate resulting history entry.
153 value to manipulate resulting history entry.
150
154
151 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
155 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
152 to instance methods of IPApi class, to make extending an embedded
156 to instance methods of IPApi class, to make extending an embedded
153 IPython feasible. See ext_rehashdir.py for example usage.
157 IPython feasible. See ext_rehashdir.py for example usage.
154
158
155 * Merged 1071-1076 from banches/0.7.1
159 * Merged 1071-1076 from banches/0.7.1
156
160
157
161
158 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
162 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
159
163
160 * tools/release (daystamp): Fix build tools to use the new
164 * tools/release (daystamp): Fix build tools to use the new
161 eggsetup.py script to build lightweight eggs.
165 eggsetup.py script to build lightweight eggs.
162
166
163 * Applied changesets 1062 and 1064 before 0.7.1 release.
167 * Applied changesets 1062 and 1064 before 0.7.1 release.
164
168
165 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
169 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
166 see the raw input history (without conversions like %ls ->
170 see the raw input history (without conversions like %ls ->
167 ipmagic("ls")). After a request from W. Stein, SAGE
171 ipmagic("ls")). After a request from W. Stein, SAGE
168 (http://modular.ucsd.edu/sage) developer. This information is
172 (http://modular.ucsd.edu/sage) developer. This information is
169 stored in the input_hist_raw attribute of the IPython instance, so
173 stored in the input_hist_raw attribute of the IPython instance, so
170 developers can access it if needed (it's an InputList instance).
174 developers can access it if needed (it's an InputList instance).
171
175
172 * Versionstring = 0.7.2.svn
176 * Versionstring = 0.7.2.svn
173
177
174 * eggsetup.py: A separate script for constructing eggs, creates
178 * eggsetup.py: A separate script for constructing eggs, creates
175 proper launch scripts even on Windows (an .exe file in
179 proper launch scripts even on Windows (an .exe file in
176 \python24\scripts).
180 \python24\scripts).
177
181
178 * ipapi.py: launch_new_instance, launch entry point needed for the
182 * ipapi.py: launch_new_instance, launch entry point needed for the
179 egg.
183 egg.
180
184
181 2006-01-23 Ville Vainio <vivainio@gmail.com>
185 2006-01-23 Ville Vainio <vivainio@gmail.com>
182
186
183 * Added %cpaste magic for pasting python code
187 * Added %cpaste magic for pasting python code
184
188
185 2006-01-22 Ville Vainio <vivainio@gmail.com>
189 2006-01-22 Ville Vainio <vivainio@gmail.com>
186
190
187 * Merge from branches/0.7.1 into trunk, revs 1052-1057
191 * Merge from branches/0.7.1 into trunk, revs 1052-1057
188
192
189 * Versionstring = 0.7.2.svn
193 * Versionstring = 0.7.2.svn
190
194
191 * eggsetup.py: A separate script for constructing eggs, creates
195 * eggsetup.py: A separate script for constructing eggs, creates
192 proper launch scripts even on Windows (an .exe file in
196 proper launch scripts even on Windows (an .exe file in
193 \python24\scripts).
197 \python24\scripts).
194
198
195 * ipapi.py: launch_new_instance, launch entry point needed for the
199 * ipapi.py: launch_new_instance, launch entry point needed for the
196 egg.
200 egg.
197
201
198 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
202 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
199
203
200 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
204 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
201 %pfile foo would print the file for foo even if it was a binary.
205 %pfile foo would print the file for foo even if it was a binary.
202 Now, extensions '.so' and '.dll' are skipped.
206 Now, extensions '.so' and '.dll' are skipped.
203
207
204 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
208 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
205 bug, where macros would fail in all threaded modes. I'm not 100%
209 bug, where macros would fail in all threaded modes. I'm not 100%
206 sure, so I'm going to put out an rc instead of making a release
210 sure, so I'm going to put out an rc instead of making a release
207 today, and wait for feedback for at least a few days.
211 today, and wait for feedback for at least a few days.
208
212
209 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
213 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
210 it...) the handling of pasting external code with autoindent on.
214 it...) the handling of pasting external code with autoindent on.
211 To get out of a multiline input, the rule will appear for most
215 To get out of a multiline input, the rule will appear for most
212 users unchanged: two blank lines or change the indent level
216 users unchanged: two blank lines or change the indent level
213 proposed by IPython. But there is a twist now: you can
217 proposed by IPython. But there is a twist now: you can
214 add/subtract only *one or two spaces*. If you add/subtract three
218 add/subtract only *one or two spaces*. If you add/subtract three
215 or more (unless you completely delete the line), IPython will
219 or more (unless you completely delete the line), IPython will
216 accept that line, and you'll need to enter a second one of pure
220 accept that line, and you'll need to enter a second one of pure
217 whitespace. I know it sounds complicated, but I can't find a
221 whitespace. I know it sounds complicated, but I can't find a
218 different solution that covers all the cases, with the right
222 different solution that covers all the cases, with the right
219 heuristics. Hopefully in actual use, nobody will really notice
223 heuristics. Hopefully in actual use, nobody will really notice
220 all these strange rules and things will 'just work'.
224 all these strange rules and things will 'just work'.
221
225
222 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
226 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
223
227
224 * IPython/iplib.py (interact): catch exceptions which can be
228 * IPython/iplib.py (interact): catch exceptions which can be
225 triggered asynchronously by signal handlers. Thanks to an
229 triggered asynchronously by signal handlers. Thanks to an
226 automatic crash report, submitted by Colin Kingsley
230 automatic crash report, submitted by Colin Kingsley
227 <tercel-AT-gentoo.org>.
231 <tercel-AT-gentoo.org>.
228
232
229 2006-01-20 Ville Vainio <vivainio@gmail.com>
233 2006-01-20 Ville Vainio <vivainio@gmail.com>
230
234
231 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
235 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
232 (%rehashdir, very useful, try it out) of how to extend ipython
236 (%rehashdir, very useful, try it out) of how to extend ipython
233 with new magics. Also added Extensions dir to pythonpath to make
237 with new magics. Also added Extensions dir to pythonpath to make
234 importing extensions easy.
238 importing extensions easy.
235
239
236 * %store now complains when trying to store interactively declared
240 * %store now complains when trying to store interactively declared
237 classes / instances of those classes.
241 classes / instances of those classes.
238
242
239 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
243 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
240 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
244 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
241 if they exist, and ipy_user_conf.py with some defaults is created for
245 if they exist, and ipy_user_conf.py with some defaults is created for
242 the user.
246 the user.
243
247
244 * Startup rehashing done by the config file, not InterpreterExec.
248 * Startup rehashing done by the config file, not InterpreterExec.
245 This means system commands are available even without selecting the
249 This means system commands are available even without selecting the
246 pysh profile. It's the sensible default after all.
250 pysh profile. It's the sensible default after all.
247
251
248 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
252 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
249
253
250 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
254 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
251 multiline code with autoindent on working. But I am really not
255 multiline code with autoindent on working. But I am really not
252 sure, so this needs more testing. Will commit a debug-enabled
256 sure, so this needs more testing. Will commit a debug-enabled
253 version for now, while I test it some more, so that Ville and
257 version for now, while I test it some more, so that Ville and
254 others may also catch any problems. Also made
258 others may also catch any problems. Also made
255 self.indent_current_str() a method, to ensure that there's no
259 self.indent_current_str() a method, to ensure that there's no
256 chance of the indent space count and the corresponding string
260 chance of the indent space count and the corresponding string
257 falling out of sync. All code needing the string should just call
261 falling out of sync. All code needing the string should just call
258 the method.
262 the method.
259
263
260 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
264 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
261
265
262 * IPython/Magic.py (magic_edit): fix check for when users don't
266 * IPython/Magic.py (magic_edit): fix check for when users don't
263 save their output files, the try/except was in the wrong section.
267 save their output files, the try/except was in the wrong section.
264
268
265 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
269 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
266
270
267 * IPython/Magic.py (magic_run): fix __file__ global missing from
271 * IPython/Magic.py (magic_run): fix __file__ global missing from
268 script's namespace when executed via %run. After a report by
272 script's namespace when executed via %run. After a report by
269 Vivian.
273 Vivian.
270
274
271 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
275 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
272 when using python 2.4. The parent constructor changed in 2.4, and
276 when using python 2.4. The parent constructor changed in 2.4, and
273 we need to track it directly (we can't call it, as it messes up
277 we need to track it directly (we can't call it, as it messes up
274 readline and tab-completion inside our pdb would stop working).
278 readline and tab-completion inside our pdb would stop working).
275 After a bug report by R. Bernstein <rocky-AT-panix.com>.
279 After a bug report by R. Bernstein <rocky-AT-panix.com>.
276
280
277 2006-01-16 Ville Vainio <vivainio@gmail.com>
281 2006-01-16 Ville Vainio <vivainio@gmail.com>
278
282
279 * Ipython/magic.py:Reverted back to old %edit functionality
283 * Ipython/magic.py:Reverted back to old %edit functionality
280 that returns file contents on exit.
284 that returns file contents on exit.
281
285
282 * IPython/path.py: Added Jason Orendorff's "path" module to
286 * IPython/path.py: Added Jason Orendorff's "path" module to
283 IPython tree, http://www.jorendorff.com/articles/python/path/.
287 IPython tree, http://www.jorendorff.com/articles/python/path/.
284 You can get path objects conveniently through %sc, and !!, e.g.:
288 You can get path objects conveniently through %sc, and !!, e.g.:
285 sc files=ls
289 sc files=ls
286 for p in files.paths: # or files.p
290 for p in files.paths: # or files.p
287 print p,p.mtime
291 print p,p.mtime
288
292
289 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
293 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
290 now work again without considering the exclusion regexp -
294 now work again without considering the exclusion regexp -
291 hence, things like ',foo my/path' turn to 'foo("my/path")'
295 hence, things like ',foo my/path' turn to 'foo("my/path")'
292 instead of syntax error.
296 instead of syntax error.
293
297
294
298
295 2006-01-14 Ville Vainio <vivainio@gmail.com>
299 2006-01-14 Ville Vainio <vivainio@gmail.com>
296
300
297 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
301 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
298 ipapi decorators for python 2.4 users, options() provides access to rc
302 ipapi decorators for python 2.4 users, options() provides access to rc
299 data.
303 data.
300
304
301 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
305 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
302 as path separators (even on Linux ;-). Space character after
306 as path separators (even on Linux ;-). Space character after
303 backslash (as yielded by tab completer) is still space;
307 backslash (as yielded by tab completer) is still space;
304 "%cd long\ name" works as expected.
308 "%cd long\ name" works as expected.
305
309
306 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
310 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
307 as "chain of command", with priority. API stays the same,
311 as "chain of command", with priority. API stays the same,
308 TryNext exception raised by a hook function signals that
312 TryNext exception raised by a hook function signals that
309 current hook failed and next hook should try handling it, as
313 current hook failed and next hook should try handling it, as
310 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
314 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
311 requested configurable display hook, which is now implemented.
315 requested configurable display hook, which is now implemented.
312
316
313 2006-01-13 Ville Vainio <vivainio@gmail.com>
317 2006-01-13 Ville Vainio <vivainio@gmail.com>
314
318
315 * IPython/platutils*.py: platform specific utility functions,
319 * IPython/platutils*.py: platform specific utility functions,
316 so far only set_term_title is implemented (change terminal
320 so far only set_term_title is implemented (change terminal
317 label in windowing systems). %cd now changes the title to
321 label in windowing systems). %cd now changes the title to
318 current dir.
322 current dir.
319
323
320 * IPython/Release.py: Added myself to "authors" list,
324 * IPython/Release.py: Added myself to "authors" list,
321 had to create new files.
325 had to create new files.
322
326
323 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
327 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
324 shell escape; not a known bug but had potential to be one in the
328 shell escape; not a known bug but had potential to be one in the
325 future.
329 future.
326
330
327 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
331 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
328 extension API for IPython! See the module for usage example. Fix
332 extension API for IPython! See the module for usage example. Fix
329 OInspect for docstring-less magic functions.
333 OInspect for docstring-less magic functions.
330
334
331
335
332 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
336 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
333
337
334 * IPython/iplib.py (raw_input): temporarily deactivate all
338 * IPython/iplib.py (raw_input): temporarily deactivate all
335 attempts at allowing pasting of code with autoindent on. It
339 attempts at allowing pasting of code with autoindent on. It
336 introduced bugs (reported by Prabhu) and I can't seem to find a
340 introduced bugs (reported by Prabhu) and I can't seem to find a
337 robust combination which works in all cases. Will have to revisit
341 robust combination which works in all cases. Will have to revisit
338 later.
342 later.
339
343
340 * IPython/genutils.py: remove isspace() function. We've dropped
344 * IPython/genutils.py: remove isspace() function. We've dropped
341 2.2 compatibility, so it's OK to use the string method.
345 2.2 compatibility, so it's OK to use the string method.
342
346
343 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
347 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
344
348
345 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
349 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
346 matching what NOT to autocall on, to include all python binary
350 matching what NOT to autocall on, to include all python binary
347 operators (including things like 'and', 'or', 'is' and 'in').
351 operators (including things like 'and', 'or', 'is' and 'in').
348 Prompted by a bug report on 'foo & bar', but I realized we had
352 Prompted by a bug report on 'foo & bar', but I realized we had
349 many more potential bug cases with other operators. The regexp is
353 many more potential bug cases with other operators. The regexp is
350 self.re_exclude_auto, it's fairly commented.
354 self.re_exclude_auto, it's fairly commented.
351
355
352 2006-01-12 Ville Vainio <vivainio@gmail.com>
356 2006-01-12 Ville Vainio <vivainio@gmail.com>
353
357
354 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
358 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
355 Prettified and hardened string/backslash quoting with ipsystem(),
359 Prettified and hardened string/backslash quoting with ipsystem(),
356 ipalias() and ipmagic(). Now even \ characters are passed to
360 ipalias() and ipmagic(). Now even \ characters are passed to
357 %magics, !shell escapes and aliases exactly as they are in the
361 %magics, !shell escapes and aliases exactly as they are in the
358 ipython command line. Should improve backslash experience,
362 ipython command line. Should improve backslash experience,
359 particularly in Windows (path delimiter for some commands that
363 particularly in Windows (path delimiter for some commands that
360 won't understand '/'), but Unix benefits as well (regexps). %cd
364 won't understand '/'), but Unix benefits as well (regexps). %cd
361 magic still doesn't support backslash path delimiters, though. Also
365 magic still doesn't support backslash path delimiters, though. Also
362 deleted all pretense of supporting multiline command strings in
366 deleted all pretense of supporting multiline command strings in
363 !system or %magic commands. Thanks to Jerry McRae for suggestions.
367 !system or %magic commands. Thanks to Jerry McRae for suggestions.
364
368
365 * doc/build_doc_instructions.txt added. Documentation on how to
369 * doc/build_doc_instructions.txt added. Documentation on how to
366 use doc/update_manual.py, added yesterday. Both files contributed
370 use doc/update_manual.py, added yesterday. Both files contributed
367 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
371 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
368 doc/*.sh for deprecation at a later date.
372 doc/*.sh for deprecation at a later date.
369
373
370 * /ipython.py Added ipython.py to root directory for
374 * /ipython.py Added ipython.py to root directory for
371 zero-installation (tar xzvf ipython.tgz; cd ipython; python
375 zero-installation (tar xzvf ipython.tgz; cd ipython; python
372 ipython.py) and development convenience (no need to kee doing
376 ipython.py) and development convenience (no need to kee doing
373 "setup.py install" between changes).
377 "setup.py install" between changes).
374
378
375 * Made ! and !! shell escapes work (again) in multiline expressions:
379 * Made ! and !! shell escapes work (again) in multiline expressions:
376 if 1:
380 if 1:
377 !ls
381 !ls
378 !!ls
382 !!ls
379
383
380 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
384 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
381
385
382 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
386 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
383 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
387 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
384 module in case-insensitive installation. Was causing crashes
388 module in case-insensitive installation. Was causing crashes
385 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
389 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
386
390
387 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
391 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
388 <marienz-AT-gentoo.org>, closes
392 <marienz-AT-gentoo.org>, closes
389 http://www.scipy.net/roundup/ipython/issue51.
393 http://www.scipy.net/roundup/ipython/issue51.
390
394
391 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
395 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
392
396
393 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
397 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
394 problem of excessive CPU usage under *nix and keyboard lag under
398 problem of excessive CPU usage under *nix and keyboard lag under
395 win32.
399 win32.
396
400
397 2006-01-10 *** Released version 0.7.0
401 2006-01-10 *** Released version 0.7.0
398
402
399 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
403 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
400
404
401 * IPython/Release.py (revision): tag version number to 0.7.0,
405 * IPython/Release.py (revision): tag version number to 0.7.0,
402 ready for release.
406 ready for release.
403
407
404 * IPython/Magic.py (magic_edit): Add print statement to %edit so
408 * IPython/Magic.py (magic_edit): Add print statement to %edit so
405 it informs the user of the name of the temp. file used. This can
409 it informs the user of the name of the temp. file used. This can
406 help if you decide later to reuse that same file, so you know
410 help if you decide later to reuse that same file, so you know
407 where to copy the info from.
411 where to copy the info from.
408
412
409 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
413 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
410
414
411 * setup_bdist_egg.py: little script to build an egg. Added
415 * setup_bdist_egg.py: little script to build an egg. Added
412 support in the release tools as well.
416 support in the release tools as well.
413
417
414 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
418 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
415
419
416 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
420 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
417 version selection (new -wxversion command line and ipythonrc
421 version selection (new -wxversion command line and ipythonrc
418 parameter). Patch contributed by Arnd Baecker
422 parameter). Patch contributed by Arnd Baecker
419 <arnd.baecker-AT-web.de>.
423 <arnd.baecker-AT-web.de>.
420
424
421 * IPython/iplib.py (embed_mainloop): fix tab-completion in
425 * IPython/iplib.py (embed_mainloop): fix tab-completion in
422 embedded instances, for variables defined at the interactive
426 embedded instances, for variables defined at the interactive
423 prompt of the embedded ipython. Reported by Arnd.
427 prompt of the embedded ipython. Reported by Arnd.
424
428
425 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
429 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
426 it can be used as a (stateful) toggle, or with a direct parameter.
430 it can be used as a (stateful) toggle, or with a direct parameter.
427
431
428 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
432 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
429 could be triggered in certain cases and cause the traceback
433 could be triggered in certain cases and cause the traceback
430 printer not to work.
434 printer not to work.
431
435
432 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
436 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
433
437
434 * IPython/iplib.py (_should_recompile): Small fix, closes
438 * IPython/iplib.py (_should_recompile): Small fix, closes
435 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
439 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
436
440
437 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
441 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
438
442
439 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
443 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
440 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
444 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
441 Moad for help with tracking it down.
445 Moad for help with tracking it down.
442
446
443 * IPython/iplib.py (handle_auto): fix autocall handling for
447 * IPython/iplib.py (handle_auto): fix autocall handling for
444 objects which support BOTH __getitem__ and __call__ (so that f [x]
448 objects which support BOTH __getitem__ and __call__ (so that f [x]
445 is left alone, instead of becoming f([x]) automatically).
449 is left alone, instead of becoming f([x]) automatically).
446
450
447 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
451 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
448 Ville's patch.
452 Ville's patch.
449
453
450 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
454 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
451
455
452 * IPython/iplib.py (handle_auto): changed autocall semantics to
456 * IPython/iplib.py (handle_auto): changed autocall semantics to
453 include 'smart' mode, where the autocall transformation is NOT
457 include 'smart' mode, where the autocall transformation is NOT
454 applied if there are no arguments on the line. This allows you to
458 applied if there are no arguments on the line. This allows you to
455 just type 'foo' if foo is a callable to see its internal form,
459 just type 'foo' if foo is a callable to see its internal form,
456 instead of having it called with no arguments (typically a
460 instead of having it called with no arguments (typically a
457 mistake). The old 'full' autocall still exists: for that, you
461 mistake). The old 'full' autocall still exists: for that, you
458 need to set the 'autocall' parameter to 2 in your ipythonrc file.
462 need to set the 'autocall' parameter to 2 in your ipythonrc file.
459
463
460 * IPython/completer.py (Completer.attr_matches): add
464 * IPython/completer.py (Completer.attr_matches): add
461 tab-completion support for Enthoughts' traits. After a report by
465 tab-completion support for Enthoughts' traits. After a report by
462 Arnd and a patch by Prabhu.
466 Arnd and a patch by Prabhu.
463
467
464 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
468 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
465
469
466 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
470 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
467 Schmolck's patch to fix inspect.getinnerframes().
471 Schmolck's patch to fix inspect.getinnerframes().
468
472
469 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
473 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
470 for embedded instances, regarding handling of namespaces and items
474 for embedded instances, regarding handling of namespaces and items
471 added to the __builtin__ one. Multiple embedded instances and
475 added to the __builtin__ one. Multiple embedded instances and
472 recursive embeddings should work better now (though I'm not sure
476 recursive embeddings should work better now (though I'm not sure
473 I've got all the corner cases fixed, that code is a bit of a brain
477 I've got all the corner cases fixed, that code is a bit of a brain
474 twister).
478 twister).
475
479
476 * IPython/Magic.py (magic_edit): added support to edit in-memory
480 * IPython/Magic.py (magic_edit): added support to edit in-memory
477 macros (automatically creates the necessary temp files). %edit
481 macros (automatically creates the necessary temp files). %edit
478 also doesn't return the file contents anymore, it's just noise.
482 also doesn't return the file contents anymore, it's just noise.
479
483
480 * IPython/completer.py (Completer.attr_matches): revert change to
484 * IPython/completer.py (Completer.attr_matches): revert change to
481 complete only on attributes listed in __all__. I realized it
485 complete only on attributes listed in __all__. I realized it
482 cripples the tab-completion system as a tool for exploring the
486 cripples the tab-completion system as a tool for exploring the
483 internals of unknown libraries (it renders any non-__all__
487 internals of unknown libraries (it renders any non-__all__
484 attribute off-limits). I got bit by this when trying to see
488 attribute off-limits). I got bit by this when trying to see
485 something inside the dis module.
489 something inside the dis module.
486
490
487 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
491 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
488
492
489 * IPython/iplib.py (InteractiveShell.__init__): add .meta
493 * IPython/iplib.py (InteractiveShell.__init__): add .meta
490 namespace for users and extension writers to hold data in. This
494 namespace for users and extension writers to hold data in. This
491 follows the discussion in
495 follows the discussion in
492 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
496 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
493
497
494 * IPython/completer.py (IPCompleter.complete): small patch to help
498 * IPython/completer.py (IPCompleter.complete): small patch to help
495 tab-completion under Emacs, after a suggestion by John Barnard
499 tab-completion under Emacs, after a suggestion by John Barnard
496 <barnarj-AT-ccf.org>.
500 <barnarj-AT-ccf.org>.
497
501
498 * IPython/Magic.py (Magic.extract_input_slices): added support for
502 * IPython/Magic.py (Magic.extract_input_slices): added support for
499 the slice notation in magics to use N-M to represent numbers N...M
503 the slice notation in magics to use N-M to represent numbers N...M
500 (closed endpoints). This is used by %macro and %save.
504 (closed endpoints). This is used by %macro and %save.
501
505
502 * IPython/completer.py (Completer.attr_matches): for modules which
506 * IPython/completer.py (Completer.attr_matches): for modules which
503 define __all__, complete only on those. After a patch by Jeffrey
507 define __all__, complete only on those. After a patch by Jeffrey
504 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
508 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
505 speed up this routine.
509 speed up this routine.
506
510
507 * IPython/Logger.py (Logger.log): fix a history handling bug. I
511 * IPython/Logger.py (Logger.log): fix a history handling bug. I
508 don't know if this is the end of it, but the behavior now is
512 don't know if this is the end of it, but the behavior now is
509 certainly much more correct. Note that coupled with macros,
513 certainly much more correct. Note that coupled with macros,
510 slightly surprising (at first) behavior may occur: a macro will in
514 slightly surprising (at first) behavior may occur: a macro will in
511 general expand to multiple lines of input, so upon exiting, the
515 general expand to multiple lines of input, so upon exiting, the
512 in/out counters will both be bumped by the corresponding amount
516 in/out counters will both be bumped by the corresponding amount
513 (as if the macro's contents had been typed interactively). Typing
517 (as if the macro's contents had been typed interactively). Typing
514 %hist will reveal the intermediate (silently processed) lines.
518 %hist will reveal the intermediate (silently processed) lines.
515
519
516 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
520 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
517 pickle to fail (%run was overwriting __main__ and not restoring
521 pickle to fail (%run was overwriting __main__ and not restoring
518 it, but pickle relies on __main__ to operate).
522 it, but pickle relies on __main__ to operate).
519
523
520 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
524 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
521 using properties, but forgot to make the main InteractiveShell
525 using properties, but forgot to make the main InteractiveShell
522 class a new-style class. Properties fail silently, and
526 class a new-style class. Properties fail silently, and
523 misteriously, with old-style class (getters work, but
527 misteriously, with old-style class (getters work, but
524 setters don't do anything).
528 setters don't do anything).
525
529
526 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
530 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
527
531
528 * IPython/Magic.py (magic_history): fix history reporting bug (I
532 * IPython/Magic.py (magic_history): fix history reporting bug (I
529 know some nasties are still there, I just can't seem to find a
533 know some nasties are still there, I just can't seem to find a
530 reproducible test case to track them down; the input history is
534 reproducible test case to track them down; the input history is
531 falling out of sync...)
535 falling out of sync...)
532
536
533 * IPython/iplib.py (handle_shell_escape): fix bug where both
537 * IPython/iplib.py (handle_shell_escape): fix bug where both
534 aliases and system accesses where broken for indented code (such
538 aliases and system accesses where broken for indented code (such
535 as loops).
539 as loops).
536
540
537 * IPython/genutils.py (shell): fix small but critical bug for
541 * IPython/genutils.py (shell): fix small but critical bug for
538 win32 system access.
542 win32 system access.
539
543
540 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
544 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
541
545
542 * IPython/iplib.py (showtraceback): remove use of the
546 * IPython/iplib.py (showtraceback): remove use of the
543 sys.last_{type/value/traceback} structures, which are non
547 sys.last_{type/value/traceback} structures, which are non
544 thread-safe.
548 thread-safe.
545 (_prefilter): change control flow to ensure that we NEVER
549 (_prefilter): change control flow to ensure that we NEVER
546 introspect objects when autocall is off. This will guarantee that
550 introspect objects when autocall is off. This will guarantee that
547 having an input line of the form 'x.y', where access to attribute
551 having an input line of the form 'x.y', where access to attribute
548 'y' has side effects, doesn't trigger the side effect TWICE. It
552 'y' has side effects, doesn't trigger the side effect TWICE. It
549 is important to note that, with autocall on, these side effects
553 is important to note that, with autocall on, these side effects
550 can still happen.
554 can still happen.
551 (ipsystem): new builtin, to complete the ip{magic/alias/system}
555 (ipsystem): new builtin, to complete the ip{magic/alias/system}
552 trio. IPython offers these three kinds of special calls which are
556 trio. IPython offers these three kinds of special calls which are
553 not python code, and it's a good thing to have their call method
557 not python code, and it's a good thing to have their call method
554 be accessible as pure python functions (not just special syntax at
558 be accessible as pure python functions (not just special syntax at
555 the command line). It gives us a better internal implementation
559 the command line). It gives us a better internal implementation
556 structure, as well as exposing these for user scripting more
560 structure, as well as exposing these for user scripting more
557 cleanly.
561 cleanly.
558
562
559 * IPython/macro.py (Macro.__init__): moved macros to a standalone
563 * IPython/macro.py (Macro.__init__): moved macros to a standalone
560 file. Now that they'll be more likely to be used with the
564 file. Now that they'll be more likely to be used with the
561 persistance system (%store), I want to make sure their module path
565 persistance system (%store), I want to make sure their module path
562 doesn't change in the future, so that we don't break things for
566 doesn't change in the future, so that we don't break things for
563 users' persisted data.
567 users' persisted data.
564
568
565 * IPython/iplib.py (autoindent_update): move indentation
569 * IPython/iplib.py (autoindent_update): move indentation
566 management into the _text_ processing loop, not the keyboard
570 management into the _text_ processing loop, not the keyboard
567 interactive one. This is necessary to correctly process non-typed
571 interactive one. This is necessary to correctly process non-typed
568 multiline input (such as macros).
572 multiline input (such as macros).
569
573
570 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
574 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
571 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
575 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
572 which was producing problems in the resulting manual.
576 which was producing problems in the resulting manual.
573 (magic_whos): improve reporting of instances (show their class,
577 (magic_whos): improve reporting of instances (show their class,
574 instead of simply printing 'instance' which isn't terribly
578 instead of simply printing 'instance' which isn't terribly
575 informative).
579 informative).
576
580
577 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
581 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
578 (minor mods) to support network shares under win32.
582 (minor mods) to support network shares under win32.
579
583
580 * IPython/winconsole.py (get_console_size): add new winconsole
584 * IPython/winconsole.py (get_console_size): add new winconsole
581 module and fixes to page_dumb() to improve its behavior under
585 module and fixes to page_dumb() to improve its behavior under
582 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
586 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
583
587
584 * IPython/Magic.py (Macro): simplified Macro class to just
588 * IPython/Magic.py (Macro): simplified Macro class to just
585 subclass list. We've had only 2.2 compatibility for a very long
589 subclass list. We've had only 2.2 compatibility for a very long
586 time, yet I was still avoiding subclassing the builtin types. No
590 time, yet I was still avoiding subclassing the builtin types. No
587 more (I'm also starting to use properties, though I won't shift to
591 more (I'm also starting to use properties, though I won't shift to
588 2.3-specific features quite yet).
592 2.3-specific features quite yet).
589 (magic_store): added Ville's patch for lightweight variable
593 (magic_store): added Ville's patch for lightweight variable
590 persistence, after a request on the user list by Matt Wilkie
594 persistence, after a request on the user list by Matt Wilkie
591 <maphew-AT-gmail.com>. The new %store magic's docstring has full
595 <maphew-AT-gmail.com>. The new %store magic's docstring has full
592 details.
596 details.
593
597
594 * IPython/iplib.py (InteractiveShell.post_config_initialization):
598 * IPython/iplib.py (InteractiveShell.post_config_initialization):
595 changed the default logfile name from 'ipython.log' to
599 changed the default logfile name from 'ipython.log' to
596 'ipython_log.py'. These logs are real python files, and now that
600 'ipython_log.py'. These logs are real python files, and now that
597 we have much better multiline support, people are more likely to
601 we have much better multiline support, people are more likely to
598 want to use them as such. Might as well name them correctly.
602 want to use them as such. Might as well name them correctly.
599
603
600 * IPython/Magic.py: substantial cleanup. While we can't stop
604 * IPython/Magic.py: substantial cleanup. While we can't stop
601 using magics as mixins, due to the existing customizations 'out
605 using magics as mixins, due to the existing customizations 'out
602 there' which rely on the mixin naming conventions, at least I
606 there' which rely on the mixin naming conventions, at least I
603 cleaned out all cross-class name usage. So once we are OK with
607 cleaned out all cross-class name usage. So once we are OK with
604 breaking compatibility, the two systems can be separated.
608 breaking compatibility, the two systems can be separated.
605
609
606 * IPython/Logger.py: major cleanup. This one is NOT a mixin
610 * IPython/Logger.py: major cleanup. This one is NOT a mixin
607 anymore, and the class is a fair bit less hideous as well. New
611 anymore, and the class is a fair bit less hideous as well. New
608 features were also introduced: timestamping of input, and logging
612 features were also introduced: timestamping of input, and logging
609 of output results. These are user-visible with the -t and -o
613 of output results. These are user-visible with the -t and -o
610 options to %logstart. Closes
614 options to %logstart. Closes
611 http://www.scipy.net/roundup/ipython/issue11 and a request by
615 http://www.scipy.net/roundup/ipython/issue11 and a request by
612 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
616 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
613
617
614 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
618 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
615
619
616 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
620 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
617 better hadnle backslashes in paths. See the thread 'More Windows
621 better hadnle backslashes in paths. See the thread 'More Windows
618 questions part 2 - \/ characters revisited' on the iypthon user
622 questions part 2 - \/ characters revisited' on the iypthon user
619 list:
623 list:
620 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
624 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
621
625
622 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
626 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
623
627
624 (InteractiveShell.__init__): change threaded shells to not use the
628 (InteractiveShell.__init__): change threaded shells to not use the
625 ipython crash handler. This was causing more problems than not,
629 ipython crash handler. This was causing more problems than not,
626 as exceptions in the main thread (GUI code, typically) would
630 as exceptions in the main thread (GUI code, typically) would
627 always show up as a 'crash', when they really weren't.
631 always show up as a 'crash', when they really weren't.
628
632
629 The colors and exception mode commands (%colors/%xmode) have been
633 The colors and exception mode commands (%colors/%xmode) have been
630 synchronized to also take this into account, so users can get
634 synchronized to also take this into account, so users can get
631 verbose exceptions for their threaded code as well. I also added
635 verbose exceptions for their threaded code as well. I also added
632 support for activating pdb inside this exception handler as well,
636 support for activating pdb inside this exception handler as well,
633 so now GUI authors can use IPython's enhanced pdb at runtime.
637 so now GUI authors can use IPython's enhanced pdb at runtime.
634
638
635 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
639 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
636 true by default, and add it to the shipped ipythonrc file. Since
640 true by default, and add it to the shipped ipythonrc file. Since
637 this asks the user before proceeding, I think it's OK to make it
641 this asks the user before proceeding, I think it's OK to make it
638 true by default.
642 true by default.
639
643
640 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
644 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
641 of the previous special-casing of input in the eval loop. I think
645 of the previous special-casing of input in the eval loop. I think
642 this is cleaner, as they really are commands and shouldn't have
646 this is cleaner, as they really are commands and shouldn't have
643 a special role in the middle of the core code.
647 a special role in the middle of the core code.
644
648
645 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
649 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
646
650
647 * IPython/iplib.py (edit_syntax_error): added support for
651 * IPython/iplib.py (edit_syntax_error): added support for
648 automatically reopening the editor if the file had a syntax error
652 automatically reopening the editor if the file had a syntax error
649 in it. Thanks to scottt who provided the patch at:
653 in it. Thanks to scottt who provided the patch at:
650 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
654 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
651 version committed).
655 version committed).
652
656
653 * IPython/iplib.py (handle_normal): add suport for multi-line
657 * IPython/iplib.py (handle_normal): add suport for multi-line
654 input with emtpy lines. This fixes
658 input with emtpy lines. This fixes
655 http://www.scipy.net/roundup/ipython/issue43 and a similar
659 http://www.scipy.net/roundup/ipython/issue43 and a similar
656 discussion on the user list.
660 discussion on the user list.
657
661
658 WARNING: a behavior change is necessarily introduced to support
662 WARNING: a behavior change is necessarily introduced to support
659 blank lines: now a single blank line with whitespace does NOT
663 blank lines: now a single blank line with whitespace does NOT
660 break the input loop, which means that when autoindent is on, by
664 break the input loop, which means that when autoindent is on, by
661 default hitting return on the next (indented) line does NOT exit.
665 default hitting return on the next (indented) line does NOT exit.
662
666
663 Instead, to exit a multiline input you can either have:
667 Instead, to exit a multiline input you can either have:
664
668
665 - TWO whitespace lines (just hit return again), or
669 - TWO whitespace lines (just hit return again), or
666 - a single whitespace line of a different length than provided
670 - a single whitespace line of a different length than provided
667 by the autoindent (add or remove a space).
671 by the autoindent (add or remove a space).
668
672
669 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
673 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
670 module to better organize all readline-related functionality.
674 module to better organize all readline-related functionality.
671 I've deleted FlexCompleter and put all completion clases here.
675 I've deleted FlexCompleter and put all completion clases here.
672
676
673 * IPython/iplib.py (raw_input): improve indentation management.
677 * IPython/iplib.py (raw_input): improve indentation management.
674 It is now possible to paste indented code with autoindent on, and
678 It is now possible to paste indented code with autoindent on, and
675 the code is interpreted correctly (though it still looks bad on
679 the code is interpreted correctly (though it still looks bad on
676 screen, due to the line-oriented nature of ipython).
680 screen, due to the line-oriented nature of ipython).
677 (MagicCompleter.complete): change behavior so that a TAB key on an
681 (MagicCompleter.complete): change behavior so that a TAB key on an
678 otherwise empty line actually inserts a tab, instead of completing
682 otherwise empty line actually inserts a tab, instead of completing
679 on the entire global namespace. This makes it easier to use the
683 on the entire global namespace. This makes it easier to use the
680 TAB key for indentation. After a request by Hans Meine
684 TAB key for indentation. After a request by Hans Meine
681 <hans_meine-AT-gmx.net>
685 <hans_meine-AT-gmx.net>
682 (_prefilter): add support so that typing plain 'exit' or 'quit'
686 (_prefilter): add support so that typing plain 'exit' or 'quit'
683 does a sensible thing. Originally I tried to deviate as little as
687 does a sensible thing. Originally I tried to deviate as little as
684 possible from the default python behavior, but even that one may
688 possible from the default python behavior, but even that one may
685 change in this direction (thread on python-dev to that effect).
689 change in this direction (thread on python-dev to that effect).
686 Regardless, ipython should do the right thing even if CPython's
690 Regardless, ipython should do the right thing even if CPython's
687 '>>>' prompt doesn't.
691 '>>>' prompt doesn't.
688 (InteractiveShell): removed subclassing code.InteractiveConsole
692 (InteractiveShell): removed subclassing code.InteractiveConsole
689 class. By now we'd overridden just about all of its methods: I've
693 class. By now we'd overridden just about all of its methods: I've
690 copied the remaining two over, and now ipython is a standalone
694 copied the remaining two over, and now ipython is a standalone
691 class. This will provide a clearer picture for the chainsaw
695 class. This will provide a clearer picture for the chainsaw
692 branch refactoring.
696 branch refactoring.
693
697
694 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
698 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
695
699
696 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
700 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
697 failures for objects which break when dir() is called on them.
701 failures for objects which break when dir() is called on them.
698
702
699 * IPython/FlexCompleter.py (Completer.__init__): Added support for
703 * IPython/FlexCompleter.py (Completer.__init__): Added support for
700 distinct local and global namespaces in the completer API. This
704 distinct local and global namespaces in the completer API. This
701 change allows us top properly handle completion with distinct
705 change allows us top properly handle completion with distinct
702 scopes, including in embedded instances (this had never really
706 scopes, including in embedded instances (this had never really
703 worked correctly).
707 worked correctly).
704
708
705 Note: this introduces a change in the constructor for
709 Note: this introduces a change in the constructor for
706 MagicCompleter, as a new global_namespace parameter is now the
710 MagicCompleter, as a new global_namespace parameter is now the
707 second argument (the others were bumped one position).
711 second argument (the others were bumped one position).
708
712
709 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
713 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
710
714
711 * IPython/iplib.py (embed_mainloop): fix tab-completion in
715 * IPython/iplib.py (embed_mainloop): fix tab-completion in
712 embedded instances (which can be done now thanks to Vivian's
716 embedded instances (which can be done now thanks to Vivian's
713 frame-handling fixes for pdb).
717 frame-handling fixes for pdb).
714 (InteractiveShell.__init__): Fix namespace handling problem in
718 (InteractiveShell.__init__): Fix namespace handling problem in
715 embedded instances. We were overwriting __main__ unconditionally,
719 embedded instances. We were overwriting __main__ unconditionally,
716 and this should only be done for 'full' (non-embedded) IPython;
720 and this should only be done for 'full' (non-embedded) IPython;
717 embedded instances must respect the caller's __main__. Thanks to
721 embedded instances must respect the caller's __main__. Thanks to
718 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
722 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
719
723
720 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
724 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
721
725
722 * setup.py: added download_url to setup(). This registers the
726 * setup.py: added download_url to setup(). This registers the
723 download address at PyPI, which is not only useful to humans
727 download address at PyPI, which is not only useful to humans
724 browsing the site, but is also picked up by setuptools (the Eggs
728 browsing the site, but is also picked up by setuptools (the Eggs
725 machinery). Thanks to Ville and R. Kern for the info/discussion
729 machinery). Thanks to Ville and R. Kern for the info/discussion
726 on this.
730 on this.
727
731
728 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
732 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
729
733
730 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
734 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
731 This brings a lot of nice functionality to the pdb mode, which now
735 This brings a lot of nice functionality to the pdb mode, which now
732 has tab-completion, syntax highlighting, and better stack handling
736 has tab-completion, syntax highlighting, and better stack handling
733 than before. Many thanks to Vivian De Smedt
737 than before. Many thanks to Vivian De Smedt
734 <vivian-AT-vdesmedt.com> for the original patches.
738 <vivian-AT-vdesmedt.com> for the original patches.
735
739
736 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
740 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
737
741
738 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
742 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
739 sequence to consistently accept the banner argument. The
743 sequence to consistently accept the banner argument. The
740 inconsistency was tripping SAGE, thanks to Gary Zablackis
744 inconsistency was tripping SAGE, thanks to Gary Zablackis
741 <gzabl-AT-yahoo.com> for the report.
745 <gzabl-AT-yahoo.com> for the report.
742
746
743 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
747 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
744
748
745 * IPython/iplib.py (InteractiveShell.post_config_initialization):
749 * IPython/iplib.py (InteractiveShell.post_config_initialization):
746 Fix bug where a naked 'alias' call in the ipythonrc file would
750 Fix bug where a naked 'alias' call in the ipythonrc file would
747 cause a crash. Bug reported by Jorgen Stenarson.
751 cause a crash. Bug reported by Jorgen Stenarson.
748
752
749 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
753 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
750
754
751 * IPython/ipmaker.py (make_IPython): cleanups which should improve
755 * IPython/ipmaker.py (make_IPython): cleanups which should improve
752 startup time.
756 startup time.
753
757
754 * IPython/iplib.py (runcode): my globals 'fix' for embedded
758 * IPython/iplib.py (runcode): my globals 'fix' for embedded
755 instances had introduced a bug with globals in normal code. Now
759 instances had introduced a bug with globals in normal code. Now
756 it's working in all cases.
760 it's working in all cases.
757
761
758 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
762 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
759 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
763 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
760 has been introduced to set the default case sensitivity of the
764 has been introduced to set the default case sensitivity of the
761 searches. Users can still select either mode at runtime on a
765 searches. Users can still select either mode at runtime on a
762 per-search basis.
766 per-search basis.
763
767
764 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
768 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
765
769
766 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
770 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
767 attributes in wildcard searches for subclasses. Modified version
771 attributes in wildcard searches for subclasses. Modified version
768 of a patch by Jorgen.
772 of a patch by Jorgen.
769
773
770 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
774 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
771
775
772 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
776 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
773 embedded instances. I added a user_global_ns attribute to the
777 embedded instances. I added a user_global_ns attribute to the
774 InteractiveShell class to handle this.
778 InteractiveShell class to handle this.
775
779
776 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
780 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
777
781
778 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
782 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
779 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
783 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
780 (reported under win32, but may happen also in other platforms).
784 (reported under win32, but may happen also in other platforms).
781 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
785 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
782
786
783 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
787 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
784
788
785 * IPython/Magic.py (magic_psearch): new support for wildcard
789 * IPython/Magic.py (magic_psearch): new support for wildcard
786 patterns. Now, typing ?a*b will list all names which begin with a
790 patterns. Now, typing ?a*b will list all names which begin with a
787 and end in b, for example. The %psearch magic has full
791 and end in b, for example. The %psearch magic has full
788 docstrings. Many thanks to JΓΆrgen Stenarson
792 docstrings. Many thanks to JΓΆrgen Stenarson
789 <jorgen.stenarson-AT-bostream.nu>, author of the patches
793 <jorgen.stenarson-AT-bostream.nu>, author of the patches
790 implementing this functionality.
794 implementing this functionality.
791
795
792 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
796 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
793
797
794 * Manual: fixed long-standing annoyance of double-dashes (as in
798 * Manual: fixed long-standing annoyance of double-dashes (as in
795 --prefix=~, for example) being stripped in the HTML version. This
799 --prefix=~, for example) being stripped in the HTML version. This
796 is a latex2html bug, but a workaround was provided. Many thanks
800 is a latex2html bug, but a workaround was provided. Many thanks
797 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
801 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
798 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
802 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
799 rolling. This seemingly small issue had tripped a number of users
803 rolling. This seemingly small issue had tripped a number of users
800 when first installing, so I'm glad to see it gone.
804 when first installing, so I'm glad to see it gone.
801
805
802 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
806 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
803
807
804 * IPython/Extensions/numeric_formats.py: fix missing import,
808 * IPython/Extensions/numeric_formats.py: fix missing import,
805 reported by Stephen Walton.
809 reported by Stephen Walton.
806
810
807 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
811 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
808
812
809 * IPython/demo.py: finish demo module, fully documented now.
813 * IPython/demo.py: finish demo module, fully documented now.
810
814
811 * IPython/genutils.py (file_read): simple little utility to read a
815 * IPython/genutils.py (file_read): simple little utility to read a
812 file and ensure it's closed afterwards.
816 file and ensure it's closed afterwards.
813
817
814 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
818 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
815
819
816 * IPython/demo.py (Demo.__init__): added support for individually
820 * IPython/demo.py (Demo.__init__): added support for individually
817 tagging blocks for automatic execution.
821 tagging blocks for automatic execution.
818
822
819 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
823 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
820 syntax-highlighted python sources, requested by John.
824 syntax-highlighted python sources, requested by John.
821
825
822 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
826 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
823
827
824 * IPython/demo.py (Demo.again): fix bug where again() blocks after
828 * IPython/demo.py (Demo.again): fix bug where again() blocks after
825 finishing.
829 finishing.
826
830
827 * IPython/genutils.py (shlex_split): moved from Magic to here,
831 * IPython/genutils.py (shlex_split): moved from Magic to here,
828 where all 2.2 compatibility stuff lives. I needed it for demo.py.
832 where all 2.2 compatibility stuff lives. I needed it for demo.py.
829
833
830 * IPython/demo.py (Demo.__init__): added support for silent
834 * IPython/demo.py (Demo.__init__): added support for silent
831 blocks, improved marks as regexps, docstrings written.
835 blocks, improved marks as regexps, docstrings written.
832 (Demo.__init__): better docstring, added support for sys.argv.
836 (Demo.__init__): better docstring, added support for sys.argv.
833
837
834 * IPython/genutils.py (marquee): little utility used by the demo
838 * IPython/genutils.py (marquee): little utility used by the demo
835 code, handy in general.
839 code, handy in general.
836
840
837 * IPython/demo.py (Demo.__init__): new class for interactive
841 * IPython/demo.py (Demo.__init__): new class for interactive
838 demos. Not documented yet, I just wrote it in a hurry for
842 demos. Not documented yet, I just wrote it in a hurry for
839 scipy'05. Will docstring later.
843 scipy'05. Will docstring later.
840
844
841 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
845 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
842
846
843 * IPython/Shell.py (sigint_handler): Drastic simplification which
847 * IPython/Shell.py (sigint_handler): Drastic simplification which
844 also seems to make Ctrl-C work correctly across threads! This is
848 also seems to make Ctrl-C work correctly across threads! This is
845 so simple, that I can't beleive I'd missed it before. Needs more
849 so simple, that I can't beleive I'd missed it before. Needs more
846 testing, though.
850 testing, though.
847 (KBINT): Never mind, revert changes. I'm sure I'd tried something
851 (KBINT): Never mind, revert changes. I'm sure I'd tried something
848 like this before...
852 like this before...
849
853
850 * IPython/genutils.py (get_home_dir): add protection against
854 * IPython/genutils.py (get_home_dir): add protection against
851 non-dirs in win32 registry.
855 non-dirs in win32 registry.
852
856
853 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
857 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
854 bug where dict was mutated while iterating (pysh crash).
858 bug where dict was mutated while iterating (pysh crash).
855
859
856 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
860 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
857
861
858 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
862 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
859 spurious newlines added by this routine. After a report by
863 spurious newlines added by this routine. After a report by
860 F. Mantegazza.
864 F. Mantegazza.
861
865
862 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
866 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
863
867
864 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
868 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
865 calls. These were a leftover from the GTK 1.x days, and can cause
869 calls. These were a leftover from the GTK 1.x days, and can cause
866 problems in certain cases (after a report by John Hunter).
870 problems in certain cases (after a report by John Hunter).
867
871
868 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
872 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
869 os.getcwd() fails at init time. Thanks to patch from David Remahl
873 os.getcwd() fails at init time. Thanks to patch from David Remahl
870 <chmod007-AT-mac.com>.
874 <chmod007-AT-mac.com>.
871 (InteractiveShell.__init__): prevent certain special magics from
875 (InteractiveShell.__init__): prevent certain special magics from
872 being shadowed by aliases. Closes
876 being shadowed by aliases. Closes
873 http://www.scipy.net/roundup/ipython/issue41.
877 http://www.scipy.net/roundup/ipython/issue41.
874
878
875 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
879 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
876
880
877 * IPython/iplib.py (InteractiveShell.complete): Added new
881 * IPython/iplib.py (InteractiveShell.complete): Added new
878 top-level completion method to expose the completion mechanism
882 top-level completion method to expose the completion mechanism
879 beyond readline-based environments.
883 beyond readline-based environments.
880
884
881 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
885 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
882
886
883 * tools/ipsvnc (svnversion): fix svnversion capture.
887 * tools/ipsvnc (svnversion): fix svnversion capture.
884
888
885 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
889 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
886 attribute to self, which was missing. Before, it was set by a
890 attribute to self, which was missing. Before, it was set by a
887 routine which in certain cases wasn't being called, so the
891 routine which in certain cases wasn't being called, so the
888 instance could end up missing the attribute. This caused a crash.
892 instance could end up missing the attribute. This caused a crash.
889 Closes http://www.scipy.net/roundup/ipython/issue40.
893 Closes http://www.scipy.net/roundup/ipython/issue40.
890
894
891 2005-08-16 Fernando Perez <fperez@colorado.edu>
895 2005-08-16 Fernando Perez <fperez@colorado.edu>
892
896
893 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
897 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
894 contains non-string attribute. Closes
898 contains non-string attribute. Closes
895 http://www.scipy.net/roundup/ipython/issue38.
899 http://www.scipy.net/roundup/ipython/issue38.
896
900
897 2005-08-14 Fernando Perez <fperez@colorado.edu>
901 2005-08-14 Fernando Perez <fperez@colorado.edu>
898
902
899 * tools/ipsvnc: Minor improvements, to add changeset info.
903 * tools/ipsvnc: Minor improvements, to add changeset info.
900
904
901 2005-08-12 Fernando Perez <fperez@colorado.edu>
905 2005-08-12 Fernando Perez <fperez@colorado.edu>
902
906
903 * IPython/iplib.py (runsource): remove self.code_to_run_src
907 * IPython/iplib.py (runsource): remove self.code_to_run_src
904 attribute. I realized this is nothing more than
908 attribute. I realized this is nothing more than
905 '\n'.join(self.buffer), and having the same data in two different
909 '\n'.join(self.buffer), and having the same data in two different
906 places is just asking for synchronization bugs. This may impact
910 places is just asking for synchronization bugs. This may impact
907 people who have custom exception handlers, so I need to warn
911 people who have custom exception handlers, so I need to warn
908 ipython-dev about it (F. Mantegazza may use them).
912 ipython-dev about it (F. Mantegazza may use them).
909
913
910 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
914 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
911
915
912 * IPython/genutils.py: fix 2.2 compatibility (generators)
916 * IPython/genutils.py: fix 2.2 compatibility (generators)
913
917
914 2005-07-18 Fernando Perez <fperez@colorado.edu>
918 2005-07-18 Fernando Perez <fperez@colorado.edu>
915
919
916 * IPython/genutils.py (get_home_dir): fix to help users with
920 * IPython/genutils.py (get_home_dir): fix to help users with
917 invalid $HOME under win32.
921 invalid $HOME under win32.
918
922
919 2005-07-17 Fernando Perez <fperez@colorado.edu>
923 2005-07-17 Fernando Perez <fperez@colorado.edu>
920
924
921 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
925 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
922 some old hacks and clean up a bit other routines; code should be
926 some old hacks and clean up a bit other routines; code should be
923 simpler and a bit faster.
927 simpler and a bit faster.
924
928
925 * IPython/iplib.py (interact): removed some last-resort attempts
929 * IPython/iplib.py (interact): removed some last-resort attempts
926 to survive broken stdout/stderr. That code was only making it
930 to survive broken stdout/stderr. That code was only making it
927 harder to abstract out the i/o (necessary for gui integration),
931 harder to abstract out the i/o (necessary for gui integration),
928 and the crashes it could prevent were extremely rare in practice
932 and the crashes it could prevent were extremely rare in practice
929 (besides being fully user-induced in a pretty violent manner).
933 (besides being fully user-induced in a pretty violent manner).
930
934
931 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
935 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
932 Nothing major yet, but the code is simpler to read; this should
936 Nothing major yet, but the code is simpler to read; this should
933 make it easier to do more serious modifications in the future.
937 make it easier to do more serious modifications in the future.
934
938
935 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
939 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
936 which broke in .15 (thanks to a report by Ville).
940 which broke in .15 (thanks to a report by Ville).
937
941
938 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
942 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
939 be quite correct, I know next to nothing about unicode). This
943 be quite correct, I know next to nothing about unicode). This
940 will allow unicode strings to be used in prompts, amongst other
944 will allow unicode strings to be used in prompts, amongst other
941 cases. It also will prevent ipython from crashing when unicode
945 cases. It also will prevent ipython from crashing when unicode
942 shows up unexpectedly in many places. If ascii encoding fails, we
946 shows up unexpectedly in many places. If ascii encoding fails, we
943 assume utf_8. Currently the encoding is not a user-visible
947 assume utf_8. Currently the encoding is not a user-visible
944 setting, though it could be made so if there is demand for it.
948 setting, though it could be made so if there is demand for it.
945
949
946 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
950 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
947
951
948 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
952 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
949
953
950 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
954 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
951
955
952 * IPython/genutils.py: Add 2.2 compatibility here, so all other
956 * IPython/genutils.py: Add 2.2 compatibility here, so all other
953 code can work transparently for 2.2/2.3.
957 code can work transparently for 2.2/2.3.
954
958
955 2005-07-16 Fernando Perez <fperez@colorado.edu>
959 2005-07-16 Fernando Perez <fperez@colorado.edu>
956
960
957 * IPython/ultraTB.py (ExceptionColors): Make a global variable
961 * IPython/ultraTB.py (ExceptionColors): Make a global variable
958 out of the color scheme table used for coloring exception
962 out of the color scheme table used for coloring exception
959 tracebacks. This allows user code to add new schemes at runtime.
963 tracebacks. This allows user code to add new schemes at runtime.
960 This is a minimally modified version of the patch at
964 This is a minimally modified version of the patch at
961 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
965 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
962 for the contribution.
966 for the contribution.
963
967
964 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
968 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
965 slightly modified version of the patch in
969 slightly modified version of the patch in
966 http://www.scipy.net/roundup/ipython/issue34, which also allows me
970 http://www.scipy.net/roundup/ipython/issue34, which also allows me
967 to remove the previous try/except solution (which was costlier).
971 to remove the previous try/except solution (which was costlier).
968 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
972 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
969
973
970 2005-06-08 Fernando Perez <fperez@colorado.edu>
974 2005-06-08 Fernando Perez <fperez@colorado.edu>
971
975
972 * IPython/iplib.py (write/write_err): Add methods to abstract all
976 * IPython/iplib.py (write/write_err): Add methods to abstract all
973 I/O a bit more.
977 I/O a bit more.
974
978
975 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
979 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
976 warning, reported by Aric Hagberg, fix by JD Hunter.
980 warning, reported by Aric Hagberg, fix by JD Hunter.
977
981
978 2005-06-02 *** Released version 0.6.15
982 2005-06-02 *** Released version 0.6.15
979
983
980 2005-06-01 Fernando Perez <fperez@colorado.edu>
984 2005-06-01 Fernando Perez <fperez@colorado.edu>
981
985
982 * IPython/iplib.py (MagicCompleter.file_matches): Fix
986 * IPython/iplib.py (MagicCompleter.file_matches): Fix
983 tab-completion of filenames within open-quoted strings. Note that
987 tab-completion of filenames within open-quoted strings. Note that
984 this requires that in ~/.ipython/ipythonrc, users change the
988 this requires that in ~/.ipython/ipythonrc, users change the
985 readline delimiters configuration to read:
989 readline delimiters configuration to read:
986
990
987 readline_remove_delims -/~
991 readline_remove_delims -/~
988
992
989
993
990 2005-05-31 *** Released version 0.6.14
994 2005-05-31 *** Released version 0.6.14
991
995
992 2005-05-29 Fernando Perez <fperez@colorado.edu>
996 2005-05-29 Fernando Perez <fperez@colorado.edu>
993
997
994 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
998 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
995 with files not on the filesystem. Reported by Eliyahu Sandler
999 with files not on the filesystem. Reported by Eliyahu Sandler
996 <eli@gondolin.net>
1000 <eli@gondolin.net>
997
1001
998 2005-05-22 Fernando Perez <fperez@colorado.edu>
1002 2005-05-22 Fernando Perez <fperez@colorado.edu>
999
1003
1000 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1004 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1001 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1005 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1002
1006
1003 2005-05-19 Fernando Perez <fperez@colorado.edu>
1007 2005-05-19 Fernando Perez <fperez@colorado.edu>
1004
1008
1005 * IPython/iplib.py (safe_execfile): close a file which could be
1009 * IPython/iplib.py (safe_execfile): close a file which could be
1006 left open (causing problems in win32, which locks open files).
1010 left open (causing problems in win32, which locks open files).
1007 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1011 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1008
1012
1009 2005-05-18 Fernando Perez <fperez@colorado.edu>
1013 2005-05-18 Fernando Perez <fperez@colorado.edu>
1010
1014
1011 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1015 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1012 keyword arguments correctly to safe_execfile().
1016 keyword arguments correctly to safe_execfile().
1013
1017
1014 2005-05-13 Fernando Perez <fperez@colorado.edu>
1018 2005-05-13 Fernando Perez <fperez@colorado.edu>
1015
1019
1016 * ipython.1: Added info about Qt to manpage, and threads warning
1020 * ipython.1: Added info about Qt to manpage, and threads warning
1017 to usage page (invoked with --help).
1021 to usage page (invoked with --help).
1018
1022
1019 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1023 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1020 new matcher (it goes at the end of the priority list) to do
1024 new matcher (it goes at the end of the priority list) to do
1021 tab-completion on named function arguments. Submitted by George
1025 tab-completion on named function arguments. Submitted by George
1022 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1026 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1023 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1027 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1024 for more details.
1028 for more details.
1025
1029
1026 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1030 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1027 SystemExit exceptions in the script being run. Thanks to a report
1031 SystemExit exceptions in the script being run. Thanks to a report
1028 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1032 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1029 producing very annoying behavior when running unit tests.
1033 producing very annoying behavior when running unit tests.
1030
1034
1031 2005-05-12 Fernando Perez <fperez@colorado.edu>
1035 2005-05-12 Fernando Perez <fperez@colorado.edu>
1032
1036
1033 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1037 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1034 which I'd broken (again) due to a changed regexp. In the process,
1038 which I'd broken (again) due to a changed regexp. In the process,
1035 added ';' as an escape to auto-quote the whole line without
1039 added ';' as an escape to auto-quote the whole line without
1036 splitting its arguments. Thanks to a report by Jerry McRae
1040 splitting its arguments. Thanks to a report by Jerry McRae
1037 <qrs0xyc02-AT-sneakemail.com>.
1041 <qrs0xyc02-AT-sneakemail.com>.
1038
1042
1039 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1043 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1040 possible crashes caused by a TokenError. Reported by Ed Schofield
1044 possible crashes caused by a TokenError. Reported by Ed Schofield
1041 <schofield-AT-ftw.at>.
1045 <schofield-AT-ftw.at>.
1042
1046
1043 2005-05-06 Fernando Perez <fperez@colorado.edu>
1047 2005-05-06 Fernando Perez <fperez@colorado.edu>
1044
1048
1045 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1049 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1046
1050
1047 2005-04-29 Fernando Perez <fperez@colorado.edu>
1051 2005-04-29 Fernando Perez <fperez@colorado.edu>
1048
1052
1049 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1053 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1050 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1054 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1051 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1055 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1052 which provides support for Qt interactive usage (similar to the
1056 which provides support for Qt interactive usage (similar to the
1053 existing one for WX and GTK). This had been often requested.
1057 existing one for WX and GTK). This had been often requested.
1054
1058
1055 2005-04-14 *** Released version 0.6.13
1059 2005-04-14 *** Released version 0.6.13
1056
1060
1057 2005-04-08 Fernando Perez <fperez@colorado.edu>
1061 2005-04-08 Fernando Perez <fperez@colorado.edu>
1058
1062
1059 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1063 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1060 from _ofind, which gets called on almost every input line. Now,
1064 from _ofind, which gets called on almost every input line. Now,
1061 we only try to get docstrings if they are actually going to be
1065 we only try to get docstrings if they are actually going to be
1062 used (the overhead of fetching unnecessary docstrings can be
1066 used (the overhead of fetching unnecessary docstrings can be
1063 noticeable for certain objects, such as Pyro proxies).
1067 noticeable for certain objects, such as Pyro proxies).
1064
1068
1065 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1069 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1066 for completers. For some reason I had been passing them the state
1070 for completers. For some reason I had been passing them the state
1067 variable, which completers never actually need, and was in
1071 variable, which completers never actually need, and was in
1068 conflict with the rlcompleter API. Custom completers ONLY need to
1072 conflict with the rlcompleter API. Custom completers ONLY need to
1069 take the text parameter.
1073 take the text parameter.
1070
1074
1071 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1075 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1072 work correctly in pysh. I've also moved all the logic which used
1076 work correctly in pysh. I've also moved all the logic which used
1073 to be in pysh.py here, which will prevent problems with future
1077 to be in pysh.py here, which will prevent problems with future
1074 upgrades. However, this time I must warn users to update their
1078 upgrades. However, this time I must warn users to update their
1075 pysh profile to include the line
1079 pysh profile to include the line
1076
1080
1077 import_all IPython.Extensions.InterpreterExec
1081 import_all IPython.Extensions.InterpreterExec
1078
1082
1079 because otherwise things won't work for them. They MUST also
1083 because otherwise things won't work for them. They MUST also
1080 delete pysh.py and the line
1084 delete pysh.py and the line
1081
1085
1082 execfile pysh.py
1086 execfile pysh.py
1083
1087
1084 from their ipythonrc-pysh.
1088 from their ipythonrc-pysh.
1085
1089
1086 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1090 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1087 robust in the face of objects whose dir() returns non-strings
1091 robust in the face of objects whose dir() returns non-strings
1088 (which it shouldn't, but some broken libs like ITK do). Thanks to
1092 (which it shouldn't, but some broken libs like ITK do). Thanks to
1089 a patch by John Hunter (implemented differently, though). Also
1093 a patch by John Hunter (implemented differently, though). Also
1090 minor improvements by using .extend instead of + on lists.
1094 minor improvements by using .extend instead of + on lists.
1091
1095
1092 * pysh.py:
1096 * pysh.py:
1093
1097
1094 2005-04-06 Fernando Perez <fperez@colorado.edu>
1098 2005-04-06 Fernando Perez <fperez@colorado.edu>
1095
1099
1096 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1100 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1097 by default, so that all users benefit from it. Those who don't
1101 by default, so that all users benefit from it. Those who don't
1098 want it can still turn it off.
1102 want it can still turn it off.
1099
1103
1100 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1104 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1101 config file, I'd forgotten about this, so users were getting it
1105 config file, I'd forgotten about this, so users were getting it
1102 off by default.
1106 off by default.
1103
1107
1104 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1108 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1105 consistency. Now magics can be called in multiline statements,
1109 consistency. Now magics can be called in multiline statements,
1106 and python variables can be expanded in magic calls via $var.
1110 and python variables can be expanded in magic calls via $var.
1107 This makes the magic system behave just like aliases or !system
1111 This makes the magic system behave just like aliases or !system
1108 calls.
1112 calls.
1109
1113
1110 2005-03-28 Fernando Perez <fperez@colorado.edu>
1114 2005-03-28 Fernando Perez <fperez@colorado.edu>
1111
1115
1112 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1116 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1113 expensive string additions for building command. Add support for
1117 expensive string additions for building command. Add support for
1114 trailing ';' when autocall is used.
1118 trailing ';' when autocall is used.
1115
1119
1116 2005-03-26 Fernando Perez <fperez@colorado.edu>
1120 2005-03-26 Fernando Perez <fperez@colorado.edu>
1117
1121
1118 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1122 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1119 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1123 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1120 ipython.el robust against prompts with any number of spaces
1124 ipython.el robust against prompts with any number of spaces
1121 (including 0) after the ':' character.
1125 (including 0) after the ':' character.
1122
1126
1123 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1127 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1124 continuation prompt, which misled users to think the line was
1128 continuation prompt, which misled users to think the line was
1125 already indented. Closes debian Bug#300847, reported to me by
1129 already indented. Closes debian Bug#300847, reported to me by
1126 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1130 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1127
1131
1128 2005-03-23 Fernando Perez <fperez@colorado.edu>
1132 2005-03-23 Fernando Perez <fperez@colorado.edu>
1129
1133
1130 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1134 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1131 properly aligned if they have embedded newlines.
1135 properly aligned if they have embedded newlines.
1132
1136
1133 * IPython/iplib.py (runlines): Add a public method to expose
1137 * IPython/iplib.py (runlines): Add a public method to expose
1134 IPython's code execution machinery, so that users can run strings
1138 IPython's code execution machinery, so that users can run strings
1135 as if they had been typed at the prompt interactively.
1139 as if they had been typed at the prompt interactively.
1136 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1140 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1137 methods which can call the system shell, but with python variable
1141 methods which can call the system shell, but with python variable
1138 expansion. The three such methods are: __IPYTHON__.system,
1142 expansion. The three such methods are: __IPYTHON__.system,
1139 .getoutput and .getoutputerror. These need to be documented in a
1143 .getoutput and .getoutputerror. These need to be documented in a
1140 'public API' section (to be written) of the manual.
1144 'public API' section (to be written) of the manual.
1141
1145
1142 2005-03-20 Fernando Perez <fperez@colorado.edu>
1146 2005-03-20 Fernando Perez <fperez@colorado.edu>
1143
1147
1144 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1148 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1145 for custom exception handling. This is quite powerful, and it
1149 for custom exception handling. This is quite powerful, and it
1146 allows for user-installable exception handlers which can trap
1150 allows for user-installable exception handlers which can trap
1147 custom exceptions at runtime and treat them separately from
1151 custom exceptions at runtime and treat them separately from
1148 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1152 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1149 Mantegazza <mantegazza-AT-ill.fr>.
1153 Mantegazza <mantegazza-AT-ill.fr>.
1150 (InteractiveShell.set_custom_completer): public API function to
1154 (InteractiveShell.set_custom_completer): public API function to
1151 add new completers at runtime.
1155 add new completers at runtime.
1152
1156
1153 2005-03-19 Fernando Perez <fperez@colorado.edu>
1157 2005-03-19 Fernando Perez <fperez@colorado.edu>
1154
1158
1155 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1159 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1156 allow objects which provide their docstrings via non-standard
1160 allow objects which provide their docstrings via non-standard
1157 mechanisms (like Pyro proxies) to still be inspected by ipython's
1161 mechanisms (like Pyro proxies) to still be inspected by ipython's
1158 ? system.
1162 ? system.
1159
1163
1160 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1164 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1161 automatic capture system. I tried quite hard to make it work
1165 automatic capture system. I tried quite hard to make it work
1162 reliably, and simply failed. I tried many combinations with the
1166 reliably, and simply failed. I tried many combinations with the
1163 subprocess module, but eventually nothing worked in all needed
1167 subprocess module, but eventually nothing worked in all needed
1164 cases (not blocking stdin for the child, duplicating stdout
1168 cases (not blocking stdin for the child, duplicating stdout
1165 without blocking, etc). The new %sc/%sx still do capture to these
1169 without blocking, etc). The new %sc/%sx still do capture to these
1166 magical list/string objects which make shell use much more
1170 magical list/string objects which make shell use much more
1167 conveninent, so not all is lost.
1171 conveninent, so not all is lost.
1168
1172
1169 XXX - FIX MANUAL for the change above!
1173 XXX - FIX MANUAL for the change above!
1170
1174
1171 (runsource): I copied code.py's runsource() into ipython to modify
1175 (runsource): I copied code.py's runsource() into ipython to modify
1172 it a bit. Now the code object and source to be executed are
1176 it a bit. Now the code object and source to be executed are
1173 stored in ipython. This makes this info accessible to third-party
1177 stored in ipython. This makes this info accessible to third-party
1174 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1178 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1175 Mantegazza <mantegazza-AT-ill.fr>.
1179 Mantegazza <mantegazza-AT-ill.fr>.
1176
1180
1177 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1181 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1178 history-search via readline (like C-p/C-n). I'd wanted this for a
1182 history-search via readline (like C-p/C-n). I'd wanted this for a
1179 long time, but only recently found out how to do it. For users
1183 long time, but only recently found out how to do it. For users
1180 who already have their ipythonrc files made and want this, just
1184 who already have their ipythonrc files made and want this, just
1181 add:
1185 add:
1182
1186
1183 readline_parse_and_bind "\e[A": history-search-backward
1187 readline_parse_and_bind "\e[A": history-search-backward
1184 readline_parse_and_bind "\e[B": history-search-forward
1188 readline_parse_and_bind "\e[B": history-search-forward
1185
1189
1186 2005-03-18 Fernando Perez <fperez@colorado.edu>
1190 2005-03-18 Fernando Perez <fperez@colorado.edu>
1187
1191
1188 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1192 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1189 LSString and SList classes which allow transparent conversions
1193 LSString and SList classes which allow transparent conversions
1190 between list mode and whitespace-separated string.
1194 between list mode and whitespace-separated string.
1191 (magic_r): Fix recursion problem in %r.
1195 (magic_r): Fix recursion problem in %r.
1192
1196
1193 * IPython/genutils.py (LSString): New class to be used for
1197 * IPython/genutils.py (LSString): New class to be used for
1194 automatic storage of the results of all alias/system calls in _o
1198 automatic storage of the results of all alias/system calls in _o
1195 and _e (stdout/err). These provide a .l/.list attribute which
1199 and _e (stdout/err). These provide a .l/.list attribute which
1196 does automatic splitting on newlines. This means that for most
1200 does automatic splitting on newlines. This means that for most
1197 uses, you'll never need to do capturing of output with %sc/%sx
1201 uses, you'll never need to do capturing of output with %sc/%sx
1198 anymore, since ipython keeps this always done for you. Note that
1202 anymore, since ipython keeps this always done for you. Note that
1199 only the LAST results are stored, the _o/e variables are
1203 only the LAST results are stored, the _o/e variables are
1200 overwritten on each call. If you need to save their contents
1204 overwritten on each call. If you need to save their contents
1201 further, simply bind them to any other name.
1205 further, simply bind them to any other name.
1202
1206
1203 2005-03-17 Fernando Perez <fperez@colorado.edu>
1207 2005-03-17 Fernando Perez <fperez@colorado.edu>
1204
1208
1205 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1209 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1206 prompt namespace handling.
1210 prompt namespace handling.
1207
1211
1208 2005-03-16 Fernando Perez <fperez@colorado.edu>
1212 2005-03-16 Fernando Perez <fperez@colorado.edu>
1209
1213
1210 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1214 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1211 classic prompts to be '>>> ' (final space was missing, and it
1215 classic prompts to be '>>> ' (final space was missing, and it
1212 trips the emacs python mode).
1216 trips the emacs python mode).
1213 (BasePrompt.__str__): Added safe support for dynamic prompt
1217 (BasePrompt.__str__): Added safe support for dynamic prompt
1214 strings. Now you can set your prompt string to be '$x', and the
1218 strings. Now you can set your prompt string to be '$x', and the
1215 value of x will be printed from your interactive namespace. The
1219 value of x will be printed from your interactive namespace. The
1216 interpolation syntax includes the full Itpl support, so
1220 interpolation syntax includes the full Itpl support, so
1217 ${foo()+x+bar()} is a valid prompt string now, and the function
1221 ${foo()+x+bar()} is a valid prompt string now, and the function
1218 calls will be made at runtime.
1222 calls will be made at runtime.
1219
1223
1220 2005-03-15 Fernando Perez <fperez@colorado.edu>
1224 2005-03-15 Fernando Perez <fperez@colorado.edu>
1221
1225
1222 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1226 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1223 avoid name clashes in pylab. %hist still works, it just forwards
1227 avoid name clashes in pylab. %hist still works, it just forwards
1224 the call to %history.
1228 the call to %history.
1225
1229
1226 2005-03-02 *** Released version 0.6.12
1230 2005-03-02 *** Released version 0.6.12
1227
1231
1228 2005-03-02 Fernando Perez <fperez@colorado.edu>
1232 2005-03-02 Fernando Perez <fperez@colorado.edu>
1229
1233
1230 * IPython/iplib.py (handle_magic): log magic calls properly as
1234 * IPython/iplib.py (handle_magic): log magic calls properly as
1231 ipmagic() function calls.
1235 ipmagic() function calls.
1232
1236
1233 * IPython/Magic.py (magic_time): Improved %time to support
1237 * IPython/Magic.py (magic_time): Improved %time to support
1234 statements and provide wall-clock as well as CPU time.
1238 statements and provide wall-clock as well as CPU time.
1235
1239
1236 2005-02-27 Fernando Perez <fperez@colorado.edu>
1240 2005-02-27 Fernando Perez <fperez@colorado.edu>
1237
1241
1238 * IPython/hooks.py: New hooks module, to expose user-modifiable
1242 * IPython/hooks.py: New hooks module, to expose user-modifiable
1239 IPython functionality in a clean manner. For now only the editor
1243 IPython functionality in a clean manner. For now only the editor
1240 hook is actually written, and other thigns which I intend to turn
1244 hook is actually written, and other thigns which I intend to turn
1241 into proper hooks aren't yet there. The display and prefilter
1245 into proper hooks aren't yet there. The display and prefilter
1242 stuff, for example, should be hooks. But at least now the
1246 stuff, for example, should be hooks. But at least now the
1243 framework is in place, and the rest can be moved here with more
1247 framework is in place, and the rest can be moved here with more
1244 time later. IPython had had a .hooks variable for a long time for
1248 time later. IPython had had a .hooks variable for a long time for
1245 this purpose, but I'd never actually used it for anything.
1249 this purpose, but I'd never actually used it for anything.
1246
1250
1247 2005-02-26 Fernando Perez <fperez@colorado.edu>
1251 2005-02-26 Fernando Perez <fperez@colorado.edu>
1248
1252
1249 * IPython/ipmaker.py (make_IPython): make the default ipython
1253 * IPython/ipmaker.py (make_IPython): make the default ipython
1250 directory be called _ipython under win32, to follow more the
1254 directory be called _ipython under win32, to follow more the
1251 naming peculiarities of that platform (where buggy software like
1255 naming peculiarities of that platform (where buggy software like
1252 Visual Sourcesafe breaks with .named directories). Reported by
1256 Visual Sourcesafe breaks with .named directories). Reported by
1253 Ville Vainio.
1257 Ville Vainio.
1254
1258
1255 2005-02-23 Fernando Perez <fperez@colorado.edu>
1259 2005-02-23 Fernando Perez <fperez@colorado.edu>
1256
1260
1257 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1261 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1258 auto_aliases for win32 which were causing problems. Users can
1262 auto_aliases for win32 which were causing problems. Users can
1259 define the ones they personally like.
1263 define the ones they personally like.
1260
1264
1261 2005-02-21 Fernando Perez <fperez@colorado.edu>
1265 2005-02-21 Fernando Perez <fperez@colorado.edu>
1262
1266
1263 * IPython/Magic.py (magic_time): new magic to time execution of
1267 * IPython/Magic.py (magic_time): new magic to time execution of
1264 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1268 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1265
1269
1266 2005-02-19 Fernando Perez <fperez@colorado.edu>
1270 2005-02-19 Fernando Perez <fperez@colorado.edu>
1267
1271
1268 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1272 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1269 into keys (for prompts, for example).
1273 into keys (for prompts, for example).
1270
1274
1271 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1275 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1272 prompts in case users want them. This introduces a small behavior
1276 prompts in case users want them. This introduces a small behavior
1273 change: ipython does not automatically add a space to all prompts
1277 change: ipython does not automatically add a space to all prompts
1274 anymore. To get the old prompts with a space, users should add it
1278 anymore. To get the old prompts with a space, users should add it
1275 manually to their ipythonrc file, so for example prompt_in1 should
1279 manually to their ipythonrc file, so for example prompt_in1 should
1276 now read 'In [\#]: ' instead of 'In [\#]:'.
1280 now read 'In [\#]: ' instead of 'In [\#]:'.
1277 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1281 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1278 file) to control left-padding of secondary prompts.
1282 file) to control left-padding of secondary prompts.
1279
1283
1280 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1284 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1281 the profiler can't be imported. Fix for Debian, which removed
1285 the profiler can't be imported. Fix for Debian, which removed
1282 profile.py because of License issues. I applied a slightly
1286 profile.py because of License issues. I applied a slightly
1283 modified version of the original Debian patch at
1287 modified version of the original Debian patch at
1284 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1288 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1285
1289
1286 2005-02-17 Fernando Perez <fperez@colorado.edu>
1290 2005-02-17 Fernando Perez <fperez@colorado.edu>
1287
1291
1288 * IPython/genutils.py (native_line_ends): Fix bug which would
1292 * IPython/genutils.py (native_line_ends): Fix bug which would
1289 cause improper line-ends under win32 b/c I was not opening files
1293 cause improper line-ends under win32 b/c I was not opening files
1290 in binary mode. Bug report and fix thanks to Ville.
1294 in binary mode. Bug report and fix thanks to Ville.
1291
1295
1292 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1296 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1293 trying to catch spurious foo[1] autocalls. My fix actually broke
1297 trying to catch spurious foo[1] autocalls. My fix actually broke
1294 ',/' autoquote/call with explicit escape (bad regexp).
1298 ',/' autoquote/call with explicit escape (bad regexp).
1295
1299
1296 2005-02-15 *** Released version 0.6.11
1300 2005-02-15 *** Released version 0.6.11
1297
1301
1298 2005-02-14 Fernando Perez <fperez@colorado.edu>
1302 2005-02-14 Fernando Perez <fperez@colorado.edu>
1299
1303
1300 * IPython/background_jobs.py: New background job management
1304 * IPython/background_jobs.py: New background job management
1301 subsystem. This is implemented via a new set of classes, and
1305 subsystem. This is implemented via a new set of classes, and
1302 IPython now provides a builtin 'jobs' object for background job
1306 IPython now provides a builtin 'jobs' object for background job
1303 execution. A convenience %bg magic serves as a lightweight
1307 execution. A convenience %bg magic serves as a lightweight
1304 frontend for starting the more common type of calls. This was
1308 frontend for starting the more common type of calls. This was
1305 inspired by discussions with B. Granger and the BackgroundCommand
1309 inspired by discussions with B. Granger and the BackgroundCommand
1306 class described in the book Python Scripting for Computational
1310 class described in the book Python Scripting for Computational
1307 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1311 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1308 (although ultimately no code from this text was used, as IPython's
1312 (although ultimately no code from this text was used, as IPython's
1309 system is a separate implementation).
1313 system is a separate implementation).
1310
1314
1311 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1315 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1312 to control the completion of single/double underscore names
1316 to control the completion of single/double underscore names
1313 separately. As documented in the example ipytonrc file, the
1317 separately. As documented in the example ipytonrc file, the
1314 readline_omit__names variable can now be set to 2, to omit even
1318 readline_omit__names variable can now be set to 2, to omit even
1315 single underscore names. Thanks to a patch by Brian Wong
1319 single underscore names. Thanks to a patch by Brian Wong
1316 <BrianWong-AT-AirgoNetworks.Com>.
1320 <BrianWong-AT-AirgoNetworks.Com>.
1317 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1321 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1318 be autocalled as foo([1]) if foo were callable. A problem for
1322 be autocalled as foo([1]) if foo were callable. A problem for
1319 things which are both callable and implement __getitem__.
1323 things which are both callable and implement __getitem__.
1320 (init_readline): Fix autoindentation for win32. Thanks to a patch
1324 (init_readline): Fix autoindentation for win32. Thanks to a patch
1321 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1325 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1322
1326
1323 2005-02-12 Fernando Perez <fperez@colorado.edu>
1327 2005-02-12 Fernando Perez <fperez@colorado.edu>
1324
1328
1325 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1329 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1326 which I had written long ago to sort out user error messages which
1330 which I had written long ago to sort out user error messages which
1327 may occur during startup. This seemed like a good idea initially,
1331 may occur during startup. This seemed like a good idea initially,
1328 but it has proven a disaster in retrospect. I don't want to
1332 but it has proven a disaster in retrospect. I don't want to
1329 change much code for now, so my fix is to set the internal 'debug'
1333 change much code for now, so my fix is to set the internal 'debug'
1330 flag to true everywhere, whose only job was precisely to control
1334 flag to true everywhere, whose only job was precisely to control
1331 this subsystem. This closes issue 28 (as well as avoiding all
1335 this subsystem. This closes issue 28 (as well as avoiding all
1332 sorts of strange hangups which occur from time to time).
1336 sorts of strange hangups which occur from time to time).
1333
1337
1334 2005-02-07 Fernando Perez <fperez@colorado.edu>
1338 2005-02-07 Fernando Perez <fperez@colorado.edu>
1335
1339
1336 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1340 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1337 previous call produced a syntax error.
1341 previous call produced a syntax error.
1338
1342
1339 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1343 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1340 classes without constructor.
1344 classes without constructor.
1341
1345
1342 2005-02-06 Fernando Perez <fperez@colorado.edu>
1346 2005-02-06 Fernando Perez <fperez@colorado.edu>
1343
1347
1344 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1348 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1345 completions with the results of each matcher, so we return results
1349 completions with the results of each matcher, so we return results
1346 to the user from all namespaces. This breaks with ipython
1350 to the user from all namespaces. This breaks with ipython
1347 tradition, but I think it's a nicer behavior. Now you get all
1351 tradition, but I think it's a nicer behavior. Now you get all
1348 possible completions listed, from all possible namespaces (python,
1352 possible completions listed, from all possible namespaces (python,
1349 filesystem, magics...) After a request by John Hunter
1353 filesystem, magics...) After a request by John Hunter
1350 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1354 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1351
1355
1352 2005-02-05 Fernando Perez <fperez@colorado.edu>
1356 2005-02-05 Fernando Perez <fperez@colorado.edu>
1353
1357
1354 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1358 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1355 the call had quote characters in it (the quotes were stripped).
1359 the call had quote characters in it (the quotes were stripped).
1356
1360
1357 2005-01-31 Fernando Perez <fperez@colorado.edu>
1361 2005-01-31 Fernando Perez <fperez@colorado.edu>
1358
1362
1359 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1363 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1360 Itpl.itpl() to make the code more robust against psyco
1364 Itpl.itpl() to make the code more robust against psyco
1361 optimizations.
1365 optimizations.
1362
1366
1363 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1367 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1364 of causing an exception. Quicker, cleaner.
1368 of causing an exception. Quicker, cleaner.
1365
1369
1366 2005-01-28 Fernando Perez <fperez@colorado.edu>
1370 2005-01-28 Fernando Perez <fperez@colorado.edu>
1367
1371
1368 * scripts/ipython_win_post_install.py (install): hardcode
1372 * scripts/ipython_win_post_install.py (install): hardcode
1369 sys.prefix+'python.exe' as the executable path. It turns out that
1373 sys.prefix+'python.exe' as the executable path. It turns out that
1370 during the post-installation run, sys.executable resolves to the
1374 during the post-installation run, sys.executable resolves to the
1371 name of the binary installer! I should report this as a distutils
1375 name of the binary installer! I should report this as a distutils
1372 bug, I think. I updated the .10 release with this tiny fix, to
1376 bug, I think. I updated the .10 release with this tiny fix, to
1373 avoid annoying the lists further.
1377 avoid annoying the lists further.
1374
1378
1375 2005-01-27 *** Released version 0.6.10
1379 2005-01-27 *** Released version 0.6.10
1376
1380
1377 2005-01-27 Fernando Perez <fperez@colorado.edu>
1381 2005-01-27 Fernando Perez <fperez@colorado.edu>
1378
1382
1379 * IPython/numutils.py (norm): Added 'inf' as optional name for
1383 * IPython/numutils.py (norm): Added 'inf' as optional name for
1380 L-infinity norm, included references to mathworld.com for vector
1384 L-infinity norm, included references to mathworld.com for vector
1381 norm definitions.
1385 norm definitions.
1382 (amin/amax): added amin/amax for array min/max. Similar to what
1386 (amin/amax): added amin/amax for array min/max. Similar to what
1383 pylab ships with after the recent reorganization of names.
1387 pylab ships with after the recent reorganization of names.
1384 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1388 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1385
1389
1386 * ipython.el: committed Alex's recent fixes and improvements.
1390 * ipython.el: committed Alex's recent fixes and improvements.
1387 Tested with python-mode from CVS, and it looks excellent. Since
1391 Tested with python-mode from CVS, and it looks excellent. Since
1388 python-mode hasn't released anything in a while, I'm temporarily
1392 python-mode hasn't released anything in a while, I'm temporarily
1389 putting a copy of today's CVS (v 4.70) of python-mode in:
1393 putting a copy of today's CVS (v 4.70) of python-mode in:
1390 http://ipython.scipy.org/tmp/python-mode.el
1394 http://ipython.scipy.org/tmp/python-mode.el
1391
1395
1392 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1396 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1393 sys.executable for the executable name, instead of assuming it's
1397 sys.executable for the executable name, instead of assuming it's
1394 called 'python.exe' (the post-installer would have produced broken
1398 called 'python.exe' (the post-installer would have produced broken
1395 setups on systems with a differently named python binary).
1399 setups on systems with a differently named python binary).
1396
1400
1397 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1401 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1398 references to os.linesep, to make the code more
1402 references to os.linesep, to make the code more
1399 platform-independent. This is also part of the win32 coloring
1403 platform-independent. This is also part of the win32 coloring
1400 fixes.
1404 fixes.
1401
1405
1402 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1406 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1403 lines, which actually cause coloring bugs because the length of
1407 lines, which actually cause coloring bugs because the length of
1404 the line is very difficult to correctly compute with embedded
1408 the line is very difficult to correctly compute with embedded
1405 escapes. This was the source of all the coloring problems under
1409 escapes. This was the source of all the coloring problems under
1406 Win32. I think that _finally_, Win32 users have a properly
1410 Win32. I think that _finally_, Win32 users have a properly
1407 working ipython in all respects. This would never have happened
1411 working ipython in all respects. This would never have happened
1408 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1412 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1409
1413
1410 2005-01-26 *** Released version 0.6.9
1414 2005-01-26 *** Released version 0.6.9
1411
1415
1412 2005-01-25 Fernando Perez <fperez@colorado.edu>
1416 2005-01-25 Fernando Perez <fperez@colorado.edu>
1413
1417
1414 * setup.py: finally, we have a true Windows installer, thanks to
1418 * setup.py: finally, we have a true Windows installer, thanks to
1415 the excellent work of Viktor Ransmayr
1419 the excellent work of Viktor Ransmayr
1416 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1420 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1417 Windows users. The setup routine is quite a bit cleaner thanks to
1421 Windows users. The setup routine is quite a bit cleaner thanks to
1418 this, and the post-install script uses the proper functions to
1422 this, and the post-install script uses the proper functions to
1419 allow a clean de-installation using the standard Windows Control
1423 allow a clean de-installation using the standard Windows Control
1420 Panel.
1424 Panel.
1421
1425
1422 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1426 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1423 environment variable under all OSes (including win32) if
1427 environment variable under all OSes (including win32) if
1424 available. This will give consistency to win32 users who have set
1428 available. This will give consistency to win32 users who have set
1425 this variable for any reason. If os.environ['HOME'] fails, the
1429 this variable for any reason. If os.environ['HOME'] fails, the
1426 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1430 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1427
1431
1428 2005-01-24 Fernando Perez <fperez@colorado.edu>
1432 2005-01-24 Fernando Perez <fperez@colorado.edu>
1429
1433
1430 * IPython/numutils.py (empty_like): add empty_like(), similar to
1434 * IPython/numutils.py (empty_like): add empty_like(), similar to
1431 zeros_like() but taking advantage of the new empty() Numeric routine.
1435 zeros_like() but taking advantage of the new empty() Numeric routine.
1432
1436
1433 2005-01-23 *** Released version 0.6.8
1437 2005-01-23 *** Released version 0.6.8
1434
1438
1435 2005-01-22 Fernando Perez <fperez@colorado.edu>
1439 2005-01-22 Fernando Perez <fperez@colorado.edu>
1436
1440
1437 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1441 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1438 automatic show() calls. After discussing things with JDH, it
1442 automatic show() calls. After discussing things with JDH, it
1439 turns out there are too many corner cases where this can go wrong.
1443 turns out there are too many corner cases where this can go wrong.
1440 It's best not to try to be 'too smart', and simply have ipython
1444 It's best not to try to be 'too smart', and simply have ipython
1441 reproduce as much as possible the default behavior of a normal
1445 reproduce as much as possible the default behavior of a normal
1442 python shell.
1446 python shell.
1443
1447
1444 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1448 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1445 line-splitting regexp and _prefilter() to avoid calling getattr()
1449 line-splitting regexp and _prefilter() to avoid calling getattr()
1446 on assignments. This closes
1450 on assignments. This closes
1447 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1451 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1448 readline uses getattr(), so a simple <TAB> keypress is still
1452 readline uses getattr(), so a simple <TAB> keypress is still
1449 enough to trigger getattr() calls on an object.
1453 enough to trigger getattr() calls on an object.
1450
1454
1451 2005-01-21 Fernando Perez <fperez@colorado.edu>
1455 2005-01-21 Fernando Perez <fperez@colorado.edu>
1452
1456
1453 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1457 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1454 docstring under pylab so it doesn't mask the original.
1458 docstring under pylab so it doesn't mask the original.
1455
1459
1456 2005-01-21 *** Released version 0.6.7
1460 2005-01-21 *** Released version 0.6.7
1457
1461
1458 2005-01-21 Fernando Perez <fperez@colorado.edu>
1462 2005-01-21 Fernando Perez <fperez@colorado.edu>
1459
1463
1460 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1464 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1461 signal handling for win32 users in multithreaded mode.
1465 signal handling for win32 users in multithreaded mode.
1462
1466
1463 2005-01-17 Fernando Perez <fperez@colorado.edu>
1467 2005-01-17 Fernando Perez <fperez@colorado.edu>
1464
1468
1465 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1469 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1466 instances with no __init__. After a crash report by Norbert Nemec
1470 instances with no __init__. After a crash report by Norbert Nemec
1467 <Norbert-AT-nemec-online.de>.
1471 <Norbert-AT-nemec-online.de>.
1468
1472
1469 2005-01-14 Fernando Perez <fperez@colorado.edu>
1473 2005-01-14 Fernando Perez <fperez@colorado.edu>
1470
1474
1471 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1475 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1472 names for verbose exceptions, when multiple dotted names and the
1476 names for verbose exceptions, when multiple dotted names and the
1473 'parent' object were present on the same line.
1477 'parent' object were present on the same line.
1474
1478
1475 2005-01-11 Fernando Perez <fperez@colorado.edu>
1479 2005-01-11 Fernando Perez <fperez@colorado.edu>
1476
1480
1477 * IPython/genutils.py (flag_calls): new utility to trap and flag
1481 * IPython/genutils.py (flag_calls): new utility to trap and flag
1478 calls in functions. I need it to clean up matplotlib support.
1482 calls in functions. I need it to clean up matplotlib support.
1479 Also removed some deprecated code in genutils.
1483 Also removed some deprecated code in genutils.
1480
1484
1481 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1485 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1482 that matplotlib scripts called with %run, which don't call show()
1486 that matplotlib scripts called with %run, which don't call show()
1483 themselves, still have their plotting windows open.
1487 themselves, still have their plotting windows open.
1484
1488
1485 2005-01-05 Fernando Perez <fperez@colorado.edu>
1489 2005-01-05 Fernando Perez <fperez@colorado.edu>
1486
1490
1487 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1491 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1488 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1492 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1489
1493
1490 2004-12-19 Fernando Perez <fperez@colorado.edu>
1494 2004-12-19 Fernando Perez <fperez@colorado.edu>
1491
1495
1492 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1496 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1493 parent_runcode, which was an eyesore. The same result can be
1497 parent_runcode, which was an eyesore. The same result can be
1494 obtained with Python's regular superclass mechanisms.
1498 obtained with Python's regular superclass mechanisms.
1495
1499
1496 2004-12-17 Fernando Perez <fperez@colorado.edu>
1500 2004-12-17 Fernando Perez <fperez@colorado.edu>
1497
1501
1498 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1502 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1499 reported by Prabhu.
1503 reported by Prabhu.
1500 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1504 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1501 sys.stderr) instead of explicitly calling sys.stderr. This helps
1505 sys.stderr) instead of explicitly calling sys.stderr. This helps
1502 maintain our I/O abstractions clean, for future GUI embeddings.
1506 maintain our I/O abstractions clean, for future GUI embeddings.
1503
1507
1504 * IPython/genutils.py (info): added new utility for sys.stderr
1508 * IPython/genutils.py (info): added new utility for sys.stderr
1505 unified info message handling (thin wrapper around warn()).
1509 unified info message handling (thin wrapper around warn()).
1506
1510
1507 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1511 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1508 composite (dotted) names on verbose exceptions.
1512 composite (dotted) names on verbose exceptions.
1509 (VerboseTB.nullrepr): harden against another kind of errors which
1513 (VerboseTB.nullrepr): harden against another kind of errors which
1510 Python's inspect module can trigger, and which were crashing
1514 Python's inspect module can trigger, and which were crashing
1511 IPython. Thanks to a report by Marco Lombardi
1515 IPython. Thanks to a report by Marco Lombardi
1512 <mlombard-AT-ma010192.hq.eso.org>.
1516 <mlombard-AT-ma010192.hq.eso.org>.
1513
1517
1514 2004-12-13 *** Released version 0.6.6
1518 2004-12-13 *** Released version 0.6.6
1515
1519
1516 2004-12-12 Fernando Perez <fperez@colorado.edu>
1520 2004-12-12 Fernando Perez <fperez@colorado.edu>
1517
1521
1518 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1522 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1519 generated by pygtk upon initialization if it was built without
1523 generated by pygtk upon initialization if it was built without
1520 threads (for matplotlib users). After a crash reported by
1524 threads (for matplotlib users). After a crash reported by
1521 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1525 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1522
1526
1523 * IPython/ipmaker.py (make_IPython): fix small bug in the
1527 * IPython/ipmaker.py (make_IPython): fix small bug in the
1524 import_some parameter for multiple imports.
1528 import_some parameter for multiple imports.
1525
1529
1526 * IPython/iplib.py (ipmagic): simplified the interface of
1530 * IPython/iplib.py (ipmagic): simplified the interface of
1527 ipmagic() to take a single string argument, just as it would be
1531 ipmagic() to take a single string argument, just as it would be
1528 typed at the IPython cmd line.
1532 typed at the IPython cmd line.
1529 (ipalias): Added new ipalias() with an interface identical to
1533 (ipalias): Added new ipalias() with an interface identical to
1530 ipmagic(). This completes exposing a pure python interface to the
1534 ipmagic(). This completes exposing a pure python interface to the
1531 alias and magic system, which can be used in loops or more complex
1535 alias and magic system, which can be used in loops or more complex
1532 code where IPython's automatic line mangling is not active.
1536 code where IPython's automatic line mangling is not active.
1533
1537
1534 * IPython/genutils.py (timing): changed interface of timing to
1538 * IPython/genutils.py (timing): changed interface of timing to
1535 simply run code once, which is the most common case. timings()
1539 simply run code once, which is the most common case. timings()
1536 remains unchanged, for the cases where you want multiple runs.
1540 remains unchanged, for the cases where you want multiple runs.
1537
1541
1538 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1542 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1539 bug where Python2.2 crashes with exec'ing code which does not end
1543 bug where Python2.2 crashes with exec'ing code which does not end
1540 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1544 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1541 before.
1545 before.
1542
1546
1543 2004-12-10 Fernando Perez <fperez@colorado.edu>
1547 2004-12-10 Fernando Perez <fperez@colorado.edu>
1544
1548
1545 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1549 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1546 -t to -T, to accomodate the new -t flag in %run (the %run and
1550 -t to -T, to accomodate the new -t flag in %run (the %run and
1547 %prun options are kind of intermixed, and it's not easy to change
1551 %prun options are kind of intermixed, and it's not easy to change
1548 this with the limitations of python's getopt).
1552 this with the limitations of python's getopt).
1549
1553
1550 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1554 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1551 the execution of scripts. It's not as fine-tuned as timeit.py,
1555 the execution of scripts. It's not as fine-tuned as timeit.py,
1552 but it works from inside ipython (and under 2.2, which lacks
1556 but it works from inside ipython (and under 2.2, which lacks
1553 timeit.py). Optionally a number of runs > 1 can be given for
1557 timeit.py). Optionally a number of runs > 1 can be given for
1554 timing very short-running code.
1558 timing very short-running code.
1555
1559
1556 * IPython/genutils.py (uniq_stable): new routine which returns a
1560 * IPython/genutils.py (uniq_stable): new routine which returns a
1557 list of unique elements in any iterable, but in stable order of
1561 list of unique elements in any iterable, but in stable order of
1558 appearance. I needed this for the ultraTB fixes, and it's a handy
1562 appearance. I needed this for the ultraTB fixes, and it's a handy
1559 utility.
1563 utility.
1560
1564
1561 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1565 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1562 dotted names in Verbose exceptions. This had been broken since
1566 dotted names in Verbose exceptions. This had been broken since
1563 the very start, now x.y will properly be printed in a Verbose
1567 the very start, now x.y will properly be printed in a Verbose
1564 traceback, instead of x being shown and y appearing always as an
1568 traceback, instead of x being shown and y appearing always as an
1565 'undefined global'. Getting this to work was a bit tricky,
1569 'undefined global'. Getting this to work was a bit tricky,
1566 because by default python tokenizers are stateless. Saved by
1570 because by default python tokenizers are stateless. Saved by
1567 python's ability to easily add a bit of state to an arbitrary
1571 python's ability to easily add a bit of state to an arbitrary
1568 function (without needing to build a full-blown callable object).
1572 function (without needing to build a full-blown callable object).
1569
1573
1570 Also big cleanup of this code, which had horrendous runtime
1574 Also big cleanup of this code, which had horrendous runtime
1571 lookups of zillions of attributes for colorization. Moved all
1575 lookups of zillions of attributes for colorization. Moved all
1572 this code into a few templates, which make it cleaner and quicker.
1576 this code into a few templates, which make it cleaner and quicker.
1573
1577
1574 Printout quality was also improved for Verbose exceptions: one
1578 Printout quality was also improved for Verbose exceptions: one
1575 variable per line, and memory addresses are printed (this can be
1579 variable per line, and memory addresses are printed (this can be
1576 quite handy in nasty debugging situations, which is what Verbose
1580 quite handy in nasty debugging situations, which is what Verbose
1577 is for).
1581 is for).
1578
1582
1579 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1583 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1580 the command line as scripts to be loaded by embedded instances.
1584 the command line as scripts to be loaded by embedded instances.
1581 Doing so has the potential for an infinite recursion if there are
1585 Doing so has the potential for an infinite recursion if there are
1582 exceptions thrown in the process. This fixes a strange crash
1586 exceptions thrown in the process. This fixes a strange crash
1583 reported by Philippe MULLER <muller-AT-irit.fr>.
1587 reported by Philippe MULLER <muller-AT-irit.fr>.
1584
1588
1585 2004-12-09 Fernando Perez <fperez@colorado.edu>
1589 2004-12-09 Fernando Perez <fperez@colorado.edu>
1586
1590
1587 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1591 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1588 to reflect new names in matplotlib, which now expose the
1592 to reflect new names in matplotlib, which now expose the
1589 matlab-compatible interface via a pylab module instead of the
1593 matlab-compatible interface via a pylab module instead of the
1590 'matlab' name. The new code is backwards compatible, so users of
1594 'matlab' name. The new code is backwards compatible, so users of
1591 all matplotlib versions are OK. Patch by J. Hunter.
1595 all matplotlib versions are OK. Patch by J. Hunter.
1592
1596
1593 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1597 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1594 of __init__ docstrings for instances (class docstrings are already
1598 of __init__ docstrings for instances (class docstrings are already
1595 automatically printed). Instances with customized docstrings
1599 automatically printed). Instances with customized docstrings
1596 (indep. of the class) are also recognized and all 3 separate
1600 (indep. of the class) are also recognized and all 3 separate
1597 docstrings are printed (instance, class, constructor). After some
1601 docstrings are printed (instance, class, constructor). After some
1598 comments/suggestions by J. Hunter.
1602 comments/suggestions by J. Hunter.
1599
1603
1600 2004-12-05 Fernando Perez <fperez@colorado.edu>
1604 2004-12-05 Fernando Perez <fperez@colorado.edu>
1601
1605
1602 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1606 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1603 warnings when tab-completion fails and triggers an exception.
1607 warnings when tab-completion fails and triggers an exception.
1604
1608
1605 2004-12-03 Fernando Perez <fperez@colorado.edu>
1609 2004-12-03 Fernando Perez <fperez@colorado.edu>
1606
1610
1607 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1611 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1608 be triggered when using 'run -p'. An incorrect option flag was
1612 be triggered when using 'run -p'. An incorrect option flag was
1609 being set ('d' instead of 'D').
1613 being set ('d' instead of 'D').
1610 (manpage): fix missing escaped \- sign.
1614 (manpage): fix missing escaped \- sign.
1611
1615
1612 2004-11-30 *** Released version 0.6.5
1616 2004-11-30 *** Released version 0.6.5
1613
1617
1614 2004-11-30 Fernando Perez <fperez@colorado.edu>
1618 2004-11-30 Fernando Perez <fperez@colorado.edu>
1615
1619
1616 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1620 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1617 setting with -d option.
1621 setting with -d option.
1618
1622
1619 * setup.py (docfiles): Fix problem where the doc glob I was using
1623 * setup.py (docfiles): Fix problem where the doc glob I was using
1620 was COMPLETELY BROKEN. It was giving the right files by pure
1624 was COMPLETELY BROKEN. It was giving the right files by pure
1621 accident, but failed once I tried to include ipython.el. Note:
1625 accident, but failed once I tried to include ipython.el. Note:
1622 glob() does NOT allow you to do exclusion on multiple endings!
1626 glob() does NOT allow you to do exclusion on multiple endings!
1623
1627
1624 2004-11-29 Fernando Perez <fperez@colorado.edu>
1628 2004-11-29 Fernando Perez <fperez@colorado.edu>
1625
1629
1626 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1630 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1627 the manpage as the source. Better formatting & consistency.
1631 the manpage as the source. Better formatting & consistency.
1628
1632
1629 * IPython/Magic.py (magic_run): Added new -d option, to run
1633 * IPython/Magic.py (magic_run): Added new -d option, to run
1630 scripts under the control of the python pdb debugger. Note that
1634 scripts under the control of the python pdb debugger. Note that
1631 this required changing the %prun option -d to -D, to avoid a clash
1635 this required changing the %prun option -d to -D, to avoid a clash
1632 (since %run must pass options to %prun, and getopt is too dumb to
1636 (since %run must pass options to %prun, and getopt is too dumb to
1633 handle options with string values with embedded spaces). Thanks
1637 handle options with string values with embedded spaces). Thanks
1634 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1638 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1635 (magic_who_ls): added type matching to %who and %whos, so that one
1639 (magic_who_ls): added type matching to %who and %whos, so that one
1636 can filter their output to only include variables of certain
1640 can filter their output to only include variables of certain
1637 types. Another suggestion by Matthew.
1641 types. Another suggestion by Matthew.
1638 (magic_whos): Added memory summaries in kb and Mb for arrays.
1642 (magic_whos): Added memory summaries in kb and Mb for arrays.
1639 (magic_who): Improve formatting (break lines every 9 vars).
1643 (magic_who): Improve formatting (break lines every 9 vars).
1640
1644
1641 2004-11-28 Fernando Perez <fperez@colorado.edu>
1645 2004-11-28 Fernando Perez <fperez@colorado.edu>
1642
1646
1643 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1647 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1644 cache when empty lines were present.
1648 cache when empty lines were present.
1645
1649
1646 2004-11-24 Fernando Perez <fperez@colorado.edu>
1650 2004-11-24 Fernando Perez <fperez@colorado.edu>
1647
1651
1648 * IPython/usage.py (__doc__): document the re-activated threading
1652 * IPython/usage.py (__doc__): document the re-activated threading
1649 options for WX and GTK.
1653 options for WX and GTK.
1650
1654
1651 2004-11-23 Fernando Perez <fperez@colorado.edu>
1655 2004-11-23 Fernando Perez <fperez@colorado.edu>
1652
1656
1653 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1657 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1654 the -wthread and -gthread options, along with a new -tk one to try
1658 the -wthread and -gthread options, along with a new -tk one to try
1655 and coordinate Tk threading with wx/gtk. The tk support is very
1659 and coordinate Tk threading with wx/gtk. The tk support is very
1656 platform dependent, since it seems to require Tcl and Tk to be
1660 platform dependent, since it seems to require Tcl and Tk to be
1657 built with threads (Fedora1/2 appears NOT to have it, but in
1661 built with threads (Fedora1/2 appears NOT to have it, but in
1658 Prabhu's Debian boxes it works OK). But even with some Tk
1662 Prabhu's Debian boxes it works OK). But even with some Tk
1659 limitations, this is a great improvement.
1663 limitations, this is a great improvement.
1660
1664
1661 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1665 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1662 info in user prompts. Patch by Prabhu.
1666 info in user prompts. Patch by Prabhu.
1663
1667
1664 2004-11-18 Fernando Perez <fperez@colorado.edu>
1668 2004-11-18 Fernando Perez <fperez@colorado.edu>
1665
1669
1666 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1670 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1667 EOFErrors and bail, to avoid infinite loops if a non-terminating
1671 EOFErrors and bail, to avoid infinite loops if a non-terminating
1668 file is fed into ipython. Patch submitted in issue 19 by user,
1672 file is fed into ipython. Patch submitted in issue 19 by user,
1669 many thanks.
1673 many thanks.
1670
1674
1671 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1675 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1672 autoquote/parens in continuation prompts, which can cause lots of
1676 autoquote/parens in continuation prompts, which can cause lots of
1673 problems. Closes roundup issue 20.
1677 problems. Closes roundup issue 20.
1674
1678
1675 2004-11-17 Fernando Perez <fperez@colorado.edu>
1679 2004-11-17 Fernando Perez <fperez@colorado.edu>
1676
1680
1677 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1681 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1678 reported as debian bug #280505. I'm not sure my local changelog
1682 reported as debian bug #280505. I'm not sure my local changelog
1679 entry has the proper debian format (Jack?).
1683 entry has the proper debian format (Jack?).
1680
1684
1681 2004-11-08 *** Released version 0.6.4
1685 2004-11-08 *** Released version 0.6.4
1682
1686
1683 2004-11-08 Fernando Perez <fperez@colorado.edu>
1687 2004-11-08 Fernando Perez <fperez@colorado.edu>
1684
1688
1685 * IPython/iplib.py (init_readline): Fix exit message for Windows
1689 * IPython/iplib.py (init_readline): Fix exit message for Windows
1686 when readline is active. Thanks to a report by Eric Jones
1690 when readline is active. Thanks to a report by Eric Jones
1687 <eric-AT-enthought.com>.
1691 <eric-AT-enthought.com>.
1688
1692
1689 2004-11-07 Fernando Perez <fperez@colorado.edu>
1693 2004-11-07 Fernando Perez <fperez@colorado.edu>
1690
1694
1691 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1695 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1692 sometimes seen by win2k/cygwin users.
1696 sometimes seen by win2k/cygwin users.
1693
1697
1694 2004-11-06 Fernando Perez <fperez@colorado.edu>
1698 2004-11-06 Fernando Perez <fperez@colorado.edu>
1695
1699
1696 * IPython/iplib.py (interact): Change the handling of %Exit from
1700 * IPython/iplib.py (interact): Change the handling of %Exit from
1697 trying to propagate a SystemExit to an internal ipython flag.
1701 trying to propagate a SystemExit to an internal ipython flag.
1698 This is less elegant than using Python's exception mechanism, but
1702 This is less elegant than using Python's exception mechanism, but
1699 I can't get that to work reliably with threads, so under -pylab
1703 I can't get that to work reliably with threads, so under -pylab
1700 %Exit was hanging IPython. Cross-thread exception handling is
1704 %Exit was hanging IPython. Cross-thread exception handling is
1701 really a bitch. Thaks to a bug report by Stephen Walton
1705 really a bitch. Thaks to a bug report by Stephen Walton
1702 <stephen.walton-AT-csun.edu>.
1706 <stephen.walton-AT-csun.edu>.
1703
1707
1704 2004-11-04 Fernando Perez <fperez@colorado.edu>
1708 2004-11-04 Fernando Perez <fperez@colorado.edu>
1705
1709
1706 * IPython/iplib.py (raw_input_original): store a pointer to the
1710 * IPython/iplib.py (raw_input_original): store a pointer to the
1707 true raw_input to harden against code which can modify it
1711 true raw_input to harden against code which can modify it
1708 (wx.py.PyShell does this and would otherwise crash ipython).
1712 (wx.py.PyShell does this and would otherwise crash ipython).
1709 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1713 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1710
1714
1711 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1715 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1712 Ctrl-C problem, which does not mess up the input line.
1716 Ctrl-C problem, which does not mess up the input line.
1713
1717
1714 2004-11-03 Fernando Perez <fperez@colorado.edu>
1718 2004-11-03 Fernando Perez <fperez@colorado.edu>
1715
1719
1716 * IPython/Release.py: Changed licensing to BSD, in all files.
1720 * IPython/Release.py: Changed licensing to BSD, in all files.
1717 (name): lowercase name for tarball/RPM release.
1721 (name): lowercase name for tarball/RPM release.
1718
1722
1719 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1723 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1720 use throughout ipython.
1724 use throughout ipython.
1721
1725
1722 * IPython/Magic.py (Magic._ofind): Switch to using the new
1726 * IPython/Magic.py (Magic._ofind): Switch to using the new
1723 OInspect.getdoc() function.
1727 OInspect.getdoc() function.
1724
1728
1725 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1729 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1726 of the line currently being canceled via Ctrl-C. It's extremely
1730 of the line currently being canceled via Ctrl-C. It's extremely
1727 ugly, but I don't know how to do it better (the problem is one of
1731 ugly, but I don't know how to do it better (the problem is one of
1728 handling cross-thread exceptions).
1732 handling cross-thread exceptions).
1729
1733
1730 2004-10-28 Fernando Perez <fperez@colorado.edu>
1734 2004-10-28 Fernando Perez <fperez@colorado.edu>
1731
1735
1732 * IPython/Shell.py (signal_handler): add signal handlers to trap
1736 * IPython/Shell.py (signal_handler): add signal handlers to trap
1733 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1737 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1734 report by Francesc Alted.
1738 report by Francesc Alted.
1735
1739
1736 2004-10-21 Fernando Perez <fperez@colorado.edu>
1740 2004-10-21 Fernando Perez <fperez@colorado.edu>
1737
1741
1738 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1742 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1739 to % for pysh syntax extensions.
1743 to % for pysh syntax extensions.
1740
1744
1741 2004-10-09 Fernando Perez <fperez@colorado.edu>
1745 2004-10-09 Fernando Perez <fperez@colorado.edu>
1742
1746
1743 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1747 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1744 arrays to print a more useful summary, without calling str(arr).
1748 arrays to print a more useful summary, without calling str(arr).
1745 This avoids the problem of extremely lengthy computations which
1749 This avoids the problem of extremely lengthy computations which
1746 occur if arr is large, and appear to the user as a system lockup
1750 occur if arr is large, and appear to the user as a system lockup
1747 with 100% cpu activity. After a suggestion by Kristian Sandberg
1751 with 100% cpu activity. After a suggestion by Kristian Sandberg
1748 <Kristian.Sandberg@colorado.edu>.
1752 <Kristian.Sandberg@colorado.edu>.
1749 (Magic.__init__): fix bug in global magic escapes not being
1753 (Magic.__init__): fix bug in global magic escapes not being
1750 correctly set.
1754 correctly set.
1751
1755
1752 2004-10-08 Fernando Perez <fperez@colorado.edu>
1756 2004-10-08 Fernando Perez <fperez@colorado.edu>
1753
1757
1754 * IPython/Magic.py (__license__): change to absolute imports of
1758 * IPython/Magic.py (__license__): change to absolute imports of
1755 ipython's own internal packages, to start adapting to the absolute
1759 ipython's own internal packages, to start adapting to the absolute
1756 import requirement of PEP-328.
1760 import requirement of PEP-328.
1757
1761
1758 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1762 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1759 files, and standardize author/license marks through the Release
1763 files, and standardize author/license marks through the Release
1760 module instead of having per/file stuff (except for files with
1764 module instead of having per/file stuff (except for files with
1761 particular licenses, like the MIT/PSF-licensed codes).
1765 particular licenses, like the MIT/PSF-licensed codes).
1762
1766
1763 * IPython/Debugger.py: remove dead code for python 2.1
1767 * IPython/Debugger.py: remove dead code for python 2.1
1764
1768
1765 2004-10-04 Fernando Perez <fperez@colorado.edu>
1769 2004-10-04 Fernando Perez <fperez@colorado.edu>
1766
1770
1767 * IPython/iplib.py (ipmagic): New function for accessing magics
1771 * IPython/iplib.py (ipmagic): New function for accessing magics
1768 via a normal python function call.
1772 via a normal python function call.
1769
1773
1770 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1774 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1771 from '@' to '%', to accomodate the new @decorator syntax of python
1775 from '@' to '%', to accomodate the new @decorator syntax of python
1772 2.4.
1776 2.4.
1773
1777
1774 2004-09-29 Fernando Perez <fperez@colorado.edu>
1778 2004-09-29 Fernando Perez <fperez@colorado.edu>
1775
1779
1776 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1780 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1777 matplotlib.use to prevent running scripts which try to switch
1781 matplotlib.use to prevent running scripts which try to switch
1778 interactive backends from within ipython. This will just crash
1782 interactive backends from within ipython. This will just crash
1779 the python interpreter, so we can't allow it (but a detailed error
1783 the python interpreter, so we can't allow it (but a detailed error
1780 is given to the user).
1784 is given to the user).
1781
1785
1782 2004-09-28 Fernando Perez <fperez@colorado.edu>
1786 2004-09-28 Fernando Perez <fperez@colorado.edu>
1783
1787
1784 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1788 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1785 matplotlib-related fixes so that using @run with non-matplotlib
1789 matplotlib-related fixes so that using @run with non-matplotlib
1786 scripts doesn't pop up spurious plot windows. This requires
1790 scripts doesn't pop up spurious plot windows. This requires
1787 matplotlib >= 0.63, where I had to make some changes as well.
1791 matplotlib >= 0.63, where I had to make some changes as well.
1788
1792
1789 * IPython/ipmaker.py (make_IPython): update version requirement to
1793 * IPython/ipmaker.py (make_IPython): update version requirement to
1790 python 2.2.
1794 python 2.2.
1791
1795
1792 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1796 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1793 banner arg for embedded customization.
1797 banner arg for embedded customization.
1794
1798
1795 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1799 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1796 explicit uses of __IP as the IPython's instance name. Now things
1800 explicit uses of __IP as the IPython's instance name. Now things
1797 are properly handled via the shell.name value. The actual code
1801 are properly handled via the shell.name value. The actual code
1798 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1802 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1799 is much better than before. I'll clean things completely when the
1803 is much better than before. I'll clean things completely when the
1800 magic stuff gets a real overhaul.
1804 magic stuff gets a real overhaul.
1801
1805
1802 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1806 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1803 minor changes to debian dir.
1807 minor changes to debian dir.
1804
1808
1805 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1809 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1806 pointer to the shell itself in the interactive namespace even when
1810 pointer to the shell itself in the interactive namespace even when
1807 a user-supplied dict is provided. This is needed for embedding
1811 a user-supplied dict is provided. This is needed for embedding
1808 purposes (found by tests with Michel Sanner).
1812 purposes (found by tests with Michel Sanner).
1809
1813
1810 2004-09-27 Fernando Perez <fperez@colorado.edu>
1814 2004-09-27 Fernando Perez <fperez@colorado.edu>
1811
1815
1812 * IPython/UserConfig/ipythonrc: remove []{} from
1816 * IPython/UserConfig/ipythonrc: remove []{} from
1813 readline_remove_delims, so that things like [modname.<TAB> do
1817 readline_remove_delims, so that things like [modname.<TAB> do
1814 proper completion. This disables [].TAB, but that's a less common
1818 proper completion. This disables [].TAB, but that's a less common
1815 case than module names in list comprehensions, for example.
1819 case than module names in list comprehensions, for example.
1816 Thanks to a report by Andrea Riciputi.
1820 Thanks to a report by Andrea Riciputi.
1817
1821
1818 2004-09-09 Fernando Perez <fperez@colorado.edu>
1822 2004-09-09 Fernando Perez <fperez@colorado.edu>
1819
1823
1820 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1824 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1821 blocking problems in win32 and osx. Fix by John.
1825 blocking problems in win32 and osx. Fix by John.
1822
1826
1823 2004-09-08 Fernando Perez <fperez@colorado.edu>
1827 2004-09-08 Fernando Perez <fperez@colorado.edu>
1824
1828
1825 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1829 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1826 for Win32 and OSX. Fix by John Hunter.
1830 for Win32 and OSX. Fix by John Hunter.
1827
1831
1828 2004-08-30 *** Released version 0.6.3
1832 2004-08-30 *** Released version 0.6.3
1829
1833
1830 2004-08-30 Fernando Perez <fperez@colorado.edu>
1834 2004-08-30 Fernando Perez <fperez@colorado.edu>
1831
1835
1832 * setup.py (isfile): Add manpages to list of dependent files to be
1836 * setup.py (isfile): Add manpages to list of dependent files to be
1833 updated.
1837 updated.
1834
1838
1835 2004-08-27 Fernando Perez <fperez@colorado.edu>
1839 2004-08-27 Fernando Perez <fperez@colorado.edu>
1836
1840
1837 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1841 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1838 for now. They don't really work with standalone WX/GTK code
1842 for now. They don't really work with standalone WX/GTK code
1839 (though matplotlib IS working fine with both of those backends).
1843 (though matplotlib IS working fine with both of those backends).
1840 This will neeed much more testing. I disabled most things with
1844 This will neeed much more testing. I disabled most things with
1841 comments, so turning it back on later should be pretty easy.
1845 comments, so turning it back on later should be pretty easy.
1842
1846
1843 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1847 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1844 autocalling of expressions like r'foo', by modifying the line
1848 autocalling of expressions like r'foo', by modifying the line
1845 split regexp. Closes
1849 split regexp. Closes
1846 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1850 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1847 Riley <ipythonbugs-AT-sabi.net>.
1851 Riley <ipythonbugs-AT-sabi.net>.
1848 (InteractiveShell.mainloop): honor --nobanner with banner
1852 (InteractiveShell.mainloop): honor --nobanner with banner
1849 extensions.
1853 extensions.
1850
1854
1851 * IPython/Shell.py: Significant refactoring of all classes, so
1855 * IPython/Shell.py: Significant refactoring of all classes, so
1852 that we can really support ALL matplotlib backends and threading
1856 that we can really support ALL matplotlib backends and threading
1853 models (John spotted a bug with Tk which required this). Now we
1857 models (John spotted a bug with Tk which required this). Now we
1854 should support single-threaded, WX-threads and GTK-threads, both
1858 should support single-threaded, WX-threads and GTK-threads, both
1855 for generic code and for matplotlib.
1859 for generic code and for matplotlib.
1856
1860
1857 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1861 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1858 -pylab, to simplify things for users. Will also remove the pylab
1862 -pylab, to simplify things for users. Will also remove the pylab
1859 profile, since now all of matplotlib configuration is directly
1863 profile, since now all of matplotlib configuration is directly
1860 handled here. This also reduces startup time.
1864 handled here. This also reduces startup time.
1861
1865
1862 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1866 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1863 shell wasn't being correctly called. Also in IPShellWX.
1867 shell wasn't being correctly called. Also in IPShellWX.
1864
1868
1865 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1869 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1866 fine-tune banner.
1870 fine-tune banner.
1867
1871
1868 * IPython/numutils.py (spike): Deprecate these spike functions,
1872 * IPython/numutils.py (spike): Deprecate these spike functions,
1869 delete (long deprecated) gnuplot_exec handler.
1873 delete (long deprecated) gnuplot_exec handler.
1870
1874
1871 2004-08-26 Fernando Perez <fperez@colorado.edu>
1875 2004-08-26 Fernando Perez <fperez@colorado.edu>
1872
1876
1873 * ipython.1: Update for threading options, plus some others which
1877 * ipython.1: Update for threading options, plus some others which
1874 were missing.
1878 were missing.
1875
1879
1876 * IPython/ipmaker.py (__call__): Added -wthread option for
1880 * IPython/ipmaker.py (__call__): Added -wthread option for
1877 wxpython thread handling. Make sure threading options are only
1881 wxpython thread handling. Make sure threading options are only
1878 valid at the command line.
1882 valid at the command line.
1879
1883
1880 * scripts/ipython: moved shell selection into a factory function
1884 * scripts/ipython: moved shell selection into a factory function
1881 in Shell.py, to keep the starter script to a minimum.
1885 in Shell.py, to keep the starter script to a minimum.
1882
1886
1883 2004-08-25 Fernando Perez <fperez@colorado.edu>
1887 2004-08-25 Fernando Perez <fperez@colorado.edu>
1884
1888
1885 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1889 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1886 John. Along with some recent changes he made to matplotlib, the
1890 John. Along with some recent changes he made to matplotlib, the
1887 next versions of both systems should work very well together.
1891 next versions of both systems should work very well together.
1888
1892
1889 2004-08-24 Fernando Perez <fperez@colorado.edu>
1893 2004-08-24 Fernando Perez <fperez@colorado.edu>
1890
1894
1891 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1895 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1892 tried to switch the profiling to using hotshot, but I'm getting
1896 tried to switch the profiling to using hotshot, but I'm getting
1893 strange errors from prof.runctx() there. I may be misreading the
1897 strange errors from prof.runctx() there. I may be misreading the
1894 docs, but it looks weird. For now the profiling code will
1898 docs, but it looks weird. For now the profiling code will
1895 continue to use the standard profiler.
1899 continue to use the standard profiler.
1896
1900
1897 2004-08-23 Fernando Perez <fperez@colorado.edu>
1901 2004-08-23 Fernando Perez <fperez@colorado.edu>
1898
1902
1899 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1903 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1900 threaded shell, by John Hunter. It's not quite ready yet, but
1904 threaded shell, by John Hunter. It's not quite ready yet, but
1901 close.
1905 close.
1902
1906
1903 2004-08-22 Fernando Perez <fperez@colorado.edu>
1907 2004-08-22 Fernando Perez <fperez@colorado.edu>
1904
1908
1905 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1909 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1906 in Magic and ultraTB.
1910 in Magic and ultraTB.
1907
1911
1908 * ipython.1: document threading options in manpage.
1912 * ipython.1: document threading options in manpage.
1909
1913
1910 * scripts/ipython: Changed name of -thread option to -gthread,
1914 * scripts/ipython: Changed name of -thread option to -gthread,
1911 since this is GTK specific. I want to leave the door open for a
1915 since this is GTK specific. I want to leave the door open for a
1912 -wthread option for WX, which will most likely be necessary. This
1916 -wthread option for WX, which will most likely be necessary. This
1913 change affects usage and ipmaker as well.
1917 change affects usage and ipmaker as well.
1914
1918
1915 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1919 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1916 handle the matplotlib shell issues. Code by John Hunter
1920 handle the matplotlib shell issues. Code by John Hunter
1917 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1921 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1918 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1922 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1919 broken (and disabled for end users) for now, but it puts the
1923 broken (and disabled for end users) for now, but it puts the
1920 infrastructure in place.
1924 infrastructure in place.
1921
1925
1922 2004-08-21 Fernando Perez <fperez@colorado.edu>
1926 2004-08-21 Fernando Perez <fperez@colorado.edu>
1923
1927
1924 * ipythonrc-pylab: Add matplotlib support.
1928 * ipythonrc-pylab: Add matplotlib support.
1925
1929
1926 * matplotlib_config.py: new files for matplotlib support, part of
1930 * matplotlib_config.py: new files for matplotlib support, part of
1927 the pylab profile.
1931 the pylab profile.
1928
1932
1929 * IPython/usage.py (__doc__): documented the threading options.
1933 * IPython/usage.py (__doc__): documented the threading options.
1930
1934
1931 2004-08-20 Fernando Perez <fperez@colorado.edu>
1935 2004-08-20 Fernando Perez <fperez@colorado.edu>
1932
1936
1933 * ipython: Modified the main calling routine to handle the -thread
1937 * ipython: Modified the main calling routine to handle the -thread
1934 and -mpthread options. This needs to be done as a top-level hack,
1938 and -mpthread options. This needs to be done as a top-level hack,
1935 because it determines which class to instantiate for IPython
1939 because it determines which class to instantiate for IPython
1936 itself.
1940 itself.
1937
1941
1938 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1942 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1939 classes to support multithreaded GTK operation without blocking,
1943 classes to support multithreaded GTK operation without blocking,
1940 and matplotlib with all backends. This is a lot of still very
1944 and matplotlib with all backends. This is a lot of still very
1941 experimental code, and threads are tricky. So it may still have a
1945 experimental code, and threads are tricky. So it may still have a
1942 few rough edges... This code owes a lot to
1946 few rough edges... This code owes a lot to
1943 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1947 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1944 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1948 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1945 to John Hunter for all the matplotlib work.
1949 to John Hunter for all the matplotlib work.
1946
1950
1947 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1951 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1948 options for gtk thread and matplotlib support.
1952 options for gtk thread and matplotlib support.
1949
1953
1950 2004-08-16 Fernando Perez <fperez@colorado.edu>
1954 2004-08-16 Fernando Perez <fperez@colorado.edu>
1951
1955
1952 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1956 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1953 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1957 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1954 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1958 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1955
1959
1956 2004-08-11 Fernando Perez <fperez@colorado.edu>
1960 2004-08-11 Fernando Perez <fperez@colorado.edu>
1957
1961
1958 * setup.py (isfile): Fix build so documentation gets updated for
1962 * setup.py (isfile): Fix build so documentation gets updated for
1959 rpms (it was only done for .tgz builds).
1963 rpms (it was only done for .tgz builds).
1960
1964
1961 2004-08-10 Fernando Perez <fperez@colorado.edu>
1965 2004-08-10 Fernando Perez <fperez@colorado.edu>
1962
1966
1963 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1967 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1964
1968
1965 * iplib.py : Silence syntax error exceptions in tab-completion.
1969 * iplib.py : Silence syntax error exceptions in tab-completion.
1966
1970
1967 2004-08-05 Fernando Perez <fperez@colorado.edu>
1971 2004-08-05 Fernando Perez <fperez@colorado.edu>
1968
1972
1969 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1973 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1970 'color off' mark for continuation prompts. This was causing long
1974 'color off' mark for continuation prompts. This was causing long
1971 continuation lines to mis-wrap.
1975 continuation lines to mis-wrap.
1972
1976
1973 2004-08-01 Fernando Perez <fperez@colorado.edu>
1977 2004-08-01 Fernando Perez <fperez@colorado.edu>
1974
1978
1975 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1979 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1976 for building ipython to be a parameter. All this is necessary
1980 for building ipython to be a parameter. All this is necessary
1977 right now to have a multithreaded version, but this insane
1981 right now to have a multithreaded version, but this insane
1978 non-design will be cleaned up soon. For now, it's a hack that
1982 non-design will be cleaned up soon. For now, it's a hack that
1979 works.
1983 works.
1980
1984
1981 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1985 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1982 args in various places. No bugs so far, but it's a dangerous
1986 args in various places. No bugs so far, but it's a dangerous
1983 practice.
1987 practice.
1984
1988
1985 2004-07-31 Fernando Perez <fperez@colorado.edu>
1989 2004-07-31 Fernando Perez <fperez@colorado.edu>
1986
1990
1987 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1991 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1988 fix completion of files with dots in their names under most
1992 fix completion of files with dots in their names under most
1989 profiles (pysh was OK because the completion order is different).
1993 profiles (pysh was OK because the completion order is different).
1990
1994
1991 2004-07-27 Fernando Perez <fperez@colorado.edu>
1995 2004-07-27 Fernando Perez <fperez@colorado.edu>
1992
1996
1993 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1997 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1994 keywords manually, b/c the one in keyword.py was removed in python
1998 keywords manually, b/c the one in keyword.py was removed in python
1995 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1999 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1996 This is NOT a bug under python 2.3 and earlier.
2000 This is NOT a bug under python 2.3 and earlier.
1997
2001
1998 2004-07-26 Fernando Perez <fperez@colorado.edu>
2002 2004-07-26 Fernando Perez <fperez@colorado.edu>
1999
2003
2000 * IPython/ultraTB.py (VerboseTB.text): Add another
2004 * IPython/ultraTB.py (VerboseTB.text): Add another
2001 linecache.checkcache() call to try to prevent inspect.py from
2005 linecache.checkcache() call to try to prevent inspect.py from
2002 crashing under python 2.3. I think this fixes
2006 crashing under python 2.3. I think this fixes
2003 http://www.scipy.net/roundup/ipython/issue17.
2007 http://www.scipy.net/roundup/ipython/issue17.
2004
2008
2005 2004-07-26 *** Released version 0.6.2
2009 2004-07-26 *** Released version 0.6.2
2006
2010
2007 2004-07-26 Fernando Perez <fperez@colorado.edu>
2011 2004-07-26 Fernando Perez <fperez@colorado.edu>
2008
2012
2009 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2013 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2010 fail for any number.
2014 fail for any number.
2011 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2015 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2012 empty bookmarks.
2016 empty bookmarks.
2013
2017
2014 2004-07-26 *** Released version 0.6.1
2018 2004-07-26 *** Released version 0.6.1
2015
2019
2016 2004-07-26 Fernando Perez <fperez@colorado.edu>
2020 2004-07-26 Fernando Perez <fperez@colorado.edu>
2017
2021
2018 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2022 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2019
2023
2020 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2024 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2021 escaping '()[]{}' in filenames.
2025 escaping '()[]{}' in filenames.
2022
2026
2023 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2027 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2024 Python 2.2 users who lack a proper shlex.split.
2028 Python 2.2 users who lack a proper shlex.split.
2025
2029
2026 2004-07-19 Fernando Perez <fperez@colorado.edu>
2030 2004-07-19 Fernando Perez <fperez@colorado.edu>
2027
2031
2028 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2032 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2029 for reading readline's init file. I follow the normal chain:
2033 for reading readline's init file. I follow the normal chain:
2030 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2034 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2031 report by Mike Heeter. This closes
2035 report by Mike Heeter. This closes
2032 http://www.scipy.net/roundup/ipython/issue16.
2036 http://www.scipy.net/roundup/ipython/issue16.
2033
2037
2034 2004-07-18 Fernando Perez <fperez@colorado.edu>
2038 2004-07-18 Fernando Perez <fperez@colorado.edu>
2035
2039
2036 * IPython/iplib.py (__init__): Add better handling of '\' under
2040 * IPython/iplib.py (__init__): Add better handling of '\' under
2037 Win32 for filenames. After a patch by Ville.
2041 Win32 for filenames. After a patch by Ville.
2038
2042
2039 2004-07-17 Fernando Perez <fperez@colorado.edu>
2043 2004-07-17 Fernando Perez <fperez@colorado.edu>
2040
2044
2041 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2045 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2042 autocalling would be triggered for 'foo is bar' if foo is
2046 autocalling would be triggered for 'foo is bar' if foo is
2043 callable. I also cleaned up the autocall detection code to use a
2047 callable. I also cleaned up the autocall detection code to use a
2044 regexp, which is faster. Bug reported by Alexander Schmolck.
2048 regexp, which is faster. Bug reported by Alexander Schmolck.
2045
2049
2046 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2050 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2047 '?' in them would confuse the help system. Reported by Alex
2051 '?' in them would confuse the help system. Reported by Alex
2048 Schmolck.
2052 Schmolck.
2049
2053
2050 2004-07-16 Fernando Perez <fperez@colorado.edu>
2054 2004-07-16 Fernando Perez <fperez@colorado.edu>
2051
2055
2052 * IPython/GnuplotInteractive.py (__all__): added plot2.
2056 * IPython/GnuplotInteractive.py (__all__): added plot2.
2053
2057
2054 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2058 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2055 plotting dictionaries, lists or tuples of 1d arrays.
2059 plotting dictionaries, lists or tuples of 1d arrays.
2056
2060
2057 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2061 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2058 optimizations.
2062 optimizations.
2059
2063
2060 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2064 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2061 the information which was there from Janko's original IPP code:
2065 the information which was there from Janko's original IPP code:
2062
2066
2063 03.05.99 20:53 porto.ifm.uni-kiel.de
2067 03.05.99 20:53 porto.ifm.uni-kiel.de
2064 --Started changelog.
2068 --Started changelog.
2065 --make clear do what it say it does
2069 --make clear do what it say it does
2066 --added pretty output of lines from inputcache
2070 --added pretty output of lines from inputcache
2067 --Made Logger a mixin class, simplifies handling of switches
2071 --Made Logger a mixin class, simplifies handling of switches
2068 --Added own completer class. .string<TAB> expands to last history
2072 --Added own completer class. .string<TAB> expands to last history
2069 line which starts with string. The new expansion is also present
2073 line which starts with string. The new expansion is also present
2070 with Ctrl-r from the readline library. But this shows, who this
2074 with Ctrl-r from the readline library. But this shows, who this
2071 can be done for other cases.
2075 can be done for other cases.
2072 --Added convention that all shell functions should accept a
2076 --Added convention that all shell functions should accept a
2073 parameter_string This opens the door for different behaviour for
2077 parameter_string This opens the door for different behaviour for
2074 each function. @cd is a good example of this.
2078 each function. @cd is a good example of this.
2075
2079
2076 04.05.99 12:12 porto.ifm.uni-kiel.de
2080 04.05.99 12:12 porto.ifm.uni-kiel.de
2077 --added logfile rotation
2081 --added logfile rotation
2078 --added new mainloop method which freezes first the namespace
2082 --added new mainloop method which freezes first the namespace
2079
2083
2080 07.05.99 21:24 porto.ifm.uni-kiel.de
2084 07.05.99 21:24 porto.ifm.uni-kiel.de
2081 --added the docreader classes. Now there is a help system.
2085 --added the docreader classes. Now there is a help system.
2082 -This is only a first try. Currently it's not easy to put new
2086 -This is only a first try. Currently it's not easy to put new
2083 stuff in the indices. But this is the way to go. Info would be
2087 stuff in the indices. But this is the way to go. Info would be
2084 better, but HTML is every where and not everybody has an info
2088 better, but HTML is every where and not everybody has an info
2085 system installed and it's not so easy to change html-docs to info.
2089 system installed and it's not so easy to change html-docs to info.
2086 --added global logfile option
2090 --added global logfile option
2087 --there is now a hook for object inspection method pinfo needs to
2091 --there is now a hook for object inspection method pinfo needs to
2088 be provided for this. Can be reached by two '??'.
2092 be provided for this. Can be reached by two '??'.
2089
2093
2090 08.05.99 20:51 porto.ifm.uni-kiel.de
2094 08.05.99 20:51 porto.ifm.uni-kiel.de
2091 --added a README
2095 --added a README
2092 --bug in rc file. Something has changed so functions in the rc
2096 --bug in rc file. Something has changed so functions in the rc
2093 file need to reference the shell and not self. Not clear if it's a
2097 file need to reference the shell and not self. Not clear if it's a
2094 bug or feature.
2098 bug or feature.
2095 --changed rc file for new behavior
2099 --changed rc file for new behavior
2096
2100
2097 2004-07-15 Fernando Perez <fperez@colorado.edu>
2101 2004-07-15 Fernando Perez <fperez@colorado.edu>
2098
2102
2099 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2103 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2100 cache was falling out of sync in bizarre manners when multi-line
2104 cache was falling out of sync in bizarre manners when multi-line
2101 input was present. Minor optimizations and cleanup.
2105 input was present. Minor optimizations and cleanup.
2102
2106
2103 (Logger): Remove old Changelog info for cleanup. This is the
2107 (Logger): Remove old Changelog info for cleanup. This is the
2104 information which was there from Janko's original code:
2108 information which was there from Janko's original code:
2105
2109
2106 Changes to Logger: - made the default log filename a parameter
2110 Changes to Logger: - made the default log filename a parameter
2107
2111
2108 - put a check for lines beginning with !@? in log(). Needed
2112 - put a check for lines beginning with !@? in log(). Needed
2109 (even if the handlers properly log their lines) for mid-session
2113 (even if the handlers properly log their lines) for mid-session
2110 logging activation to work properly. Without this, lines logged
2114 logging activation to work properly. Without this, lines logged
2111 in mid session, which get read from the cache, would end up
2115 in mid session, which get read from the cache, would end up
2112 'bare' (with !@? in the open) in the log. Now they are caught
2116 'bare' (with !@? in the open) in the log. Now they are caught
2113 and prepended with a #.
2117 and prepended with a #.
2114
2118
2115 * IPython/iplib.py (InteractiveShell.init_readline): added check
2119 * IPython/iplib.py (InteractiveShell.init_readline): added check
2116 in case MagicCompleter fails to be defined, so we don't crash.
2120 in case MagicCompleter fails to be defined, so we don't crash.
2117
2121
2118 2004-07-13 Fernando Perez <fperez@colorado.edu>
2122 2004-07-13 Fernando Perez <fperez@colorado.edu>
2119
2123
2120 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2124 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2121 of EPS if the requested filename ends in '.eps'.
2125 of EPS if the requested filename ends in '.eps'.
2122
2126
2123 2004-07-04 Fernando Perez <fperez@colorado.edu>
2127 2004-07-04 Fernando Perez <fperez@colorado.edu>
2124
2128
2125 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2129 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2126 escaping of quotes when calling the shell.
2130 escaping of quotes when calling the shell.
2127
2131
2128 2004-07-02 Fernando Perez <fperez@colorado.edu>
2132 2004-07-02 Fernando Perez <fperez@colorado.edu>
2129
2133
2130 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2134 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2131 gettext not working because we were clobbering '_'. Fixes
2135 gettext not working because we were clobbering '_'. Fixes
2132 http://www.scipy.net/roundup/ipython/issue6.
2136 http://www.scipy.net/roundup/ipython/issue6.
2133
2137
2134 2004-07-01 Fernando Perez <fperez@colorado.edu>
2138 2004-07-01 Fernando Perez <fperez@colorado.edu>
2135
2139
2136 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2140 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2137 into @cd. Patch by Ville.
2141 into @cd. Patch by Ville.
2138
2142
2139 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2143 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2140 new function to store things after ipmaker runs. Patch by Ville.
2144 new function to store things after ipmaker runs. Patch by Ville.
2141 Eventually this will go away once ipmaker is removed and the class
2145 Eventually this will go away once ipmaker is removed and the class
2142 gets cleaned up, but for now it's ok. Key functionality here is
2146 gets cleaned up, but for now it's ok. Key functionality here is
2143 the addition of the persistent storage mechanism, a dict for
2147 the addition of the persistent storage mechanism, a dict for
2144 keeping data across sessions (for now just bookmarks, but more can
2148 keeping data across sessions (for now just bookmarks, but more can
2145 be implemented later).
2149 be implemented later).
2146
2150
2147 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2151 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2148 persistent across sections. Patch by Ville, I modified it
2152 persistent across sections. Patch by Ville, I modified it
2149 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2153 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2150 added a '-l' option to list all bookmarks.
2154 added a '-l' option to list all bookmarks.
2151
2155
2152 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2156 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2153 center for cleanup. Registered with atexit.register(). I moved
2157 center for cleanup. Registered with atexit.register(). I moved
2154 here the old exit_cleanup(). After a patch by Ville.
2158 here the old exit_cleanup(). After a patch by Ville.
2155
2159
2156 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2160 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2157 characters in the hacked shlex_split for python 2.2.
2161 characters in the hacked shlex_split for python 2.2.
2158
2162
2159 * IPython/iplib.py (file_matches): more fixes to filenames with
2163 * IPython/iplib.py (file_matches): more fixes to filenames with
2160 whitespace in them. It's not perfect, but limitations in python's
2164 whitespace in them. It's not perfect, but limitations in python's
2161 readline make it impossible to go further.
2165 readline make it impossible to go further.
2162
2166
2163 2004-06-29 Fernando Perez <fperez@colorado.edu>
2167 2004-06-29 Fernando Perez <fperez@colorado.edu>
2164
2168
2165 * IPython/iplib.py (file_matches): escape whitespace correctly in
2169 * IPython/iplib.py (file_matches): escape whitespace correctly in
2166 filename completions. Bug reported by Ville.
2170 filename completions. Bug reported by Ville.
2167
2171
2168 2004-06-28 Fernando Perez <fperez@colorado.edu>
2172 2004-06-28 Fernando Perez <fperez@colorado.edu>
2169
2173
2170 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2174 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2171 the history file will be called 'history-PROFNAME' (or just
2175 the history file will be called 'history-PROFNAME' (or just
2172 'history' if no profile is loaded). I was getting annoyed at
2176 'history' if no profile is loaded). I was getting annoyed at
2173 getting my Numerical work history clobbered by pysh sessions.
2177 getting my Numerical work history clobbered by pysh sessions.
2174
2178
2175 * IPython/iplib.py (InteractiveShell.__init__): Internal
2179 * IPython/iplib.py (InteractiveShell.__init__): Internal
2176 getoutputerror() function so that we can honor the system_verbose
2180 getoutputerror() function so that we can honor the system_verbose
2177 flag for _all_ system calls. I also added escaping of #
2181 flag for _all_ system calls. I also added escaping of #
2178 characters here to avoid confusing Itpl.
2182 characters here to avoid confusing Itpl.
2179
2183
2180 * IPython/Magic.py (shlex_split): removed call to shell in
2184 * IPython/Magic.py (shlex_split): removed call to shell in
2181 parse_options and replaced it with shlex.split(). The annoying
2185 parse_options and replaced it with shlex.split(). The annoying
2182 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2186 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2183 to backport it from 2.3, with several frail hacks (the shlex
2187 to backport it from 2.3, with several frail hacks (the shlex
2184 module is rather limited in 2.2). Thanks to a suggestion by Ville
2188 module is rather limited in 2.2). Thanks to a suggestion by Ville
2185 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2189 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2186 problem.
2190 problem.
2187
2191
2188 (Magic.magic_system_verbose): new toggle to print the actual
2192 (Magic.magic_system_verbose): new toggle to print the actual
2189 system calls made by ipython. Mainly for debugging purposes.
2193 system calls made by ipython. Mainly for debugging purposes.
2190
2194
2191 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2195 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2192 doesn't support persistence. Reported (and fix suggested) by
2196 doesn't support persistence. Reported (and fix suggested) by
2193 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2197 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2194
2198
2195 2004-06-26 Fernando Perez <fperez@colorado.edu>
2199 2004-06-26 Fernando Perez <fperez@colorado.edu>
2196
2200
2197 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2201 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2198 continue prompts.
2202 continue prompts.
2199
2203
2200 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2204 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2201 function (basically a big docstring) and a few more things here to
2205 function (basically a big docstring) and a few more things here to
2202 speedup startup. pysh.py is now very lightweight. We want because
2206 speedup startup. pysh.py is now very lightweight. We want because
2203 it gets execfile'd, while InterpreterExec gets imported, so
2207 it gets execfile'd, while InterpreterExec gets imported, so
2204 byte-compilation saves time.
2208 byte-compilation saves time.
2205
2209
2206 2004-06-25 Fernando Perez <fperez@colorado.edu>
2210 2004-06-25 Fernando Perez <fperez@colorado.edu>
2207
2211
2208 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2212 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2209 -NUM', which was recently broken.
2213 -NUM', which was recently broken.
2210
2214
2211 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2215 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2212 in multi-line input (but not !!, which doesn't make sense there).
2216 in multi-line input (but not !!, which doesn't make sense there).
2213
2217
2214 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2218 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2215 It's just too useful, and people can turn it off in the less
2219 It's just too useful, and people can turn it off in the less
2216 common cases where it's a problem.
2220 common cases where it's a problem.
2217
2221
2218 2004-06-24 Fernando Perez <fperez@colorado.edu>
2222 2004-06-24 Fernando Perez <fperez@colorado.edu>
2219
2223
2220 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2224 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2221 special syntaxes (like alias calling) is now allied in multi-line
2225 special syntaxes (like alias calling) is now allied in multi-line
2222 input. This is still _very_ experimental, but it's necessary for
2226 input. This is still _very_ experimental, but it's necessary for
2223 efficient shell usage combining python looping syntax with system
2227 efficient shell usage combining python looping syntax with system
2224 calls. For now it's restricted to aliases, I don't think it
2228 calls. For now it's restricted to aliases, I don't think it
2225 really even makes sense to have this for magics.
2229 really even makes sense to have this for magics.
2226
2230
2227 2004-06-23 Fernando Perez <fperez@colorado.edu>
2231 2004-06-23 Fernando Perez <fperez@colorado.edu>
2228
2232
2229 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2233 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2230 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2234 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2231
2235
2232 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2236 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2233 extensions under Windows (after code sent by Gary Bishop). The
2237 extensions under Windows (after code sent by Gary Bishop). The
2234 extensions considered 'executable' are stored in IPython's rc
2238 extensions considered 'executable' are stored in IPython's rc
2235 structure as win_exec_ext.
2239 structure as win_exec_ext.
2236
2240
2237 * IPython/genutils.py (shell): new function, like system() but
2241 * IPython/genutils.py (shell): new function, like system() but
2238 without return value. Very useful for interactive shell work.
2242 without return value. Very useful for interactive shell work.
2239
2243
2240 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2244 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2241 delete aliases.
2245 delete aliases.
2242
2246
2243 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2247 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2244 sure that the alias table doesn't contain python keywords.
2248 sure that the alias table doesn't contain python keywords.
2245
2249
2246 2004-06-21 Fernando Perez <fperez@colorado.edu>
2250 2004-06-21 Fernando Perez <fperez@colorado.edu>
2247
2251
2248 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2252 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2249 non-existent items are found in $PATH. Reported by Thorsten.
2253 non-existent items are found in $PATH. Reported by Thorsten.
2250
2254
2251 2004-06-20 Fernando Perez <fperez@colorado.edu>
2255 2004-06-20 Fernando Perez <fperez@colorado.edu>
2252
2256
2253 * IPython/iplib.py (complete): modified the completer so that the
2257 * IPython/iplib.py (complete): modified the completer so that the
2254 order of priorities can be easily changed at runtime.
2258 order of priorities can be easily changed at runtime.
2255
2259
2256 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2260 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2257 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2261 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2258
2262
2259 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2263 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2260 expand Python variables prepended with $ in all system calls. The
2264 expand Python variables prepended with $ in all system calls. The
2261 same was done to InteractiveShell.handle_shell_escape. Now all
2265 same was done to InteractiveShell.handle_shell_escape. Now all
2262 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2266 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2263 expansion of python variables and expressions according to the
2267 expansion of python variables and expressions according to the
2264 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2268 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2265
2269
2266 Though PEP-215 has been rejected, a similar (but simpler) one
2270 Though PEP-215 has been rejected, a similar (but simpler) one
2267 seems like it will go into Python 2.4, PEP-292 -
2271 seems like it will go into Python 2.4, PEP-292 -
2268 http://www.python.org/peps/pep-0292.html.
2272 http://www.python.org/peps/pep-0292.html.
2269
2273
2270 I'll keep the full syntax of PEP-215, since IPython has since the
2274 I'll keep the full syntax of PEP-215, since IPython has since the
2271 start used Ka-Ping Yee's reference implementation discussed there
2275 start used Ka-Ping Yee's reference implementation discussed there
2272 (Itpl), and I actually like the powerful semantics it offers.
2276 (Itpl), and I actually like the powerful semantics it offers.
2273
2277
2274 In order to access normal shell variables, the $ has to be escaped
2278 In order to access normal shell variables, the $ has to be escaped
2275 via an extra $. For example:
2279 via an extra $. For example:
2276
2280
2277 In [7]: PATH='a python variable'
2281 In [7]: PATH='a python variable'
2278
2282
2279 In [8]: !echo $PATH
2283 In [8]: !echo $PATH
2280 a python variable
2284 a python variable
2281
2285
2282 In [9]: !echo $$PATH
2286 In [9]: !echo $$PATH
2283 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2287 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2284
2288
2285 (Magic.parse_options): escape $ so the shell doesn't evaluate
2289 (Magic.parse_options): escape $ so the shell doesn't evaluate
2286 things prematurely.
2290 things prematurely.
2287
2291
2288 * IPython/iplib.py (InteractiveShell.call_alias): added the
2292 * IPython/iplib.py (InteractiveShell.call_alias): added the
2289 ability for aliases to expand python variables via $.
2293 ability for aliases to expand python variables via $.
2290
2294
2291 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2295 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2292 system, now there's a @rehash/@rehashx pair of magics. These work
2296 system, now there's a @rehash/@rehashx pair of magics. These work
2293 like the csh rehash command, and can be invoked at any time. They
2297 like the csh rehash command, and can be invoked at any time. They
2294 build a table of aliases to everything in the user's $PATH
2298 build a table of aliases to everything in the user's $PATH
2295 (@rehash uses everything, @rehashx is slower but only adds
2299 (@rehash uses everything, @rehashx is slower but only adds
2296 executable files). With this, the pysh.py-based shell profile can
2300 executable files). With this, the pysh.py-based shell profile can
2297 now simply call rehash upon startup, and full access to all
2301 now simply call rehash upon startup, and full access to all
2298 programs in the user's path is obtained.
2302 programs in the user's path is obtained.
2299
2303
2300 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2304 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2301 functionality is now fully in place. I removed the old dynamic
2305 functionality is now fully in place. I removed the old dynamic
2302 code generation based approach, in favor of a much lighter one
2306 code generation based approach, in favor of a much lighter one
2303 based on a simple dict. The advantage is that this allows me to
2307 based on a simple dict. The advantage is that this allows me to
2304 now have thousands of aliases with negligible cost (unthinkable
2308 now have thousands of aliases with negligible cost (unthinkable
2305 with the old system).
2309 with the old system).
2306
2310
2307 2004-06-19 Fernando Perez <fperez@colorado.edu>
2311 2004-06-19 Fernando Perez <fperez@colorado.edu>
2308
2312
2309 * IPython/iplib.py (__init__): extended MagicCompleter class to
2313 * IPython/iplib.py (__init__): extended MagicCompleter class to
2310 also complete (last in priority) on user aliases.
2314 also complete (last in priority) on user aliases.
2311
2315
2312 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2316 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2313 call to eval.
2317 call to eval.
2314 (ItplNS.__init__): Added a new class which functions like Itpl,
2318 (ItplNS.__init__): Added a new class which functions like Itpl,
2315 but allows configuring the namespace for the evaluation to occur
2319 but allows configuring the namespace for the evaluation to occur
2316 in.
2320 in.
2317
2321
2318 2004-06-18 Fernando Perez <fperez@colorado.edu>
2322 2004-06-18 Fernando Perez <fperez@colorado.edu>
2319
2323
2320 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2324 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2321 better message when 'exit' or 'quit' are typed (a common newbie
2325 better message when 'exit' or 'quit' are typed (a common newbie
2322 confusion).
2326 confusion).
2323
2327
2324 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2328 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2325 check for Windows users.
2329 check for Windows users.
2326
2330
2327 * IPython/iplib.py (InteractiveShell.user_setup): removed
2331 * IPython/iplib.py (InteractiveShell.user_setup): removed
2328 disabling of colors for Windows. I'll test at runtime and issue a
2332 disabling of colors for Windows. I'll test at runtime and issue a
2329 warning if Gary's readline isn't found, as to nudge users to
2333 warning if Gary's readline isn't found, as to nudge users to
2330 download it.
2334 download it.
2331
2335
2332 2004-06-16 Fernando Perez <fperez@colorado.edu>
2336 2004-06-16 Fernando Perez <fperez@colorado.edu>
2333
2337
2334 * IPython/genutils.py (Stream.__init__): changed to print errors
2338 * IPython/genutils.py (Stream.__init__): changed to print errors
2335 to sys.stderr. I had a circular dependency here. Now it's
2339 to sys.stderr. I had a circular dependency here. Now it's
2336 possible to run ipython as IDLE's shell (consider this pre-alpha,
2340 possible to run ipython as IDLE's shell (consider this pre-alpha,
2337 since true stdout things end up in the starting terminal instead
2341 since true stdout things end up in the starting terminal instead
2338 of IDLE's out).
2342 of IDLE's out).
2339
2343
2340 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2344 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2341 users who haven't # updated their prompt_in2 definitions. Remove
2345 users who haven't # updated their prompt_in2 definitions. Remove
2342 eventually.
2346 eventually.
2343 (multiple_replace): added credit to original ASPN recipe.
2347 (multiple_replace): added credit to original ASPN recipe.
2344
2348
2345 2004-06-15 Fernando Perez <fperez@colorado.edu>
2349 2004-06-15 Fernando Perez <fperez@colorado.edu>
2346
2350
2347 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2351 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2348 list of auto-defined aliases.
2352 list of auto-defined aliases.
2349
2353
2350 2004-06-13 Fernando Perez <fperez@colorado.edu>
2354 2004-06-13 Fernando Perez <fperez@colorado.edu>
2351
2355
2352 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2356 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2353 install was really requested (so setup.py can be used for other
2357 install was really requested (so setup.py can be used for other
2354 things under Windows).
2358 things under Windows).
2355
2359
2356 2004-06-10 Fernando Perez <fperez@colorado.edu>
2360 2004-06-10 Fernando Perez <fperez@colorado.edu>
2357
2361
2358 * IPython/Logger.py (Logger.create_log): Manually remove any old
2362 * IPython/Logger.py (Logger.create_log): Manually remove any old
2359 backup, since os.remove may fail under Windows. Fixes bug
2363 backup, since os.remove may fail under Windows. Fixes bug
2360 reported by Thorsten.
2364 reported by Thorsten.
2361
2365
2362 2004-06-09 Fernando Perez <fperez@colorado.edu>
2366 2004-06-09 Fernando Perez <fperez@colorado.edu>
2363
2367
2364 * examples/example-embed.py: fixed all references to %n (replaced
2368 * examples/example-embed.py: fixed all references to %n (replaced
2365 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2369 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2366 for all examples and the manual as well.
2370 for all examples and the manual as well.
2367
2371
2368 2004-06-08 Fernando Perez <fperez@colorado.edu>
2372 2004-06-08 Fernando Perez <fperez@colorado.edu>
2369
2373
2370 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2374 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2371 alignment and color management. All 3 prompt subsystems now
2375 alignment and color management. All 3 prompt subsystems now
2372 inherit from BasePrompt.
2376 inherit from BasePrompt.
2373
2377
2374 * tools/release: updates for windows installer build and tag rpms
2378 * tools/release: updates for windows installer build and tag rpms
2375 with python version (since paths are fixed).
2379 with python version (since paths are fixed).
2376
2380
2377 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2381 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2378 which will become eventually obsolete. Also fixed the default
2382 which will become eventually obsolete. Also fixed the default
2379 prompt_in2 to use \D, so at least new users start with the correct
2383 prompt_in2 to use \D, so at least new users start with the correct
2380 defaults.
2384 defaults.
2381 WARNING: Users with existing ipythonrc files will need to apply
2385 WARNING: Users with existing ipythonrc files will need to apply
2382 this fix manually!
2386 this fix manually!
2383
2387
2384 * setup.py: make windows installer (.exe). This is finally the
2388 * setup.py: make windows installer (.exe). This is finally the
2385 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2389 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2386 which I hadn't included because it required Python 2.3 (or recent
2390 which I hadn't included because it required Python 2.3 (or recent
2387 distutils).
2391 distutils).
2388
2392
2389 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2393 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2390 usage of new '\D' escape.
2394 usage of new '\D' escape.
2391
2395
2392 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2396 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2393 lacks os.getuid())
2397 lacks os.getuid())
2394 (CachedOutput.set_colors): Added the ability to turn coloring
2398 (CachedOutput.set_colors): Added the ability to turn coloring
2395 on/off with @colors even for manually defined prompt colors. It
2399 on/off with @colors even for manually defined prompt colors. It
2396 uses a nasty global, but it works safely and via the generic color
2400 uses a nasty global, but it works safely and via the generic color
2397 handling mechanism.
2401 handling mechanism.
2398 (Prompt2.__init__): Introduced new escape '\D' for continuation
2402 (Prompt2.__init__): Introduced new escape '\D' for continuation
2399 prompts. It represents the counter ('\#') as dots.
2403 prompts. It represents the counter ('\#') as dots.
2400 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2404 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2401 need to update their ipythonrc files and replace '%n' with '\D' in
2405 need to update their ipythonrc files and replace '%n' with '\D' in
2402 their prompt_in2 settings everywhere. Sorry, but there's
2406 their prompt_in2 settings everywhere. Sorry, but there's
2403 otherwise no clean way to get all prompts to properly align. The
2407 otherwise no clean way to get all prompts to properly align. The
2404 ipythonrc shipped with IPython has been updated.
2408 ipythonrc shipped with IPython has been updated.
2405
2409
2406 2004-06-07 Fernando Perez <fperez@colorado.edu>
2410 2004-06-07 Fernando Perez <fperez@colorado.edu>
2407
2411
2408 * setup.py (isfile): Pass local_icons option to latex2html, so the
2412 * setup.py (isfile): Pass local_icons option to latex2html, so the
2409 resulting HTML file is self-contained. Thanks to
2413 resulting HTML file is self-contained. Thanks to
2410 dryice-AT-liu.com.cn for the tip.
2414 dryice-AT-liu.com.cn for the tip.
2411
2415
2412 * pysh.py: I created a new profile 'shell', which implements a
2416 * pysh.py: I created a new profile 'shell', which implements a
2413 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2417 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2414 system shell, nor will it become one anytime soon. It's mainly
2418 system shell, nor will it become one anytime soon. It's mainly
2415 meant to illustrate the use of the new flexible bash-like prompts.
2419 meant to illustrate the use of the new flexible bash-like prompts.
2416 I guess it could be used by hardy souls for true shell management,
2420 I guess it could be used by hardy souls for true shell management,
2417 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2421 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2418 profile. This uses the InterpreterExec extension provided by
2422 profile. This uses the InterpreterExec extension provided by
2419 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2423 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2420
2424
2421 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2425 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2422 auto-align itself with the length of the previous input prompt
2426 auto-align itself with the length of the previous input prompt
2423 (taking into account the invisible color escapes).
2427 (taking into account the invisible color escapes).
2424 (CachedOutput.__init__): Large restructuring of this class. Now
2428 (CachedOutput.__init__): Large restructuring of this class. Now
2425 all three prompts (primary1, primary2, output) are proper objects,
2429 all three prompts (primary1, primary2, output) are proper objects,
2426 managed by the 'parent' CachedOutput class. The code is still a
2430 managed by the 'parent' CachedOutput class. The code is still a
2427 bit hackish (all prompts share state via a pointer to the cache),
2431 bit hackish (all prompts share state via a pointer to the cache),
2428 but it's overall far cleaner than before.
2432 but it's overall far cleaner than before.
2429
2433
2430 * IPython/genutils.py (getoutputerror): modified to add verbose,
2434 * IPython/genutils.py (getoutputerror): modified to add verbose,
2431 debug and header options. This makes the interface of all getout*
2435 debug and header options. This makes the interface of all getout*
2432 functions uniform.
2436 functions uniform.
2433 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2437 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2434
2438
2435 * IPython/Magic.py (Magic.default_option): added a function to
2439 * IPython/Magic.py (Magic.default_option): added a function to
2436 allow registering default options for any magic command. This
2440 allow registering default options for any magic command. This
2437 makes it easy to have profiles which customize the magics globally
2441 makes it easy to have profiles which customize the magics globally
2438 for a certain use. The values set through this function are
2442 for a certain use. The values set through this function are
2439 picked up by the parse_options() method, which all magics should
2443 picked up by the parse_options() method, which all magics should
2440 use to parse their options.
2444 use to parse their options.
2441
2445
2442 * IPython/genutils.py (warn): modified the warnings framework to
2446 * IPython/genutils.py (warn): modified the warnings framework to
2443 use the Term I/O class. I'm trying to slowly unify all of
2447 use the Term I/O class. I'm trying to slowly unify all of
2444 IPython's I/O operations to pass through Term.
2448 IPython's I/O operations to pass through Term.
2445
2449
2446 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2450 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2447 the secondary prompt to correctly match the length of the primary
2451 the secondary prompt to correctly match the length of the primary
2448 one for any prompt. Now multi-line code will properly line up
2452 one for any prompt. Now multi-line code will properly line up
2449 even for path dependent prompts, such as the new ones available
2453 even for path dependent prompts, such as the new ones available
2450 via the prompt_specials.
2454 via the prompt_specials.
2451
2455
2452 2004-06-06 Fernando Perez <fperez@colorado.edu>
2456 2004-06-06 Fernando Perez <fperez@colorado.edu>
2453
2457
2454 * IPython/Prompts.py (prompt_specials): Added the ability to have
2458 * IPython/Prompts.py (prompt_specials): Added the ability to have
2455 bash-like special sequences in the prompts, which get
2459 bash-like special sequences in the prompts, which get
2456 automatically expanded. Things like hostname, current working
2460 automatically expanded. Things like hostname, current working
2457 directory and username are implemented already, but it's easy to
2461 directory and username are implemented already, but it's easy to
2458 add more in the future. Thanks to a patch by W.J. van der Laan
2462 add more in the future. Thanks to a patch by W.J. van der Laan
2459 <gnufnork-AT-hetdigitalegat.nl>
2463 <gnufnork-AT-hetdigitalegat.nl>
2460 (prompt_specials): Added color support for prompt strings, so
2464 (prompt_specials): Added color support for prompt strings, so
2461 users can define arbitrary color setups for their prompts.
2465 users can define arbitrary color setups for their prompts.
2462
2466
2463 2004-06-05 Fernando Perez <fperez@colorado.edu>
2467 2004-06-05 Fernando Perez <fperez@colorado.edu>
2464
2468
2465 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2469 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2466 code to load Gary Bishop's readline and configure it
2470 code to load Gary Bishop's readline and configure it
2467 automatically. Thanks to Gary for help on this.
2471 automatically. Thanks to Gary for help on this.
2468
2472
2469 2004-06-01 Fernando Perez <fperez@colorado.edu>
2473 2004-06-01 Fernando Perez <fperez@colorado.edu>
2470
2474
2471 * IPython/Logger.py (Logger.create_log): fix bug for logging
2475 * IPython/Logger.py (Logger.create_log): fix bug for logging
2472 with no filename (previous fix was incomplete).
2476 with no filename (previous fix was incomplete).
2473
2477
2474 2004-05-25 Fernando Perez <fperez@colorado.edu>
2478 2004-05-25 Fernando Perez <fperez@colorado.edu>
2475
2479
2476 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2480 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2477 parens would get passed to the shell.
2481 parens would get passed to the shell.
2478
2482
2479 2004-05-20 Fernando Perez <fperez@colorado.edu>
2483 2004-05-20 Fernando Perez <fperez@colorado.edu>
2480
2484
2481 * IPython/Magic.py (Magic.magic_prun): changed default profile
2485 * IPython/Magic.py (Magic.magic_prun): changed default profile
2482 sort order to 'time' (the more common profiling need).
2486 sort order to 'time' (the more common profiling need).
2483
2487
2484 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2488 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2485 so that source code shown is guaranteed in sync with the file on
2489 so that source code shown is guaranteed in sync with the file on
2486 disk (also changed in psource). Similar fix to the one for
2490 disk (also changed in psource). Similar fix to the one for
2487 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2491 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2488 <yann.ledu-AT-noos.fr>.
2492 <yann.ledu-AT-noos.fr>.
2489
2493
2490 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2494 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2491 with a single option would not be correctly parsed. Closes
2495 with a single option would not be correctly parsed. Closes
2492 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2496 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2493 introduced in 0.6.0 (on 2004-05-06).
2497 introduced in 0.6.0 (on 2004-05-06).
2494
2498
2495 2004-05-13 *** Released version 0.6.0
2499 2004-05-13 *** Released version 0.6.0
2496
2500
2497 2004-05-13 Fernando Perez <fperez@colorado.edu>
2501 2004-05-13 Fernando Perez <fperez@colorado.edu>
2498
2502
2499 * debian/: Added debian/ directory to CVS, so that debian support
2503 * debian/: Added debian/ directory to CVS, so that debian support
2500 is publicly accessible. The debian package is maintained by Jack
2504 is publicly accessible. The debian package is maintained by Jack
2501 Moffit <jack-AT-xiph.org>.
2505 Moffit <jack-AT-xiph.org>.
2502
2506
2503 * Documentation: included the notes about an ipython-based system
2507 * Documentation: included the notes about an ipython-based system
2504 shell (the hypothetical 'pysh') into the new_design.pdf document,
2508 shell (the hypothetical 'pysh') into the new_design.pdf document,
2505 so that these ideas get distributed to users along with the
2509 so that these ideas get distributed to users along with the
2506 official documentation.
2510 official documentation.
2507
2511
2508 2004-05-10 Fernando Perez <fperez@colorado.edu>
2512 2004-05-10 Fernando Perez <fperez@colorado.edu>
2509
2513
2510 * IPython/Logger.py (Logger.create_log): fix recently introduced
2514 * IPython/Logger.py (Logger.create_log): fix recently introduced
2511 bug (misindented line) where logstart would fail when not given an
2515 bug (misindented line) where logstart would fail when not given an
2512 explicit filename.
2516 explicit filename.
2513
2517
2514 2004-05-09 Fernando Perez <fperez@colorado.edu>
2518 2004-05-09 Fernando Perez <fperez@colorado.edu>
2515
2519
2516 * IPython/Magic.py (Magic.parse_options): skip system call when
2520 * IPython/Magic.py (Magic.parse_options): skip system call when
2517 there are no options to look for. Faster, cleaner for the common
2521 there are no options to look for. Faster, cleaner for the common
2518 case.
2522 case.
2519
2523
2520 * Documentation: many updates to the manual: describing Windows
2524 * Documentation: many updates to the manual: describing Windows
2521 support better, Gnuplot updates, credits, misc small stuff. Also
2525 support better, Gnuplot updates, credits, misc small stuff. Also
2522 updated the new_design doc a bit.
2526 updated the new_design doc a bit.
2523
2527
2524 2004-05-06 *** Released version 0.6.0.rc1
2528 2004-05-06 *** Released version 0.6.0.rc1
2525
2529
2526 2004-05-06 Fernando Perez <fperez@colorado.edu>
2530 2004-05-06 Fernando Perez <fperez@colorado.edu>
2527
2531
2528 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2532 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2529 operations to use the vastly more efficient list/''.join() method.
2533 operations to use the vastly more efficient list/''.join() method.
2530 (FormattedTB.text): Fix
2534 (FormattedTB.text): Fix
2531 http://www.scipy.net/roundup/ipython/issue12 - exception source
2535 http://www.scipy.net/roundup/ipython/issue12 - exception source
2532 extract not updated after reload. Thanks to Mike Salib
2536 extract not updated after reload. Thanks to Mike Salib
2533 <msalib-AT-mit.edu> for pinning the source of the problem.
2537 <msalib-AT-mit.edu> for pinning the source of the problem.
2534 Fortunately, the solution works inside ipython and doesn't require
2538 Fortunately, the solution works inside ipython and doesn't require
2535 any changes to python proper.
2539 any changes to python proper.
2536
2540
2537 * IPython/Magic.py (Magic.parse_options): Improved to process the
2541 * IPython/Magic.py (Magic.parse_options): Improved to process the
2538 argument list as a true shell would (by actually using the
2542 argument list as a true shell would (by actually using the
2539 underlying system shell). This way, all @magics automatically get
2543 underlying system shell). This way, all @magics automatically get
2540 shell expansion for variables. Thanks to a comment by Alex
2544 shell expansion for variables. Thanks to a comment by Alex
2541 Schmolck.
2545 Schmolck.
2542
2546
2543 2004-04-04 Fernando Perez <fperez@colorado.edu>
2547 2004-04-04 Fernando Perez <fperez@colorado.edu>
2544
2548
2545 * IPython/iplib.py (InteractiveShell.interact): Added a special
2549 * IPython/iplib.py (InteractiveShell.interact): Added a special
2546 trap for a debugger quit exception, which is basically impossible
2550 trap for a debugger quit exception, which is basically impossible
2547 to handle by normal mechanisms, given what pdb does to the stack.
2551 to handle by normal mechanisms, given what pdb does to the stack.
2548 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2552 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2549
2553
2550 2004-04-03 Fernando Perez <fperez@colorado.edu>
2554 2004-04-03 Fernando Perez <fperez@colorado.edu>
2551
2555
2552 * IPython/genutils.py (Term): Standardized the names of the Term
2556 * IPython/genutils.py (Term): Standardized the names of the Term
2553 class streams to cin/cout/cerr, following C++ naming conventions
2557 class streams to cin/cout/cerr, following C++ naming conventions
2554 (I can't use in/out/err because 'in' is not a valid attribute
2558 (I can't use in/out/err because 'in' is not a valid attribute
2555 name).
2559 name).
2556
2560
2557 * IPython/iplib.py (InteractiveShell.interact): don't increment
2561 * IPython/iplib.py (InteractiveShell.interact): don't increment
2558 the prompt if there's no user input. By Daniel 'Dang' Griffith
2562 the prompt if there's no user input. By Daniel 'Dang' Griffith
2559 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2563 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2560 Francois Pinard.
2564 Francois Pinard.
2561
2565
2562 2004-04-02 Fernando Perez <fperez@colorado.edu>
2566 2004-04-02 Fernando Perez <fperez@colorado.edu>
2563
2567
2564 * IPython/genutils.py (Stream.__init__): Modified to survive at
2568 * IPython/genutils.py (Stream.__init__): Modified to survive at
2565 least importing in contexts where stdin/out/err aren't true file
2569 least importing in contexts where stdin/out/err aren't true file
2566 objects, such as PyCrust (they lack fileno() and mode). However,
2570 objects, such as PyCrust (they lack fileno() and mode). However,
2567 the recovery facilities which rely on these things existing will
2571 the recovery facilities which rely on these things existing will
2568 not work.
2572 not work.
2569
2573
2570 2004-04-01 Fernando Perez <fperez@colorado.edu>
2574 2004-04-01 Fernando Perez <fperez@colorado.edu>
2571
2575
2572 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2576 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2573 use the new getoutputerror() function, so it properly
2577 use the new getoutputerror() function, so it properly
2574 distinguishes stdout/err.
2578 distinguishes stdout/err.
2575
2579
2576 * IPython/genutils.py (getoutputerror): added a function to
2580 * IPython/genutils.py (getoutputerror): added a function to
2577 capture separately the standard output and error of a command.
2581 capture separately the standard output and error of a command.
2578 After a comment from dang on the mailing lists. This code is
2582 After a comment from dang on the mailing lists. This code is
2579 basically a modified version of commands.getstatusoutput(), from
2583 basically a modified version of commands.getstatusoutput(), from
2580 the standard library.
2584 the standard library.
2581
2585
2582 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2586 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2583 '!!' as a special syntax (shorthand) to access @sx.
2587 '!!' as a special syntax (shorthand) to access @sx.
2584
2588
2585 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2589 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2586 command and return its output as a list split on '\n'.
2590 command and return its output as a list split on '\n'.
2587
2591
2588 2004-03-31 Fernando Perez <fperez@colorado.edu>
2592 2004-03-31 Fernando Perez <fperez@colorado.edu>
2589
2593
2590 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2594 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2591 method to dictionaries used as FakeModule instances if they lack
2595 method to dictionaries used as FakeModule instances if they lack
2592 it. At least pydoc in python2.3 breaks for runtime-defined
2596 it. At least pydoc in python2.3 breaks for runtime-defined
2593 functions without this hack. At some point I need to _really_
2597 functions without this hack. At some point I need to _really_
2594 understand what FakeModule is doing, because it's a gross hack.
2598 understand what FakeModule is doing, because it's a gross hack.
2595 But it solves Arnd's problem for now...
2599 But it solves Arnd's problem for now...
2596
2600
2597 2004-02-27 Fernando Perez <fperez@colorado.edu>
2601 2004-02-27 Fernando Perez <fperez@colorado.edu>
2598
2602
2599 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2603 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2600 mode would behave erratically. Also increased the number of
2604 mode would behave erratically. Also increased the number of
2601 possible logs in rotate mod to 999. Thanks to Rod Holland
2605 possible logs in rotate mod to 999. Thanks to Rod Holland
2602 <rhh@StructureLABS.com> for the report and fixes.
2606 <rhh@StructureLABS.com> for the report and fixes.
2603
2607
2604 2004-02-26 Fernando Perez <fperez@colorado.edu>
2608 2004-02-26 Fernando Perez <fperez@colorado.edu>
2605
2609
2606 * IPython/genutils.py (page): Check that the curses module really
2610 * IPython/genutils.py (page): Check that the curses module really
2607 has the initscr attribute before trying to use it. For some
2611 has the initscr attribute before trying to use it. For some
2608 reason, the Solaris curses module is missing this. I think this
2612 reason, the Solaris curses module is missing this. I think this
2609 should be considered a Solaris python bug, but I'm not sure.
2613 should be considered a Solaris python bug, but I'm not sure.
2610
2614
2611 2004-01-17 Fernando Perez <fperez@colorado.edu>
2615 2004-01-17 Fernando Perez <fperez@colorado.edu>
2612
2616
2613 * IPython/genutils.py (Stream.__init__): Changes to try to make
2617 * IPython/genutils.py (Stream.__init__): Changes to try to make
2614 ipython robust against stdin/out/err being closed by the user.
2618 ipython robust against stdin/out/err being closed by the user.
2615 This is 'user error' (and blocks a normal python session, at least
2619 This is 'user error' (and blocks a normal python session, at least
2616 the stdout case). However, Ipython should be able to survive such
2620 the stdout case). However, Ipython should be able to survive such
2617 instances of abuse as gracefully as possible. To simplify the
2621 instances of abuse as gracefully as possible. To simplify the
2618 coding and maintain compatibility with Gary Bishop's Term
2622 coding and maintain compatibility with Gary Bishop's Term
2619 contributions, I've made use of classmethods for this. I think
2623 contributions, I've made use of classmethods for this. I think
2620 this introduces a dependency on python 2.2.
2624 this introduces a dependency on python 2.2.
2621
2625
2622 2004-01-13 Fernando Perez <fperez@colorado.edu>
2626 2004-01-13 Fernando Perez <fperez@colorado.edu>
2623
2627
2624 * IPython/numutils.py (exp_safe): simplified the code a bit and
2628 * IPython/numutils.py (exp_safe): simplified the code a bit and
2625 removed the need for importing the kinds module altogether.
2629 removed the need for importing the kinds module altogether.
2626
2630
2627 2004-01-06 Fernando Perez <fperez@colorado.edu>
2631 2004-01-06 Fernando Perez <fperez@colorado.edu>
2628
2632
2629 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2633 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2630 a magic function instead, after some community feedback. No
2634 a magic function instead, after some community feedback. No
2631 special syntax will exist for it, but its name is deliberately
2635 special syntax will exist for it, but its name is deliberately
2632 very short.
2636 very short.
2633
2637
2634 2003-12-20 Fernando Perez <fperez@colorado.edu>
2638 2003-12-20 Fernando Perez <fperez@colorado.edu>
2635
2639
2636 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2640 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2637 new functionality, to automagically assign the result of a shell
2641 new functionality, to automagically assign the result of a shell
2638 command to a variable. I'll solicit some community feedback on
2642 command to a variable. I'll solicit some community feedback on
2639 this before making it permanent.
2643 this before making it permanent.
2640
2644
2641 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2645 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2642 requested about callables for which inspect couldn't obtain a
2646 requested about callables for which inspect couldn't obtain a
2643 proper argspec. Thanks to a crash report sent by Etienne
2647 proper argspec. Thanks to a crash report sent by Etienne
2644 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2648 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2645
2649
2646 2003-12-09 Fernando Perez <fperez@colorado.edu>
2650 2003-12-09 Fernando Perez <fperez@colorado.edu>
2647
2651
2648 * IPython/genutils.py (page): patch for the pager to work across
2652 * IPython/genutils.py (page): patch for the pager to work across
2649 various versions of Windows. By Gary Bishop.
2653 various versions of Windows. By Gary Bishop.
2650
2654
2651 2003-12-04 Fernando Perez <fperez@colorado.edu>
2655 2003-12-04 Fernando Perez <fperez@colorado.edu>
2652
2656
2653 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2657 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2654 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2658 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2655 While I tested this and it looks ok, there may still be corner
2659 While I tested this and it looks ok, there may still be corner
2656 cases I've missed.
2660 cases I've missed.
2657
2661
2658 2003-12-01 Fernando Perez <fperez@colorado.edu>
2662 2003-12-01 Fernando Perez <fperez@colorado.edu>
2659
2663
2660 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2664 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2661 where a line like 'p,q=1,2' would fail because the automagic
2665 where a line like 'p,q=1,2' would fail because the automagic
2662 system would be triggered for @p.
2666 system would be triggered for @p.
2663
2667
2664 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2668 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2665 cleanups, code unmodified.
2669 cleanups, code unmodified.
2666
2670
2667 * IPython/genutils.py (Term): added a class for IPython to handle
2671 * IPython/genutils.py (Term): added a class for IPython to handle
2668 output. In most cases it will just be a proxy for stdout/err, but
2672 output. In most cases it will just be a proxy for stdout/err, but
2669 having this allows modifications to be made for some platforms,
2673 having this allows modifications to be made for some platforms,
2670 such as handling color escapes under Windows. All of this code
2674 such as handling color escapes under Windows. All of this code
2671 was contributed by Gary Bishop, with minor modifications by me.
2675 was contributed by Gary Bishop, with minor modifications by me.
2672 The actual changes affect many files.
2676 The actual changes affect many files.
2673
2677
2674 2003-11-30 Fernando Perez <fperez@colorado.edu>
2678 2003-11-30 Fernando Perez <fperez@colorado.edu>
2675
2679
2676 * IPython/iplib.py (file_matches): new completion code, courtesy
2680 * IPython/iplib.py (file_matches): new completion code, courtesy
2677 of Jeff Collins. This enables filename completion again under
2681 of Jeff Collins. This enables filename completion again under
2678 python 2.3, which disabled it at the C level.
2682 python 2.3, which disabled it at the C level.
2679
2683
2680 2003-11-11 Fernando Perez <fperez@colorado.edu>
2684 2003-11-11 Fernando Perez <fperez@colorado.edu>
2681
2685
2682 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2686 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2683 for Numeric.array(map(...)), but often convenient.
2687 for Numeric.array(map(...)), but often convenient.
2684
2688
2685 2003-11-05 Fernando Perez <fperez@colorado.edu>
2689 2003-11-05 Fernando Perez <fperez@colorado.edu>
2686
2690
2687 * IPython/numutils.py (frange): Changed a call from int() to
2691 * IPython/numutils.py (frange): Changed a call from int() to
2688 int(round()) to prevent a problem reported with arange() in the
2692 int(round()) to prevent a problem reported with arange() in the
2689 numpy list.
2693 numpy list.
2690
2694
2691 2003-10-06 Fernando Perez <fperez@colorado.edu>
2695 2003-10-06 Fernando Perez <fperez@colorado.edu>
2692
2696
2693 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2697 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2694 prevent crashes if sys lacks an argv attribute (it happens with
2698 prevent crashes if sys lacks an argv attribute (it happens with
2695 embedded interpreters which build a bare-bones sys module).
2699 embedded interpreters which build a bare-bones sys module).
2696 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2700 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2697
2701
2698 2003-09-24 Fernando Perez <fperez@colorado.edu>
2702 2003-09-24 Fernando Perez <fperez@colorado.edu>
2699
2703
2700 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2704 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2701 to protect against poorly written user objects where __getattr__
2705 to protect against poorly written user objects where __getattr__
2702 raises exceptions other than AttributeError. Thanks to a bug
2706 raises exceptions other than AttributeError. Thanks to a bug
2703 report by Oliver Sander <osander-AT-gmx.de>.
2707 report by Oliver Sander <osander-AT-gmx.de>.
2704
2708
2705 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2709 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2706 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2710 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2707
2711
2708 2003-09-09 Fernando Perez <fperez@colorado.edu>
2712 2003-09-09 Fernando Perez <fperez@colorado.edu>
2709
2713
2710 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2714 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2711 unpacking a list whith a callable as first element would
2715 unpacking a list whith a callable as first element would
2712 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2716 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2713 Collins.
2717 Collins.
2714
2718
2715 2003-08-25 *** Released version 0.5.0
2719 2003-08-25 *** Released version 0.5.0
2716
2720
2717 2003-08-22 Fernando Perez <fperez@colorado.edu>
2721 2003-08-22 Fernando Perez <fperez@colorado.edu>
2718
2722
2719 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2723 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2720 improperly defined user exceptions. Thanks to feedback from Mark
2724 improperly defined user exceptions. Thanks to feedback from Mark
2721 Russell <mrussell-AT-verio.net>.
2725 Russell <mrussell-AT-verio.net>.
2722
2726
2723 2003-08-20 Fernando Perez <fperez@colorado.edu>
2727 2003-08-20 Fernando Perez <fperez@colorado.edu>
2724
2728
2725 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2729 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2726 printing so that it would print multi-line string forms starting
2730 printing so that it would print multi-line string forms starting
2727 with a new line. This way the formatting is better respected for
2731 with a new line. This way the formatting is better respected for
2728 objects which work hard to make nice string forms.
2732 objects which work hard to make nice string forms.
2729
2733
2730 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2734 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2731 autocall would overtake data access for objects with both
2735 autocall would overtake data access for objects with both
2732 __getitem__ and __call__.
2736 __getitem__ and __call__.
2733
2737
2734 2003-08-19 *** Released version 0.5.0-rc1
2738 2003-08-19 *** Released version 0.5.0-rc1
2735
2739
2736 2003-08-19 Fernando Perez <fperez@colorado.edu>
2740 2003-08-19 Fernando Perez <fperez@colorado.edu>
2737
2741
2738 * IPython/deep_reload.py (load_tail): single tiny change here
2742 * IPython/deep_reload.py (load_tail): single tiny change here
2739 seems to fix the long-standing bug of dreload() failing to work
2743 seems to fix the long-standing bug of dreload() failing to work
2740 for dotted names. But this module is pretty tricky, so I may have
2744 for dotted names. But this module is pretty tricky, so I may have
2741 missed some subtlety. Needs more testing!.
2745 missed some subtlety. Needs more testing!.
2742
2746
2743 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2747 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2744 exceptions which have badly implemented __str__ methods.
2748 exceptions which have badly implemented __str__ methods.
2745 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2749 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2746 which I've been getting reports about from Python 2.3 users. I
2750 which I've been getting reports about from Python 2.3 users. I
2747 wish I had a simple test case to reproduce the problem, so I could
2751 wish I had a simple test case to reproduce the problem, so I could
2748 either write a cleaner workaround or file a bug report if
2752 either write a cleaner workaround or file a bug report if
2749 necessary.
2753 necessary.
2750
2754
2751 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2755 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2752 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2756 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2753 a bug report by Tjabo Kloppenburg.
2757 a bug report by Tjabo Kloppenburg.
2754
2758
2755 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2759 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2756 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2760 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2757 seems rather unstable. Thanks to a bug report by Tjabo
2761 seems rather unstable. Thanks to a bug report by Tjabo
2758 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2762 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2759
2763
2760 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2764 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2761 this out soon because of the critical fixes in the inner loop for
2765 this out soon because of the critical fixes in the inner loop for
2762 generators.
2766 generators.
2763
2767
2764 * IPython/Magic.py (Magic.getargspec): removed. This (and
2768 * IPython/Magic.py (Magic.getargspec): removed. This (and
2765 _get_def) have been obsoleted by OInspect for a long time, I
2769 _get_def) have been obsoleted by OInspect for a long time, I
2766 hadn't noticed that they were dead code.
2770 hadn't noticed that they were dead code.
2767 (Magic._ofind): restored _ofind functionality for a few literals
2771 (Magic._ofind): restored _ofind functionality for a few literals
2768 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2772 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2769 for things like "hello".capitalize?, since that would require a
2773 for things like "hello".capitalize?, since that would require a
2770 potentially dangerous eval() again.
2774 potentially dangerous eval() again.
2771
2775
2772 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2776 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2773 logic a bit more to clean up the escapes handling and minimize the
2777 logic a bit more to clean up the escapes handling and minimize the
2774 use of _ofind to only necessary cases. The interactive 'feel' of
2778 use of _ofind to only necessary cases. The interactive 'feel' of
2775 IPython should have improved quite a bit with the changes in
2779 IPython should have improved quite a bit with the changes in
2776 _prefilter and _ofind (besides being far safer than before).
2780 _prefilter and _ofind (besides being far safer than before).
2777
2781
2778 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2782 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2779 obscure, never reported). Edit would fail to find the object to
2783 obscure, never reported). Edit would fail to find the object to
2780 edit under some circumstances.
2784 edit under some circumstances.
2781 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2785 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2782 which were causing double-calling of generators. Those eval calls
2786 which were causing double-calling of generators. Those eval calls
2783 were _very_ dangerous, since code with side effects could be
2787 were _very_ dangerous, since code with side effects could be
2784 triggered. As they say, 'eval is evil'... These were the
2788 triggered. As they say, 'eval is evil'... These were the
2785 nastiest evals in IPython. Besides, _ofind is now far simpler,
2789 nastiest evals in IPython. Besides, _ofind is now far simpler,
2786 and it should also be quite a bit faster. Its use of inspect is
2790 and it should also be quite a bit faster. Its use of inspect is
2787 also safer, so perhaps some of the inspect-related crashes I've
2791 also safer, so perhaps some of the inspect-related crashes I've
2788 seen lately with Python 2.3 might be taken care of. That will
2792 seen lately with Python 2.3 might be taken care of. That will
2789 need more testing.
2793 need more testing.
2790
2794
2791 2003-08-17 Fernando Perez <fperez@colorado.edu>
2795 2003-08-17 Fernando Perez <fperez@colorado.edu>
2792
2796
2793 * IPython/iplib.py (InteractiveShell._prefilter): significant
2797 * IPython/iplib.py (InteractiveShell._prefilter): significant
2794 simplifications to the logic for handling user escapes. Faster
2798 simplifications to the logic for handling user escapes. Faster
2795 and simpler code.
2799 and simpler code.
2796
2800
2797 2003-08-14 Fernando Perez <fperez@colorado.edu>
2801 2003-08-14 Fernando Perez <fperez@colorado.edu>
2798
2802
2799 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2803 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2800 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2804 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2801 but it should be quite a bit faster. And the recursive version
2805 but it should be quite a bit faster. And the recursive version
2802 generated O(log N) intermediate storage for all rank>1 arrays,
2806 generated O(log N) intermediate storage for all rank>1 arrays,
2803 even if they were contiguous.
2807 even if they were contiguous.
2804 (l1norm): Added this function.
2808 (l1norm): Added this function.
2805 (norm): Added this function for arbitrary norms (including
2809 (norm): Added this function for arbitrary norms (including
2806 l-infinity). l1 and l2 are still special cases for convenience
2810 l-infinity). l1 and l2 are still special cases for convenience
2807 and speed.
2811 and speed.
2808
2812
2809 2003-08-03 Fernando Perez <fperez@colorado.edu>
2813 2003-08-03 Fernando Perez <fperez@colorado.edu>
2810
2814
2811 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2815 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2812 exceptions, which now raise PendingDeprecationWarnings in Python
2816 exceptions, which now raise PendingDeprecationWarnings in Python
2813 2.3. There were some in Magic and some in Gnuplot2.
2817 2.3. There were some in Magic and some in Gnuplot2.
2814
2818
2815 2003-06-30 Fernando Perez <fperez@colorado.edu>
2819 2003-06-30 Fernando Perez <fperez@colorado.edu>
2816
2820
2817 * IPython/genutils.py (page): modified to call curses only for
2821 * IPython/genutils.py (page): modified to call curses only for
2818 terminals where TERM=='xterm'. After problems under many other
2822 terminals where TERM=='xterm'. After problems under many other
2819 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2823 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2820
2824
2821 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2825 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2822 would be triggered when readline was absent. This was just an old
2826 would be triggered when readline was absent. This was just an old
2823 debugging statement I'd forgotten to take out.
2827 debugging statement I'd forgotten to take out.
2824
2828
2825 2003-06-20 Fernando Perez <fperez@colorado.edu>
2829 2003-06-20 Fernando Perez <fperez@colorado.edu>
2826
2830
2827 * IPython/genutils.py (clock): modified to return only user time
2831 * IPython/genutils.py (clock): modified to return only user time
2828 (not counting system time), after a discussion on scipy. While
2832 (not counting system time), after a discussion on scipy. While
2829 system time may be a useful quantity occasionally, it may much
2833 system time may be a useful quantity occasionally, it may much
2830 more easily be skewed by occasional swapping or other similar
2834 more easily be skewed by occasional swapping or other similar
2831 activity.
2835 activity.
2832
2836
2833 2003-06-05 Fernando Perez <fperez@colorado.edu>
2837 2003-06-05 Fernando Perez <fperez@colorado.edu>
2834
2838
2835 * IPython/numutils.py (identity): new function, for building
2839 * IPython/numutils.py (identity): new function, for building
2836 arbitrary rank Kronecker deltas (mostly backwards compatible with
2840 arbitrary rank Kronecker deltas (mostly backwards compatible with
2837 Numeric.identity)
2841 Numeric.identity)
2838
2842
2839 2003-06-03 Fernando Perez <fperez@colorado.edu>
2843 2003-06-03 Fernando Perez <fperez@colorado.edu>
2840
2844
2841 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2845 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2842 arguments passed to magics with spaces, to allow trailing '\' to
2846 arguments passed to magics with spaces, to allow trailing '\' to
2843 work normally (mainly for Windows users).
2847 work normally (mainly for Windows users).
2844
2848
2845 2003-05-29 Fernando Perez <fperez@colorado.edu>
2849 2003-05-29 Fernando Perez <fperez@colorado.edu>
2846
2850
2847 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2851 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2848 instead of pydoc.help. This fixes a bizarre behavior where
2852 instead of pydoc.help. This fixes a bizarre behavior where
2849 printing '%s' % locals() would trigger the help system. Now
2853 printing '%s' % locals() would trigger the help system. Now
2850 ipython behaves like normal python does.
2854 ipython behaves like normal python does.
2851
2855
2852 Note that if one does 'from pydoc import help', the bizarre
2856 Note that if one does 'from pydoc import help', the bizarre
2853 behavior returns, but this will also happen in normal python, so
2857 behavior returns, but this will also happen in normal python, so
2854 it's not an ipython bug anymore (it has to do with how pydoc.help
2858 it's not an ipython bug anymore (it has to do with how pydoc.help
2855 is implemented).
2859 is implemented).
2856
2860
2857 2003-05-22 Fernando Perez <fperez@colorado.edu>
2861 2003-05-22 Fernando Perez <fperez@colorado.edu>
2858
2862
2859 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2863 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2860 return [] instead of None when nothing matches, also match to end
2864 return [] instead of None when nothing matches, also match to end
2861 of line. Patch by Gary Bishop.
2865 of line. Patch by Gary Bishop.
2862
2866
2863 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2867 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2864 protection as before, for files passed on the command line. This
2868 protection as before, for files passed on the command line. This
2865 prevents the CrashHandler from kicking in if user files call into
2869 prevents the CrashHandler from kicking in if user files call into
2866 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2870 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2867 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2871 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2868
2872
2869 2003-05-20 *** Released version 0.4.0
2873 2003-05-20 *** Released version 0.4.0
2870
2874
2871 2003-05-20 Fernando Perez <fperez@colorado.edu>
2875 2003-05-20 Fernando Perez <fperez@colorado.edu>
2872
2876
2873 * setup.py: added support for manpages. It's a bit hackish b/c of
2877 * setup.py: added support for manpages. It's a bit hackish b/c of
2874 a bug in the way the bdist_rpm distutils target handles gzipped
2878 a bug in the way the bdist_rpm distutils target handles gzipped
2875 manpages, but it works. After a patch by Jack.
2879 manpages, but it works. After a patch by Jack.
2876
2880
2877 2003-05-19 Fernando Perez <fperez@colorado.edu>
2881 2003-05-19 Fernando Perez <fperez@colorado.edu>
2878
2882
2879 * IPython/numutils.py: added a mockup of the kinds module, since
2883 * IPython/numutils.py: added a mockup of the kinds module, since
2880 it was recently removed from Numeric. This way, numutils will
2884 it was recently removed from Numeric. This way, numutils will
2881 work for all users even if they are missing kinds.
2885 work for all users even if they are missing kinds.
2882
2886
2883 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2887 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2884 failure, which can occur with SWIG-wrapped extensions. After a
2888 failure, which can occur with SWIG-wrapped extensions. After a
2885 crash report from Prabhu.
2889 crash report from Prabhu.
2886
2890
2887 2003-05-16 Fernando Perez <fperez@colorado.edu>
2891 2003-05-16 Fernando Perez <fperez@colorado.edu>
2888
2892
2889 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2893 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2890 protect ipython from user code which may call directly
2894 protect ipython from user code which may call directly
2891 sys.excepthook (this looks like an ipython crash to the user, even
2895 sys.excepthook (this looks like an ipython crash to the user, even
2892 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2896 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2893 This is especially important to help users of WxWindows, but may
2897 This is especially important to help users of WxWindows, but may
2894 also be useful in other cases.
2898 also be useful in other cases.
2895
2899
2896 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2900 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2897 an optional tb_offset to be specified, and to preserve exception
2901 an optional tb_offset to be specified, and to preserve exception
2898 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2902 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2899
2903
2900 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2904 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2901
2905
2902 2003-05-15 Fernando Perez <fperez@colorado.edu>
2906 2003-05-15 Fernando Perez <fperez@colorado.edu>
2903
2907
2904 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2908 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2905 installing for a new user under Windows.
2909 installing for a new user under Windows.
2906
2910
2907 2003-05-12 Fernando Perez <fperez@colorado.edu>
2911 2003-05-12 Fernando Perez <fperez@colorado.edu>
2908
2912
2909 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2913 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2910 handler for Emacs comint-based lines. Currently it doesn't do
2914 handler for Emacs comint-based lines. Currently it doesn't do
2911 much (but importantly, it doesn't update the history cache). In
2915 much (but importantly, it doesn't update the history cache). In
2912 the future it may be expanded if Alex needs more functionality
2916 the future it may be expanded if Alex needs more functionality
2913 there.
2917 there.
2914
2918
2915 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2919 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2916 info to crash reports.
2920 info to crash reports.
2917
2921
2918 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2922 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2919 just like Python's -c. Also fixed crash with invalid -color
2923 just like Python's -c. Also fixed crash with invalid -color
2920 option value at startup. Thanks to Will French
2924 option value at startup. Thanks to Will French
2921 <wfrench-AT-bestweb.net> for the bug report.
2925 <wfrench-AT-bestweb.net> for the bug report.
2922
2926
2923 2003-05-09 Fernando Perez <fperez@colorado.edu>
2927 2003-05-09 Fernando Perez <fperez@colorado.edu>
2924
2928
2925 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2929 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2926 to EvalDict (it's a mapping, after all) and simplified its code
2930 to EvalDict (it's a mapping, after all) and simplified its code
2927 quite a bit, after a nice discussion on c.l.py where Gustavo
2931 quite a bit, after a nice discussion on c.l.py where Gustavo
2928 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2932 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2929
2933
2930 2003-04-30 Fernando Perez <fperez@colorado.edu>
2934 2003-04-30 Fernando Perez <fperez@colorado.edu>
2931
2935
2932 * IPython/genutils.py (timings_out): modified it to reduce its
2936 * IPython/genutils.py (timings_out): modified it to reduce its
2933 overhead in the common reps==1 case.
2937 overhead in the common reps==1 case.
2934
2938
2935 2003-04-29 Fernando Perez <fperez@colorado.edu>
2939 2003-04-29 Fernando Perez <fperez@colorado.edu>
2936
2940
2937 * IPython/genutils.py (timings_out): Modified to use the resource
2941 * IPython/genutils.py (timings_out): Modified to use the resource
2938 module, which avoids the wraparound problems of time.clock().
2942 module, which avoids the wraparound problems of time.clock().
2939
2943
2940 2003-04-17 *** Released version 0.2.15pre4
2944 2003-04-17 *** Released version 0.2.15pre4
2941
2945
2942 2003-04-17 Fernando Perez <fperez@colorado.edu>
2946 2003-04-17 Fernando Perez <fperez@colorado.edu>
2943
2947
2944 * setup.py (scriptfiles): Split windows-specific stuff over to a
2948 * setup.py (scriptfiles): Split windows-specific stuff over to a
2945 separate file, in an attempt to have a Windows GUI installer.
2949 separate file, in an attempt to have a Windows GUI installer.
2946 That didn't work, but part of the groundwork is done.
2950 That didn't work, but part of the groundwork is done.
2947
2951
2948 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2952 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2949 indent/unindent with 4 spaces. Particularly useful in combination
2953 indent/unindent with 4 spaces. Particularly useful in combination
2950 with the new auto-indent option.
2954 with the new auto-indent option.
2951
2955
2952 2003-04-16 Fernando Perez <fperez@colorado.edu>
2956 2003-04-16 Fernando Perez <fperez@colorado.edu>
2953
2957
2954 * IPython/Magic.py: various replacements of self.rc for
2958 * IPython/Magic.py: various replacements of self.rc for
2955 self.shell.rc. A lot more remains to be done to fully disentangle
2959 self.shell.rc. A lot more remains to be done to fully disentangle
2956 this class from the main Shell class.
2960 this class from the main Shell class.
2957
2961
2958 * IPython/GnuplotRuntime.py: added checks for mouse support so
2962 * IPython/GnuplotRuntime.py: added checks for mouse support so
2959 that we don't try to enable it if the current gnuplot doesn't
2963 that we don't try to enable it if the current gnuplot doesn't
2960 really support it. Also added checks so that we don't try to
2964 really support it. Also added checks so that we don't try to
2961 enable persist under Windows (where Gnuplot doesn't recognize the
2965 enable persist under Windows (where Gnuplot doesn't recognize the
2962 option).
2966 option).
2963
2967
2964 * IPython/iplib.py (InteractiveShell.interact): Added optional
2968 * IPython/iplib.py (InteractiveShell.interact): Added optional
2965 auto-indenting code, after a patch by King C. Shu
2969 auto-indenting code, after a patch by King C. Shu
2966 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2970 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2967 get along well with pasting indented code. If I ever figure out
2971 get along well with pasting indented code. If I ever figure out
2968 how to make that part go well, it will become on by default.
2972 how to make that part go well, it will become on by default.
2969
2973
2970 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2974 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2971 crash ipython if there was an unmatched '%' in the user's prompt
2975 crash ipython if there was an unmatched '%' in the user's prompt
2972 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2976 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2973
2977
2974 * IPython/iplib.py (InteractiveShell.interact): removed the
2978 * IPython/iplib.py (InteractiveShell.interact): removed the
2975 ability to ask the user whether he wants to crash or not at the
2979 ability to ask the user whether he wants to crash or not at the
2976 'last line' exception handler. Calling functions at that point
2980 'last line' exception handler. Calling functions at that point
2977 changes the stack, and the error reports would have incorrect
2981 changes the stack, and the error reports would have incorrect
2978 tracebacks.
2982 tracebacks.
2979
2983
2980 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2984 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2981 pass through a peger a pretty-printed form of any object. After a
2985 pass through a peger a pretty-printed form of any object. After a
2982 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2986 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2983
2987
2984 2003-04-14 Fernando Perez <fperez@colorado.edu>
2988 2003-04-14 Fernando Perez <fperez@colorado.edu>
2985
2989
2986 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2990 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2987 all files in ~ would be modified at first install (instead of
2991 all files in ~ would be modified at first install (instead of
2988 ~/.ipython). This could be potentially disastrous, as the
2992 ~/.ipython). This could be potentially disastrous, as the
2989 modification (make line-endings native) could damage binary files.
2993 modification (make line-endings native) could damage binary files.
2990
2994
2991 2003-04-10 Fernando Perez <fperez@colorado.edu>
2995 2003-04-10 Fernando Perez <fperez@colorado.edu>
2992
2996
2993 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2997 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2994 handle only lines which are invalid python. This now means that
2998 handle only lines which are invalid python. This now means that
2995 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2999 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2996 for the bug report.
3000 for the bug report.
2997
3001
2998 2003-04-01 Fernando Perez <fperez@colorado.edu>
3002 2003-04-01 Fernando Perez <fperez@colorado.edu>
2999
3003
3000 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3004 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3001 where failing to set sys.last_traceback would crash pdb.pm().
3005 where failing to set sys.last_traceback would crash pdb.pm().
3002 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3006 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3003 report.
3007 report.
3004
3008
3005 2003-03-25 Fernando Perez <fperez@colorado.edu>
3009 2003-03-25 Fernando Perez <fperez@colorado.edu>
3006
3010
3007 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3011 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3008 before printing it (it had a lot of spurious blank lines at the
3012 before printing it (it had a lot of spurious blank lines at the
3009 end).
3013 end).
3010
3014
3011 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3015 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3012 output would be sent 21 times! Obviously people don't use this
3016 output would be sent 21 times! Obviously people don't use this
3013 too often, or I would have heard about it.
3017 too often, or I would have heard about it.
3014
3018
3015 2003-03-24 Fernando Perez <fperez@colorado.edu>
3019 2003-03-24 Fernando Perez <fperez@colorado.edu>
3016
3020
3017 * setup.py (scriptfiles): renamed the data_files parameter from
3021 * setup.py (scriptfiles): renamed the data_files parameter from
3018 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3022 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3019 for the patch.
3023 for the patch.
3020
3024
3021 2003-03-20 Fernando Perez <fperez@colorado.edu>
3025 2003-03-20 Fernando Perez <fperez@colorado.edu>
3022
3026
3023 * IPython/genutils.py (error): added error() and fatal()
3027 * IPython/genutils.py (error): added error() and fatal()
3024 functions.
3028 functions.
3025
3029
3026 2003-03-18 *** Released version 0.2.15pre3
3030 2003-03-18 *** Released version 0.2.15pre3
3027
3031
3028 2003-03-18 Fernando Perez <fperez@colorado.edu>
3032 2003-03-18 Fernando Perez <fperez@colorado.edu>
3029
3033
3030 * setupext/install_data_ext.py
3034 * setupext/install_data_ext.py
3031 (install_data_ext.initialize_options): Class contributed by Jack
3035 (install_data_ext.initialize_options): Class contributed by Jack
3032 Moffit for fixing the old distutils hack. He is sending this to
3036 Moffit for fixing the old distutils hack. He is sending this to
3033 the distutils folks so in the future we may not need it as a
3037 the distutils folks so in the future we may not need it as a
3034 private fix.
3038 private fix.
3035
3039
3036 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3040 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3037 changes for Debian packaging. See his patch for full details.
3041 changes for Debian packaging. See his patch for full details.
3038 The old distutils hack of making the ipythonrc* files carry a
3042 The old distutils hack of making the ipythonrc* files carry a
3039 bogus .py extension is gone, at last. Examples were moved to a
3043 bogus .py extension is gone, at last. Examples were moved to a
3040 separate subdir under doc/, and the separate executable scripts
3044 separate subdir under doc/, and the separate executable scripts
3041 now live in their own directory. Overall a great cleanup. The
3045 now live in their own directory. Overall a great cleanup. The
3042 manual was updated to use the new files, and setup.py has been
3046 manual was updated to use the new files, and setup.py has been
3043 fixed for this setup.
3047 fixed for this setup.
3044
3048
3045 * IPython/PyColorize.py (Parser.usage): made non-executable and
3049 * IPython/PyColorize.py (Parser.usage): made non-executable and
3046 created a pycolor wrapper around it to be included as a script.
3050 created a pycolor wrapper around it to be included as a script.
3047
3051
3048 2003-03-12 *** Released version 0.2.15pre2
3052 2003-03-12 *** Released version 0.2.15pre2
3049
3053
3050 2003-03-12 Fernando Perez <fperez@colorado.edu>
3054 2003-03-12 Fernando Perez <fperez@colorado.edu>
3051
3055
3052 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3056 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3053 long-standing problem with garbage characters in some terminals.
3057 long-standing problem with garbage characters in some terminals.
3054 The issue was really that the \001 and \002 escapes must _only_ be
3058 The issue was really that the \001 and \002 escapes must _only_ be
3055 passed to input prompts (which call readline), but _never_ to
3059 passed to input prompts (which call readline), but _never_ to
3056 normal text to be printed on screen. I changed ColorANSI to have
3060 normal text to be printed on screen. I changed ColorANSI to have
3057 two classes: TermColors and InputTermColors, each with the
3061 two classes: TermColors and InputTermColors, each with the
3058 appropriate escapes for input prompts or normal text. The code in
3062 appropriate escapes for input prompts or normal text. The code in
3059 Prompts.py got slightly more complicated, but this very old and
3063 Prompts.py got slightly more complicated, but this very old and
3060 annoying bug is finally fixed.
3064 annoying bug is finally fixed.
3061
3065
3062 All the credit for nailing down the real origin of this problem
3066 All the credit for nailing down the real origin of this problem
3063 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3067 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3064 *Many* thanks to him for spending quite a bit of effort on this.
3068 *Many* thanks to him for spending quite a bit of effort on this.
3065
3069
3066 2003-03-05 *** Released version 0.2.15pre1
3070 2003-03-05 *** Released version 0.2.15pre1
3067
3071
3068 2003-03-03 Fernando Perez <fperez@colorado.edu>
3072 2003-03-03 Fernando Perez <fperez@colorado.edu>
3069
3073
3070 * IPython/FakeModule.py: Moved the former _FakeModule to a
3074 * IPython/FakeModule.py: Moved the former _FakeModule to a
3071 separate file, because it's also needed by Magic (to fix a similar
3075 separate file, because it's also needed by Magic (to fix a similar
3072 pickle-related issue in @run).
3076 pickle-related issue in @run).
3073
3077
3074 2003-03-02 Fernando Perez <fperez@colorado.edu>
3078 2003-03-02 Fernando Perez <fperez@colorado.edu>
3075
3079
3076 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3080 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3077 the autocall option at runtime.
3081 the autocall option at runtime.
3078 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3082 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3079 across Magic.py to start separating Magic from InteractiveShell.
3083 across Magic.py to start separating Magic from InteractiveShell.
3080 (Magic._ofind): Fixed to return proper namespace for dotted
3084 (Magic._ofind): Fixed to return proper namespace for dotted
3081 names. Before, a dotted name would always return 'not currently
3085 names. Before, a dotted name would always return 'not currently
3082 defined', because it would find the 'parent'. s.x would be found,
3086 defined', because it would find the 'parent'. s.x would be found,
3083 but since 'x' isn't defined by itself, it would get confused.
3087 but since 'x' isn't defined by itself, it would get confused.
3084 (Magic.magic_run): Fixed pickling problems reported by Ralf
3088 (Magic.magic_run): Fixed pickling problems reported by Ralf
3085 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3089 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3086 that I'd used when Mike Heeter reported similar issues at the
3090 that I'd used when Mike Heeter reported similar issues at the
3087 top-level, but now for @run. It boils down to injecting the
3091 top-level, but now for @run. It boils down to injecting the
3088 namespace where code is being executed with something that looks
3092 namespace where code is being executed with something that looks
3089 enough like a module to fool pickle.dump(). Since a pickle stores
3093 enough like a module to fool pickle.dump(). Since a pickle stores
3090 a named reference to the importing module, we need this for
3094 a named reference to the importing module, we need this for
3091 pickles to save something sensible.
3095 pickles to save something sensible.
3092
3096
3093 * IPython/ipmaker.py (make_IPython): added an autocall option.
3097 * IPython/ipmaker.py (make_IPython): added an autocall option.
3094
3098
3095 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3099 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3096 the auto-eval code. Now autocalling is an option, and the code is
3100 the auto-eval code. Now autocalling is an option, and the code is
3097 also vastly safer. There is no more eval() involved at all.
3101 also vastly safer. There is no more eval() involved at all.
3098
3102
3099 2003-03-01 Fernando Perez <fperez@colorado.edu>
3103 2003-03-01 Fernando Perez <fperez@colorado.edu>
3100
3104
3101 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3105 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3102 dict with named keys instead of a tuple.
3106 dict with named keys instead of a tuple.
3103
3107
3104 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3108 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3105
3109
3106 * setup.py (make_shortcut): Fixed message about directories
3110 * setup.py (make_shortcut): Fixed message about directories
3107 created during Windows installation (the directories were ok, just
3111 created during Windows installation (the directories were ok, just
3108 the printed message was misleading). Thanks to Chris Liechti
3112 the printed message was misleading). Thanks to Chris Liechti
3109 <cliechti-AT-gmx.net> for the heads up.
3113 <cliechti-AT-gmx.net> for the heads up.
3110
3114
3111 2003-02-21 Fernando Perez <fperez@colorado.edu>
3115 2003-02-21 Fernando Perez <fperez@colorado.edu>
3112
3116
3113 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3117 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3114 of ValueError exception when checking for auto-execution. This
3118 of ValueError exception when checking for auto-execution. This
3115 one is raised by things like Numeric arrays arr.flat when the
3119 one is raised by things like Numeric arrays arr.flat when the
3116 array is non-contiguous.
3120 array is non-contiguous.
3117
3121
3118 2003-01-31 Fernando Perez <fperez@colorado.edu>
3122 2003-01-31 Fernando Perez <fperez@colorado.edu>
3119
3123
3120 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3124 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3121 not return any value at all (even though the command would get
3125 not return any value at all (even though the command would get
3122 executed).
3126 executed).
3123 (xsys): Flush stdout right after printing the command to ensure
3127 (xsys): Flush stdout right after printing the command to ensure
3124 proper ordering of commands and command output in the total
3128 proper ordering of commands and command output in the total
3125 output.
3129 output.
3126 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3130 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3127 system/getoutput as defaults. The old ones are kept for
3131 system/getoutput as defaults. The old ones are kept for
3128 compatibility reasons, so no code which uses this library needs
3132 compatibility reasons, so no code which uses this library needs
3129 changing.
3133 changing.
3130
3134
3131 2003-01-27 *** Released version 0.2.14
3135 2003-01-27 *** Released version 0.2.14
3132
3136
3133 2003-01-25 Fernando Perez <fperez@colorado.edu>
3137 2003-01-25 Fernando Perez <fperez@colorado.edu>
3134
3138
3135 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3139 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3136 functions defined in previous edit sessions could not be re-edited
3140 functions defined in previous edit sessions could not be re-edited
3137 (because the temp files were immediately removed). Now temp files
3141 (because the temp files were immediately removed). Now temp files
3138 are removed only at IPython's exit.
3142 are removed only at IPython's exit.
3139 (Magic.magic_run): Improved @run to perform shell-like expansions
3143 (Magic.magic_run): Improved @run to perform shell-like expansions
3140 on its arguments (~users and $VARS). With this, @run becomes more
3144 on its arguments (~users and $VARS). With this, @run becomes more
3141 like a normal command-line.
3145 like a normal command-line.
3142
3146
3143 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3147 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3144 bugs related to embedding and cleaned up that code. A fairly
3148 bugs related to embedding and cleaned up that code. A fairly
3145 important one was the impossibility to access the global namespace
3149 important one was the impossibility to access the global namespace
3146 through the embedded IPython (only local variables were visible).
3150 through the embedded IPython (only local variables were visible).
3147
3151
3148 2003-01-14 Fernando Perez <fperez@colorado.edu>
3152 2003-01-14 Fernando Perez <fperez@colorado.edu>
3149
3153
3150 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3154 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3151 auto-calling to be a bit more conservative. Now it doesn't get
3155 auto-calling to be a bit more conservative. Now it doesn't get
3152 triggered if any of '!=()<>' are in the rest of the input line, to
3156 triggered if any of '!=()<>' are in the rest of the input line, to
3153 allow comparing callables. Thanks to Alex for the heads up.
3157 allow comparing callables. Thanks to Alex for the heads up.
3154
3158
3155 2003-01-07 Fernando Perez <fperez@colorado.edu>
3159 2003-01-07 Fernando Perez <fperez@colorado.edu>
3156
3160
3157 * IPython/genutils.py (page): fixed estimation of the number of
3161 * IPython/genutils.py (page): fixed estimation of the number of
3158 lines in a string to be paged to simply count newlines. This
3162 lines in a string to be paged to simply count newlines. This
3159 prevents over-guessing due to embedded escape sequences. A better
3163 prevents over-guessing due to embedded escape sequences. A better
3160 long-term solution would involve stripping out the control chars
3164 long-term solution would involve stripping out the control chars
3161 for the count, but it's potentially so expensive I just don't
3165 for the count, but it's potentially so expensive I just don't
3162 think it's worth doing.
3166 think it's worth doing.
3163
3167
3164 2002-12-19 *** Released version 0.2.14pre50
3168 2002-12-19 *** Released version 0.2.14pre50
3165
3169
3166 2002-12-19 Fernando Perez <fperez@colorado.edu>
3170 2002-12-19 Fernando Perez <fperez@colorado.edu>
3167
3171
3168 * tools/release (version): Changed release scripts to inform
3172 * tools/release (version): Changed release scripts to inform
3169 Andrea and build a NEWS file with a list of recent changes.
3173 Andrea and build a NEWS file with a list of recent changes.
3170
3174
3171 * IPython/ColorANSI.py (__all__): changed terminal detection
3175 * IPython/ColorANSI.py (__all__): changed terminal detection
3172 code. Seems to work better for xterms without breaking
3176 code. Seems to work better for xterms without breaking
3173 konsole. Will need more testing to determine if WinXP and Mac OSX
3177 konsole. Will need more testing to determine if WinXP and Mac OSX
3174 also work ok.
3178 also work ok.
3175
3179
3176 2002-12-18 *** Released version 0.2.14pre49
3180 2002-12-18 *** Released version 0.2.14pre49
3177
3181
3178 2002-12-18 Fernando Perez <fperez@colorado.edu>
3182 2002-12-18 Fernando Perez <fperez@colorado.edu>
3179
3183
3180 * Docs: added new info about Mac OSX, from Andrea.
3184 * Docs: added new info about Mac OSX, from Andrea.
3181
3185
3182 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3186 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3183 allow direct plotting of python strings whose format is the same
3187 allow direct plotting of python strings whose format is the same
3184 of gnuplot data files.
3188 of gnuplot data files.
3185
3189
3186 2002-12-16 Fernando Perez <fperez@colorado.edu>
3190 2002-12-16 Fernando Perez <fperez@colorado.edu>
3187
3191
3188 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3192 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3189 value of exit question to be acknowledged.
3193 value of exit question to be acknowledged.
3190
3194
3191 2002-12-03 Fernando Perez <fperez@colorado.edu>
3195 2002-12-03 Fernando Perez <fperez@colorado.edu>
3192
3196
3193 * IPython/ipmaker.py: removed generators, which had been added
3197 * IPython/ipmaker.py: removed generators, which had been added
3194 by mistake in an earlier debugging run. This was causing trouble
3198 by mistake in an earlier debugging run. This was causing trouble
3195 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3199 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3196 for pointing this out.
3200 for pointing this out.
3197
3201
3198 2002-11-17 Fernando Perez <fperez@colorado.edu>
3202 2002-11-17 Fernando Perez <fperez@colorado.edu>
3199
3203
3200 * Manual: updated the Gnuplot section.
3204 * Manual: updated the Gnuplot section.
3201
3205
3202 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3206 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3203 a much better split of what goes in Runtime and what goes in
3207 a much better split of what goes in Runtime and what goes in
3204 Interactive.
3208 Interactive.
3205
3209
3206 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3210 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3207 being imported from iplib.
3211 being imported from iplib.
3208
3212
3209 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3213 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3210 for command-passing. Now the global Gnuplot instance is called
3214 for command-passing. Now the global Gnuplot instance is called
3211 'gp' instead of 'g', which was really a far too fragile and
3215 'gp' instead of 'g', which was really a far too fragile and
3212 common name.
3216 common name.
3213
3217
3214 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3218 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3215 bounding boxes generated by Gnuplot for square plots.
3219 bounding boxes generated by Gnuplot for square plots.
3216
3220
3217 * IPython/genutils.py (popkey): new function added. I should
3221 * IPython/genutils.py (popkey): new function added. I should
3218 suggest this on c.l.py as a dict method, it seems useful.
3222 suggest this on c.l.py as a dict method, it seems useful.
3219
3223
3220 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3224 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3221 to transparently handle PostScript generation. MUCH better than
3225 to transparently handle PostScript generation. MUCH better than
3222 the previous plot_eps/replot_eps (which I removed now). The code
3226 the previous plot_eps/replot_eps (which I removed now). The code
3223 is also fairly clean and well documented now (including
3227 is also fairly clean and well documented now (including
3224 docstrings).
3228 docstrings).
3225
3229
3226 2002-11-13 Fernando Perez <fperez@colorado.edu>
3230 2002-11-13 Fernando Perez <fperez@colorado.edu>
3227
3231
3228 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3232 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3229 (inconsistent with options).
3233 (inconsistent with options).
3230
3234
3231 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3235 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3232 manually disabled, I don't know why. Fixed it.
3236 manually disabled, I don't know why. Fixed it.
3233 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3237 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3234 eps output.
3238 eps output.
3235
3239
3236 2002-11-12 Fernando Perez <fperez@colorado.edu>
3240 2002-11-12 Fernando Perez <fperez@colorado.edu>
3237
3241
3238 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3242 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3239 don't propagate up to caller. Fixes crash reported by François
3243 don't propagate up to caller. Fixes crash reported by François
3240 Pinard.
3244 Pinard.
3241
3245
3242 2002-11-09 Fernando Perez <fperez@colorado.edu>
3246 2002-11-09 Fernando Perez <fperez@colorado.edu>
3243
3247
3244 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3248 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3245 history file for new users.
3249 history file for new users.
3246 (make_IPython): fixed bug where initial install would leave the
3250 (make_IPython): fixed bug where initial install would leave the
3247 user running in the .ipython dir.
3251 user running in the .ipython dir.
3248 (make_IPython): fixed bug where config dir .ipython would be
3252 (make_IPython): fixed bug where config dir .ipython would be
3249 created regardless of the given -ipythondir option. Thanks to Cory
3253 created regardless of the given -ipythondir option. Thanks to Cory
3250 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3254 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3251
3255
3252 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3256 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3253 type confirmations. Will need to use it in all of IPython's code
3257 type confirmations. Will need to use it in all of IPython's code
3254 consistently.
3258 consistently.
3255
3259
3256 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3260 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3257 context to print 31 lines instead of the default 5. This will make
3261 context to print 31 lines instead of the default 5. This will make
3258 the crash reports extremely detailed in case the problem is in
3262 the crash reports extremely detailed in case the problem is in
3259 libraries I don't have access to.
3263 libraries I don't have access to.
3260
3264
3261 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3265 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3262 line of defense' code to still crash, but giving users fair
3266 line of defense' code to still crash, but giving users fair
3263 warning. I don't want internal errors to go unreported: if there's
3267 warning. I don't want internal errors to go unreported: if there's
3264 an internal problem, IPython should crash and generate a full
3268 an internal problem, IPython should crash and generate a full
3265 report.
3269 report.
3266
3270
3267 2002-11-08 Fernando Perez <fperez@colorado.edu>
3271 2002-11-08 Fernando Perez <fperez@colorado.edu>
3268
3272
3269 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3273 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3270 otherwise uncaught exceptions which can appear if people set
3274 otherwise uncaught exceptions which can appear if people set
3271 sys.stdout to something badly broken. Thanks to a crash report
3275 sys.stdout to something badly broken. Thanks to a crash report
3272 from henni-AT-mail.brainbot.com.
3276 from henni-AT-mail.brainbot.com.
3273
3277
3274 2002-11-04 Fernando Perez <fperez@colorado.edu>
3278 2002-11-04 Fernando Perez <fperez@colorado.edu>
3275
3279
3276 * IPython/iplib.py (InteractiveShell.interact): added
3280 * IPython/iplib.py (InteractiveShell.interact): added
3277 __IPYTHON__active to the builtins. It's a flag which goes on when
3281 __IPYTHON__active to the builtins. It's a flag which goes on when
3278 the interaction starts and goes off again when it stops. This
3282 the interaction starts and goes off again when it stops. This
3279 allows embedding code to detect being inside IPython. Before this
3283 allows embedding code to detect being inside IPython. Before this
3280 was done via __IPYTHON__, but that only shows that an IPython
3284 was done via __IPYTHON__, but that only shows that an IPython
3281 instance has been created.
3285 instance has been created.
3282
3286
3283 * IPython/Magic.py (Magic.magic_env): I realized that in a
3287 * IPython/Magic.py (Magic.magic_env): I realized that in a
3284 UserDict, instance.data holds the data as a normal dict. So I
3288 UserDict, instance.data holds the data as a normal dict. So I
3285 modified @env to return os.environ.data instead of rebuilding a
3289 modified @env to return os.environ.data instead of rebuilding a
3286 dict by hand.
3290 dict by hand.
3287
3291
3288 2002-11-02 Fernando Perez <fperez@colorado.edu>
3292 2002-11-02 Fernando Perez <fperez@colorado.edu>
3289
3293
3290 * IPython/genutils.py (warn): changed so that level 1 prints no
3294 * IPython/genutils.py (warn): changed so that level 1 prints no
3291 header. Level 2 is now the default (with 'WARNING' header, as
3295 header. Level 2 is now the default (with 'WARNING' header, as
3292 before). I think I tracked all places where changes were needed in
3296 before). I think I tracked all places where changes were needed in
3293 IPython, but outside code using the old level numbering may have
3297 IPython, but outside code using the old level numbering may have
3294 broken.
3298 broken.
3295
3299
3296 * IPython/iplib.py (InteractiveShell.runcode): added this to
3300 * IPython/iplib.py (InteractiveShell.runcode): added this to
3297 handle the tracebacks in SystemExit traps correctly. The previous
3301 handle the tracebacks in SystemExit traps correctly. The previous
3298 code (through interact) was printing more of the stack than
3302 code (through interact) was printing more of the stack than
3299 necessary, showing IPython internal code to the user.
3303 necessary, showing IPython internal code to the user.
3300
3304
3301 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3305 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3302 default. Now that the default at the confirmation prompt is yes,
3306 default. Now that the default at the confirmation prompt is yes,
3303 it's not so intrusive. François' argument that ipython sessions
3307 it's not so intrusive. François' argument that ipython sessions
3304 tend to be complex enough not to lose them from an accidental C-d,
3308 tend to be complex enough not to lose them from an accidental C-d,
3305 is a valid one.
3309 is a valid one.
3306
3310
3307 * IPython/iplib.py (InteractiveShell.interact): added a
3311 * IPython/iplib.py (InteractiveShell.interact): added a
3308 showtraceback() call to the SystemExit trap, and modified the exit
3312 showtraceback() call to the SystemExit trap, and modified the exit
3309 confirmation to have yes as the default.
3313 confirmation to have yes as the default.
3310
3314
3311 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3315 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3312 this file. It's been gone from the code for a long time, this was
3316 this file. It's been gone from the code for a long time, this was
3313 simply leftover junk.
3317 simply leftover junk.
3314
3318
3315 2002-11-01 Fernando Perez <fperez@colorado.edu>
3319 2002-11-01 Fernando Perez <fperez@colorado.edu>
3316
3320
3317 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3321 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3318 added. If set, IPython now traps EOF and asks for
3322 added. If set, IPython now traps EOF and asks for
3319 confirmation. After a request by François Pinard.
3323 confirmation. After a request by François Pinard.
3320
3324
3321 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3325 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3322 of @abort, and with a new (better) mechanism for handling the
3326 of @abort, and with a new (better) mechanism for handling the
3323 exceptions.
3327 exceptions.
3324
3328
3325 2002-10-27 Fernando Perez <fperez@colorado.edu>
3329 2002-10-27 Fernando Perez <fperez@colorado.edu>
3326
3330
3327 * IPython/usage.py (__doc__): updated the --help information and
3331 * IPython/usage.py (__doc__): updated the --help information and
3328 the ipythonrc file to indicate that -log generates
3332 the ipythonrc file to indicate that -log generates
3329 ./ipython.log. Also fixed the corresponding info in @logstart.
3333 ./ipython.log. Also fixed the corresponding info in @logstart.
3330 This and several other fixes in the manuals thanks to reports by
3334 This and several other fixes in the manuals thanks to reports by
3331 François Pinard <pinard-AT-iro.umontreal.ca>.
3335 François Pinard <pinard-AT-iro.umontreal.ca>.
3332
3336
3333 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3337 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3334 refer to @logstart (instead of @log, which doesn't exist).
3338 refer to @logstart (instead of @log, which doesn't exist).
3335
3339
3336 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3340 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3337 AttributeError crash. Thanks to Christopher Armstrong
3341 AttributeError crash. Thanks to Christopher Armstrong
3338 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3342 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3339 introduced recently (in 0.2.14pre37) with the fix to the eval
3343 introduced recently (in 0.2.14pre37) with the fix to the eval
3340 problem mentioned below.
3344 problem mentioned below.
3341
3345
3342 2002-10-17 Fernando Perez <fperez@colorado.edu>
3346 2002-10-17 Fernando Perez <fperez@colorado.edu>
3343
3347
3344 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3348 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3345 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3349 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3346
3350
3347 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3351 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3348 this function to fix a problem reported by Alex Schmolck. He saw
3352 this function to fix a problem reported by Alex Schmolck. He saw
3349 it with list comprehensions and generators, which were getting
3353 it with list comprehensions and generators, which were getting
3350 called twice. The real problem was an 'eval' call in testing for
3354 called twice. The real problem was an 'eval' call in testing for
3351 automagic which was evaluating the input line silently.
3355 automagic which was evaluating the input line silently.
3352
3356
3353 This is a potentially very nasty bug, if the input has side
3357 This is a potentially very nasty bug, if the input has side
3354 effects which must not be repeated. The code is much cleaner now,
3358 effects which must not be repeated. The code is much cleaner now,
3355 without any blanket 'except' left and with a regexp test for
3359 without any blanket 'except' left and with a regexp test for
3356 actual function names.
3360 actual function names.
3357
3361
3358 But an eval remains, which I'm not fully comfortable with. I just
3362 But an eval remains, which I'm not fully comfortable with. I just
3359 don't know how to find out if an expression could be a callable in
3363 don't know how to find out if an expression could be a callable in
3360 the user's namespace without doing an eval on the string. However
3364 the user's namespace without doing an eval on the string. However
3361 that string is now much more strictly checked so that no code
3365 that string is now much more strictly checked so that no code
3362 slips by, so the eval should only happen for things that can
3366 slips by, so the eval should only happen for things that can
3363 really be only function/method names.
3367 really be only function/method names.
3364
3368
3365 2002-10-15 Fernando Perez <fperez@colorado.edu>
3369 2002-10-15 Fernando Perez <fperez@colorado.edu>
3366
3370
3367 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3371 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3368 OSX information to main manual, removed README_Mac_OSX file from
3372 OSX information to main manual, removed README_Mac_OSX file from
3369 distribution. Also updated credits for recent additions.
3373 distribution. Also updated credits for recent additions.
3370
3374
3371 2002-10-10 Fernando Perez <fperez@colorado.edu>
3375 2002-10-10 Fernando Perez <fperez@colorado.edu>
3372
3376
3373 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3377 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3374 terminal-related issues. Many thanks to Andrea Riciputi
3378 terminal-related issues. Many thanks to Andrea Riciputi
3375 <andrea.riciputi-AT-libero.it> for writing it.
3379 <andrea.riciputi-AT-libero.it> for writing it.
3376
3380
3377 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3381 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3378 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3382 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3379
3383
3380 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3384 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3381 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3385 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3382 <syver-en-AT-online.no> who both submitted patches for this problem.
3386 <syver-en-AT-online.no> who both submitted patches for this problem.
3383
3387
3384 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3388 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3385 global embedding to make sure that things don't overwrite user
3389 global embedding to make sure that things don't overwrite user
3386 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3390 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3387
3391
3388 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3392 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3389 compatibility. Thanks to Hayden Callow
3393 compatibility. Thanks to Hayden Callow
3390 <h.callow-AT-elec.canterbury.ac.nz>
3394 <h.callow-AT-elec.canterbury.ac.nz>
3391
3395
3392 2002-10-04 Fernando Perez <fperez@colorado.edu>
3396 2002-10-04 Fernando Perez <fperez@colorado.edu>
3393
3397
3394 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3398 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3395 Gnuplot.File objects.
3399 Gnuplot.File objects.
3396
3400
3397 2002-07-23 Fernando Perez <fperez@colorado.edu>
3401 2002-07-23 Fernando Perez <fperez@colorado.edu>
3398
3402
3399 * IPython/genutils.py (timing): Added timings() and timing() for
3403 * IPython/genutils.py (timing): Added timings() and timing() for
3400 quick access to the most commonly needed data, the execution
3404 quick access to the most commonly needed data, the execution
3401 times. Old timing() renamed to timings_out().
3405 times. Old timing() renamed to timings_out().
3402
3406
3403 2002-07-18 Fernando Perez <fperez@colorado.edu>
3407 2002-07-18 Fernando Perez <fperez@colorado.edu>
3404
3408
3405 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3409 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3406 bug with nested instances disrupting the parent's tab completion.
3410 bug with nested instances disrupting the parent's tab completion.
3407
3411
3408 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3412 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3409 all_completions code to begin the emacs integration.
3413 all_completions code to begin the emacs integration.
3410
3414
3411 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3415 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3412 argument to allow titling individual arrays when plotting.
3416 argument to allow titling individual arrays when plotting.
3413
3417
3414 2002-07-15 Fernando Perez <fperez@colorado.edu>
3418 2002-07-15 Fernando Perez <fperez@colorado.edu>
3415
3419
3416 * setup.py (make_shortcut): changed to retrieve the value of
3420 * setup.py (make_shortcut): changed to retrieve the value of
3417 'Program Files' directory from the registry (this value changes in
3421 'Program Files' directory from the registry (this value changes in
3418 non-english versions of Windows). Thanks to Thomas Fanslau
3422 non-english versions of Windows). Thanks to Thomas Fanslau
3419 <tfanslau-AT-gmx.de> for the report.
3423 <tfanslau-AT-gmx.de> for the report.
3420
3424
3421 2002-07-10 Fernando Perez <fperez@colorado.edu>
3425 2002-07-10 Fernando Perez <fperez@colorado.edu>
3422
3426
3423 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3427 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3424 a bug in pdb, which crashes if a line with only whitespace is
3428 a bug in pdb, which crashes if a line with only whitespace is
3425 entered. Bug report submitted to sourceforge.
3429 entered. Bug report submitted to sourceforge.
3426
3430
3427 2002-07-09 Fernando Perez <fperez@colorado.edu>
3431 2002-07-09 Fernando Perez <fperez@colorado.edu>
3428
3432
3429 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3433 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3430 reporting exceptions (it's a bug in inspect.py, I just set a
3434 reporting exceptions (it's a bug in inspect.py, I just set a
3431 workaround).
3435 workaround).
3432
3436
3433 2002-07-08 Fernando Perez <fperez@colorado.edu>
3437 2002-07-08 Fernando Perez <fperez@colorado.edu>
3434
3438
3435 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3439 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3436 __IPYTHON__ in __builtins__ to show up in user_ns.
3440 __IPYTHON__ in __builtins__ to show up in user_ns.
3437
3441
3438 2002-07-03 Fernando Perez <fperez@colorado.edu>
3442 2002-07-03 Fernando Perez <fperez@colorado.edu>
3439
3443
3440 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3444 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3441 name from @gp_set_instance to @gp_set_default.
3445 name from @gp_set_instance to @gp_set_default.
3442
3446
3443 * IPython/ipmaker.py (make_IPython): default editor value set to
3447 * IPython/ipmaker.py (make_IPython): default editor value set to
3444 '0' (a string), to match the rc file. Otherwise will crash when
3448 '0' (a string), to match the rc file. Otherwise will crash when
3445 .strip() is called on it.
3449 .strip() is called on it.
3446
3450
3447
3451
3448 2002-06-28 Fernando Perez <fperez@colorado.edu>
3452 2002-06-28 Fernando Perez <fperez@colorado.edu>
3449
3453
3450 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3454 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3451 of files in current directory when a file is executed via
3455 of files in current directory when a file is executed via
3452 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3456 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3453
3457
3454 * setup.py (manfiles): fix for rpm builds, submitted by RA
3458 * setup.py (manfiles): fix for rpm builds, submitted by RA
3455 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3459 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3456
3460
3457 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3461 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3458 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3462 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3459 string!). A. Schmolck caught this one.
3463 string!). A. Schmolck caught this one.
3460
3464
3461 2002-06-27 Fernando Perez <fperez@colorado.edu>
3465 2002-06-27 Fernando Perez <fperez@colorado.edu>
3462
3466
3463 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3467 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3464 defined files at the cmd line. __name__ wasn't being set to
3468 defined files at the cmd line. __name__ wasn't being set to
3465 __main__.
3469 __main__.
3466
3470
3467 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3471 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3468 regular lists and tuples besides Numeric arrays.
3472 regular lists and tuples besides Numeric arrays.
3469
3473
3470 * IPython/Prompts.py (CachedOutput.__call__): Added output
3474 * IPython/Prompts.py (CachedOutput.__call__): Added output
3471 supression for input ending with ';'. Similar to Mathematica and
3475 supression for input ending with ';'. Similar to Mathematica and
3472 Matlab. The _* vars and Out[] list are still updated, just like
3476 Matlab. The _* vars and Out[] list are still updated, just like
3473 Mathematica behaves.
3477 Mathematica behaves.
3474
3478
3475 2002-06-25 Fernando Perez <fperez@colorado.edu>
3479 2002-06-25 Fernando Perez <fperez@colorado.edu>
3476
3480
3477 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3481 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3478 .ini extensions for profiels under Windows.
3482 .ini extensions for profiels under Windows.
3479
3483
3480 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3484 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3481 string form. Fix contributed by Alexander Schmolck
3485 string form. Fix contributed by Alexander Schmolck
3482 <a.schmolck-AT-gmx.net>
3486 <a.schmolck-AT-gmx.net>
3483
3487
3484 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3488 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3485 pre-configured Gnuplot instance.
3489 pre-configured Gnuplot instance.
3486
3490
3487 2002-06-21 Fernando Perez <fperez@colorado.edu>
3491 2002-06-21 Fernando Perez <fperez@colorado.edu>
3488
3492
3489 * IPython/numutils.py (exp_safe): new function, works around the
3493 * IPython/numutils.py (exp_safe): new function, works around the
3490 underflow problems in Numeric.
3494 underflow problems in Numeric.
3491 (log2): New fn. Safe log in base 2: returns exact integer answer
3495 (log2): New fn. Safe log in base 2: returns exact integer answer
3492 for exact integer powers of 2.
3496 for exact integer powers of 2.
3493
3497
3494 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3498 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3495 properly.
3499 properly.
3496
3500
3497 2002-06-20 Fernando Perez <fperez@colorado.edu>
3501 2002-06-20 Fernando Perez <fperez@colorado.edu>
3498
3502
3499 * IPython/genutils.py (timing): new function like
3503 * IPython/genutils.py (timing): new function like
3500 Mathematica's. Similar to time_test, but returns more info.
3504 Mathematica's. Similar to time_test, but returns more info.
3501
3505
3502 2002-06-18 Fernando Perez <fperez@colorado.edu>
3506 2002-06-18 Fernando Perez <fperez@colorado.edu>
3503
3507
3504 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3508 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3505 according to Mike Heeter's suggestions.
3509 according to Mike Heeter's suggestions.
3506
3510
3507 2002-06-16 Fernando Perez <fperez@colorado.edu>
3511 2002-06-16 Fernando Perez <fperez@colorado.edu>
3508
3512
3509 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3513 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3510 system. GnuplotMagic is gone as a user-directory option. New files
3514 system. GnuplotMagic is gone as a user-directory option. New files
3511 make it easier to use all the gnuplot stuff both from external
3515 make it easier to use all the gnuplot stuff both from external
3512 programs as well as from IPython. Had to rewrite part of
3516 programs as well as from IPython. Had to rewrite part of
3513 hardcopy() b/c of a strange bug: often the ps files simply don't
3517 hardcopy() b/c of a strange bug: often the ps files simply don't
3514 get created, and require a repeat of the command (often several
3518 get created, and require a repeat of the command (often several
3515 times).
3519 times).
3516
3520
3517 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3521 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3518 resolve output channel at call time, so that if sys.stderr has
3522 resolve output channel at call time, so that if sys.stderr has
3519 been redirected by user this gets honored.
3523 been redirected by user this gets honored.
3520
3524
3521 2002-06-13 Fernando Perez <fperez@colorado.edu>
3525 2002-06-13 Fernando Perez <fperez@colorado.edu>
3522
3526
3523 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3527 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3524 IPShell. Kept a copy with the old names to avoid breaking people's
3528 IPShell. Kept a copy with the old names to avoid breaking people's
3525 embedded code.
3529 embedded code.
3526
3530
3527 * IPython/ipython: simplified it to the bare minimum after
3531 * IPython/ipython: simplified it to the bare minimum after
3528 Holger's suggestions. Added info about how to use it in
3532 Holger's suggestions. Added info about how to use it in
3529 PYTHONSTARTUP.
3533 PYTHONSTARTUP.
3530
3534
3531 * IPython/Shell.py (IPythonShell): changed the options passing
3535 * IPython/Shell.py (IPythonShell): changed the options passing
3532 from a string with funky %s replacements to a straight list. Maybe
3536 from a string with funky %s replacements to a straight list. Maybe
3533 a bit more typing, but it follows sys.argv conventions, so there's
3537 a bit more typing, but it follows sys.argv conventions, so there's
3534 less special-casing to remember.
3538 less special-casing to remember.
3535
3539
3536 2002-06-12 Fernando Perez <fperez@colorado.edu>
3540 2002-06-12 Fernando Perez <fperez@colorado.edu>
3537
3541
3538 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3542 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3539 command. Thanks to a suggestion by Mike Heeter.
3543 command. Thanks to a suggestion by Mike Heeter.
3540 (Magic.magic_pfile): added behavior to look at filenames if given
3544 (Magic.magic_pfile): added behavior to look at filenames if given
3541 arg is not a defined object.
3545 arg is not a defined object.
3542 (Magic.magic_save): New @save function to save code snippets. Also
3546 (Magic.magic_save): New @save function to save code snippets. Also
3543 a Mike Heeter idea.
3547 a Mike Heeter idea.
3544
3548
3545 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3549 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3546 plot() and replot(). Much more convenient now, especially for
3550 plot() and replot(). Much more convenient now, especially for
3547 interactive use.
3551 interactive use.
3548
3552
3549 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3553 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3550 filenames.
3554 filenames.
3551
3555
3552 2002-06-02 Fernando Perez <fperez@colorado.edu>
3556 2002-06-02 Fernando Perez <fperez@colorado.edu>
3553
3557
3554 * IPython/Struct.py (Struct.__init__): modified to admit
3558 * IPython/Struct.py (Struct.__init__): modified to admit
3555 initialization via another struct.
3559 initialization via another struct.
3556
3560
3557 * IPython/genutils.py (SystemExec.__init__): New stateful
3561 * IPython/genutils.py (SystemExec.__init__): New stateful
3558 interface to xsys and bq. Useful for writing system scripts.
3562 interface to xsys and bq. Useful for writing system scripts.
3559
3563
3560 2002-05-30 Fernando Perez <fperez@colorado.edu>
3564 2002-05-30 Fernando Perez <fperez@colorado.edu>
3561
3565
3562 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3566 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3563 documents. This will make the user download smaller (it's getting
3567 documents. This will make the user download smaller (it's getting
3564 too big).
3568 too big).
3565
3569
3566 2002-05-29 Fernando Perez <fperez@colorado.edu>
3570 2002-05-29 Fernando Perez <fperez@colorado.edu>
3567
3571
3568 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3572 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3569 fix problems with shelve and pickle. Seems to work, but I don't
3573 fix problems with shelve and pickle. Seems to work, but I don't
3570 know if corner cases break it. Thanks to Mike Heeter
3574 know if corner cases break it. Thanks to Mike Heeter
3571 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3575 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3572
3576
3573 2002-05-24 Fernando Perez <fperez@colorado.edu>
3577 2002-05-24 Fernando Perez <fperez@colorado.edu>
3574
3578
3575 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3579 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3576 macros having broken.
3580 macros having broken.
3577
3581
3578 2002-05-21 Fernando Perez <fperez@colorado.edu>
3582 2002-05-21 Fernando Perez <fperez@colorado.edu>
3579
3583
3580 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3584 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3581 introduced logging bug: all history before logging started was
3585 introduced logging bug: all history before logging started was
3582 being written one character per line! This came from the redesign
3586 being written one character per line! This came from the redesign
3583 of the input history as a special list which slices to strings,
3587 of the input history as a special list which slices to strings,
3584 not to lists.
3588 not to lists.
3585
3589
3586 2002-05-20 Fernando Perez <fperez@colorado.edu>
3590 2002-05-20 Fernando Perez <fperez@colorado.edu>
3587
3591
3588 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3592 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3589 be an attribute of all classes in this module. The design of these
3593 be an attribute of all classes in this module. The design of these
3590 classes needs some serious overhauling.
3594 classes needs some serious overhauling.
3591
3595
3592 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3596 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3593 which was ignoring '_' in option names.
3597 which was ignoring '_' in option names.
3594
3598
3595 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3599 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3596 'Verbose_novars' to 'Context' and made it the new default. It's a
3600 'Verbose_novars' to 'Context' and made it the new default. It's a
3597 bit more readable and also safer than verbose.
3601 bit more readable and also safer than verbose.
3598
3602
3599 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3603 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3600 triple-quoted strings.
3604 triple-quoted strings.
3601
3605
3602 * IPython/OInspect.py (__all__): new module exposing the object
3606 * IPython/OInspect.py (__all__): new module exposing the object
3603 introspection facilities. Now the corresponding magics are dummy
3607 introspection facilities. Now the corresponding magics are dummy
3604 wrappers around this. Having this module will make it much easier
3608 wrappers around this. Having this module will make it much easier
3605 to put these functions into our modified pdb.
3609 to put these functions into our modified pdb.
3606 This new object inspector system uses the new colorizing module,
3610 This new object inspector system uses the new colorizing module,
3607 so source code and other things are nicely syntax highlighted.
3611 so source code and other things are nicely syntax highlighted.
3608
3612
3609 2002-05-18 Fernando Perez <fperez@colorado.edu>
3613 2002-05-18 Fernando Perez <fperez@colorado.edu>
3610
3614
3611 * IPython/ColorANSI.py: Split the coloring tools into a separate
3615 * IPython/ColorANSI.py: Split the coloring tools into a separate
3612 module so I can use them in other code easier (they were part of
3616 module so I can use them in other code easier (they were part of
3613 ultraTB).
3617 ultraTB).
3614
3618
3615 2002-05-17 Fernando Perez <fperez@colorado.edu>
3619 2002-05-17 Fernando Perez <fperez@colorado.edu>
3616
3620
3617 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3621 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3618 fixed it to set the global 'g' also to the called instance, as
3622 fixed it to set the global 'g' also to the called instance, as
3619 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3623 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3620 user's 'g' variables).
3624 user's 'g' variables).
3621
3625
3622 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3626 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3623 global variables (aliases to _ih,_oh) so that users which expect
3627 global variables (aliases to _ih,_oh) so that users which expect
3624 In[5] or Out[7] to work aren't unpleasantly surprised.
3628 In[5] or Out[7] to work aren't unpleasantly surprised.
3625 (InputList.__getslice__): new class to allow executing slices of
3629 (InputList.__getslice__): new class to allow executing slices of
3626 input history directly. Very simple class, complements the use of
3630 input history directly. Very simple class, complements the use of
3627 macros.
3631 macros.
3628
3632
3629 2002-05-16 Fernando Perez <fperez@colorado.edu>
3633 2002-05-16 Fernando Perez <fperez@colorado.edu>
3630
3634
3631 * setup.py (docdirbase): make doc directory be just doc/IPython
3635 * setup.py (docdirbase): make doc directory be just doc/IPython
3632 without version numbers, it will reduce clutter for users.
3636 without version numbers, it will reduce clutter for users.
3633
3637
3634 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3638 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3635 execfile call to prevent possible memory leak. See for details:
3639 execfile call to prevent possible memory leak. See for details:
3636 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3640 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3637
3641
3638 2002-05-15 Fernando Perez <fperez@colorado.edu>
3642 2002-05-15 Fernando Perez <fperez@colorado.edu>
3639
3643
3640 * IPython/Magic.py (Magic.magic_psource): made the object
3644 * IPython/Magic.py (Magic.magic_psource): made the object
3641 introspection names be more standard: pdoc, pdef, pfile and
3645 introspection names be more standard: pdoc, pdef, pfile and
3642 psource. They all print/page their output, and it makes
3646 psource. They all print/page their output, and it makes
3643 remembering them easier. Kept old names for compatibility as
3647 remembering them easier. Kept old names for compatibility as
3644 aliases.
3648 aliases.
3645
3649
3646 2002-05-14 Fernando Perez <fperez@colorado.edu>
3650 2002-05-14 Fernando Perez <fperez@colorado.edu>
3647
3651
3648 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3652 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3649 what the mouse problem was. The trick is to use gnuplot with temp
3653 what the mouse problem was. The trick is to use gnuplot with temp
3650 files and NOT with pipes (for data communication), because having
3654 files and NOT with pipes (for data communication), because having
3651 both pipes and the mouse on is bad news.
3655 both pipes and the mouse on is bad news.
3652
3656
3653 2002-05-13 Fernando Perez <fperez@colorado.edu>
3657 2002-05-13 Fernando Perez <fperez@colorado.edu>
3654
3658
3655 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3659 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3656 bug. Information would be reported about builtins even when
3660 bug. Information would be reported about builtins even when
3657 user-defined functions overrode them.
3661 user-defined functions overrode them.
3658
3662
3659 2002-05-11 Fernando Perez <fperez@colorado.edu>
3663 2002-05-11 Fernando Perez <fperez@colorado.edu>
3660
3664
3661 * IPython/__init__.py (__all__): removed FlexCompleter from
3665 * IPython/__init__.py (__all__): removed FlexCompleter from
3662 __all__ so that things don't fail in platforms without readline.
3666 __all__ so that things don't fail in platforms without readline.
3663
3667
3664 2002-05-10 Fernando Perez <fperez@colorado.edu>
3668 2002-05-10 Fernando Perez <fperez@colorado.edu>
3665
3669
3666 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3670 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3667 it requires Numeric, effectively making Numeric a dependency for
3671 it requires Numeric, effectively making Numeric a dependency for
3668 IPython.
3672 IPython.
3669
3673
3670 * Released 0.2.13
3674 * Released 0.2.13
3671
3675
3672 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3676 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3673 profiler interface. Now all the major options from the profiler
3677 profiler interface. Now all the major options from the profiler
3674 module are directly supported in IPython, both for single
3678 module are directly supported in IPython, both for single
3675 expressions (@prun) and for full programs (@run -p).
3679 expressions (@prun) and for full programs (@run -p).
3676
3680
3677 2002-05-09 Fernando Perez <fperez@colorado.edu>
3681 2002-05-09 Fernando Perez <fperez@colorado.edu>
3678
3682
3679 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3683 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3680 magic properly formatted for screen.
3684 magic properly formatted for screen.
3681
3685
3682 * setup.py (make_shortcut): Changed things to put pdf version in
3686 * setup.py (make_shortcut): Changed things to put pdf version in
3683 doc/ instead of doc/manual (had to change lyxport a bit).
3687 doc/ instead of doc/manual (had to change lyxport a bit).
3684
3688
3685 * IPython/Magic.py (Profile.string_stats): made profile runs go
3689 * IPython/Magic.py (Profile.string_stats): made profile runs go
3686 through pager (they are long and a pager allows searching, saving,
3690 through pager (they are long and a pager allows searching, saving,
3687 etc.)
3691 etc.)
3688
3692
3689 2002-05-08 Fernando Perez <fperez@colorado.edu>
3693 2002-05-08 Fernando Perez <fperez@colorado.edu>
3690
3694
3691 * Released 0.2.12
3695 * Released 0.2.12
3692
3696
3693 2002-05-06 Fernando Perez <fperez@colorado.edu>
3697 2002-05-06 Fernando Perez <fperez@colorado.edu>
3694
3698
3695 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3699 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3696 introduced); 'hist n1 n2' was broken.
3700 introduced); 'hist n1 n2' was broken.
3697 (Magic.magic_pdb): added optional on/off arguments to @pdb
3701 (Magic.magic_pdb): added optional on/off arguments to @pdb
3698 (Magic.magic_run): added option -i to @run, which executes code in
3702 (Magic.magic_run): added option -i to @run, which executes code in
3699 the IPython namespace instead of a clean one. Also added @irun as
3703 the IPython namespace instead of a clean one. Also added @irun as
3700 an alias to @run -i.
3704 an alias to @run -i.
3701
3705
3702 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3706 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3703 fixed (it didn't really do anything, the namespaces were wrong).
3707 fixed (it didn't really do anything, the namespaces were wrong).
3704
3708
3705 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3709 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3706
3710
3707 * IPython/__init__.py (__all__): Fixed package namespace, now
3711 * IPython/__init__.py (__all__): Fixed package namespace, now
3708 'import IPython' does give access to IPython.<all> as
3712 'import IPython' does give access to IPython.<all> as
3709 expected. Also renamed __release__ to Release.
3713 expected. Also renamed __release__ to Release.
3710
3714
3711 * IPython/Debugger.py (__license__): created new Pdb class which
3715 * IPython/Debugger.py (__license__): created new Pdb class which
3712 functions like a drop-in for the normal pdb.Pdb but does NOT
3716 functions like a drop-in for the normal pdb.Pdb but does NOT
3713 import readline by default. This way it doesn't muck up IPython's
3717 import readline by default. This way it doesn't muck up IPython's
3714 readline handling, and now tab-completion finally works in the
3718 readline handling, and now tab-completion finally works in the
3715 debugger -- sort of. It completes things globally visible, but the
3719 debugger -- sort of. It completes things globally visible, but the
3716 completer doesn't track the stack as pdb walks it. That's a bit
3720 completer doesn't track the stack as pdb walks it. That's a bit
3717 tricky, and I'll have to implement it later.
3721 tricky, and I'll have to implement it later.
3718
3722
3719 2002-05-05 Fernando Perez <fperez@colorado.edu>
3723 2002-05-05 Fernando Perez <fperez@colorado.edu>
3720
3724
3721 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3725 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3722 magic docstrings when printed via ? (explicit \'s were being
3726 magic docstrings when printed via ? (explicit \'s were being
3723 printed).
3727 printed).
3724
3728
3725 * IPython/ipmaker.py (make_IPython): fixed namespace
3729 * IPython/ipmaker.py (make_IPython): fixed namespace
3726 identification bug. Now variables loaded via logs or command-line
3730 identification bug. Now variables loaded via logs or command-line
3727 files are recognized in the interactive namespace by @who.
3731 files are recognized in the interactive namespace by @who.
3728
3732
3729 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3733 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3730 log replay system stemming from the string form of Structs.
3734 log replay system stemming from the string form of Structs.
3731
3735
3732 * IPython/Magic.py (Macro.__init__): improved macros to properly
3736 * IPython/Magic.py (Macro.__init__): improved macros to properly
3733 handle magic commands in them.
3737 handle magic commands in them.
3734 (Magic.magic_logstart): usernames are now expanded so 'logstart
3738 (Magic.magic_logstart): usernames are now expanded so 'logstart
3735 ~/mylog' now works.
3739 ~/mylog' now works.
3736
3740
3737 * IPython/iplib.py (complete): fixed bug where paths starting with
3741 * IPython/iplib.py (complete): fixed bug where paths starting with
3738 '/' would be completed as magic names.
3742 '/' would be completed as magic names.
3739
3743
3740 2002-05-04 Fernando Perez <fperez@colorado.edu>
3744 2002-05-04 Fernando Perez <fperez@colorado.edu>
3741
3745
3742 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3746 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3743 allow running full programs under the profiler's control.
3747 allow running full programs under the profiler's control.
3744
3748
3745 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3749 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3746 mode to report exceptions verbosely but without formatting
3750 mode to report exceptions verbosely but without formatting
3747 variables. This addresses the issue of ipython 'freezing' (it's
3751 variables. This addresses the issue of ipython 'freezing' (it's
3748 not frozen, but caught in an expensive formatting loop) when huge
3752 not frozen, but caught in an expensive formatting loop) when huge
3749 variables are in the context of an exception.
3753 variables are in the context of an exception.
3750 (VerboseTB.text): Added '--->' markers at line where exception was
3754 (VerboseTB.text): Added '--->' markers at line where exception was
3751 triggered. Much clearer to read, especially in NoColor modes.
3755 triggered. Much clearer to read, especially in NoColor modes.
3752
3756
3753 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3757 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3754 implemented in reverse when changing to the new parse_options().
3758 implemented in reverse when changing to the new parse_options().
3755
3759
3756 2002-05-03 Fernando Perez <fperez@colorado.edu>
3760 2002-05-03 Fernando Perez <fperez@colorado.edu>
3757
3761
3758 * IPython/Magic.py (Magic.parse_options): new function so that
3762 * IPython/Magic.py (Magic.parse_options): new function so that
3759 magics can parse options easier.
3763 magics can parse options easier.
3760 (Magic.magic_prun): new function similar to profile.run(),
3764 (Magic.magic_prun): new function similar to profile.run(),
3761 suggested by Chris Hart.
3765 suggested by Chris Hart.
3762 (Magic.magic_cd): fixed behavior so that it only changes if
3766 (Magic.magic_cd): fixed behavior so that it only changes if
3763 directory actually is in history.
3767 directory actually is in history.
3764
3768
3765 * IPython/usage.py (__doc__): added information about potential
3769 * IPython/usage.py (__doc__): added information about potential
3766 slowness of Verbose exception mode when there are huge data
3770 slowness of Verbose exception mode when there are huge data
3767 structures to be formatted (thanks to Archie Paulson).
3771 structures to be formatted (thanks to Archie Paulson).
3768
3772
3769 * IPython/ipmaker.py (make_IPython): Changed default logging
3773 * IPython/ipmaker.py (make_IPython): Changed default logging
3770 (when simply called with -log) to use curr_dir/ipython.log in
3774 (when simply called with -log) to use curr_dir/ipython.log in
3771 rotate mode. Fixed crash which was occuring with -log before
3775 rotate mode. Fixed crash which was occuring with -log before
3772 (thanks to Jim Boyle).
3776 (thanks to Jim Boyle).
3773
3777
3774 2002-05-01 Fernando Perez <fperez@colorado.edu>
3778 2002-05-01 Fernando Perez <fperez@colorado.edu>
3775
3779
3776 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3780 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3777 was nasty -- though somewhat of a corner case).
3781 was nasty -- though somewhat of a corner case).
3778
3782
3779 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3783 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3780 text (was a bug).
3784 text (was a bug).
3781
3785
3782 2002-04-30 Fernando Perez <fperez@colorado.edu>
3786 2002-04-30 Fernando Perez <fperez@colorado.edu>
3783
3787
3784 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3788 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3785 a print after ^D or ^C from the user so that the In[] prompt
3789 a print after ^D or ^C from the user so that the In[] prompt
3786 doesn't over-run the gnuplot one.
3790 doesn't over-run the gnuplot one.
3787
3791
3788 2002-04-29 Fernando Perez <fperez@colorado.edu>
3792 2002-04-29 Fernando Perez <fperez@colorado.edu>
3789
3793
3790 * Released 0.2.10
3794 * Released 0.2.10
3791
3795
3792 * IPython/__release__.py (version): get date dynamically.
3796 * IPython/__release__.py (version): get date dynamically.
3793
3797
3794 * Misc. documentation updates thanks to Arnd's comments. Also ran
3798 * Misc. documentation updates thanks to Arnd's comments. Also ran
3795 a full spellcheck on the manual (hadn't been done in a while).
3799 a full spellcheck on the manual (hadn't been done in a while).
3796
3800
3797 2002-04-27 Fernando Perez <fperez@colorado.edu>
3801 2002-04-27 Fernando Perez <fperez@colorado.edu>
3798
3802
3799 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3803 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3800 starting a log in mid-session would reset the input history list.
3804 starting a log in mid-session would reset the input history list.
3801
3805
3802 2002-04-26 Fernando Perez <fperez@colorado.edu>
3806 2002-04-26 Fernando Perez <fperez@colorado.edu>
3803
3807
3804 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3808 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3805 all files were being included in an update. Now anything in
3809 all files were being included in an update. Now anything in
3806 UserConfig that matches [A-Za-z]*.py will go (this excludes
3810 UserConfig that matches [A-Za-z]*.py will go (this excludes
3807 __init__.py)
3811 __init__.py)
3808
3812
3809 2002-04-25 Fernando Perez <fperez@colorado.edu>
3813 2002-04-25 Fernando Perez <fperez@colorado.edu>
3810
3814
3811 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3815 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3812 to __builtins__ so that any form of embedded or imported code can
3816 to __builtins__ so that any form of embedded or imported code can
3813 test for being inside IPython.
3817 test for being inside IPython.
3814
3818
3815 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3819 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3816 changed to GnuplotMagic because it's now an importable module,
3820 changed to GnuplotMagic because it's now an importable module,
3817 this makes the name follow that of the standard Gnuplot module.
3821 this makes the name follow that of the standard Gnuplot module.
3818 GnuplotMagic can now be loaded at any time in mid-session.
3822 GnuplotMagic can now be loaded at any time in mid-session.
3819
3823
3820 2002-04-24 Fernando Perez <fperez@colorado.edu>
3824 2002-04-24 Fernando Perez <fperez@colorado.edu>
3821
3825
3822 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3826 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3823 the globals (IPython has its own namespace) and the
3827 the globals (IPython has its own namespace) and the
3824 PhysicalQuantity stuff is much better anyway.
3828 PhysicalQuantity stuff is much better anyway.
3825
3829
3826 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3830 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3827 embedding example to standard user directory for
3831 embedding example to standard user directory for
3828 distribution. Also put it in the manual.
3832 distribution. Also put it in the manual.
3829
3833
3830 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3834 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3831 instance as first argument (so it doesn't rely on some obscure
3835 instance as first argument (so it doesn't rely on some obscure
3832 hidden global).
3836 hidden global).
3833
3837
3834 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3838 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3835 delimiters. While it prevents ().TAB from working, it allows
3839 delimiters. While it prevents ().TAB from working, it allows
3836 completions in open (... expressions. This is by far a more common
3840 completions in open (... expressions. This is by far a more common
3837 case.
3841 case.
3838
3842
3839 2002-04-23 Fernando Perez <fperez@colorado.edu>
3843 2002-04-23 Fernando Perez <fperez@colorado.edu>
3840
3844
3841 * IPython/Extensions/InterpreterPasteInput.py: new
3845 * IPython/Extensions/InterpreterPasteInput.py: new
3842 syntax-processing module for pasting lines with >>> or ... at the
3846 syntax-processing module for pasting lines with >>> or ... at the
3843 start.
3847 start.
3844
3848
3845 * IPython/Extensions/PhysicalQ_Interactive.py
3849 * IPython/Extensions/PhysicalQ_Interactive.py
3846 (PhysicalQuantityInteractive.__int__): fixed to work with either
3850 (PhysicalQuantityInteractive.__int__): fixed to work with either
3847 Numeric or math.
3851 Numeric or math.
3848
3852
3849 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3853 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3850 provided profiles. Now we have:
3854 provided profiles. Now we have:
3851 -math -> math module as * and cmath with its own namespace.
3855 -math -> math module as * and cmath with its own namespace.
3852 -numeric -> Numeric as *, plus gnuplot & grace
3856 -numeric -> Numeric as *, plus gnuplot & grace
3853 -physics -> same as before
3857 -physics -> same as before
3854
3858
3855 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3859 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3856 user-defined magics wouldn't be found by @magic if they were
3860 user-defined magics wouldn't be found by @magic if they were
3857 defined as class methods. Also cleaned up the namespace search
3861 defined as class methods. Also cleaned up the namespace search
3858 logic and the string building (to use %s instead of many repeated
3862 logic and the string building (to use %s instead of many repeated
3859 string adds).
3863 string adds).
3860
3864
3861 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3865 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3862 of user-defined magics to operate with class methods (cleaner, in
3866 of user-defined magics to operate with class methods (cleaner, in
3863 line with the gnuplot code).
3867 line with the gnuplot code).
3864
3868
3865 2002-04-22 Fernando Perez <fperez@colorado.edu>
3869 2002-04-22 Fernando Perez <fperez@colorado.edu>
3866
3870
3867 * setup.py: updated dependency list so that manual is updated when
3871 * setup.py: updated dependency list so that manual is updated when
3868 all included files change.
3872 all included files change.
3869
3873
3870 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3874 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3871 the delimiter removal option (the fix is ugly right now).
3875 the delimiter removal option (the fix is ugly right now).
3872
3876
3873 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3877 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3874 all of the math profile (quicker loading, no conflict between
3878 all of the math profile (quicker loading, no conflict between
3875 g-9.8 and g-gnuplot).
3879 g-9.8 and g-gnuplot).
3876
3880
3877 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3881 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3878 name of post-mortem files to IPython_crash_report.txt.
3882 name of post-mortem files to IPython_crash_report.txt.
3879
3883
3880 * Cleanup/update of the docs. Added all the new readline info and
3884 * Cleanup/update of the docs. Added all the new readline info and
3881 formatted all lists as 'real lists'.
3885 formatted all lists as 'real lists'.
3882
3886
3883 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3887 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3884 tab-completion options, since the full readline parse_and_bind is
3888 tab-completion options, since the full readline parse_and_bind is
3885 now accessible.
3889 now accessible.
3886
3890
3887 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3891 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3888 handling of readline options. Now users can specify any string to
3892 handling of readline options. Now users can specify any string to
3889 be passed to parse_and_bind(), as well as the delimiters to be
3893 be passed to parse_and_bind(), as well as the delimiters to be
3890 removed.
3894 removed.
3891 (InteractiveShell.__init__): Added __name__ to the global
3895 (InteractiveShell.__init__): Added __name__ to the global
3892 namespace so that things like Itpl which rely on its existence
3896 namespace so that things like Itpl which rely on its existence
3893 don't crash.
3897 don't crash.
3894 (InteractiveShell._prefilter): Defined the default with a _ so
3898 (InteractiveShell._prefilter): Defined the default with a _ so
3895 that prefilter() is easier to override, while the default one
3899 that prefilter() is easier to override, while the default one
3896 remains available.
3900 remains available.
3897
3901
3898 2002-04-18 Fernando Perez <fperez@colorado.edu>
3902 2002-04-18 Fernando Perez <fperez@colorado.edu>
3899
3903
3900 * Added information about pdb in the docs.
3904 * Added information about pdb in the docs.
3901
3905
3902 2002-04-17 Fernando Perez <fperez@colorado.edu>
3906 2002-04-17 Fernando Perez <fperez@colorado.edu>
3903
3907
3904 * IPython/ipmaker.py (make_IPython): added rc_override option to
3908 * IPython/ipmaker.py (make_IPython): added rc_override option to
3905 allow passing config options at creation time which may override
3909 allow passing config options at creation time which may override
3906 anything set in the config files or command line. This is
3910 anything set in the config files or command line. This is
3907 particularly useful for configuring embedded instances.
3911 particularly useful for configuring embedded instances.
3908
3912
3909 2002-04-15 Fernando Perez <fperez@colorado.edu>
3913 2002-04-15 Fernando Perez <fperez@colorado.edu>
3910
3914
3911 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3915 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3912 crash embedded instances because of the input cache falling out of
3916 crash embedded instances because of the input cache falling out of
3913 sync with the output counter.
3917 sync with the output counter.
3914
3918
3915 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3919 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3916 mode which calls pdb after an uncaught exception in IPython itself.
3920 mode which calls pdb after an uncaught exception in IPython itself.
3917
3921
3918 2002-04-14 Fernando Perez <fperez@colorado.edu>
3922 2002-04-14 Fernando Perez <fperez@colorado.edu>
3919
3923
3920 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3924 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3921 readline, fix it back after each call.
3925 readline, fix it back after each call.
3922
3926
3923 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3927 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3924 method to force all access via __call__(), which guarantees that
3928 method to force all access via __call__(), which guarantees that
3925 traceback references are properly deleted.
3929 traceback references are properly deleted.
3926
3930
3927 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3931 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3928 improve printing when pprint is in use.
3932 improve printing when pprint is in use.
3929
3933
3930 2002-04-13 Fernando Perez <fperez@colorado.edu>
3934 2002-04-13 Fernando Perez <fperez@colorado.edu>
3931
3935
3932 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3936 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3933 exceptions aren't caught anymore. If the user triggers one, he
3937 exceptions aren't caught anymore. If the user triggers one, he
3934 should know why he's doing it and it should go all the way up,
3938 should know why he's doing it and it should go all the way up,
3935 just like any other exception. So now @abort will fully kill the
3939 just like any other exception. So now @abort will fully kill the
3936 embedded interpreter and the embedding code (unless that happens
3940 embedded interpreter and the embedding code (unless that happens
3937 to catch SystemExit).
3941 to catch SystemExit).
3938
3942
3939 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3943 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3940 and a debugger() method to invoke the interactive pdb debugger
3944 and a debugger() method to invoke the interactive pdb debugger
3941 after printing exception information. Also added the corresponding
3945 after printing exception information. Also added the corresponding
3942 -pdb option and @pdb magic to control this feature, and updated
3946 -pdb option and @pdb magic to control this feature, and updated
3943 the docs. After a suggestion from Christopher Hart
3947 the docs. After a suggestion from Christopher Hart
3944 (hart-AT-caltech.edu).
3948 (hart-AT-caltech.edu).
3945
3949
3946 2002-04-12 Fernando Perez <fperez@colorado.edu>
3950 2002-04-12 Fernando Perez <fperez@colorado.edu>
3947
3951
3948 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3952 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3949 the exception handlers defined by the user (not the CrashHandler)
3953 the exception handlers defined by the user (not the CrashHandler)
3950 so that user exceptions don't trigger an ipython bug report.
3954 so that user exceptions don't trigger an ipython bug report.
3951
3955
3952 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3956 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3953 configurable (it should have always been so).
3957 configurable (it should have always been so).
3954
3958
3955 2002-03-26 Fernando Perez <fperez@colorado.edu>
3959 2002-03-26 Fernando Perez <fperez@colorado.edu>
3956
3960
3957 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3961 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3958 and there to fix embedding namespace issues. This should all be
3962 and there to fix embedding namespace issues. This should all be
3959 done in a more elegant way.
3963 done in a more elegant way.
3960
3964
3961 2002-03-25 Fernando Perez <fperez@colorado.edu>
3965 2002-03-25 Fernando Perez <fperez@colorado.edu>
3962
3966
3963 * IPython/genutils.py (get_home_dir): Try to make it work under
3967 * IPython/genutils.py (get_home_dir): Try to make it work under
3964 win9x also.
3968 win9x also.
3965
3969
3966 2002-03-20 Fernando Perez <fperez@colorado.edu>
3970 2002-03-20 Fernando Perez <fperez@colorado.edu>
3967
3971
3968 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3972 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3969 sys.displayhook untouched upon __init__.
3973 sys.displayhook untouched upon __init__.
3970
3974
3971 2002-03-19 Fernando Perez <fperez@colorado.edu>
3975 2002-03-19 Fernando Perez <fperez@colorado.edu>
3972
3976
3973 * Released 0.2.9 (for embedding bug, basically).
3977 * Released 0.2.9 (for embedding bug, basically).
3974
3978
3975 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3979 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3976 exceptions so that enclosing shell's state can be restored.
3980 exceptions so that enclosing shell's state can be restored.
3977
3981
3978 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3982 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3979 naming conventions in the .ipython/ dir.
3983 naming conventions in the .ipython/ dir.
3980
3984
3981 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3985 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3982 from delimiters list so filenames with - in them get expanded.
3986 from delimiters list so filenames with - in them get expanded.
3983
3987
3984 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3988 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3985 sys.displayhook not being properly restored after an embedded call.
3989 sys.displayhook not being properly restored after an embedded call.
3986
3990
3987 2002-03-18 Fernando Perez <fperez@colorado.edu>
3991 2002-03-18 Fernando Perez <fperez@colorado.edu>
3988
3992
3989 * Released 0.2.8
3993 * Released 0.2.8
3990
3994
3991 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3995 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3992 some files weren't being included in a -upgrade.
3996 some files weren't being included in a -upgrade.
3993 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3997 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3994 on' so that the first tab completes.
3998 on' so that the first tab completes.
3995 (InteractiveShell.handle_magic): fixed bug with spaces around
3999 (InteractiveShell.handle_magic): fixed bug with spaces around
3996 quotes breaking many magic commands.
4000 quotes breaking many magic commands.
3997
4001
3998 * setup.py: added note about ignoring the syntax error messages at
4002 * setup.py: added note about ignoring the syntax error messages at
3999 installation.
4003 installation.
4000
4004
4001 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4005 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4002 streamlining the gnuplot interface, now there's only one magic @gp.
4006 streamlining the gnuplot interface, now there's only one magic @gp.
4003
4007
4004 2002-03-17 Fernando Perez <fperez@colorado.edu>
4008 2002-03-17 Fernando Perez <fperez@colorado.edu>
4005
4009
4006 * IPython/UserConfig/magic_gnuplot.py: new name for the
4010 * IPython/UserConfig/magic_gnuplot.py: new name for the
4007 example-magic_pm.py file. Much enhanced system, now with a shell
4011 example-magic_pm.py file. Much enhanced system, now with a shell
4008 for communicating directly with gnuplot, one command at a time.
4012 for communicating directly with gnuplot, one command at a time.
4009
4013
4010 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4014 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4011 setting __name__=='__main__'.
4015 setting __name__=='__main__'.
4012
4016
4013 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4017 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4014 mini-shell for accessing gnuplot from inside ipython. Should
4018 mini-shell for accessing gnuplot from inside ipython. Should
4015 extend it later for grace access too. Inspired by Arnd's
4019 extend it later for grace access too. Inspired by Arnd's
4016 suggestion.
4020 suggestion.
4017
4021
4018 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4022 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4019 calling magic functions with () in their arguments. Thanks to Arnd
4023 calling magic functions with () in their arguments. Thanks to Arnd
4020 Baecker for pointing this to me.
4024 Baecker for pointing this to me.
4021
4025
4022 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4026 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4023 infinitely for integer or complex arrays (only worked with floats).
4027 infinitely for integer or complex arrays (only worked with floats).
4024
4028
4025 2002-03-16 Fernando Perez <fperez@colorado.edu>
4029 2002-03-16 Fernando Perez <fperez@colorado.edu>
4026
4030
4027 * setup.py: Merged setup and setup_windows into a single script
4031 * setup.py: Merged setup and setup_windows into a single script
4028 which properly handles things for windows users.
4032 which properly handles things for windows users.
4029
4033
4030 2002-03-15 Fernando Perez <fperez@colorado.edu>
4034 2002-03-15 Fernando Perez <fperez@colorado.edu>
4031
4035
4032 * Big change to the manual: now the magics are all automatically
4036 * Big change to the manual: now the magics are all automatically
4033 documented. This information is generated from their docstrings
4037 documented. This information is generated from their docstrings
4034 and put in a latex file included by the manual lyx file. This way
4038 and put in a latex file included by the manual lyx file. This way
4035 we get always up to date information for the magics. The manual
4039 we get always up to date information for the magics. The manual
4036 now also has proper version information, also auto-synced.
4040 now also has proper version information, also auto-synced.
4037
4041
4038 For this to work, an undocumented --magic_docstrings option was added.
4042 For this to work, an undocumented --magic_docstrings option was added.
4039
4043
4040 2002-03-13 Fernando Perez <fperez@colorado.edu>
4044 2002-03-13 Fernando Perez <fperez@colorado.edu>
4041
4045
4042 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4046 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4043 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4047 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4044
4048
4045 2002-03-12 Fernando Perez <fperez@colorado.edu>
4049 2002-03-12 Fernando Perez <fperez@colorado.edu>
4046
4050
4047 * IPython/ultraTB.py (TermColors): changed color escapes again to
4051 * IPython/ultraTB.py (TermColors): changed color escapes again to
4048 fix the (old, reintroduced) line-wrapping bug. Basically, if
4052 fix the (old, reintroduced) line-wrapping bug. Basically, if
4049 \001..\002 aren't given in the color escapes, lines get wrapped
4053 \001..\002 aren't given in the color escapes, lines get wrapped
4050 weirdly. But giving those screws up old xterms and emacs terms. So
4054 weirdly. But giving those screws up old xterms and emacs terms. So
4051 I added some logic for emacs terms to be ok, but I can't identify old
4055 I added some logic for emacs terms to be ok, but I can't identify old
4052 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4056 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4053
4057
4054 2002-03-10 Fernando Perez <fperez@colorado.edu>
4058 2002-03-10 Fernando Perez <fperez@colorado.edu>
4055
4059
4056 * IPython/usage.py (__doc__): Various documentation cleanups and
4060 * IPython/usage.py (__doc__): Various documentation cleanups and
4057 updates, both in usage docstrings and in the manual.
4061 updates, both in usage docstrings and in the manual.
4058
4062
4059 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4063 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4060 handling of caching. Set minimum acceptabe value for having a
4064 handling of caching. Set minimum acceptabe value for having a
4061 cache at 20 values.
4065 cache at 20 values.
4062
4066
4063 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4067 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4064 install_first_time function to a method, renamed it and added an
4068 install_first_time function to a method, renamed it and added an
4065 'upgrade' mode. Now people can update their config directory with
4069 'upgrade' mode. Now people can update their config directory with
4066 a simple command line switch (-upgrade, also new).
4070 a simple command line switch (-upgrade, also new).
4067
4071
4068 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4072 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4069 @file (convenient for automagic users under Python >= 2.2).
4073 @file (convenient for automagic users under Python >= 2.2).
4070 Removed @files (it seemed more like a plural than an abbrev. of
4074 Removed @files (it seemed more like a plural than an abbrev. of
4071 'file show').
4075 'file show').
4072
4076
4073 * IPython/iplib.py (install_first_time): Fixed crash if there were
4077 * IPython/iplib.py (install_first_time): Fixed crash if there were
4074 backup files ('~') in .ipython/ install directory.
4078 backup files ('~') in .ipython/ install directory.
4075
4079
4076 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4080 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4077 system. Things look fine, but these changes are fairly
4081 system. Things look fine, but these changes are fairly
4078 intrusive. Test them for a few days.
4082 intrusive. Test them for a few days.
4079
4083
4080 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4084 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4081 the prompts system. Now all in/out prompt strings are user
4085 the prompts system. Now all in/out prompt strings are user
4082 controllable. This is particularly useful for embedding, as one
4086 controllable. This is particularly useful for embedding, as one
4083 can tag embedded instances with particular prompts.
4087 can tag embedded instances with particular prompts.
4084
4088
4085 Also removed global use of sys.ps1/2, which now allows nested
4089 Also removed global use of sys.ps1/2, which now allows nested
4086 embeddings without any problems. Added command-line options for
4090 embeddings without any problems. Added command-line options for
4087 the prompt strings.
4091 the prompt strings.
4088
4092
4089 2002-03-08 Fernando Perez <fperez@colorado.edu>
4093 2002-03-08 Fernando Perez <fperez@colorado.edu>
4090
4094
4091 * IPython/UserConfig/example-embed-short.py (ipshell): added
4095 * IPython/UserConfig/example-embed-short.py (ipshell): added
4092 example file with the bare minimum code for embedding.
4096 example file with the bare minimum code for embedding.
4093
4097
4094 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4098 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4095 functionality for the embeddable shell to be activated/deactivated
4099 functionality for the embeddable shell to be activated/deactivated
4096 either globally or at each call.
4100 either globally or at each call.
4097
4101
4098 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4102 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4099 rewriting the prompt with '--->' for auto-inputs with proper
4103 rewriting the prompt with '--->' for auto-inputs with proper
4100 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4104 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4101 this is handled by the prompts class itself, as it should.
4105 this is handled by the prompts class itself, as it should.
4102
4106
4103 2002-03-05 Fernando Perez <fperez@colorado.edu>
4107 2002-03-05 Fernando Perez <fperez@colorado.edu>
4104
4108
4105 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4109 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4106 @logstart to avoid name clashes with the math log function.
4110 @logstart to avoid name clashes with the math log function.
4107
4111
4108 * Big updates to X/Emacs section of the manual.
4112 * Big updates to X/Emacs section of the manual.
4109
4113
4110 * Removed ipython_emacs. Milan explained to me how to pass
4114 * Removed ipython_emacs. Milan explained to me how to pass
4111 arguments to ipython through Emacs. Some day I'm going to end up
4115 arguments to ipython through Emacs. Some day I'm going to end up
4112 learning some lisp...
4116 learning some lisp...
4113
4117
4114 2002-03-04 Fernando Perez <fperez@colorado.edu>
4118 2002-03-04 Fernando Perez <fperez@colorado.edu>
4115
4119
4116 * IPython/ipython_emacs: Created script to be used as the
4120 * IPython/ipython_emacs: Created script to be used as the
4117 py-python-command Emacs variable so we can pass IPython
4121 py-python-command Emacs variable so we can pass IPython
4118 parameters. I can't figure out how to tell Emacs directly to pass
4122 parameters. I can't figure out how to tell Emacs directly to pass
4119 parameters to IPython, so a dummy shell script will do it.
4123 parameters to IPython, so a dummy shell script will do it.
4120
4124
4121 Other enhancements made for things to work better under Emacs'
4125 Other enhancements made for things to work better under Emacs'
4122 various types of terminals. Many thanks to Milan Zamazal
4126 various types of terminals. Many thanks to Milan Zamazal
4123 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4127 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4124
4128
4125 2002-03-01 Fernando Perez <fperez@colorado.edu>
4129 2002-03-01 Fernando Perez <fperez@colorado.edu>
4126
4130
4127 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4131 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4128 that loading of readline is now optional. This gives better
4132 that loading of readline is now optional. This gives better
4129 control to emacs users.
4133 control to emacs users.
4130
4134
4131 * IPython/ultraTB.py (__date__): Modified color escape sequences
4135 * IPython/ultraTB.py (__date__): Modified color escape sequences
4132 and now things work fine under xterm and in Emacs' term buffers
4136 and now things work fine under xterm and in Emacs' term buffers
4133 (though not shell ones). Well, in emacs you get colors, but all
4137 (though not shell ones). Well, in emacs you get colors, but all
4134 seem to be 'light' colors (no difference between dark and light
4138 seem to be 'light' colors (no difference between dark and light
4135 ones). But the garbage chars are gone, and also in xterms. It
4139 ones). But the garbage chars are gone, and also in xterms. It
4136 seems that now I'm using 'cleaner' ansi sequences.
4140 seems that now I'm using 'cleaner' ansi sequences.
4137
4141
4138 2002-02-21 Fernando Perez <fperez@colorado.edu>
4142 2002-02-21 Fernando Perez <fperez@colorado.edu>
4139
4143
4140 * Released 0.2.7 (mainly to publish the scoping fix).
4144 * Released 0.2.7 (mainly to publish the scoping fix).
4141
4145
4142 * IPython/Logger.py (Logger.logstate): added. A corresponding
4146 * IPython/Logger.py (Logger.logstate): added. A corresponding
4143 @logstate magic was created.
4147 @logstate magic was created.
4144
4148
4145 * IPython/Magic.py: fixed nested scoping problem under Python
4149 * IPython/Magic.py: fixed nested scoping problem under Python
4146 2.1.x (automagic wasn't working).
4150 2.1.x (automagic wasn't working).
4147
4151
4148 2002-02-20 Fernando Perez <fperez@colorado.edu>
4152 2002-02-20 Fernando Perez <fperez@colorado.edu>
4149
4153
4150 * Released 0.2.6.
4154 * Released 0.2.6.
4151
4155
4152 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4156 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4153 option so that logs can come out without any headers at all.
4157 option so that logs can come out without any headers at all.
4154
4158
4155 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4159 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4156 SciPy.
4160 SciPy.
4157
4161
4158 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4162 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4159 that embedded IPython calls don't require vars() to be explicitly
4163 that embedded IPython calls don't require vars() to be explicitly
4160 passed. Now they are extracted from the caller's frame (code
4164 passed. Now they are extracted from the caller's frame (code
4161 snatched from Eric Jones' weave). Added better documentation to
4165 snatched from Eric Jones' weave). Added better documentation to
4162 the section on embedding and the example file.
4166 the section on embedding and the example file.
4163
4167
4164 * IPython/genutils.py (page): Changed so that under emacs, it just
4168 * IPython/genutils.py (page): Changed so that under emacs, it just
4165 prints the string. You can then page up and down in the emacs
4169 prints the string. You can then page up and down in the emacs
4166 buffer itself. This is how the builtin help() works.
4170 buffer itself. This is how the builtin help() works.
4167
4171
4168 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4172 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4169 macro scoping: macros need to be executed in the user's namespace
4173 macro scoping: macros need to be executed in the user's namespace
4170 to work as if they had been typed by the user.
4174 to work as if they had been typed by the user.
4171
4175
4172 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4176 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4173 execute automatically (no need to type 'exec...'). They then
4177 execute automatically (no need to type 'exec...'). They then
4174 behave like 'true macros'. The printing system was also modified
4178 behave like 'true macros'. The printing system was also modified
4175 for this to work.
4179 for this to work.
4176
4180
4177 2002-02-19 Fernando Perez <fperez@colorado.edu>
4181 2002-02-19 Fernando Perez <fperez@colorado.edu>
4178
4182
4179 * IPython/genutils.py (page_file): new function for paging files
4183 * IPython/genutils.py (page_file): new function for paging files
4180 in an OS-independent way. Also necessary for file viewing to work
4184 in an OS-independent way. Also necessary for file viewing to work
4181 well inside Emacs buffers.
4185 well inside Emacs buffers.
4182 (page): Added checks for being in an emacs buffer.
4186 (page): Added checks for being in an emacs buffer.
4183 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4187 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4184 same bug in iplib.
4188 same bug in iplib.
4185
4189
4186 2002-02-18 Fernando Perez <fperez@colorado.edu>
4190 2002-02-18 Fernando Perez <fperez@colorado.edu>
4187
4191
4188 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4192 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4189 of readline so that IPython can work inside an Emacs buffer.
4193 of readline so that IPython can work inside an Emacs buffer.
4190
4194
4191 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4195 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4192 method signatures (they weren't really bugs, but it looks cleaner
4196 method signatures (they weren't really bugs, but it looks cleaner
4193 and keeps PyChecker happy).
4197 and keeps PyChecker happy).
4194
4198
4195 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4199 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4196 for implementing various user-defined hooks. Currently only
4200 for implementing various user-defined hooks. Currently only
4197 display is done.
4201 display is done.
4198
4202
4199 * IPython/Prompts.py (CachedOutput._display): changed display
4203 * IPython/Prompts.py (CachedOutput._display): changed display
4200 functions so that they can be dynamically changed by users easily.
4204 functions so that they can be dynamically changed by users easily.
4201
4205
4202 * IPython/Extensions/numeric_formats.py (num_display): added an
4206 * IPython/Extensions/numeric_formats.py (num_display): added an
4203 extension for printing NumPy arrays in flexible manners. It
4207 extension for printing NumPy arrays in flexible manners. It
4204 doesn't do anything yet, but all the structure is in
4208 doesn't do anything yet, but all the structure is in
4205 place. Ultimately the plan is to implement output format control
4209 place. Ultimately the plan is to implement output format control
4206 like in Octave.
4210 like in Octave.
4207
4211
4208 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4212 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4209 methods are found at run-time by all the automatic machinery.
4213 methods are found at run-time by all the automatic machinery.
4210
4214
4211 2002-02-17 Fernando Perez <fperez@colorado.edu>
4215 2002-02-17 Fernando Perez <fperez@colorado.edu>
4212
4216
4213 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4217 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4214 whole file a little.
4218 whole file a little.
4215
4219
4216 * ToDo: closed this document. Now there's a new_design.lyx
4220 * ToDo: closed this document. Now there's a new_design.lyx
4217 document for all new ideas. Added making a pdf of it for the
4221 document for all new ideas. Added making a pdf of it for the
4218 end-user distro.
4222 end-user distro.
4219
4223
4220 * IPython/Logger.py (Logger.switch_log): Created this to replace
4224 * IPython/Logger.py (Logger.switch_log): Created this to replace
4221 logon() and logoff(). It also fixes a nasty crash reported by
4225 logon() and logoff(). It also fixes a nasty crash reported by
4222 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4226 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4223
4227
4224 * IPython/iplib.py (complete): got auto-completion to work with
4228 * IPython/iplib.py (complete): got auto-completion to work with
4225 automagic (I had wanted this for a long time).
4229 automagic (I had wanted this for a long time).
4226
4230
4227 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4231 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4228 to @file, since file() is now a builtin and clashes with automagic
4232 to @file, since file() is now a builtin and clashes with automagic
4229 for @file.
4233 for @file.
4230
4234
4231 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4235 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4232 of this was previously in iplib, which had grown to more than 2000
4236 of this was previously in iplib, which had grown to more than 2000
4233 lines, way too long. No new functionality, but it makes managing
4237 lines, way too long. No new functionality, but it makes managing
4234 the code a bit easier.
4238 the code a bit easier.
4235
4239
4236 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4240 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4237 information to crash reports.
4241 information to crash reports.
4238
4242
4239 2002-02-12 Fernando Perez <fperez@colorado.edu>
4243 2002-02-12 Fernando Perez <fperez@colorado.edu>
4240
4244
4241 * Released 0.2.5.
4245 * Released 0.2.5.
4242
4246
4243 2002-02-11 Fernando Perez <fperez@colorado.edu>
4247 2002-02-11 Fernando Perez <fperez@colorado.edu>
4244
4248
4245 * Wrote a relatively complete Windows installer. It puts
4249 * Wrote a relatively complete Windows installer. It puts
4246 everything in place, creates Start Menu entries and fixes the
4250 everything in place, creates Start Menu entries and fixes the
4247 color issues. Nothing fancy, but it works.
4251 color issues. Nothing fancy, but it works.
4248
4252
4249 2002-02-10 Fernando Perez <fperez@colorado.edu>
4253 2002-02-10 Fernando Perez <fperez@colorado.edu>
4250
4254
4251 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4255 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4252 os.path.expanduser() call so that we can type @run ~/myfile.py and
4256 os.path.expanduser() call so that we can type @run ~/myfile.py and
4253 have thigs work as expected.
4257 have thigs work as expected.
4254
4258
4255 * IPython/genutils.py (page): fixed exception handling so things
4259 * IPython/genutils.py (page): fixed exception handling so things
4256 work both in Unix and Windows correctly. Quitting a pager triggers
4260 work both in Unix and Windows correctly. Quitting a pager triggers
4257 an IOError/broken pipe in Unix, and in windows not finding a pager
4261 an IOError/broken pipe in Unix, and in windows not finding a pager
4258 is also an IOError, so I had to actually look at the return value
4262 is also an IOError, so I had to actually look at the return value
4259 of the exception, not just the exception itself. Should be ok now.
4263 of the exception, not just the exception itself. Should be ok now.
4260
4264
4261 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4265 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4262 modified to allow case-insensitive color scheme changes.
4266 modified to allow case-insensitive color scheme changes.
4263
4267
4264 2002-02-09 Fernando Perez <fperez@colorado.edu>
4268 2002-02-09 Fernando Perez <fperez@colorado.edu>
4265
4269
4266 * IPython/genutils.py (native_line_ends): new function to leave
4270 * IPython/genutils.py (native_line_ends): new function to leave
4267 user config files with os-native line-endings.
4271 user config files with os-native line-endings.
4268
4272
4269 * README and manual updates.
4273 * README and manual updates.
4270
4274
4271 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4275 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4272 instead of StringType to catch Unicode strings.
4276 instead of StringType to catch Unicode strings.
4273
4277
4274 * IPython/genutils.py (filefind): fixed bug for paths with
4278 * IPython/genutils.py (filefind): fixed bug for paths with
4275 embedded spaces (very common in Windows).
4279 embedded spaces (very common in Windows).
4276
4280
4277 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4281 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4278 files under Windows, so that they get automatically associated
4282 files under Windows, so that they get automatically associated
4279 with a text editor. Windows makes it a pain to handle
4283 with a text editor. Windows makes it a pain to handle
4280 extension-less files.
4284 extension-less files.
4281
4285
4282 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4286 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4283 warning about readline only occur for Posix. In Windows there's no
4287 warning about readline only occur for Posix. In Windows there's no
4284 way to get readline, so why bother with the warning.
4288 way to get readline, so why bother with the warning.
4285
4289
4286 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4290 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4287 for __str__ instead of dir(self), since dir() changed in 2.2.
4291 for __str__ instead of dir(self), since dir() changed in 2.2.
4288
4292
4289 * Ported to Windows! Tested on XP, I suspect it should work fine
4293 * Ported to Windows! Tested on XP, I suspect it should work fine
4290 on NT/2000, but I don't think it will work on 98 et al. That
4294 on NT/2000, but I don't think it will work on 98 et al. That
4291 series of Windows is such a piece of junk anyway that I won't try
4295 series of Windows is such a piece of junk anyway that I won't try
4292 porting it there. The XP port was straightforward, showed a few
4296 porting it there. The XP port was straightforward, showed a few
4293 bugs here and there (fixed all), in particular some string
4297 bugs here and there (fixed all), in particular some string
4294 handling stuff which required considering Unicode strings (which
4298 handling stuff which required considering Unicode strings (which
4295 Windows uses). This is good, but hasn't been too tested :) No
4299 Windows uses). This is good, but hasn't been too tested :) No
4296 fancy installer yet, I'll put a note in the manual so people at
4300 fancy installer yet, I'll put a note in the manual so people at
4297 least make manually a shortcut.
4301 least make manually a shortcut.
4298
4302
4299 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4303 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4300 into a single one, "colors". This now controls both prompt and
4304 into a single one, "colors". This now controls both prompt and
4301 exception color schemes, and can be changed both at startup
4305 exception color schemes, and can be changed both at startup
4302 (either via command-line switches or via ipythonrc files) and at
4306 (either via command-line switches or via ipythonrc files) and at
4303 runtime, with @colors.
4307 runtime, with @colors.
4304 (Magic.magic_run): renamed @prun to @run and removed the old
4308 (Magic.magic_run): renamed @prun to @run and removed the old
4305 @run. The two were too similar to warrant keeping both.
4309 @run. The two were too similar to warrant keeping both.
4306
4310
4307 2002-02-03 Fernando Perez <fperez@colorado.edu>
4311 2002-02-03 Fernando Perez <fperez@colorado.edu>
4308
4312
4309 * IPython/iplib.py (install_first_time): Added comment on how to
4313 * IPython/iplib.py (install_first_time): Added comment on how to
4310 configure the color options for first-time users. Put a <return>
4314 configure the color options for first-time users. Put a <return>
4311 request at the end so that small-terminal users get a chance to
4315 request at the end so that small-terminal users get a chance to
4312 read the startup info.
4316 read the startup info.
4313
4317
4314 2002-01-23 Fernando Perez <fperez@colorado.edu>
4318 2002-01-23 Fernando Perez <fperez@colorado.edu>
4315
4319
4316 * IPython/iplib.py (CachedOutput.update): Changed output memory
4320 * IPython/iplib.py (CachedOutput.update): Changed output memory
4317 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4321 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4318 input history we still use _i. Did this b/c these variable are
4322 input history we still use _i. Did this b/c these variable are
4319 very commonly used in interactive work, so the less we need to
4323 very commonly used in interactive work, so the less we need to
4320 type the better off we are.
4324 type the better off we are.
4321 (Magic.magic_prun): updated @prun to better handle the namespaces
4325 (Magic.magic_prun): updated @prun to better handle the namespaces
4322 the file will run in, including a fix for __name__ not being set
4326 the file will run in, including a fix for __name__ not being set
4323 before.
4327 before.
4324
4328
4325 2002-01-20 Fernando Perez <fperez@colorado.edu>
4329 2002-01-20 Fernando Perez <fperez@colorado.edu>
4326
4330
4327 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4331 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4328 extra garbage for Python 2.2. Need to look more carefully into
4332 extra garbage for Python 2.2. Need to look more carefully into
4329 this later.
4333 this later.
4330
4334
4331 2002-01-19 Fernando Perez <fperez@colorado.edu>
4335 2002-01-19 Fernando Perez <fperez@colorado.edu>
4332
4336
4333 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4337 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4334 display SyntaxError exceptions properly formatted when they occur
4338 display SyntaxError exceptions properly formatted when they occur
4335 (they can be triggered by imported code).
4339 (they can be triggered by imported code).
4336
4340
4337 2002-01-18 Fernando Perez <fperez@colorado.edu>
4341 2002-01-18 Fernando Perez <fperez@colorado.edu>
4338
4342
4339 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4343 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4340 SyntaxError exceptions are reported nicely formatted, instead of
4344 SyntaxError exceptions are reported nicely formatted, instead of
4341 spitting out only offset information as before.
4345 spitting out only offset information as before.
4342 (Magic.magic_prun): Added the @prun function for executing
4346 (Magic.magic_prun): Added the @prun function for executing
4343 programs with command line args inside IPython.
4347 programs with command line args inside IPython.
4344
4348
4345 2002-01-16 Fernando Perez <fperez@colorado.edu>
4349 2002-01-16 Fernando Perez <fperez@colorado.edu>
4346
4350
4347 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4351 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4348 to *not* include the last item given in a range. This brings their
4352 to *not* include the last item given in a range. This brings their
4349 behavior in line with Python's slicing:
4353 behavior in line with Python's slicing:
4350 a[n1:n2] -> a[n1]...a[n2-1]
4354 a[n1:n2] -> a[n1]...a[n2-1]
4351 It may be a bit less convenient, but I prefer to stick to Python's
4355 It may be a bit less convenient, but I prefer to stick to Python's
4352 conventions *everywhere*, so users never have to wonder.
4356 conventions *everywhere*, so users never have to wonder.
4353 (Magic.magic_macro): Added @macro function to ease the creation of
4357 (Magic.magic_macro): Added @macro function to ease the creation of
4354 macros.
4358 macros.
4355
4359
4356 2002-01-05 Fernando Perez <fperez@colorado.edu>
4360 2002-01-05 Fernando Perez <fperez@colorado.edu>
4357
4361
4358 * Released 0.2.4.
4362 * Released 0.2.4.
4359
4363
4360 * IPython/iplib.py (Magic.magic_pdef):
4364 * IPython/iplib.py (Magic.magic_pdef):
4361 (InteractiveShell.safe_execfile): report magic lines and error
4365 (InteractiveShell.safe_execfile): report magic lines and error
4362 lines without line numbers so one can easily copy/paste them for
4366 lines without line numbers so one can easily copy/paste them for
4363 re-execution.
4367 re-execution.
4364
4368
4365 * Updated manual with recent changes.
4369 * Updated manual with recent changes.
4366
4370
4367 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4371 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4368 docstring printing when class? is called. Very handy for knowing
4372 docstring printing when class? is called. Very handy for knowing
4369 how to create class instances (as long as __init__ is well
4373 how to create class instances (as long as __init__ is well
4370 documented, of course :)
4374 documented, of course :)
4371 (Magic.magic_doc): print both class and constructor docstrings.
4375 (Magic.magic_doc): print both class and constructor docstrings.
4372 (Magic.magic_pdef): give constructor info if passed a class and
4376 (Magic.magic_pdef): give constructor info if passed a class and
4373 __call__ info for callable object instances.
4377 __call__ info for callable object instances.
4374
4378
4375 2002-01-04 Fernando Perez <fperez@colorado.edu>
4379 2002-01-04 Fernando Perez <fperez@colorado.edu>
4376
4380
4377 * Made deep_reload() off by default. It doesn't always work
4381 * Made deep_reload() off by default. It doesn't always work
4378 exactly as intended, so it's probably safer to have it off. It's
4382 exactly as intended, so it's probably safer to have it off. It's
4379 still available as dreload() anyway, so nothing is lost.
4383 still available as dreload() anyway, so nothing is lost.
4380
4384
4381 2002-01-02 Fernando Perez <fperez@colorado.edu>
4385 2002-01-02 Fernando Perez <fperez@colorado.edu>
4382
4386
4383 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4387 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4384 so I wanted an updated release).
4388 so I wanted an updated release).
4385
4389
4386 2001-12-27 Fernando Perez <fperez@colorado.edu>
4390 2001-12-27 Fernando Perez <fperez@colorado.edu>
4387
4391
4388 * IPython/iplib.py (InteractiveShell.interact): Added the original
4392 * IPython/iplib.py (InteractiveShell.interact): Added the original
4389 code from 'code.py' for this module in order to change the
4393 code from 'code.py' for this module in order to change the
4390 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4394 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4391 the history cache would break when the user hit Ctrl-C, and
4395 the history cache would break when the user hit Ctrl-C, and
4392 interact() offers no way to add any hooks to it.
4396 interact() offers no way to add any hooks to it.
4393
4397
4394 2001-12-23 Fernando Perez <fperez@colorado.edu>
4398 2001-12-23 Fernando Perez <fperez@colorado.edu>
4395
4399
4396 * setup.py: added check for 'MANIFEST' before trying to remove
4400 * setup.py: added check for 'MANIFEST' before trying to remove
4397 it. Thanks to Sean Reifschneider.
4401 it. Thanks to Sean Reifschneider.
4398
4402
4399 2001-12-22 Fernando Perez <fperez@colorado.edu>
4403 2001-12-22 Fernando Perez <fperez@colorado.edu>
4400
4404
4401 * Released 0.2.2.
4405 * Released 0.2.2.
4402
4406
4403 * Finished (reasonably) writing the manual. Later will add the
4407 * Finished (reasonably) writing the manual. Later will add the
4404 python-standard navigation stylesheets, but for the time being
4408 python-standard navigation stylesheets, but for the time being
4405 it's fairly complete. Distribution will include html and pdf
4409 it's fairly complete. Distribution will include html and pdf
4406 versions.
4410 versions.
4407
4411
4408 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4412 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4409 (MayaVi author).
4413 (MayaVi author).
4410
4414
4411 2001-12-21 Fernando Perez <fperez@colorado.edu>
4415 2001-12-21 Fernando Perez <fperez@colorado.edu>
4412
4416
4413 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4417 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4414 good public release, I think (with the manual and the distutils
4418 good public release, I think (with the manual and the distutils
4415 installer). The manual can use some work, but that can go
4419 installer). The manual can use some work, but that can go
4416 slowly. Otherwise I think it's quite nice for end users. Next
4420 slowly. Otherwise I think it's quite nice for end users. Next
4417 summer, rewrite the guts of it...
4421 summer, rewrite the guts of it...
4418
4422
4419 * Changed format of ipythonrc files to use whitespace as the
4423 * Changed format of ipythonrc files to use whitespace as the
4420 separator instead of an explicit '='. Cleaner.
4424 separator instead of an explicit '='. Cleaner.
4421
4425
4422 2001-12-20 Fernando Perez <fperez@colorado.edu>
4426 2001-12-20 Fernando Perez <fperez@colorado.edu>
4423
4427
4424 * Started a manual in LyX. For now it's just a quick merge of the
4428 * Started a manual in LyX. For now it's just a quick merge of the
4425 various internal docstrings and READMEs. Later it may grow into a
4429 various internal docstrings and READMEs. Later it may grow into a
4426 nice, full-blown manual.
4430 nice, full-blown manual.
4427
4431
4428 * Set up a distutils based installer. Installation should now be
4432 * Set up a distutils based installer. Installation should now be
4429 trivially simple for end-users.
4433 trivially simple for end-users.
4430
4434
4431 2001-12-11 Fernando Perez <fperez@colorado.edu>
4435 2001-12-11 Fernando Perez <fperez@colorado.edu>
4432
4436
4433 * Released 0.2.0. First public release, announced it at
4437 * Released 0.2.0. First public release, announced it at
4434 comp.lang.python. From now on, just bugfixes...
4438 comp.lang.python. From now on, just bugfixes...
4435
4439
4436 * Went through all the files, set copyright/license notices and
4440 * Went through all the files, set copyright/license notices and
4437 cleaned up things. Ready for release.
4441 cleaned up things. Ready for release.
4438
4442
4439 2001-12-10 Fernando Perez <fperez@colorado.edu>
4443 2001-12-10 Fernando Perez <fperez@colorado.edu>
4440
4444
4441 * Changed the first-time installer not to use tarfiles. It's more
4445 * Changed the first-time installer not to use tarfiles. It's more
4442 robust now and less unix-dependent. Also makes it easier for
4446 robust now and less unix-dependent. Also makes it easier for
4443 people to later upgrade versions.
4447 people to later upgrade versions.
4444
4448
4445 * Changed @exit to @abort to reflect the fact that it's pretty
4449 * Changed @exit to @abort to reflect the fact that it's pretty
4446 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4450 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4447 becomes significant only when IPyhton is embedded: in that case,
4451 becomes significant only when IPyhton is embedded: in that case,
4448 C-D closes IPython only, but @abort kills the enclosing program
4452 C-D closes IPython only, but @abort kills the enclosing program
4449 too (unless it had called IPython inside a try catching
4453 too (unless it had called IPython inside a try catching
4450 SystemExit).
4454 SystemExit).
4451
4455
4452 * Created Shell module which exposes the actuall IPython Shell
4456 * Created Shell module which exposes the actuall IPython Shell
4453 classes, currently the normal and the embeddable one. This at
4457 classes, currently the normal and the embeddable one. This at
4454 least offers a stable interface we won't need to change when
4458 least offers a stable interface we won't need to change when
4455 (later) the internals are rewritten. That rewrite will be confined
4459 (later) the internals are rewritten. That rewrite will be confined
4456 to iplib and ipmaker, but the Shell interface should remain as is.
4460 to iplib and ipmaker, but the Shell interface should remain as is.
4457
4461
4458 * Added embed module which offers an embeddable IPShell object,
4462 * Added embed module which offers an embeddable IPShell object,
4459 useful to fire up IPython *inside* a running program. Great for
4463 useful to fire up IPython *inside* a running program. Great for
4460 debugging or dynamical data analysis.
4464 debugging or dynamical data analysis.
4461
4465
4462 2001-12-08 Fernando Perez <fperez@colorado.edu>
4466 2001-12-08 Fernando Perez <fperez@colorado.edu>
4463
4467
4464 * Fixed small bug preventing seeing info from methods of defined
4468 * Fixed small bug preventing seeing info from methods of defined
4465 objects (incorrect namespace in _ofind()).
4469 objects (incorrect namespace in _ofind()).
4466
4470
4467 * Documentation cleanup. Moved the main usage docstrings to a
4471 * Documentation cleanup. Moved the main usage docstrings to a
4468 separate file, usage.py (cleaner to maintain, and hopefully in the
4472 separate file, usage.py (cleaner to maintain, and hopefully in the
4469 future some perlpod-like way of producing interactive, man and
4473 future some perlpod-like way of producing interactive, man and
4470 html docs out of it will be found).
4474 html docs out of it will be found).
4471
4475
4472 * Added @profile to see your profile at any time.
4476 * Added @profile to see your profile at any time.
4473
4477
4474 * Added @p as an alias for 'print'. It's especially convenient if
4478 * Added @p as an alias for 'print'. It's especially convenient if
4475 using automagic ('p x' prints x).
4479 using automagic ('p x' prints x).
4476
4480
4477 * Small cleanups and fixes after a pychecker run.
4481 * Small cleanups and fixes after a pychecker run.
4478
4482
4479 * Changed the @cd command to handle @cd - and @cd -<n> for
4483 * Changed the @cd command to handle @cd - and @cd -<n> for
4480 visiting any directory in _dh.
4484 visiting any directory in _dh.
4481
4485
4482 * Introduced _dh, a history of visited directories. @dhist prints
4486 * Introduced _dh, a history of visited directories. @dhist prints
4483 it out with numbers.
4487 it out with numbers.
4484
4488
4485 2001-12-07 Fernando Perez <fperez@colorado.edu>
4489 2001-12-07 Fernando Perez <fperez@colorado.edu>
4486
4490
4487 * Released 0.1.22
4491 * Released 0.1.22
4488
4492
4489 * Made initialization a bit more robust against invalid color
4493 * Made initialization a bit more robust against invalid color
4490 options in user input (exit, not traceback-crash).
4494 options in user input (exit, not traceback-crash).
4491
4495
4492 * Changed the bug crash reporter to write the report only in the
4496 * Changed the bug crash reporter to write the report only in the
4493 user's .ipython directory. That way IPython won't litter people's
4497 user's .ipython directory. That way IPython won't litter people's
4494 hard disks with crash files all over the place. Also print on
4498 hard disks with crash files all over the place. Also print on
4495 screen the necessary mail command.
4499 screen the necessary mail command.
4496
4500
4497 * With the new ultraTB, implemented LightBG color scheme for light
4501 * With the new ultraTB, implemented LightBG color scheme for light
4498 background terminals. A lot of people like white backgrounds, so I
4502 background terminals. A lot of people like white backgrounds, so I
4499 guess we should at least give them something readable.
4503 guess we should at least give them something readable.
4500
4504
4501 2001-12-06 Fernando Perez <fperez@colorado.edu>
4505 2001-12-06 Fernando Perez <fperez@colorado.edu>
4502
4506
4503 * Modified the structure of ultraTB. Now there's a proper class
4507 * Modified the structure of ultraTB. Now there's a proper class
4504 for tables of color schemes which allow adding schemes easily and
4508 for tables of color schemes which allow adding schemes easily and
4505 switching the active scheme without creating a new instance every
4509 switching the active scheme without creating a new instance every
4506 time (which was ridiculous). The syntax for creating new schemes
4510 time (which was ridiculous). The syntax for creating new schemes
4507 is also cleaner. I think ultraTB is finally done, with a clean
4511 is also cleaner. I think ultraTB is finally done, with a clean
4508 class structure. Names are also much cleaner (now there's proper
4512 class structure. Names are also much cleaner (now there's proper
4509 color tables, no need for every variable to also have 'color' in
4513 color tables, no need for every variable to also have 'color' in
4510 its name).
4514 its name).
4511
4515
4512 * Broke down genutils into separate files. Now genutils only
4516 * Broke down genutils into separate files. Now genutils only
4513 contains utility functions, and classes have been moved to their
4517 contains utility functions, and classes have been moved to their
4514 own files (they had enough independent functionality to warrant
4518 own files (they had enough independent functionality to warrant
4515 it): ConfigLoader, OutputTrap, Struct.
4519 it): ConfigLoader, OutputTrap, Struct.
4516
4520
4517 2001-12-05 Fernando Perez <fperez@colorado.edu>
4521 2001-12-05 Fernando Perez <fperez@colorado.edu>
4518
4522
4519 * IPython turns 21! Released version 0.1.21, as a candidate for
4523 * IPython turns 21! Released version 0.1.21, as a candidate for
4520 public consumption. If all goes well, release in a few days.
4524 public consumption. If all goes well, release in a few days.
4521
4525
4522 * Fixed path bug (files in Extensions/ directory wouldn't be found
4526 * Fixed path bug (files in Extensions/ directory wouldn't be found
4523 unless IPython/ was explicitly in sys.path).
4527 unless IPython/ was explicitly in sys.path).
4524
4528
4525 * Extended the FlexCompleter class as MagicCompleter to allow
4529 * Extended the FlexCompleter class as MagicCompleter to allow
4526 completion of @-starting lines.
4530 completion of @-starting lines.
4527
4531
4528 * Created __release__.py file as a central repository for release
4532 * Created __release__.py file as a central repository for release
4529 info that other files can read from.
4533 info that other files can read from.
4530
4534
4531 * Fixed small bug in logging: when logging was turned on in
4535 * Fixed small bug in logging: when logging was turned on in
4532 mid-session, old lines with special meanings (!@?) were being
4536 mid-session, old lines with special meanings (!@?) were being
4533 logged without the prepended comment, which is necessary since
4537 logged without the prepended comment, which is necessary since
4534 they are not truly valid python syntax. This should make session
4538 they are not truly valid python syntax. This should make session
4535 restores produce less errors.
4539 restores produce less errors.
4536
4540
4537 * The namespace cleanup forced me to make a FlexCompleter class
4541 * The namespace cleanup forced me to make a FlexCompleter class
4538 which is nothing but a ripoff of rlcompleter, but with selectable
4542 which is nothing but a ripoff of rlcompleter, but with selectable
4539 namespace (rlcompleter only works in __main__.__dict__). I'll try
4543 namespace (rlcompleter only works in __main__.__dict__). I'll try
4540 to submit a note to the authors to see if this change can be
4544 to submit a note to the authors to see if this change can be
4541 incorporated in future rlcompleter releases (Dec.6: done)
4545 incorporated in future rlcompleter releases (Dec.6: done)
4542
4546
4543 * More fixes to namespace handling. It was a mess! Now all
4547 * More fixes to namespace handling. It was a mess! Now all
4544 explicit references to __main__.__dict__ are gone (except when
4548 explicit references to __main__.__dict__ are gone (except when
4545 really needed) and everything is handled through the namespace
4549 really needed) and everything is handled through the namespace
4546 dicts in the IPython instance. We seem to be getting somewhere
4550 dicts in the IPython instance. We seem to be getting somewhere
4547 with this, finally...
4551 with this, finally...
4548
4552
4549 * Small documentation updates.
4553 * Small documentation updates.
4550
4554
4551 * Created the Extensions directory under IPython (with an
4555 * Created the Extensions directory under IPython (with an
4552 __init__.py). Put the PhysicalQ stuff there. This directory should
4556 __init__.py). Put the PhysicalQ stuff there. This directory should
4553 be used for all special-purpose extensions.
4557 be used for all special-purpose extensions.
4554
4558
4555 * File renaming:
4559 * File renaming:
4556 ipythonlib --> ipmaker
4560 ipythonlib --> ipmaker
4557 ipplib --> iplib
4561 ipplib --> iplib
4558 This makes a bit more sense in terms of what these files actually do.
4562 This makes a bit more sense in terms of what these files actually do.
4559
4563
4560 * Moved all the classes and functions in ipythonlib to ipplib, so
4564 * Moved all the classes and functions in ipythonlib to ipplib, so
4561 now ipythonlib only has make_IPython(). This will ease up its
4565 now ipythonlib only has make_IPython(). This will ease up its
4562 splitting in smaller functional chunks later.
4566 splitting in smaller functional chunks later.
4563
4567
4564 * Cleaned up (done, I think) output of @whos. Better column
4568 * Cleaned up (done, I think) output of @whos. Better column
4565 formatting, and now shows str(var) for as much as it can, which is
4569 formatting, and now shows str(var) for as much as it can, which is
4566 typically what one gets with a 'print var'.
4570 typically what one gets with a 'print var'.
4567
4571
4568 2001-12-04 Fernando Perez <fperez@colorado.edu>
4572 2001-12-04 Fernando Perez <fperez@colorado.edu>
4569
4573
4570 * Fixed namespace problems. Now builtin/IPyhton/user names get
4574 * Fixed namespace problems. Now builtin/IPyhton/user names get
4571 properly reported in their namespace. Internal namespace handling
4575 properly reported in their namespace. Internal namespace handling
4572 is finally getting decent (not perfect yet, but much better than
4576 is finally getting decent (not perfect yet, but much better than
4573 the ad-hoc mess we had).
4577 the ad-hoc mess we had).
4574
4578
4575 * Removed -exit option. If people just want to run a python
4579 * Removed -exit option. If people just want to run a python
4576 script, that's what the normal interpreter is for. Less
4580 script, that's what the normal interpreter is for. Less
4577 unnecessary options, less chances for bugs.
4581 unnecessary options, less chances for bugs.
4578
4582
4579 * Added a crash handler which generates a complete post-mortem if
4583 * Added a crash handler which generates a complete post-mortem if
4580 IPython crashes. This will help a lot in tracking bugs down the
4584 IPython crashes. This will help a lot in tracking bugs down the
4581 road.
4585 road.
4582
4586
4583 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4587 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4584 which were boud to functions being reassigned would bypass the
4588 which were boud to functions being reassigned would bypass the
4585 logger, breaking the sync of _il with the prompt counter. This
4589 logger, breaking the sync of _il with the prompt counter. This
4586 would then crash IPython later when a new line was logged.
4590 would then crash IPython later when a new line was logged.
4587
4591
4588 2001-12-02 Fernando Perez <fperez@colorado.edu>
4592 2001-12-02 Fernando Perez <fperez@colorado.edu>
4589
4593
4590 * Made IPython a package. This means people don't have to clutter
4594 * Made IPython a package. This means people don't have to clutter
4591 their sys.path with yet another directory. Changed the INSTALL
4595 their sys.path with yet another directory. Changed the INSTALL
4592 file accordingly.
4596 file accordingly.
4593
4597
4594 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4598 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4595 sorts its output (so @who shows it sorted) and @whos formats the
4599 sorts its output (so @who shows it sorted) and @whos formats the
4596 table according to the width of the first column. Nicer, easier to
4600 table according to the width of the first column. Nicer, easier to
4597 read. Todo: write a generic table_format() which takes a list of
4601 read. Todo: write a generic table_format() which takes a list of
4598 lists and prints it nicely formatted, with optional row/column
4602 lists and prints it nicely formatted, with optional row/column
4599 separators and proper padding and justification.
4603 separators and proper padding and justification.
4600
4604
4601 * Released 0.1.20
4605 * Released 0.1.20
4602
4606
4603 * Fixed bug in @log which would reverse the inputcache list (a
4607 * Fixed bug in @log which would reverse the inputcache list (a
4604 copy operation was missing).
4608 copy operation was missing).
4605
4609
4606 * Code cleanup. @config was changed to use page(). Better, since
4610 * Code cleanup. @config was changed to use page(). Better, since
4607 its output is always quite long.
4611 its output is always quite long.
4608
4612
4609 * Itpl is back as a dependency. I was having too many problems
4613 * Itpl is back as a dependency. I was having too many problems
4610 getting the parametric aliases to work reliably, and it's just
4614 getting the parametric aliases to work reliably, and it's just
4611 easier to code weird string operations with it than playing %()s
4615 easier to code weird string operations with it than playing %()s
4612 games. It's only ~6k, so I don't think it's too big a deal.
4616 games. It's only ~6k, so I don't think it's too big a deal.
4613
4617
4614 * Found (and fixed) a very nasty bug with history. !lines weren't
4618 * Found (and fixed) a very nasty bug with history. !lines weren't
4615 getting cached, and the out of sync caches would crash
4619 getting cached, and the out of sync caches would crash
4616 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4620 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4617 division of labor a bit better. Bug fixed, cleaner structure.
4621 division of labor a bit better. Bug fixed, cleaner structure.
4618
4622
4619 2001-12-01 Fernando Perez <fperez@colorado.edu>
4623 2001-12-01 Fernando Perez <fperez@colorado.edu>
4620
4624
4621 * Released 0.1.19
4625 * Released 0.1.19
4622
4626
4623 * Added option -n to @hist to prevent line number printing. Much
4627 * Added option -n to @hist to prevent line number printing. Much
4624 easier to copy/paste code this way.
4628 easier to copy/paste code this way.
4625
4629
4626 * Created global _il to hold the input list. Allows easy
4630 * Created global _il to hold the input list. Allows easy
4627 re-execution of blocks of code by slicing it (inspired by Janko's
4631 re-execution of blocks of code by slicing it (inspired by Janko's
4628 comment on 'macros').
4632 comment on 'macros').
4629
4633
4630 * Small fixes and doc updates.
4634 * Small fixes and doc updates.
4631
4635
4632 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4636 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4633 much too fragile with automagic. Handles properly multi-line
4637 much too fragile with automagic. Handles properly multi-line
4634 statements and takes parameters.
4638 statements and takes parameters.
4635
4639
4636 2001-11-30 Fernando Perez <fperez@colorado.edu>
4640 2001-11-30 Fernando Perez <fperez@colorado.edu>
4637
4641
4638 * Version 0.1.18 released.
4642 * Version 0.1.18 released.
4639
4643
4640 * Fixed nasty namespace bug in initial module imports.
4644 * Fixed nasty namespace bug in initial module imports.
4641
4645
4642 * Added copyright/license notes to all code files (except
4646 * Added copyright/license notes to all code files (except
4643 DPyGetOpt). For the time being, LGPL. That could change.
4647 DPyGetOpt). For the time being, LGPL. That could change.
4644
4648
4645 * Rewrote a much nicer README, updated INSTALL, cleaned up
4649 * Rewrote a much nicer README, updated INSTALL, cleaned up
4646 ipythonrc-* samples.
4650 ipythonrc-* samples.
4647
4651
4648 * Overall code/documentation cleanup. Basically ready for
4652 * Overall code/documentation cleanup. Basically ready for
4649 release. Only remaining thing: licence decision (LGPL?).
4653 release. Only remaining thing: licence decision (LGPL?).
4650
4654
4651 * Converted load_config to a class, ConfigLoader. Now recursion
4655 * Converted load_config to a class, ConfigLoader. Now recursion
4652 control is better organized. Doesn't include the same file twice.
4656 control is better organized. Doesn't include the same file twice.
4653
4657
4654 2001-11-29 Fernando Perez <fperez@colorado.edu>
4658 2001-11-29 Fernando Perez <fperez@colorado.edu>
4655
4659
4656 * Got input history working. Changed output history variables from
4660 * Got input history working. Changed output history variables from
4657 _p to _o so that _i is for input and _o for output. Just cleaner
4661 _p to _o so that _i is for input and _o for output. Just cleaner
4658 convention.
4662 convention.
4659
4663
4660 * Implemented parametric aliases. This pretty much allows the
4664 * Implemented parametric aliases. This pretty much allows the
4661 alias system to offer full-blown shell convenience, I think.
4665 alias system to offer full-blown shell convenience, I think.
4662
4666
4663 * Version 0.1.17 released, 0.1.18 opened.
4667 * Version 0.1.17 released, 0.1.18 opened.
4664
4668
4665 * dot_ipython/ipythonrc (alias): added documentation.
4669 * dot_ipython/ipythonrc (alias): added documentation.
4666 (xcolor): Fixed small bug (xcolors -> xcolor)
4670 (xcolor): Fixed small bug (xcolors -> xcolor)
4667
4671
4668 * Changed the alias system. Now alias is a magic command to define
4672 * Changed the alias system. Now alias is a magic command to define
4669 aliases just like the shell. Rationale: the builtin magics should
4673 aliases just like the shell. Rationale: the builtin magics should
4670 be there for things deeply connected to IPython's
4674 be there for things deeply connected to IPython's
4671 architecture. And this is a much lighter system for what I think
4675 architecture. And this is a much lighter system for what I think
4672 is the really important feature: allowing users to define quickly
4676 is the really important feature: allowing users to define quickly
4673 magics that will do shell things for them, so they can customize
4677 magics that will do shell things for them, so they can customize
4674 IPython easily to match their work habits. If someone is really
4678 IPython easily to match their work habits. If someone is really
4675 desperate to have another name for a builtin alias, they can
4679 desperate to have another name for a builtin alias, they can
4676 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4680 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4677 works.
4681 works.
4678
4682
4679 2001-11-28 Fernando Perez <fperez@colorado.edu>
4683 2001-11-28 Fernando Perez <fperez@colorado.edu>
4680
4684
4681 * Changed @file so that it opens the source file at the proper
4685 * Changed @file so that it opens the source file at the proper
4682 line. Since it uses less, if your EDITOR environment is
4686 line. Since it uses less, if your EDITOR environment is
4683 configured, typing v will immediately open your editor of choice
4687 configured, typing v will immediately open your editor of choice
4684 right at the line where the object is defined. Not as quick as
4688 right at the line where the object is defined. Not as quick as
4685 having a direct @edit command, but for all intents and purposes it
4689 having a direct @edit command, but for all intents and purposes it
4686 works. And I don't have to worry about writing @edit to deal with
4690 works. And I don't have to worry about writing @edit to deal with
4687 all the editors, less does that.
4691 all the editors, less does that.
4688
4692
4689 * Version 0.1.16 released, 0.1.17 opened.
4693 * Version 0.1.16 released, 0.1.17 opened.
4690
4694
4691 * Fixed some nasty bugs in the page/page_dumb combo that could
4695 * Fixed some nasty bugs in the page/page_dumb combo that could
4692 crash IPython.
4696 crash IPython.
4693
4697
4694 2001-11-27 Fernando Perez <fperez@colorado.edu>
4698 2001-11-27 Fernando Perez <fperez@colorado.edu>
4695
4699
4696 * Version 0.1.15 released, 0.1.16 opened.
4700 * Version 0.1.15 released, 0.1.16 opened.
4697
4701
4698 * Finally got ? and ?? to work for undefined things: now it's
4702 * Finally got ? and ?? to work for undefined things: now it's
4699 possible to type {}.get? and get information about the get method
4703 possible to type {}.get? and get information about the get method
4700 of dicts, or os.path? even if only os is defined (so technically
4704 of dicts, or os.path? even if only os is defined (so technically
4701 os.path isn't). Works at any level. For example, after import os,
4705 os.path isn't). Works at any level. For example, after import os,
4702 os?, os.path?, os.path.abspath? all work. This is great, took some
4706 os?, os.path?, os.path.abspath? all work. This is great, took some
4703 work in _ofind.
4707 work in _ofind.
4704
4708
4705 * Fixed more bugs with logging. The sanest way to do it was to add
4709 * Fixed more bugs with logging. The sanest way to do it was to add
4706 to @log a 'mode' parameter. Killed two in one shot (this mode
4710 to @log a 'mode' parameter. Killed two in one shot (this mode
4707 option was a request of Janko's). I think it's finally clean
4711 option was a request of Janko's). I think it's finally clean
4708 (famous last words).
4712 (famous last words).
4709
4713
4710 * Added a page_dumb() pager which does a decent job of paging on
4714 * Added a page_dumb() pager which does a decent job of paging on
4711 screen, if better things (like less) aren't available. One less
4715 screen, if better things (like less) aren't available. One less
4712 unix dependency (someday maybe somebody will port this to
4716 unix dependency (someday maybe somebody will port this to
4713 windows).
4717 windows).
4714
4718
4715 * Fixed problem in magic_log: would lock of logging out if log
4719 * Fixed problem in magic_log: would lock of logging out if log
4716 creation failed (because it would still think it had succeeded).
4720 creation failed (because it would still think it had succeeded).
4717
4721
4718 * Improved the page() function using curses to auto-detect screen
4722 * Improved the page() function using curses to auto-detect screen
4719 size. Now it can make a much better decision on whether to print
4723 size. Now it can make a much better decision on whether to print
4720 or page a string. Option screen_length was modified: a value 0
4724 or page a string. Option screen_length was modified: a value 0
4721 means auto-detect, and that's the default now.
4725 means auto-detect, and that's the default now.
4722
4726
4723 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4727 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4724 go out. I'll test it for a few days, then talk to Janko about
4728 go out. I'll test it for a few days, then talk to Janko about
4725 licences and announce it.
4729 licences and announce it.
4726
4730
4727 * Fixed the length of the auto-generated ---> prompt which appears
4731 * Fixed the length of the auto-generated ---> prompt which appears
4728 for auto-parens and auto-quotes. Getting this right isn't trivial,
4732 for auto-parens and auto-quotes. Getting this right isn't trivial,
4729 with all the color escapes, different prompt types and optional
4733 with all the color escapes, different prompt types and optional
4730 separators. But it seems to be working in all the combinations.
4734 separators. But it seems to be working in all the combinations.
4731
4735
4732 2001-11-26 Fernando Perez <fperez@colorado.edu>
4736 2001-11-26 Fernando Perez <fperez@colorado.edu>
4733
4737
4734 * Wrote a regexp filter to get option types from the option names
4738 * Wrote a regexp filter to get option types from the option names
4735 string. This eliminates the need to manually keep two duplicate
4739 string. This eliminates the need to manually keep two duplicate
4736 lists.
4740 lists.
4737
4741
4738 * Removed the unneeded check_option_names. Now options are handled
4742 * Removed the unneeded check_option_names. Now options are handled
4739 in a much saner manner and it's easy to visually check that things
4743 in a much saner manner and it's easy to visually check that things
4740 are ok.
4744 are ok.
4741
4745
4742 * Updated version numbers on all files I modified to carry a
4746 * Updated version numbers on all files I modified to carry a
4743 notice so Janko and Nathan have clear version markers.
4747 notice so Janko and Nathan have clear version markers.
4744
4748
4745 * Updated docstring for ultraTB with my changes. I should send
4749 * Updated docstring for ultraTB with my changes. I should send
4746 this to Nathan.
4750 this to Nathan.
4747
4751
4748 * Lots of small fixes. Ran everything through pychecker again.
4752 * Lots of small fixes. Ran everything through pychecker again.
4749
4753
4750 * Made loading of deep_reload an cmd line option. If it's not too
4754 * Made loading of deep_reload an cmd line option. If it's not too
4751 kosher, now people can just disable it. With -nodeep_reload it's
4755 kosher, now people can just disable it. With -nodeep_reload it's
4752 still available as dreload(), it just won't overwrite reload().
4756 still available as dreload(), it just won't overwrite reload().
4753
4757
4754 * Moved many options to the no| form (-opt and -noopt
4758 * Moved many options to the no| form (-opt and -noopt
4755 accepted). Cleaner.
4759 accepted). Cleaner.
4756
4760
4757 * Changed magic_log so that if called with no parameters, it uses
4761 * Changed magic_log so that if called with no parameters, it uses
4758 'rotate' mode. That way auto-generated logs aren't automatically
4762 'rotate' mode. That way auto-generated logs aren't automatically
4759 over-written. For normal logs, now a backup is made if it exists
4763 over-written. For normal logs, now a backup is made if it exists
4760 (only 1 level of backups). A new 'backup' mode was added to the
4764 (only 1 level of backups). A new 'backup' mode was added to the
4761 Logger class to support this. This was a request by Janko.
4765 Logger class to support this. This was a request by Janko.
4762
4766
4763 * Added @logoff/@logon to stop/restart an active log.
4767 * Added @logoff/@logon to stop/restart an active log.
4764
4768
4765 * Fixed a lot of bugs in log saving/replay. It was pretty
4769 * Fixed a lot of bugs in log saving/replay. It was pretty
4766 broken. Now special lines (!@,/) appear properly in the command
4770 broken. Now special lines (!@,/) appear properly in the command
4767 history after a log replay.
4771 history after a log replay.
4768
4772
4769 * Tried and failed to implement full session saving via pickle. My
4773 * Tried and failed to implement full session saving via pickle. My
4770 idea was to pickle __main__.__dict__, but modules can't be
4774 idea was to pickle __main__.__dict__, but modules can't be
4771 pickled. This would be a better alternative to replaying logs, but
4775 pickled. This would be a better alternative to replaying logs, but
4772 seems quite tricky to get to work. Changed -session to be called
4776 seems quite tricky to get to work. Changed -session to be called
4773 -logplay, which more accurately reflects what it does. And if we
4777 -logplay, which more accurately reflects what it does. And if we
4774 ever get real session saving working, -session is now available.
4778 ever get real session saving working, -session is now available.
4775
4779
4776 * Implemented color schemes for prompts also. As for tracebacks,
4780 * Implemented color schemes for prompts also. As for tracebacks,
4777 currently only NoColor and Linux are supported. But now the
4781 currently only NoColor and Linux are supported. But now the
4778 infrastructure is in place, based on a generic ColorScheme
4782 infrastructure is in place, based on a generic ColorScheme
4779 class. So writing and activating new schemes both for the prompts
4783 class. So writing and activating new schemes both for the prompts
4780 and the tracebacks should be straightforward.
4784 and the tracebacks should be straightforward.
4781
4785
4782 * Version 0.1.13 released, 0.1.14 opened.
4786 * Version 0.1.13 released, 0.1.14 opened.
4783
4787
4784 * Changed handling of options for output cache. Now counter is
4788 * Changed handling of options for output cache. Now counter is
4785 hardwired starting at 1 and one specifies the maximum number of
4789 hardwired starting at 1 and one specifies the maximum number of
4786 entries *in the outcache* (not the max prompt counter). This is
4790 entries *in the outcache* (not the max prompt counter). This is
4787 much better, since many statements won't increase the cache
4791 much better, since many statements won't increase the cache
4788 count. It also eliminated some confusing options, now there's only
4792 count. It also eliminated some confusing options, now there's only
4789 one: cache_size.
4793 one: cache_size.
4790
4794
4791 * Added 'alias' magic function and magic_alias option in the
4795 * Added 'alias' magic function and magic_alias option in the
4792 ipythonrc file. Now the user can easily define whatever names he
4796 ipythonrc file. Now the user can easily define whatever names he
4793 wants for the magic functions without having to play weird
4797 wants for the magic functions without having to play weird
4794 namespace games. This gives IPython a real shell-like feel.
4798 namespace games. This gives IPython a real shell-like feel.
4795
4799
4796 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4800 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4797 @ or not).
4801 @ or not).
4798
4802
4799 This was one of the last remaining 'visible' bugs (that I know
4803 This was one of the last remaining 'visible' bugs (that I know
4800 of). I think if I can clean up the session loading so it works
4804 of). I think if I can clean up the session loading so it works
4801 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4805 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4802 about licensing).
4806 about licensing).
4803
4807
4804 2001-11-25 Fernando Perez <fperez@colorado.edu>
4808 2001-11-25 Fernando Perez <fperez@colorado.edu>
4805
4809
4806 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4810 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4807 there's a cleaner distinction between what ? and ?? show.
4811 there's a cleaner distinction between what ? and ?? show.
4808
4812
4809 * Added screen_length option. Now the user can define his own
4813 * Added screen_length option. Now the user can define his own
4810 screen size for page() operations.
4814 screen size for page() operations.
4811
4815
4812 * Implemented magic shell-like functions with automatic code
4816 * Implemented magic shell-like functions with automatic code
4813 generation. Now adding another function is just a matter of adding
4817 generation. Now adding another function is just a matter of adding
4814 an entry to a dict, and the function is dynamically generated at
4818 an entry to a dict, and the function is dynamically generated at
4815 run-time. Python has some really cool features!
4819 run-time. Python has some really cool features!
4816
4820
4817 * Renamed many options to cleanup conventions a little. Now all
4821 * Renamed many options to cleanup conventions a little. Now all
4818 are lowercase, and only underscores where needed. Also in the code
4822 are lowercase, and only underscores where needed. Also in the code
4819 option name tables are clearer.
4823 option name tables are clearer.
4820
4824
4821 * Changed prompts a little. Now input is 'In [n]:' instead of
4825 * Changed prompts a little. Now input is 'In [n]:' instead of
4822 'In[n]:='. This allows it the numbers to be aligned with the
4826 'In[n]:='. This allows it the numbers to be aligned with the
4823 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4827 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4824 Python (it was a Mathematica thing). The '...' continuation prompt
4828 Python (it was a Mathematica thing). The '...' continuation prompt
4825 was also changed a little to align better.
4829 was also changed a little to align better.
4826
4830
4827 * Fixed bug when flushing output cache. Not all _p<n> variables
4831 * Fixed bug when flushing output cache. Not all _p<n> variables
4828 exist, so their deletion needs to be wrapped in a try:
4832 exist, so their deletion needs to be wrapped in a try:
4829
4833
4830 * Figured out how to properly use inspect.formatargspec() (it
4834 * Figured out how to properly use inspect.formatargspec() (it
4831 requires the args preceded by *). So I removed all the code from
4835 requires the args preceded by *). So I removed all the code from
4832 _get_pdef in Magic, which was just replicating that.
4836 _get_pdef in Magic, which was just replicating that.
4833
4837
4834 * Added test to prefilter to allow redefining magic function names
4838 * Added test to prefilter to allow redefining magic function names
4835 as variables. This is ok, since the @ form is always available,
4839 as variables. This is ok, since the @ form is always available,
4836 but whe should allow the user to define a variable called 'ls' if
4840 but whe should allow the user to define a variable called 'ls' if
4837 he needs it.
4841 he needs it.
4838
4842
4839 * Moved the ToDo information from README into a separate ToDo.
4843 * Moved the ToDo information from README into a separate ToDo.
4840
4844
4841 * General code cleanup and small bugfixes. I think it's close to a
4845 * General code cleanup and small bugfixes. I think it's close to a
4842 state where it can be released, obviously with a big 'beta'
4846 state where it can be released, obviously with a big 'beta'
4843 warning on it.
4847 warning on it.
4844
4848
4845 * Got the magic function split to work. Now all magics are defined
4849 * Got the magic function split to work. Now all magics are defined
4846 in a separate class. It just organizes things a bit, and now
4850 in a separate class. It just organizes things a bit, and now
4847 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4851 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4848 was too long).
4852 was too long).
4849
4853
4850 * Changed @clear to @reset to avoid potential confusions with
4854 * Changed @clear to @reset to avoid potential confusions with
4851 the shell command clear. Also renamed @cl to @clear, which does
4855 the shell command clear. Also renamed @cl to @clear, which does
4852 exactly what people expect it to from their shell experience.
4856 exactly what people expect it to from their shell experience.
4853
4857
4854 Added a check to the @reset command (since it's so
4858 Added a check to the @reset command (since it's so
4855 destructive, it's probably a good idea to ask for confirmation).
4859 destructive, it's probably a good idea to ask for confirmation).
4856 But now reset only works for full namespace resetting. Since the
4860 But now reset only works for full namespace resetting. Since the
4857 del keyword is already there for deleting a few specific
4861 del keyword is already there for deleting a few specific
4858 variables, I don't see the point of having a redundant magic
4862 variables, I don't see the point of having a redundant magic
4859 function for the same task.
4863 function for the same task.
4860
4864
4861 2001-11-24 Fernando Perez <fperez@colorado.edu>
4865 2001-11-24 Fernando Perez <fperez@colorado.edu>
4862
4866
4863 * Updated the builtin docs (esp. the ? ones).
4867 * Updated the builtin docs (esp. the ? ones).
4864
4868
4865 * Ran all the code through pychecker. Not terribly impressed with
4869 * Ran all the code through pychecker. Not terribly impressed with
4866 it: lots of spurious warnings and didn't really find anything of
4870 it: lots of spurious warnings and didn't really find anything of
4867 substance (just a few modules being imported and not used).
4871 substance (just a few modules being imported and not used).
4868
4872
4869 * Implemented the new ultraTB functionality into IPython. New
4873 * Implemented the new ultraTB functionality into IPython. New
4870 option: xcolors. This chooses color scheme. xmode now only selects
4874 option: xcolors. This chooses color scheme. xmode now only selects
4871 between Plain and Verbose. Better orthogonality.
4875 between Plain and Verbose. Better orthogonality.
4872
4876
4873 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4877 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4874 mode and color scheme for the exception handlers. Now it's
4878 mode and color scheme for the exception handlers. Now it's
4875 possible to have the verbose traceback with no coloring.
4879 possible to have the verbose traceback with no coloring.
4876
4880
4877 2001-11-23 Fernando Perez <fperez@colorado.edu>
4881 2001-11-23 Fernando Perez <fperez@colorado.edu>
4878
4882
4879 * Version 0.1.12 released, 0.1.13 opened.
4883 * Version 0.1.12 released, 0.1.13 opened.
4880
4884
4881 * Removed option to set auto-quote and auto-paren escapes by
4885 * Removed option to set auto-quote and auto-paren escapes by
4882 user. The chances of breaking valid syntax are just too high. If
4886 user. The chances of breaking valid syntax are just too high. If
4883 someone *really* wants, they can always dig into the code.
4887 someone *really* wants, they can always dig into the code.
4884
4888
4885 * Made prompt separators configurable.
4889 * Made prompt separators configurable.
4886
4890
4887 2001-11-22 Fernando Perez <fperez@colorado.edu>
4891 2001-11-22 Fernando Perez <fperez@colorado.edu>
4888
4892
4889 * Small bugfixes in many places.
4893 * Small bugfixes in many places.
4890
4894
4891 * Removed the MyCompleter class from ipplib. It seemed redundant
4895 * Removed the MyCompleter class from ipplib. It seemed redundant
4892 with the C-p,C-n history search functionality. Less code to
4896 with the C-p,C-n history search functionality. Less code to
4893 maintain.
4897 maintain.
4894
4898
4895 * Moved all the original ipython.py code into ipythonlib.py. Right
4899 * Moved all the original ipython.py code into ipythonlib.py. Right
4896 now it's just one big dump into a function called make_IPython, so
4900 now it's just one big dump into a function called make_IPython, so
4897 no real modularity has been gained. But at least it makes the
4901 no real modularity has been gained. But at least it makes the
4898 wrapper script tiny, and since ipythonlib is a module, it gets
4902 wrapper script tiny, and since ipythonlib is a module, it gets
4899 compiled and startup is much faster.
4903 compiled and startup is much faster.
4900
4904
4901 This is a reasobably 'deep' change, so we should test it for a
4905 This is a reasobably 'deep' change, so we should test it for a
4902 while without messing too much more with the code.
4906 while without messing too much more with the code.
4903
4907
4904 2001-11-21 Fernando Perez <fperez@colorado.edu>
4908 2001-11-21 Fernando Perez <fperez@colorado.edu>
4905
4909
4906 * Version 0.1.11 released, 0.1.12 opened for further work.
4910 * Version 0.1.11 released, 0.1.12 opened for further work.
4907
4911
4908 * Removed dependency on Itpl. It was only needed in one place. It
4912 * Removed dependency on Itpl. It was only needed in one place. It
4909 would be nice if this became part of python, though. It makes life
4913 would be nice if this became part of python, though. It makes life
4910 *a lot* easier in some cases.
4914 *a lot* easier in some cases.
4911
4915
4912 * Simplified the prefilter code a bit. Now all handlers are
4916 * Simplified the prefilter code a bit. Now all handlers are
4913 expected to explicitly return a value (at least a blank string).
4917 expected to explicitly return a value (at least a blank string).
4914
4918
4915 * Heavy edits in ipplib. Removed the help system altogether. Now
4919 * Heavy edits in ipplib. Removed the help system altogether. Now
4916 obj?/?? is used for inspecting objects, a magic @doc prints
4920 obj?/?? is used for inspecting objects, a magic @doc prints
4917 docstrings, and full-blown Python help is accessed via the 'help'
4921 docstrings, and full-blown Python help is accessed via the 'help'
4918 keyword. This cleans up a lot of code (less to maintain) and does
4922 keyword. This cleans up a lot of code (less to maintain) and does
4919 the job. Since 'help' is now a standard Python component, might as
4923 the job. Since 'help' is now a standard Python component, might as
4920 well use it and remove duplicate functionality.
4924 well use it and remove duplicate functionality.
4921
4925
4922 Also removed the option to use ipplib as a standalone program. By
4926 Also removed the option to use ipplib as a standalone program. By
4923 now it's too dependent on other parts of IPython to function alone.
4927 now it's too dependent on other parts of IPython to function alone.
4924
4928
4925 * Fixed bug in genutils.pager. It would crash if the pager was
4929 * Fixed bug in genutils.pager. It would crash if the pager was
4926 exited immediately after opening (broken pipe).
4930 exited immediately after opening (broken pipe).
4927
4931
4928 * Trimmed down the VerboseTB reporting a little. The header is
4932 * Trimmed down the VerboseTB reporting a little. The header is
4929 much shorter now and the repeated exception arguments at the end
4933 much shorter now and the repeated exception arguments at the end
4930 have been removed. For interactive use the old header seemed a bit
4934 have been removed. For interactive use the old header seemed a bit
4931 excessive.
4935 excessive.
4932
4936
4933 * Fixed small bug in output of @whos for variables with multi-word
4937 * Fixed small bug in output of @whos for variables with multi-word
4934 types (only first word was displayed).
4938 types (only first word was displayed).
4935
4939
4936 2001-11-17 Fernando Perez <fperez@colorado.edu>
4940 2001-11-17 Fernando Perez <fperez@colorado.edu>
4937
4941
4938 * Version 0.1.10 released, 0.1.11 opened for further work.
4942 * Version 0.1.10 released, 0.1.11 opened for further work.
4939
4943
4940 * Modified dirs and friends. dirs now *returns* the stack (not
4944 * Modified dirs and friends. dirs now *returns* the stack (not
4941 prints), so one can manipulate it as a variable. Convenient to
4945 prints), so one can manipulate it as a variable. Convenient to
4942 travel along many directories.
4946 travel along many directories.
4943
4947
4944 * Fixed bug in magic_pdef: would only work with functions with
4948 * Fixed bug in magic_pdef: would only work with functions with
4945 arguments with default values.
4949 arguments with default values.
4946
4950
4947 2001-11-14 Fernando Perez <fperez@colorado.edu>
4951 2001-11-14 Fernando Perez <fperez@colorado.edu>
4948
4952
4949 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4953 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4950 example with IPython. Various other minor fixes and cleanups.
4954 example with IPython. Various other minor fixes and cleanups.
4951
4955
4952 * Version 0.1.9 released, 0.1.10 opened for further work.
4956 * Version 0.1.9 released, 0.1.10 opened for further work.
4953
4957
4954 * Added sys.path to the list of directories searched in the
4958 * Added sys.path to the list of directories searched in the
4955 execfile= option. It used to be the current directory and the
4959 execfile= option. It used to be the current directory and the
4956 user's IPYTHONDIR only.
4960 user's IPYTHONDIR only.
4957
4961
4958 2001-11-13 Fernando Perez <fperez@colorado.edu>
4962 2001-11-13 Fernando Perez <fperez@colorado.edu>
4959
4963
4960 * Reinstated the raw_input/prefilter separation that Janko had
4964 * Reinstated the raw_input/prefilter separation that Janko had
4961 initially. This gives a more convenient setup for extending the
4965 initially. This gives a more convenient setup for extending the
4962 pre-processor from the outside: raw_input always gets a string,
4966 pre-processor from the outside: raw_input always gets a string,
4963 and prefilter has to process it. We can then redefine prefilter
4967 and prefilter has to process it. We can then redefine prefilter
4964 from the outside and implement extensions for special
4968 from the outside and implement extensions for special
4965 purposes.
4969 purposes.
4966
4970
4967 Today I got one for inputting PhysicalQuantity objects
4971 Today I got one for inputting PhysicalQuantity objects
4968 (from Scientific) without needing any function calls at
4972 (from Scientific) without needing any function calls at
4969 all. Extremely convenient, and it's all done as a user-level
4973 all. Extremely convenient, and it's all done as a user-level
4970 extension (no IPython code was touched). Now instead of:
4974 extension (no IPython code was touched). Now instead of:
4971 a = PhysicalQuantity(4.2,'m/s**2')
4975 a = PhysicalQuantity(4.2,'m/s**2')
4972 one can simply say
4976 one can simply say
4973 a = 4.2 m/s**2
4977 a = 4.2 m/s**2
4974 or even
4978 or even
4975 a = 4.2 m/s^2
4979 a = 4.2 m/s^2
4976
4980
4977 I use this, but it's also a proof of concept: IPython really is
4981 I use this, but it's also a proof of concept: IPython really is
4978 fully user-extensible, even at the level of the parsing of the
4982 fully user-extensible, even at the level of the parsing of the
4979 command line. It's not trivial, but it's perfectly doable.
4983 command line. It's not trivial, but it's perfectly doable.
4980
4984
4981 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4985 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4982 the problem of modules being loaded in the inverse order in which
4986 the problem of modules being loaded in the inverse order in which
4983 they were defined in
4987 they were defined in
4984
4988
4985 * Version 0.1.8 released, 0.1.9 opened for further work.
4989 * Version 0.1.8 released, 0.1.9 opened for further work.
4986
4990
4987 * Added magics pdef, source and file. They respectively show the
4991 * Added magics pdef, source and file. They respectively show the
4988 definition line ('prototype' in C), source code and full python
4992 definition line ('prototype' in C), source code and full python
4989 file for any callable object. The object inspector oinfo uses
4993 file for any callable object. The object inspector oinfo uses
4990 these to show the same information.
4994 these to show the same information.
4991
4995
4992 * Version 0.1.7 released, 0.1.8 opened for further work.
4996 * Version 0.1.7 released, 0.1.8 opened for further work.
4993
4997
4994 * Separated all the magic functions into a class called Magic. The
4998 * Separated all the magic functions into a class called Magic. The
4995 InteractiveShell class was becoming too big for Xemacs to handle
4999 InteractiveShell class was becoming too big for Xemacs to handle
4996 (de-indenting a line would lock it up for 10 seconds while it
5000 (de-indenting a line would lock it up for 10 seconds while it
4997 backtracked on the whole class!)
5001 backtracked on the whole class!)
4998
5002
4999 FIXME: didn't work. It can be done, but right now namespaces are
5003 FIXME: didn't work. It can be done, but right now namespaces are
5000 all messed up. Do it later (reverted it for now, so at least
5004 all messed up. Do it later (reverted it for now, so at least
5001 everything works as before).
5005 everything works as before).
5002
5006
5003 * Got the object introspection system (magic_oinfo) working! I
5007 * Got the object introspection system (magic_oinfo) working! I
5004 think this is pretty much ready for release to Janko, so he can
5008 think this is pretty much ready for release to Janko, so he can
5005 test it for a while and then announce it. Pretty much 100% of what
5009 test it for a while and then announce it. Pretty much 100% of what
5006 I wanted for the 'phase 1' release is ready. Happy, tired.
5010 I wanted for the 'phase 1' release is ready. Happy, tired.
5007
5011
5008 2001-11-12 Fernando Perez <fperez@colorado.edu>
5012 2001-11-12 Fernando Perez <fperez@colorado.edu>
5009
5013
5010 * Version 0.1.6 released, 0.1.7 opened for further work.
5014 * Version 0.1.6 released, 0.1.7 opened for further work.
5011
5015
5012 * Fixed bug in printing: it used to test for truth before
5016 * Fixed bug in printing: it used to test for truth before
5013 printing, so 0 wouldn't print. Now checks for None.
5017 printing, so 0 wouldn't print. Now checks for None.
5014
5018
5015 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5019 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5016 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5020 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5017 reaches by hand into the outputcache. Think of a better way to do
5021 reaches by hand into the outputcache. Think of a better way to do
5018 this later.
5022 this later.
5019
5023
5020 * Various small fixes thanks to Nathan's comments.
5024 * Various small fixes thanks to Nathan's comments.
5021
5025
5022 * Changed magic_pprint to magic_Pprint. This way it doesn't
5026 * Changed magic_pprint to magic_Pprint. This way it doesn't
5023 collide with pprint() and the name is consistent with the command
5027 collide with pprint() and the name is consistent with the command
5024 line option.
5028 line option.
5025
5029
5026 * Changed prompt counter behavior to be fully like
5030 * Changed prompt counter behavior to be fully like
5027 Mathematica's. That is, even input that doesn't return a result
5031 Mathematica's. That is, even input that doesn't return a result
5028 raises the prompt counter. The old behavior was kind of confusing
5032 raises the prompt counter. The old behavior was kind of confusing
5029 (getting the same prompt number several times if the operation
5033 (getting the same prompt number several times if the operation
5030 didn't return a result).
5034 didn't return a result).
5031
5035
5032 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5036 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5033
5037
5034 * Fixed -Classic mode (wasn't working anymore).
5038 * Fixed -Classic mode (wasn't working anymore).
5035
5039
5036 * Added colored prompts using Nathan's new code. Colors are
5040 * Added colored prompts using Nathan's new code. Colors are
5037 currently hardwired, they can be user-configurable. For
5041 currently hardwired, they can be user-configurable. For
5038 developers, they can be chosen in file ipythonlib.py, at the
5042 developers, they can be chosen in file ipythonlib.py, at the
5039 beginning of the CachedOutput class def.
5043 beginning of the CachedOutput class def.
5040
5044
5041 2001-11-11 Fernando Perez <fperez@colorado.edu>
5045 2001-11-11 Fernando Perez <fperez@colorado.edu>
5042
5046
5043 * Version 0.1.5 released, 0.1.6 opened for further work.
5047 * Version 0.1.5 released, 0.1.6 opened for further work.
5044
5048
5045 * Changed magic_env to *return* the environment as a dict (not to
5049 * Changed magic_env to *return* the environment as a dict (not to
5046 print it). This way it prints, but it can also be processed.
5050 print it). This way it prints, but it can also be processed.
5047
5051
5048 * Added Verbose exception reporting to interactive
5052 * Added Verbose exception reporting to interactive
5049 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5053 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5050 traceback. Had to make some changes to the ultraTB file. This is
5054 traceback. Had to make some changes to the ultraTB file. This is
5051 probably the last 'big' thing in my mental todo list. This ties
5055 probably the last 'big' thing in my mental todo list. This ties
5052 in with the next entry:
5056 in with the next entry:
5053
5057
5054 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5058 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5055 has to specify is Plain, Color or Verbose for all exception
5059 has to specify is Plain, Color or Verbose for all exception
5056 handling.
5060 handling.
5057
5061
5058 * Removed ShellServices option. All this can really be done via
5062 * Removed ShellServices option. All this can really be done via
5059 the magic system. It's easier to extend, cleaner and has automatic
5063 the magic system. It's easier to extend, cleaner and has automatic
5060 namespace protection and documentation.
5064 namespace protection and documentation.
5061
5065
5062 2001-11-09 Fernando Perez <fperez@colorado.edu>
5066 2001-11-09 Fernando Perez <fperez@colorado.edu>
5063
5067
5064 * Fixed bug in output cache flushing (missing parameter to
5068 * Fixed bug in output cache flushing (missing parameter to
5065 __init__). Other small bugs fixed (found using pychecker).
5069 __init__). Other small bugs fixed (found using pychecker).
5066
5070
5067 * Version 0.1.4 opened for bugfixing.
5071 * Version 0.1.4 opened for bugfixing.
5068
5072
5069 2001-11-07 Fernando Perez <fperez@colorado.edu>
5073 2001-11-07 Fernando Perez <fperez@colorado.edu>
5070
5074
5071 * Version 0.1.3 released, mainly because of the raw_input bug.
5075 * Version 0.1.3 released, mainly because of the raw_input bug.
5072
5076
5073 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5077 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5074 and when testing for whether things were callable, a call could
5078 and when testing for whether things were callable, a call could
5075 actually be made to certain functions. They would get called again
5079 actually be made to certain functions. They would get called again
5076 once 'really' executed, with a resulting double call. A disaster
5080 once 'really' executed, with a resulting double call. A disaster
5077 in many cases (list.reverse() would never work!).
5081 in many cases (list.reverse() would never work!).
5078
5082
5079 * Removed prefilter() function, moved its code to raw_input (which
5083 * Removed prefilter() function, moved its code to raw_input (which
5080 after all was just a near-empty caller for prefilter). This saves
5084 after all was just a near-empty caller for prefilter). This saves
5081 a function call on every prompt, and simplifies the class a tiny bit.
5085 a function call on every prompt, and simplifies the class a tiny bit.
5082
5086
5083 * Fix _ip to __ip name in magic example file.
5087 * Fix _ip to __ip name in magic example file.
5084
5088
5085 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5089 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5086 work with non-gnu versions of tar.
5090 work with non-gnu versions of tar.
5087
5091
5088 2001-11-06 Fernando Perez <fperez@colorado.edu>
5092 2001-11-06 Fernando Perez <fperez@colorado.edu>
5089
5093
5090 * Version 0.1.2. Just to keep track of the recent changes.
5094 * Version 0.1.2. Just to keep track of the recent changes.
5091
5095
5092 * Fixed nasty bug in output prompt routine. It used to check 'if
5096 * Fixed nasty bug in output prompt routine. It used to check 'if
5093 arg != None...'. Problem is, this fails if arg implements a
5097 arg != None...'. Problem is, this fails if arg implements a
5094 special comparison (__cmp__) which disallows comparing to
5098 special comparison (__cmp__) which disallows comparing to
5095 None. Found it when trying to use the PhysicalQuantity module from
5099 None. Found it when trying to use the PhysicalQuantity module from
5096 ScientificPython.
5100 ScientificPython.
5097
5101
5098 2001-11-05 Fernando Perez <fperez@colorado.edu>
5102 2001-11-05 Fernando Perez <fperez@colorado.edu>
5099
5103
5100 * Also added dirs. Now the pushd/popd/dirs family functions
5104 * Also added dirs. Now the pushd/popd/dirs family functions
5101 basically like the shell, with the added convenience of going home
5105 basically like the shell, with the added convenience of going home
5102 when called with no args.
5106 when called with no args.
5103
5107
5104 * pushd/popd slightly modified to mimic shell behavior more
5108 * pushd/popd slightly modified to mimic shell behavior more
5105 closely.
5109 closely.
5106
5110
5107 * Added env,pushd,popd from ShellServices as magic functions. I
5111 * Added env,pushd,popd from ShellServices as magic functions. I
5108 think the cleanest will be to port all desired functions from
5112 think the cleanest will be to port all desired functions from
5109 ShellServices as magics and remove ShellServices altogether. This
5113 ShellServices as magics and remove ShellServices altogether. This
5110 will provide a single, clean way of adding functionality
5114 will provide a single, clean way of adding functionality
5111 (shell-type or otherwise) to IP.
5115 (shell-type or otherwise) to IP.
5112
5116
5113 2001-11-04 Fernando Perez <fperez@colorado.edu>
5117 2001-11-04 Fernando Perez <fperez@colorado.edu>
5114
5118
5115 * Added .ipython/ directory to sys.path. This way users can keep
5119 * Added .ipython/ directory to sys.path. This way users can keep
5116 customizations there and access them via import.
5120 customizations there and access them via import.
5117
5121
5118 2001-11-03 Fernando Perez <fperez@colorado.edu>
5122 2001-11-03 Fernando Perez <fperez@colorado.edu>
5119
5123
5120 * Opened version 0.1.1 for new changes.
5124 * Opened version 0.1.1 for new changes.
5121
5125
5122 * Changed version number to 0.1.0: first 'public' release, sent to
5126 * Changed version number to 0.1.0: first 'public' release, sent to
5123 Nathan and Janko.
5127 Nathan and Janko.
5124
5128
5125 * Lots of small fixes and tweaks.
5129 * Lots of small fixes and tweaks.
5126
5130
5127 * Minor changes to whos format. Now strings are shown, snipped if
5131 * Minor changes to whos format. Now strings are shown, snipped if
5128 too long.
5132 too long.
5129
5133
5130 * Changed ShellServices to work on __main__ so they show up in @who
5134 * Changed ShellServices to work on __main__ so they show up in @who
5131
5135
5132 * Help also works with ? at the end of a line:
5136 * Help also works with ? at the end of a line:
5133 ?sin and sin?
5137 ?sin and sin?
5134 both produce the same effect. This is nice, as often I use the
5138 both produce the same effect. This is nice, as often I use the
5135 tab-complete to find the name of a method, but I used to then have
5139 tab-complete to find the name of a method, but I used to then have
5136 to go to the beginning of the line to put a ? if I wanted more
5140 to go to the beginning of the line to put a ? if I wanted more
5137 info. Now I can just add the ? and hit return. Convenient.
5141 info. Now I can just add the ? and hit return. Convenient.
5138
5142
5139 2001-11-02 Fernando Perez <fperez@colorado.edu>
5143 2001-11-02 Fernando Perez <fperez@colorado.edu>
5140
5144
5141 * Python version check (>=2.1) added.
5145 * Python version check (>=2.1) added.
5142
5146
5143 * Added LazyPython documentation. At this point the docs are quite
5147 * Added LazyPython documentation. At this point the docs are quite
5144 a mess. A cleanup is in order.
5148 a mess. A cleanup is in order.
5145
5149
5146 * Auto-installer created. For some bizarre reason, the zipfiles
5150 * Auto-installer created. For some bizarre reason, the zipfiles
5147 module isn't working on my system. So I made a tar version
5151 module isn't working on my system. So I made a tar version
5148 (hopefully the command line options in various systems won't kill
5152 (hopefully the command line options in various systems won't kill
5149 me).
5153 me).
5150
5154
5151 * Fixes to Struct in genutils. Now all dictionary-like methods are
5155 * Fixes to Struct in genutils. Now all dictionary-like methods are
5152 protected (reasonably).
5156 protected (reasonably).
5153
5157
5154 * Added pager function to genutils and changed ? to print usage
5158 * Added pager function to genutils and changed ? to print usage
5155 note through it (it was too long).
5159 note through it (it was too long).
5156
5160
5157 * Added the LazyPython functionality. Works great! I changed the
5161 * Added the LazyPython functionality. Works great! I changed the
5158 auto-quote escape to ';', it's on home row and next to '. But
5162 auto-quote escape to ';', it's on home row and next to '. But
5159 both auto-quote and auto-paren (still /) escapes are command-line
5163 both auto-quote and auto-paren (still /) escapes are command-line
5160 parameters.
5164 parameters.
5161
5165
5162
5166
5163 2001-11-01 Fernando Perez <fperez@colorado.edu>
5167 2001-11-01 Fernando Perez <fperez@colorado.edu>
5164
5168
5165 * Version changed to 0.0.7. Fairly large change: configuration now
5169 * Version changed to 0.0.7. Fairly large change: configuration now
5166 is all stored in a directory, by default .ipython. There, all
5170 is all stored in a directory, by default .ipython. There, all
5167 config files have normal looking names (not .names)
5171 config files have normal looking names (not .names)
5168
5172
5169 * Version 0.0.6 Released first to Lucas and Archie as a test
5173 * Version 0.0.6 Released first to Lucas and Archie as a test
5170 run. Since it's the first 'semi-public' release, change version to
5174 run. Since it's the first 'semi-public' release, change version to
5171 > 0.0.6 for any changes now.
5175 > 0.0.6 for any changes now.
5172
5176
5173 * Stuff I had put in the ipplib.py changelog:
5177 * Stuff I had put in the ipplib.py changelog:
5174
5178
5175 Changes to InteractiveShell:
5179 Changes to InteractiveShell:
5176
5180
5177 - Made the usage message a parameter.
5181 - Made the usage message a parameter.
5178
5182
5179 - Require the name of the shell variable to be given. It's a bit
5183 - Require the name of the shell variable to be given. It's a bit
5180 of a hack, but allows the name 'shell' not to be hardwire in the
5184 of a hack, but allows the name 'shell' not to be hardwire in the
5181 magic (@) handler, which is problematic b/c it requires
5185 magic (@) handler, which is problematic b/c it requires
5182 polluting the global namespace with 'shell'. This in turn is
5186 polluting the global namespace with 'shell'. This in turn is
5183 fragile: if a user redefines a variable called shell, things
5187 fragile: if a user redefines a variable called shell, things
5184 break.
5188 break.
5185
5189
5186 - magic @: all functions available through @ need to be defined
5190 - magic @: all functions available through @ need to be defined
5187 as magic_<name>, even though they can be called simply as
5191 as magic_<name>, even though they can be called simply as
5188 @<name>. This allows the special command @magic to gather
5192 @<name>. This allows the special command @magic to gather
5189 information automatically about all existing magic functions,
5193 information automatically about all existing magic functions,
5190 even if they are run-time user extensions, by parsing the shell
5194 even if they are run-time user extensions, by parsing the shell
5191 instance __dict__ looking for special magic_ names.
5195 instance __dict__ looking for special magic_ names.
5192
5196
5193 - mainloop: added *two* local namespace parameters. This allows
5197 - mainloop: added *two* local namespace parameters. This allows
5194 the class to differentiate between parameters which were there
5198 the class to differentiate between parameters which were there
5195 before and after command line initialization was processed. This
5199 before and after command line initialization was processed. This
5196 way, later @who can show things loaded at startup by the
5200 way, later @who can show things loaded at startup by the
5197 user. This trick was necessary to make session saving/reloading
5201 user. This trick was necessary to make session saving/reloading
5198 really work: ideally after saving/exiting/reloading a session,
5202 really work: ideally after saving/exiting/reloading a session,
5199 *everythin* should look the same, including the output of @who. I
5203 *everythin* should look the same, including the output of @who. I
5200 was only able to make this work with this double namespace
5204 was only able to make this work with this double namespace
5201 trick.
5205 trick.
5202
5206
5203 - added a header to the logfile which allows (almost) full
5207 - added a header to the logfile which allows (almost) full
5204 session restoring.
5208 session restoring.
5205
5209
5206 - prepend lines beginning with @ or !, with a and log
5210 - prepend lines beginning with @ or !, with a and log
5207 them. Why? !lines: may be useful to know what you did @lines:
5211 them. Why? !lines: may be useful to know what you did @lines:
5208 they may affect session state. So when restoring a session, at
5212 they may affect session state. So when restoring a session, at
5209 least inform the user of their presence. I couldn't quite get
5213 least inform the user of their presence. I couldn't quite get
5210 them to properly re-execute, but at least the user is warned.
5214 them to properly re-execute, but at least the user is warned.
5211
5215
5212 * Started ChangeLog.
5216 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now