##// END OF EJS Templates
implement %run myscript.ipy
vivainio -
Show More
@@ -0,0 +1,15 b''
1 import os
2
3
4 editor = r'q:/opt/np/notepad++.exe'
5
6
7 e = os.environ
8
9 e['EDITOR'] = editor
10 e['VISUAL'] = editor
11
12
13
14
15
@@ -1,3059 +1,3068 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 1962 2006-12-05 21:08:50Z vivainio $"""
4 $Id: Magic.py 1981 2006-12-12 21:51:54Z 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 # cProfile was added in Python2.5
39 # cProfile was added in Python2.5
40 try:
40 try:
41 import cProfile as profile
41 import cProfile as profile
42 import pstats
42 import pstats
43 except ImportError:
43 except ImportError:
44 # profile isn't bundled by default in Debian for license reasons
44 # profile isn't bundled by default in Debian for license reasons
45 try:
45 try:
46 import profile,pstats
46 import profile,pstats
47 except ImportError:
47 except ImportError:
48 profile = pstats = None
48 profile = pstats = None
49
49
50 # Homebrewed
50 # Homebrewed
51 import IPython
51 import IPython
52 from IPython import Debugger, OInspect, wildcard
52 from IPython import Debugger, OInspect, wildcard
53 from IPython.FakeModule import FakeModule
53 from IPython.FakeModule import FakeModule
54 from IPython.Itpl import Itpl, itpl, printpl,itplns
54 from IPython.Itpl import Itpl, itpl, printpl,itplns
55 from IPython.PyColorize import Parser
55 from IPython.PyColorize import Parser
56 from IPython.ipstruct import Struct
56 from IPython.ipstruct import Struct
57 from IPython.macro import Macro
57 from IPython.macro import Macro
58 from IPython.genutils import *
58 from IPython.genutils import *
59 from IPython import platutils
59 from IPython import platutils
60
60
61 #***************************************************************************
61 #***************************************************************************
62 # Utility functions
62 # Utility functions
63 def on_off(tag):
63 def on_off(tag):
64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
64 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
65 return ['OFF','ON'][tag]
65 return ['OFF','ON'][tag]
66
66
67 class Bunch: pass
67 class Bunch: pass
68
68
69 #***************************************************************************
69 #***************************************************************************
70 # Main class implementing Magic functionality
70 # Main class implementing Magic functionality
71 class Magic:
71 class Magic:
72 """Magic functions for InteractiveShell.
72 """Magic functions for InteractiveShell.
73
73
74 Shell functions which can be reached as %function_name. All magic
74 Shell functions which can be reached as %function_name. All magic
75 functions should accept a string, which they can parse for their own
75 functions should accept a string, which they can parse for their own
76 needs. This can make some functions easier to type, eg `%cd ../`
76 needs. This can make some functions easier to type, eg `%cd ../`
77 vs. `%cd("../")`
77 vs. `%cd("../")`
78
78
79 ALL definitions MUST begin with the prefix magic_. The user won't need it
79 ALL definitions MUST begin with the prefix magic_. The user won't need it
80 at the command line, but it is is needed in the definition. """
80 at the command line, but it is is needed in the definition. """
81
81
82 # class globals
82 # class globals
83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
83 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
84 'Automagic is ON, % prefix NOT needed for magic functions.']
84 'Automagic is ON, % prefix NOT needed for magic functions.']
85
85
86 #......................................................................
86 #......................................................................
87 # some utility functions
87 # some utility functions
88
88
89 def __init__(self,shell):
89 def __init__(self,shell):
90
90
91 self.options_table = {}
91 self.options_table = {}
92 if profile is None:
92 if profile is None:
93 self.magic_prun = self.profile_missing_notice
93 self.magic_prun = self.profile_missing_notice
94 self.shell = shell
94 self.shell = shell
95
95
96 # namespace for holding state we may need
96 # namespace for holding state we may need
97 self._magic_state = Bunch()
97 self._magic_state = Bunch()
98
98
99 def profile_missing_notice(self, *args, **kwargs):
99 def profile_missing_notice(self, *args, **kwargs):
100 error("""\
100 error("""\
101 The profile module could not be found. If you are a Debian user,
101 The profile module could not be found. If you are a Debian user,
102 it has been removed from the standard Debian package because of its non-free
102 it has been removed from the standard Debian package because of its non-free
103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
103 license. To use profiling, please install"python2.3-profiler" from non-free.""")
104
104
105 def default_option(self,fn,optstr):
105 def default_option(self,fn,optstr):
106 """Make an entry in the options_table for fn, with value optstr"""
106 """Make an entry in the options_table for fn, with value optstr"""
107
107
108 if fn not in self.lsmagic():
108 if fn not in self.lsmagic():
109 error("%s is not a magic function" % fn)
109 error("%s is not a magic function" % fn)
110 self.options_table[fn] = optstr
110 self.options_table[fn] = optstr
111
111
112 def lsmagic(self):
112 def lsmagic(self):
113 """Return a list of currently available magic functions.
113 """Return a list of currently available magic functions.
114
114
115 Gives a list of the bare names after mangling (['ls','cd', ...], not
115 Gives a list of the bare names after mangling (['ls','cd', ...], not
116 ['magic_ls','magic_cd',...]"""
116 ['magic_ls','magic_cd',...]"""
117
117
118 # FIXME. This needs a cleanup, in the way the magics list is built.
118 # FIXME. This needs a cleanup, in the way the magics list is built.
119
119
120 # magics in class definition
120 # magics in class definition
121 class_magic = lambda fn: fn.startswith('magic_') and \
121 class_magic = lambda fn: fn.startswith('magic_') and \
122 callable(Magic.__dict__[fn])
122 callable(Magic.__dict__[fn])
123 # in instance namespace (run-time user additions)
123 # in instance namespace (run-time user additions)
124 inst_magic = lambda fn: fn.startswith('magic_') and \
124 inst_magic = lambda fn: fn.startswith('magic_') and \
125 callable(self.__dict__[fn])
125 callable(self.__dict__[fn])
126 # and bound magics by user (so they can access self):
126 # and bound magics by user (so they can access self):
127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
127 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
128 callable(self.__class__.__dict__[fn])
128 callable(self.__class__.__dict__[fn])
129 magics = filter(class_magic,Magic.__dict__.keys()) + \
129 magics = filter(class_magic,Magic.__dict__.keys()) + \
130 filter(inst_magic,self.__dict__.keys()) + \
130 filter(inst_magic,self.__dict__.keys()) + \
131 filter(inst_bound_magic,self.__class__.__dict__.keys())
131 filter(inst_bound_magic,self.__class__.__dict__.keys())
132 out = []
132 out = []
133 for fn in magics:
133 for fn in magics:
134 out.append(fn.replace('magic_','',1))
134 out.append(fn.replace('magic_','',1))
135 out.sort()
135 out.sort()
136 return out
136 return out
137
137
138 def extract_input_slices(self,slices,raw=False):
138 def extract_input_slices(self,slices,raw=False):
139 """Return as a string a set of input history slices.
139 """Return as a string a set of input history slices.
140
140
141 Inputs:
141 Inputs:
142
142
143 - slices: the set of slices is given as a list of strings (like
143 - slices: the set of slices is given as a list of strings (like
144 ['1','4:8','9'], since this function is for use by magic functions
144 ['1','4:8','9'], since this function is for use by magic functions
145 which get their arguments as strings.
145 which get their arguments as strings.
146
146
147 Optional inputs:
147 Optional inputs:
148
148
149 - raw(False): by default, the processed input is used. If this is
149 - raw(False): by default, the processed input is used. If this is
150 true, the raw input history is used instead.
150 true, the raw input history is used instead.
151
151
152 Note that slices can be called with two notations:
152 Note that slices can be called with two notations:
153
153
154 N:M -> standard python form, means including items N...(M-1).
154 N:M -> standard python form, means including items N...(M-1).
155
155
156 N-M -> include items N..M (closed endpoint)."""
156 N-M -> include items N..M (closed endpoint)."""
157
157
158 if raw:
158 if raw:
159 hist = self.shell.input_hist_raw
159 hist = self.shell.input_hist_raw
160 else:
160 else:
161 hist = self.shell.input_hist
161 hist = self.shell.input_hist
162
162
163 cmds = []
163 cmds = []
164 for chunk in slices:
164 for chunk in slices:
165 if ':' in chunk:
165 if ':' in chunk:
166 ini,fin = map(int,chunk.split(':'))
166 ini,fin = map(int,chunk.split(':'))
167 elif '-' in chunk:
167 elif '-' in chunk:
168 ini,fin = map(int,chunk.split('-'))
168 ini,fin = map(int,chunk.split('-'))
169 fin += 1
169 fin += 1
170 else:
170 else:
171 ini = int(chunk)
171 ini = int(chunk)
172 fin = ini+1
172 fin = ini+1
173 cmds.append(hist[ini:fin])
173 cmds.append(hist[ini:fin])
174 return cmds
174 return cmds
175
175
176 def _ofind(self, oname, namespaces=None):
176 def _ofind(self, oname, namespaces=None):
177 """Find an object in the available namespaces.
177 """Find an object in the available namespaces.
178
178
179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
179 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
180
180
181 Has special code to detect magic functions.
181 Has special code to detect magic functions.
182 """
182 """
183
183
184 oname = oname.strip()
184 oname = oname.strip()
185
185
186 alias_ns = None
186 alias_ns = None
187 if namespaces is None:
187 if namespaces is None:
188 # Namespaces to search in:
188 # Namespaces to search in:
189 # Put them in a list. The order is important so that we
189 # Put them in a list. The order is important so that we
190 # find things in the same order that Python finds them.
190 # find things in the same order that Python finds them.
191 namespaces = [ ('Interactive', self.shell.user_ns),
191 namespaces = [ ('Interactive', self.shell.user_ns),
192 ('IPython internal', self.shell.internal_ns),
192 ('IPython internal', self.shell.internal_ns),
193 ('Python builtin', __builtin__.__dict__),
193 ('Python builtin', __builtin__.__dict__),
194 ('Alias', self.shell.alias_table),
194 ('Alias', self.shell.alias_table),
195 ]
195 ]
196 alias_ns = self.shell.alias_table
196 alias_ns = self.shell.alias_table
197
197
198 # initialize results to 'null'
198 # initialize results to 'null'
199 found = 0; obj = None; ospace = None; ds = None;
199 found = 0; obj = None; ospace = None; ds = None;
200 ismagic = 0; isalias = 0; parent = None
200 ismagic = 0; isalias = 0; parent = None
201
201
202 # Look for the given name by splitting it in parts. If the head is
202 # Look for the given name by splitting it in parts. If the head is
203 # found, then we look for all the remaining parts as members, and only
203 # found, then we look for all the remaining parts as members, and only
204 # declare success if we can find them all.
204 # declare success if we can find them all.
205 oname_parts = oname.split('.')
205 oname_parts = oname.split('.')
206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
206 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
207 for nsname,ns in namespaces:
207 for nsname,ns in namespaces:
208 try:
208 try:
209 obj = ns[oname_head]
209 obj = ns[oname_head]
210 except KeyError:
210 except KeyError:
211 continue
211 continue
212 else:
212 else:
213 for part in oname_rest:
213 for part in oname_rest:
214 try:
214 try:
215 parent = obj
215 parent = obj
216 obj = getattr(obj,part)
216 obj = getattr(obj,part)
217 except:
217 except:
218 # Blanket except b/c some badly implemented objects
218 # Blanket except b/c some badly implemented objects
219 # allow __getattr__ to raise exceptions other than
219 # allow __getattr__ to raise exceptions other than
220 # AttributeError, which then crashes IPython.
220 # AttributeError, which then crashes IPython.
221 break
221 break
222 else:
222 else:
223 # If we finish the for loop (no break), we got all members
223 # If we finish the for loop (no break), we got all members
224 found = 1
224 found = 1
225 ospace = nsname
225 ospace = nsname
226 if ns == alias_ns:
226 if ns == alias_ns:
227 isalias = 1
227 isalias = 1
228 break # namespace loop
228 break # namespace loop
229
229
230 # Try to see if it's magic
230 # Try to see if it's magic
231 if not found:
231 if not found:
232 if oname.startswith(self.shell.ESC_MAGIC):
232 if oname.startswith(self.shell.ESC_MAGIC):
233 oname = oname[1:]
233 oname = oname[1:]
234 obj = getattr(self,'magic_'+oname,None)
234 obj = getattr(self,'magic_'+oname,None)
235 if obj is not None:
235 if obj is not None:
236 found = 1
236 found = 1
237 ospace = 'IPython internal'
237 ospace = 'IPython internal'
238 ismagic = 1
238 ismagic = 1
239
239
240 # Last try: special-case some literals like '', [], {}, etc:
240 # Last try: special-case some literals like '', [], {}, etc:
241 if not found and oname_head in ["''",'""','[]','{}','()']:
241 if not found and oname_head in ["''",'""','[]','{}','()']:
242 obj = eval(oname_head)
242 obj = eval(oname_head)
243 found = 1
243 found = 1
244 ospace = 'Interactive'
244 ospace = 'Interactive'
245
245
246 return {'found':found, 'obj':obj, 'namespace':ospace,
246 return {'found':found, 'obj':obj, 'namespace':ospace,
247 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
247 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
248
248
249 def arg_err(self,func):
249 def arg_err(self,func):
250 """Print docstring if incorrect arguments were passed"""
250 """Print docstring if incorrect arguments were passed"""
251 print 'Error in arguments:'
251 print 'Error in arguments:'
252 print OInspect.getdoc(func)
252 print OInspect.getdoc(func)
253
253
254 def format_latex(self,strng):
254 def format_latex(self,strng):
255 """Format a string for latex inclusion."""
255 """Format a string for latex inclusion."""
256
256
257 # Characters that need to be escaped for latex:
257 # Characters that need to be escaped for latex:
258 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
258 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
259 # Magic command names as headers:
259 # Magic command names as headers:
260 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
260 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
261 re.MULTILINE)
261 re.MULTILINE)
262 # Magic commands
262 # Magic commands
263 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
263 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
264 re.MULTILINE)
264 re.MULTILINE)
265 # Paragraph continue
265 # Paragraph continue
266 par_re = re.compile(r'\\$',re.MULTILINE)
266 par_re = re.compile(r'\\$',re.MULTILINE)
267
267
268 # The "\n" symbol
268 # The "\n" symbol
269 newline_re = re.compile(r'\\n')
269 newline_re = re.compile(r'\\n')
270
270
271 # Now build the string for output:
271 # Now build the string for output:
272 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
272 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
273 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
273 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
274 strng)
274 strng)
275 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
275 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
276 strng = par_re.sub(r'\\\\',strng)
276 strng = par_re.sub(r'\\\\',strng)
277 strng = escape_re.sub(r'\\\1',strng)
277 strng = escape_re.sub(r'\\\1',strng)
278 strng = newline_re.sub(r'\\textbackslash{}n',strng)
278 strng = newline_re.sub(r'\\textbackslash{}n',strng)
279 return strng
279 return strng
280
280
281 def format_screen(self,strng):
281 def format_screen(self,strng):
282 """Format a string for screen printing.
282 """Format a string for screen printing.
283
283
284 This removes some latex-type format codes."""
284 This removes some latex-type format codes."""
285 # Paragraph continue
285 # Paragraph continue
286 par_re = re.compile(r'\\$',re.MULTILINE)
286 par_re = re.compile(r'\\$',re.MULTILINE)
287 strng = par_re.sub('',strng)
287 strng = par_re.sub('',strng)
288 return strng
288 return strng
289
289
290 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
290 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
291 """Parse options passed to an argument string.
291 """Parse options passed to an argument string.
292
292
293 The interface is similar to that of getopt(), but it returns back a
293 The interface is similar to that of getopt(), but it returns back a
294 Struct with the options as keys and the stripped argument string still
294 Struct with the options as keys and the stripped argument string still
295 as a string.
295 as a string.
296
296
297 arg_str is quoted as a true sys.argv vector by using shlex.split.
297 arg_str is quoted as a true sys.argv vector by using shlex.split.
298 This allows us to easily expand variables, glob files, quote
298 This allows us to easily expand variables, glob files, quote
299 arguments, etc.
299 arguments, etc.
300
300
301 Options:
301 Options:
302 -mode: default 'string'. If given as 'list', the argument string is
302 -mode: default 'string'. If given as 'list', the argument string is
303 returned as a list (split on whitespace) instead of a string.
303 returned as a list (split on whitespace) instead of a string.
304
304
305 -list_all: put all option values in lists. Normally only options
305 -list_all: put all option values in lists. Normally only options
306 appearing more than once are put in a list.
306 appearing more than once are put in a list.
307
307
308 -posix (True): whether to split the input line in POSIX mode or not,
308 -posix (True): whether to split the input line in POSIX mode or not,
309 as per the conventions outlined in the shlex module from the
309 as per the conventions outlined in the shlex module from the
310 standard library."""
310 standard library."""
311
311
312 # inject default options at the beginning of the input line
312 # inject default options at the beginning of the input line
313 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
313 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
314 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
314 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
315
315
316 mode = kw.get('mode','string')
316 mode = kw.get('mode','string')
317 if mode not in ['string','list']:
317 if mode not in ['string','list']:
318 raise ValueError,'incorrect mode given: %s' % mode
318 raise ValueError,'incorrect mode given: %s' % mode
319 # Get options
319 # Get options
320 list_all = kw.get('list_all',0)
320 list_all = kw.get('list_all',0)
321 posix = kw.get('posix',True)
321 posix = kw.get('posix',True)
322
322
323 # Check if we have more than one argument to warrant extra processing:
323 # Check if we have more than one argument to warrant extra processing:
324 odict = {} # Dictionary with options
324 odict = {} # Dictionary with options
325 args = arg_str.split()
325 args = arg_str.split()
326 if len(args) >= 1:
326 if len(args) >= 1:
327 # If the list of inputs only has 0 or 1 thing in it, there's no
327 # If the list of inputs only has 0 or 1 thing in it, there's no
328 # need to look for options
328 # need to look for options
329 argv = arg_split(arg_str,posix)
329 argv = arg_split(arg_str,posix)
330 # Do regular option processing
330 # Do regular option processing
331 try:
331 try:
332 opts,args = getopt(argv,opt_str,*long_opts)
332 opts,args = getopt(argv,opt_str,*long_opts)
333 except GetoptError,e:
333 except GetoptError,e:
334 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
334 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
335 " ".join(long_opts)))
335 " ".join(long_opts)))
336 for o,a in opts:
336 for o,a in opts:
337 if o.startswith('--'):
337 if o.startswith('--'):
338 o = o[2:]
338 o = o[2:]
339 else:
339 else:
340 o = o[1:]
340 o = o[1:]
341 try:
341 try:
342 odict[o].append(a)
342 odict[o].append(a)
343 except AttributeError:
343 except AttributeError:
344 odict[o] = [odict[o],a]
344 odict[o] = [odict[o],a]
345 except KeyError:
345 except KeyError:
346 if list_all:
346 if list_all:
347 odict[o] = [a]
347 odict[o] = [a]
348 else:
348 else:
349 odict[o] = a
349 odict[o] = a
350
350
351 # Prepare opts,args for return
351 # Prepare opts,args for return
352 opts = Struct(odict)
352 opts = Struct(odict)
353 if mode == 'string':
353 if mode == 'string':
354 args = ' '.join(args)
354 args = ' '.join(args)
355
355
356 return opts,args
356 return opts,args
357
357
358 #......................................................................
358 #......................................................................
359 # And now the actual magic functions
359 # And now the actual magic functions
360
360
361 # Functions for IPython shell work (vars,funcs, config, etc)
361 # Functions for IPython shell work (vars,funcs, config, etc)
362 def magic_lsmagic(self, parameter_s = ''):
362 def magic_lsmagic(self, parameter_s = ''):
363 """List currently available magic functions."""
363 """List currently available magic functions."""
364 mesc = self.shell.ESC_MAGIC
364 mesc = self.shell.ESC_MAGIC
365 print 'Available magic functions:\n'+mesc+\
365 print 'Available magic functions:\n'+mesc+\
366 (' '+mesc).join(self.lsmagic())
366 (' '+mesc).join(self.lsmagic())
367 print '\n' + Magic.auto_status[self.shell.rc.automagic]
367 print '\n' + Magic.auto_status[self.shell.rc.automagic]
368 return None
368 return None
369
369
370 def magic_magic(self, parameter_s = ''):
370 def magic_magic(self, parameter_s = ''):
371 """Print information about the magic function system."""
371 """Print information about the magic function system."""
372
372
373 mode = ''
373 mode = ''
374 try:
374 try:
375 if parameter_s.split()[0] == '-latex':
375 if parameter_s.split()[0] == '-latex':
376 mode = 'latex'
376 mode = 'latex'
377 if parameter_s.split()[0] == '-brief':
377 if parameter_s.split()[0] == '-brief':
378 mode = 'brief'
378 mode = 'brief'
379 except:
379 except:
380 pass
380 pass
381
381
382 magic_docs = []
382 magic_docs = []
383 for fname in self.lsmagic():
383 for fname in self.lsmagic():
384 mname = 'magic_' + fname
384 mname = 'magic_' + fname
385 for space in (Magic,self,self.__class__):
385 for space in (Magic,self,self.__class__):
386 try:
386 try:
387 fn = space.__dict__[mname]
387 fn = space.__dict__[mname]
388 except KeyError:
388 except KeyError:
389 pass
389 pass
390 else:
390 else:
391 break
391 break
392 if mode == 'brief':
392 if mode == 'brief':
393 # only first line
393 # only first line
394 fndoc = fn.__doc__.split('\n',1)[0]
394 fndoc = fn.__doc__.split('\n',1)[0]
395 else:
395 else:
396 fndoc = fn.__doc__
396 fndoc = fn.__doc__
397
397
398 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
398 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
399 fname,fndoc))
399 fname,fndoc))
400 magic_docs = ''.join(magic_docs)
400 magic_docs = ''.join(magic_docs)
401
401
402 if mode == 'latex':
402 if mode == 'latex':
403 print self.format_latex(magic_docs)
403 print self.format_latex(magic_docs)
404 return
404 return
405 else:
405 else:
406 magic_docs = self.format_screen(magic_docs)
406 magic_docs = self.format_screen(magic_docs)
407 if mode == 'brief':
407 if mode == 'brief':
408 return magic_docs
408 return magic_docs
409
409
410 outmsg = """
410 outmsg = """
411 IPython's 'magic' functions
411 IPython's 'magic' functions
412 ===========================
412 ===========================
413
413
414 The magic function system provides a series of functions which allow you to
414 The magic function system provides a series of functions which allow you to
415 control the behavior of IPython itself, plus a lot of system-type
415 control the behavior of IPython itself, plus a lot of system-type
416 features. All these functions are prefixed with a % character, but parameters
416 features. All these functions are prefixed with a % character, but parameters
417 are given without parentheses or quotes.
417 are given without parentheses or quotes.
418
418
419 NOTE: If you have 'automagic' enabled (via the command line option or with the
419 NOTE: If you have 'automagic' enabled (via the command line option or with the
420 %automagic function), you don't need to type in the % explicitly. By default,
420 %automagic function), you don't need to type in the % explicitly. By default,
421 IPython ships with automagic on, so you should only rarely need the % escape.
421 IPython ships with automagic on, so you should only rarely need the % escape.
422
422
423 Example: typing '%cd mydir' (without the quotes) changes you working directory
423 Example: typing '%cd mydir' (without the quotes) changes you working directory
424 to 'mydir', if it exists.
424 to 'mydir', if it exists.
425
425
426 You can define your own magic functions to extend the system. See the supplied
426 You can define your own magic functions to extend the system. See the supplied
427 ipythonrc and example-magic.py files for details (in your ipython
427 ipythonrc and example-magic.py files for details (in your ipython
428 configuration directory, typically $HOME/.ipython/).
428 configuration directory, typically $HOME/.ipython/).
429
429
430 You can also define your own aliased names for magic functions. In your
430 You can also define your own aliased names for magic functions. In your
431 ipythonrc file, placing a line like:
431 ipythonrc file, placing a line like:
432
432
433 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
433 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
434
434
435 will define %pf as a new name for %profile.
435 will define %pf as a new name for %profile.
436
436
437 You can also call magics in code using the ipmagic() function, which IPython
437 You can also call magics in code using the ipmagic() function, which IPython
438 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
438 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
439
439
440 For a list of the available magic functions, use %lsmagic. For a description
440 For a list of the available magic functions, use %lsmagic. For a description
441 of any of them, type %magic_name?, e.g. '%cd?'.
441 of any of them, type %magic_name?, e.g. '%cd?'.
442
442
443 Currently the magic system has the following functions:\n"""
443 Currently the magic system has the following functions:\n"""
444
444
445 mesc = self.shell.ESC_MAGIC
445 mesc = self.shell.ESC_MAGIC
446 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
446 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
447 "\n\n%s%s\n\n%s" % (outmsg,
447 "\n\n%s%s\n\n%s" % (outmsg,
448 magic_docs,mesc,mesc,
448 magic_docs,mesc,mesc,
449 (' '+mesc).join(self.lsmagic()),
449 (' '+mesc).join(self.lsmagic()),
450 Magic.auto_status[self.shell.rc.automagic] ) )
450 Magic.auto_status[self.shell.rc.automagic] ) )
451
451
452 page(outmsg,screen_lines=self.shell.rc.screen_length)
452 page(outmsg,screen_lines=self.shell.rc.screen_length)
453
453
454 def magic_automagic(self, parameter_s = ''):
454 def magic_automagic(self, parameter_s = ''):
455 """Make magic functions callable without having to type the initial %.
455 """Make magic functions callable without having to type the initial %.
456
456
457 Toggles on/off (when off, you must call it as %automagic, of
457 Toggles on/off (when off, you must call it as %automagic, of
458 course). Note that magic functions have lowest priority, so if there's
458 course). Note that magic functions have lowest priority, so if there's
459 a variable whose name collides with that of a magic fn, automagic
459 a variable whose name collides with that of a magic fn, automagic
460 won't work for that function (you get the variable instead). However,
460 won't work for that function (you get the variable instead). However,
461 if you delete the variable (del var), the previously shadowed magic
461 if you delete the variable (del var), the previously shadowed magic
462 function becomes visible to automagic again."""
462 function becomes visible to automagic again."""
463
463
464 rc = self.shell.rc
464 rc = self.shell.rc
465 rc.automagic = not rc.automagic
465 rc.automagic = not rc.automagic
466 print '\n' + Magic.auto_status[rc.automagic]
466 print '\n' + Magic.auto_status[rc.automagic]
467
467
468 def magic_autocall(self, parameter_s = ''):
468 def magic_autocall(self, parameter_s = ''):
469 """Make functions callable without having to type parentheses.
469 """Make functions callable without having to type parentheses.
470
470
471 Usage:
471 Usage:
472
472
473 %autocall [mode]
473 %autocall [mode]
474
474
475 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
475 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
476 value is toggled on and off (remembering the previous state)."""
476 value is toggled on and off (remembering the previous state)."""
477
477
478 rc = self.shell.rc
478 rc = self.shell.rc
479
479
480 if parameter_s:
480 if parameter_s:
481 arg = int(parameter_s)
481 arg = int(parameter_s)
482 else:
482 else:
483 arg = 'toggle'
483 arg = 'toggle'
484
484
485 if not arg in (0,1,2,'toggle'):
485 if not arg in (0,1,2,'toggle'):
486 error('Valid modes: (0->Off, 1->Smart, 2->Full')
486 error('Valid modes: (0->Off, 1->Smart, 2->Full')
487 return
487 return
488
488
489 if arg in (0,1,2):
489 if arg in (0,1,2):
490 rc.autocall = arg
490 rc.autocall = arg
491 else: # toggle
491 else: # toggle
492 if rc.autocall:
492 if rc.autocall:
493 self._magic_state.autocall_save = rc.autocall
493 self._magic_state.autocall_save = rc.autocall
494 rc.autocall = 0
494 rc.autocall = 0
495 else:
495 else:
496 try:
496 try:
497 rc.autocall = self._magic_state.autocall_save
497 rc.autocall = self._magic_state.autocall_save
498 except AttributeError:
498 except AttributeError:
499 rc.autocall = self._magic_state.autocall_save = 1
499 rc.autocall = self._magic_state.autocall_save = 1
500
500
501 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
501 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
502
502
503 def magic_autoindent(self, parameter_s = ''):
503 def magic_autoindent(self, parameter_s = ''):
504 """Toggle autoindent on/off (if available)."""
504 """Toggle autoindent on/off (if available)."""
505
505
506 self.shell.set_autoindent()
506 self.shell.set_autoindent()
507 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
507 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
508
508
509 def magic_system_verbose(self, parameter_s = ''):
509 def magic_system_verbose(self, parameter_s = ''):
510 """Set verbose printing of system calls.
510 """Set verbose printing of system calls.
511
511
512 If called without an argument, act as a toggle"""
512 If called without an argument, act as a toggle"""
513
513
514 if parameter_s:
514 if parameter_s:
515 val = bool(eval(parameter_s))
515 val = bool(eval(parameter_s))
516 else:
516 else:
517 val = None
517 val = None
518
518
519 self.shell.rc_set_toggle('system_verbose',val)
519 self.shell.rc_set_toggle('system_verbose',val)
520 print "System verbose printing is:",\
520 print "System verbose printing is:",\
521 ['OFF','ON'][self.shell.rc.system_verbose]
521 ['OFF','ON'][self.shell.rc.system_verbose]
522
522
523 def magic_history(self, parameter_s = ''):
523 def magic_history(self, parameter_s = ''):
524 """Print input history (_i<n> variables), with most recent last.
524 """Print input history (_i<n> variables), with most recent last.
525
525
526 %history -> print at most 40 inputs (some may be multi-line)\\
526 %history -> print at most 40 inputs (some may be multi-line)\\
527 %history n -> print at most n inputs\\
527 %history n -> print at most n inputs\\
528 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
528 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
529
529
530 Each input's number <n> is shown, and is accessible as the
530 Each input's number <n> is shown, and is accessible as the
531 automatically generated variable _i<n>. Multi-line statements are
531 automatically generated variable _i<n>. Multi-line statements are
532 printed starting at a new line for easy copy/paste.
532 printed starting at a new line for easy copy/paste.
533
533
534
534
535 Options:
535 Options:
536
536
537 -n: do NOT print line numbers. This is useful if you want to get a
537 -n: do NOT print line numbers. This is useful if you want to get a
538 printout of many lines which can be directly pasted into a text
538 printout of many lines which can be directly pasted into a text
539 editor.
539 editor.
540
540
541 This feature is only available if numbered prompts are in use.
541 This feature is only available if numbered prompts are in use.
542
542
543 -r: print the 'raw' history. IPython filters your input and
543 -r: print the 'raw' history. IPython filters your input and
544 converts it all into valid Python source before executing it (things
544 converts it all into valid Python source before executing it (things
545 like magics or aliases are turned into function calls, for
545 like magics or aliases are turned into function calls, for
546 example). With this option, you'll see the unfiltered history
546 example). With this option, you'll see the unfiltered history
547 instead of the filtered version: '%cd /' will be seen as '%cd /'
547 instead of the filtered version: '%cd /' will be seen as '%cd /'
548 instead of '_ip.magic("%cd /")'.
548 instead of '_ip.magic("%cd /")'.
549 """
549 """
550
550
551 shell = self.shell
551 shell = self.shell
552 if not shell.outputcache.do_full_cache:
552 if not shell.outputcache.do_full_cache:
553 print 'This feature is only available if numbered prompts are in use.'
553 print 'This feature is only available if numbered prompts are in use.'
554 return
554 return
555 opts,args = self.parse_options(parameter_s,'nr',mode='list')
555 opts,args = self.parse_options(parameter_s,'nr',mode='list')
556
556
557 if opts.has_key('r'):
557 if opts.has_key('r'):
558 input_hist = shell.input_hist_raw
558 input_hist = shell.input_hist_raw
559 else:
559 else:
560 input_hist = shell.input_hist
560 input_hist = shell.input_hist
561
561
562 default_length = 40
562 default_length = 40
563 if len(args) == 0:
563 if len(args) == 0:
564 final = len(input_hist)
564 final = len(input_hist)
565 init = max(1,final-default_length)
565 init = max(1,final-default_length)
566 elif len(args) == 1:
566 elif len(args) == 1:
567 final = len(input_hist)
567 final = len(input_hist)
568 init = max(1,final-int(args[0]))
568 init = max(1,final-int(args[0]))
569 elif len(args) == 2:
569 elif len(args) == 2:
570 init,final = map(int,args)
570 init,final = map(int,args)
571 else:
571 else:
572 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
572 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
573 print self.magic_hist.__doc__
573 print self.magic_hist.__doc__
574 return
574 return
575 width = len(str(final))
575 width = len(str(final))
576 line_sep = ['','\n']
576 line_sep = ['','\n']
577 print_nums = not opts.has_key('n')
577 print_nums = not opts.has_key('n')
578 for in_num in range(init,final):
578 for in_num in range(init,final):
579 inline = input_hist[in_num]
579 inline = input_hist[in_num]
580 multiline = int(inline.count('\n') > 1)
580 multiline = int(inline.count('\n') > 1)
581 if print_nums:
581 if print_nums:
582 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
582 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
583 print inline,
583 print inline,
584
584
585 def magic_hist(self, parameter_s=''):
585 def magic_hist(self, parameter_s=''):
586 """Alternate name for %history."""
586 """Alternate name for %history."""
587 return self.magic_history(parameter_s)
587 return self.magic_history(parameter_s)
588
588
589 def magic_p(self, parameter_s=''):
589 def magic_p(self, parameter_s=''):
590 """Just a short alias for Python's 'print'."""
590 """Just a short alias for Python's 'print'."""
591 exec 'print ' + parameter_s in self.shell.user_ns
591 exec 'print ' + parameter_s in self.shell.user_ns
592
592
593 def magic_r(self, parameter_s=''):
593 def magic_r(self, parameter_s=''):
594 """Repeat previous input.
594 """Repeat previous input.
595
595
596 If given an argument, repeats the previous command which starts with
596 If given an argument, repeats the previous command which starts with
597 the same string, otherwise it just repeats the previous input.
597 the same string, otherwise it just repeats the previous input.
598
598
599 Shell escaped commands (with ! as first character) are not recognized
599 Shell escaped commands (with ! as first character) are not recognized
600 by this system, only pure python code and magic commands.
600 by this system, only pure python code and magic commands.
601 """
601 """
602
602
603 start = parameter_s.strip()
603 start = parameter_s.strip()
604 esc_magic = self.shell.ESC_MAGIC
604 esc_magic = self.shell.ESC_MAGIC
605 # Identify magic commands even if automagic is on (which means
605 # Identify magic commands even if automagic is on (which means
606 # the in-memory version is different from that typed by the user).
606 # the in-memory version is different from that typed by the user).
607 if self.shell.rc.automagic:
607 if self.shell.rc.automagic:
608 start_magic = esc_magic+start
608 start_magic = esc_magic+start
609 else:
609 else:
610 start_magic = start
610 start_magic = start
611 # Look through the input history in reverse
611 # Look through the input history in reverse
612 for n in range(len(self.shell.input_hist)-2,0,-1):
612 for n in range(len(self.shell.input_hist)-2,0,-1):
613 input = self.shell.input_hist[n]
613 input = self.shell.input_hist[n]
614 # skip plain 'r' lines so we don't recurse to infinity
614 # skip plain 'r' lines so we don't recurse to infinity
615 if input != '_ip.magic("r")\n' and \
615 if input != '_ip.magic("r")\n' and \
616 (input.startswith(start) or input.startswith(start_magic)):
616 (input.startswith(start) or input.startswith(start_magic)):
617 #print 'match',`input` # dbg
617 #print 'match',`input` # dbg
618 print 'Executing:',input,
618 print 'Executing:',input,
619 self.shell.runlines(input)
619 self.shell.runlines(input)
620 return
620 return
621 print 'No previous input matching `%s` found.' % start
621 print 'No previous input matching `%s` found.' % start
622
622
623 def magic_page(self, parameter_s=''):
623 def magic_page(self, parameter_s=''):
624 """Pretty print the object and display it through a pager.
624 """Pretty print the object and display it through a pager.
625
625
626 %page [options] OBJECT
626 %page [options] OBJECT
627
627
628 If no object is given, use _ (last output).
628 If no object is given, use _ (last output).
629
629
630 Options:
630 Options:
631
631
632 -r: page str(object), don't pretty-print it."""
632 -r: page str(object), don't pretty-print it."""
633
633
634 # After a function contributed by Olivier Aubert, slightly modified.
634 # After a function contributed by Olivier Aubert, slightly modified.
635
635
636 # Process options/args
636 # Process options/args
637 opts,args = self.parse_options(parameter_s,'r')
637 opts,args = self.parse_options(parameter_s,'r')
638 raw = 'r' in opts
638 raw = 'r' in opts
639
639
640 oname = args and args or '_'
640 oname = args and args or '_'
641 info = self._ofind(oname)
641 info = self._ofind(oname)
642 if info['found']:
642 if info['found']:
643 txt = (raw and str or pformat)( info['obj'] )
643 txt = (raw and str or pformat)( info['obj'] )
644 page(txt)
644 page(txt)
645 else:
645 else:
646 print 'Object `%s` not found' % oname
646 print 'Object `%s` not found' % oname
647
647
648 def magic_profile(self, parameter_s=''):
648 def magic_profile(self, parameter_s=''):
649 """Print your currently active IPyhton profile."""
649 """Print your currently active IPyhton profile."""
650 if self.shell.rc.profile:
650 if self.shell.rc.profile:
651 printpl('Current IPython profile: $self.shell.rc.profile.')
651 printpl('Current IPython profile: $self.shell.rc.profile.')
652 else:
652 else:
653 print 'No profile active.'
653 print 'No profile active.'
654
654
655 def _inspect(self,meth,oname,namespaces=None,**kw):
655 def _inspect(self,meth,oname,namespaces=None,**kw):
656 """Generic interface to the inspector system.
656 """Generic interface to the inspector system.
657
657
658 This function is meant to be called by pdef, pdoc & friends."""
658 This function is meant to be called by pdef, pdoc & friends."""
659
659
660 oname = oname.strip()
660 oname = oname.strip()
661 info = Struct(self._ofind(oname, namespaces))
661 info = Struct(self._ofind(oname, namespaces))
662
662
663 if info.found:
663 if info.found:
664 # Get the docstring of the class property if it exists.
664 # Get the docstring of the class property if it exists.
665 path = oname.split('.')
665 path = oname.split('.')
666 root = '.'.join(path[:-1])
666 root = '.'.join(path[:-1])
667 if info.parent is not None:
667 if info.parent is not None:
668 try:
668 try:
669 target = getattr(info.parent, '__class__')
669 target = getattr(info.parent, '__class__')
670 # The object belongs to a class instance.
670 # The object belongs to a class instance.
671 try:
671 try:
672 target = getattr(target, path[-1])
672 target = getattr(target, path[-1])
673 # The class defines the object.
673 # The class defines the object.
674 if isinstance(target, property):
674 if isinstance(target, property):
675 oname = root + '.__class__.' + path[-1]
675 oname = root + '.__class__.' + path[-1]
676 info = Struct(self._ofind(oname))
676 info = Struct(self._ofind(oname))
677 except AttributeError: pass
677 except AttributeError: pass
678 except AttributeError: pass
678 except AttributeError: pass
679
679
680 pmethod = getattr(self.shell.inspector,meth)
680 pmethod = getattr(self.shell.inspector,meth)
681 formatter = info.ismagic and self.format_screen or None
681 formatter = info.ismagic and self.format_screen or None
682 if meth == 'pdoc':
682 if meth == 'pdoc':
683 pmethod(info.obj,oname,formatter)
683 pmethod(info.obj,oname,formatter)
684 elif meth == 'pinfo':
684 elif meth == 'pinfo':
685 pmethod(info.obj,oname,formatter,info,**kw)
685 pmethod(info.obj,oname,formatter,info,**kw)
686 else:
686 else:
687 pmethod(info.obj,oname)
687 pmethod(info.obj,oname)
688 else:
688 else:
689 print 'Object `%s` not found.' % oname
689 print 'Object `%s` not found.' % oname
690 return 'not found' # so callers can take other action
690 return 'not found' # so callers can take other action
691
691
692 def magic_pdef(self, parameter_s='', namespaces=None):
692 def magic_pdef(self, parameter_s='', namespaces=None):
693 """Print the definition header for any callable object.
693 """Print the definition header for any callable object.
694
694
695 If the object is a class, print the constructor information."""
695 If the object is a class, print the constructor information."""
696 self._inspect('pdef',parameter_s, namespaces)
696 self._inspect('pdef',parameter_s, namespaces)
697
697
698 def magic_pdoc(self, parameter_s='', namespaces=None):
698 def magic_pdoc(self, parameter_s='', namespaces=None):
699 """Print the docstring for an object.
699 """Print the docstring for an object.
700
700
701 If the given object is a class, it will print both the class and the
701 If the given object is a class, it will print both the class and the
702 constructor docstrings."""
702 constructor docstrings."""
703 self._inspect('pdoc',parameter_s, namespaces)
703 self._inspect('pdoc',parameter_s, namespaces)
704
704
705 def magic_psource(self, parameter_s='', namespaces=None):
705 def magic_psource(self, parameter_s='', namespaces=None):
706 """Print (or run through pager) the source code for an object."""
706 """Print (or run through pager) the source code for an object."""
707 self._inspect('psource',parameter_s, namespaces)
707 self._inspect('psource',parameter_s, namespaces)
708
708
709 def magic_pfile(self, parameter_s=''):
709 def magic_pfile(self, parameter_s=''):
710 """Print (or run through pager) the file where an object is defined.
710 """Print (or run through pager) the file where an object is defined.
711
711
712 The file opens at the line where the object definition begins. IPython
712 The file opens at the line where the object definition begins. IPython
713 will honor the environment variable PAGER if set, and otherwise will
713 will honor the environment variable PAGER if set, and otherwise will
714 do its best to print the file in a convenient form.
714 do its best to print the file in a convenient form.
715
715
716 If the given argument is not an object currently defined, IPython will
716 If the given argument is not an object currently defined, IPython will
717 try to interpret it as a filename (automatically adding a .py extension
717 try to interpret it as a filename (automatically adding a .py extension
718 if needed). You can thus use %pfile as a syntax highlighting code
718 if needed). You can thus use %pfile as a syntax highlighting code
719 viewer."""
719 viewer."""
720
720
721 # first interpret argument as an object name
721 # first interpret argument as an object name
722 out = self._inspect('pfile',parameter_s)
722 out = self._inspect('pfile',parameter_s)
723 # if not, try the input as a filename
723 # if not, try the input as a filename
724 if out == 'not found':
724 if out == 'not found':
725 try:
725 try:
726 filename = get_py_filename(parameter_s)
726 filename = get_py_filename(parameter_s)
727 except IOError,msg:
727 except IOError,msg:
728 print msg
728 print msg
729 return
729 return
730 page(self.shell.inspector.format(file(filename).read()))
730 page(self.shell.inspector.format(file(filename).read()))
731
731
732 def magic_pinfo(self, parameter_s='', namespaces=None):
732 def magic_pinfo(self, parameter_s='', namespaces=None):
733 """Provide detailed information about an object.
733 """Provide detailed information about an object.
734
734
735 '%pinfo object' is just a synonym for object? or ?object."""
735 '%pinfo object' is just a synonym for object? or ?object."""
736
736
737 #print 'pinfo par: <%s>' % parameter_s # dbg
737 #print 'pinfo par: <%s>' % parameter_s # dbg
738
738
739 # detail_level: 0 -> obj? , 1 -> obj??
739 # detail_level: 0 -> obj? , 1 -> obj??
740 detail_level = 0
740 detail_level = 0
741 # We need to detect if we got called as 'pinfo pinfo foo', which can
741 # We need to detect if we got called as 'pinfo pinfo foo', which can
742 # happen if the user types 'pinfo foo?' at the cmd line.
742 # happen if the user types 'pinfo foo?' at the cmd line.
743 pinfo,qmark1,oname,qmark2 = \
743 pinfo,qmark1,oname,qmark2 = \
744 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
744 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
745 if pinfo or qmark1 or qmark2:
745 if pinfo or qmark1 or qmark2:
746 detail_level = 1
746 detail_level = 1
747 if "*" in oname:
747 if "*" in oname:
748 self.magic_psearch(oname)
748 self.magic_psearch(oname)
749 else:
749 else:
750 self._inspect('pinfo', oname, detail_level=detail_level,
750 self._inspect('pinfo', oname, detail_level=detail_level,
751 namespaces=namespaces)
751 namespaces=namespaces)
752
752
753 def magic_psearch(self, parameter_s=''):
753 def magic_psearch(self, parameter_s=''):
754 """Search for object in namespaces by wildcard.
754 """Search for object in namespaces by wildcard.
755
755
756 %psearch [options] PATTERN [OBJECT TYPE]
756 %psearch [options] PATTERN [OBJECT TYPE]
757
757
758 Note: ? can be used as a synonym for %psearch, at the beginning or at
758 Note: ? can be used as a synonym for %psearch, at the beginning or at
759 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
759 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
760 rest of the command line must be unchanged (options come first), so
760 rest of the command line must be unchanged (options come first), so
761 for example the following forms are equivalent
761 for example the following forms are equivalent
762
762
763 %psearch -i a* function
763 %psearch -i a* function
764 -i a* function?
764 -i a* function?
765 ?-i a* function
765 ?-i a* function
766
766
767 Arguments:
767 Arguments:
768
768
769 PATTERN
769 PATTERN
770
770
771 where PATTERN is a string containing * as a wildcard similar to its
771 where PATTERN is a string containing * as a wildcard similar to its
772 use in a shell. The pattern is matched in all namespaces on the
772 use in a shell. The pattern is matched in all namespaces on the
773 search path. By default objects starting with a single _ are not
773 search path. By default objects starting with a single _ are not
774 matched, many IPython generated objects have a single
774 matched, many IPython generated objects have a single
775 underscore. The default is case insensitive matching. Matching is
775 underscore. The default is case insensitive matching. Matching is
776 also done on the attributes of objects and not only on the objects
776 also done on the attributes of objects and not only on the objects
777 in a module.
777 in a module.
778
778
779 [OBJECT TYPE]
779 [OBJECT TYPE]
780
780
781 Is the name of a python type from the types module. The name is
781 Is the name of a python type from the types module. The name is
782 given in lowercase without the ending type, ex. StringType is
782 given in lowercase without the ending type, ex. StringType is
783 written string. By adding a type here only objects matching the
783 written string. By adding a type here only objects matching the
784 given type are matched. Using all here makes the pattern match all
784 given type are matched. Using all here makes the pattern match all
785 types (this is the default).
785 types (this is the default).
786
786
787 Options:
787 Options:
788
788
789 -a: makes the pattern match even objects whose names start with a
789 -a: makes the pattern match even objects whose names start with a
790 single underscore. These names are normally ommitted from the
790 single underscore. These names are normally ommitted from the
791 search.
791 search.
792
792
793 -i/-c: make the pattern case insensitive/sensitive. If neither of
793 -i/-c: make the pattern case insensitive/sensitive. If neither of
794 these options is given, the default is read from your ipythonrc
794 these options is given, the default is read from your ipythonrc
795 file. The option name which sets this value is
795 file. The option name which sets this value is
796 'wildcards_case_sensitive'. If this option is not specified in your
796 'wildcards_case_sensitive'. If this option is not specified in your
797 ipythonrc file, IPython's internal default is to do a case sensitive
797 ipythonrc file, IPython's internal default is to do a case sensitive
798 search.
798 search.
799
799
800 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
800 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
801 specifiy can be searched in any of the following namespaces:
801 specifiy can be searched in any of the following namespaces:
802 'builtin', 'user', 'user_global','internal', 'alias', where
802 'builtin', 'user', 'user_global','internal', 'alias', where
803 'builtin' and 'user' are the search defaults. Note that you should
803 'builtin' and 'user' are the search defaults. Note that you should
804 not use quotes when specifying namespaces.
804 not use quotes when specifying namespaces.
805
805
806 'Builtin' contains the python module builtin, 'user' contains all
806 'Builtin' contains the python module builtin, 'user' contains all
807 user data, 'alias' only contain the shell aliases and no python
807 user data, 'alias' only contain the shell aliases and no python
808 objects, 'internal' contains objects used by IPython. The
808 objects, 'internal' contains objects used by IPython. The
809 'user_global' namespace is only used by embedded IPython instances,
809 'user_global' namespace is only used by embedded IPython instances,
810 and it contains module-level globals. You can add namespaces to the
810 and it contains module-level globals. You can add namespaces to the
811 search with -s or exclude them with -e (these options can be given
811 search with -s or exclude them with -e (these options can be given
812 more than once).
812 more than once).
813
813
814 Examples:
814 Examples:
815
815
816 %psearch a* -> objects beginning with an a
816 %psearch a* -> objects beginning with an a
817 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
817 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
818 %psearch a* function -> all functions beginning with an a
818 %psearch a* function -> all functions beginning with an a
819 %psearch re.e* -> objects beginning with an e in module re
819 %psearch re.e* -> objects beginning with an e in module re
820 %psearch r*.e* -> objects that start with e in modules starting in r
820 %psearch r*.e* -> objects that start with e in modules starting in r
821 %psearch r*.* string -> all strings in modules beginning with r
821 %psearch r*.* string -> all strings in modules beginning with r
822
822
823 Case sensitve search:
823 Case sensitve search:
824
824
825 %psearch -c a* list all object beginning with lower case a
825 %psearch -c a* list all object beginning with lower case a
826
826
827 Show objects beginning with a single _:
827 Show objects beginning with a single _:
828
828
829 %psearch -a _* list objects beginning with a single underscore"""
829 %psearch -a _* list objects beginning with a single underscore"""
830
830
831 # default namespaces to be searched
831 # default namespaces to be searched
832 def_search = ['user','builtin']
832 def_search = ['user','builtin']
833
833
834 # Process options/args
834 # Process options/args
835 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
835 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
836 opt = opts.get
836 opt = opts.get
837 shell = self.shell
837 shell = self.shell
838 psearch = shell.inspector.psearch
838 psearch = shell.inspector.psearch
839
839
840 # select case options
840 # select case options
841 if opts.has_key('i'):
841 if opts.has_key('i'):
842 ignore_case = True
842 ignore_case = True
843 elif opts.has_key('c'):
843 elif opts.has_key('c'):
844 ignore_case = False
844 ignore_case = False
845 else:
845 else:
846 ignore_case = not shell.rc.wildcards_case_sensitive
846 ignore_case = not shell.rc.wildcards_case_sensitive
847
847
848 # Build list of namespaces to search from user options
848 # Build list of namespaces to search from user options
849 def_search.extend(opt('s',[]))
849 def_search.extend(opt('s',[]))
850 ns_exclude = ns_exclude=opt('e',[])
850 ns_exclude = ns_exclude=opt('e',[])
851 ns_search = [nm for nm in def_search if nm not in ns_exclude]
851 ns_search = [nm for nm in def_search if nm not in ns_exclude]
852
852
853 # Call the actual search
853 # Call the actual search
854 try:
854 try:
855 psearch(args,shell.ns_table,ns_search,
855 psearch(args,shell.ns_table,ns_search,
856 show_all=opt('a'),ignore_case=ignore_case)
856 show_all=opt('a'),ignore_case=ignore_case)
857 except:
857 except:
858 shell.showtraceback()
858 shell.showtraceback()
859
859
860 def magic_who_ls(self, parameter_s=''):
860 def magic_who_ls(self, parameter_s=''):
861 """Return a sorted list of all interactive variables.
861 """Return a sorted list of all interactive variables.
862
862
863 If arguments are given, only variables of types matching these
863 If arguments are given, only variables of types matching these
864 arguments are returned."""
864 arguments are returned."""
865
865
866 user_ns = self.shell.user_ns
866 user_ns = self.shell.user_ns
867 internal_ns = self.shell.internal_ns
867 internal_ns = self.shell.internal_ns
868 user_config_ns = self.shell.user_config_ns
868 user_config_ns = self.shell.user_config_ns
869 out = []
869 out = []
870 typelist = parameter_s.split()
870 typelist = parameter_s.split()
871
871
872 for i in user_ns:
872 for i in user_ns:
873 if not (i.startswith('_') or i.startswith('_i')) \
873 if not (i.startswith('_') or i.startswith('_i')) \
874 and not (i in internal_ns or i in user_config_ns):
874 and not (i in internal_ns or i in user_config_ns):
875 if typelist:
875 if typelist:
876 if type(user_ns[i]).__name__ in typelist:
876 if type(user_ns[i]).__name__ in typelist:
877 out.append(i)
877 out.append(i)
878 else:
878 else:
879 out.append(i)
879 out.append(i)
880 out.sort()
880 out.sort()
881 return out
881 return out
882
882
883 def magic_who(self, parameter_s=''):
883 def magic_who(self, parameter_s=''):
884 """Print all interactive variables, with some minimal formatting.
884 """Print all interactive variables, with some minimal formatting.
885
885
886 If any arguments are given, only variables whose type matches one of
886 If any arguments are given, only variables whose type matches one of
887 these are printed. For example:
887 these are printed. For example:
888
888
889 %who function str
889 %who function str
890
890
891 will only list functions and strings, excluding all other types of
891 will only list functions and strings, excluding all other types of
892 variables. To find the proper type names, simply use type(var) at a
892 variables. To find the proper type names, simply use type(var) at a
893 command line to see how python prints type names. For example:
893 command line to see how python prints type names. For example:
894
894
895 In [1]: type('hello')\\
895 In [1]: type('hello')\\
896 Out[1]: <type 'str'>
896 Out[1]: <type 'str'>
897
897
898 indicates that the type name for strings is 'str'.
898 indicates that the type name for strings is 'str'.
899
899
900 %who always excludes executed names loaded through your configuration
900 %who always excludes executed names loaded through your configuration
901 file and things which are internal to IPython.
901 file and things which are internal to IPython.
902
902
903 This is deliberate, as typically you may load many modules and the
903 This is deliberate, as typically you may load many modules and the
904 purpose of %who is to show you only what you've manually defined."""
904 purpose of %who is to show you only what you've manually defined."""
905
905
906 varlist = self.magic_who_ls(parameter_s)
906 varlist = self.magic_who_ls(parameter_s)
907 if not varlist:
907 if not varlist:
908 print 'Interactive namespace is empty.'
908 print 'Interactive namespace is empty.'
909 return
909 return
910
910
911 # if we have variables, move on...
911 # if we have variables, move on...
912
912
913 # stupid flushing problem: when prompts have no separators, stdout is
913 # stupid flushing problem: when prompts have no separators, stdout is
914 # getting lost. I'm starting to think this is a python bug. I'm having
914 # getting lost. I'm starting to think this is a python bug. I'm having
915 # to force a flush with a print because even a sys.stdout.flush
915 # to force a flush with a print because even a sys.stdout.flush
916 # doesn't seem to do anything!
916 # doesn't seem to do anything!
917
917
918 count = 0
918 count = 0
919 for i in varlist:
919 for i in varlist:
920 print i+'\t',
920 print i+'\t',
921 count += 1
921 count += 1
922 if count > 8:
922 if count > 8:
923 count = 0
923 count = 0
924 print
924 print
925 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
925 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
926
926
927 print # well, this does force a flush at the expense of an extra \n
927 print # well, this does force a flush at the expense of an extra \n
928
928
929 def magic_whos(self, parameter_s=''):
929 def magic_whos(self, parameter_s=''):
930 """Like %who, but gives some extra information about each variable.
930 """Like %who, but gives some extra information about each variable.
931
931
932 The same type filtering of %who can be applied here.
932 The same type filtering of %who can be applied here.
933
933
934 For all variables, the type is printed. Additionally it prints:
934 For all variables, the type is printed. Additionally it prints:
935
935
936 - For {},[],(): their length.
936 - For {},[],(): their length.
937
937
938 - For Numeric arrays, a summary with shape, number of elements,
938 - For Numeric arrays, a summary with shape, number of elements,
939 typecode and size in memory.
939 typecode and size in memory.
940
940
941 - Everything else: a string representation, snipping their middle if
941 - Everything else: a string representation, snipping their middle if
942 too long."""
942 too long."""
943
943
944 varnames = self.magic_who_ls(parameter_s)
944 varnames = self.magic_who_ls(parameter_s)
945 if not varnames:
945 if not varnames:
946 print 'Interactive namespace is empty.'
946 print 'Interactive namespace is empty.'
947 return
947 return
948
948
949 # if we have variables, move on...
949 # if we have variables, move on...
950
950
951 # for these types, show len() instead of data:
951 # for these types, show len() instead of data:
952 seq_types = [types.DictType,types.ListType,types.TupleType]
952 seq_types = [types.DictType,types.ListType,types.TupleType]
953
953
954 # for Numeric arrays, display summary info
954 # for Numeric arrays, display summary info
955 try:
955 try:
956 import Numeric
956 import Numeric
957 except ImportError:
957 except ImportError:
958 array_type = None
958 array_type = None
959 else:
959 else:
960 array_type = Numeric.ArrayType.__name__
960 array_type = Numeric.ArrayType.__name__
961
961
962 # Find all variable names and types so we can figure out column sizes
962 # Find all variable names and types so we can figure out column sizes
963
963
964 def get_vars(i):
964 def get_vars(i):
965 return self.shell.user_ns[i]
965 return self.shell.user_ns[i]
966
966
967 # some types are well known and can be shorter
967 # some types are well known and can be shorter
968 abbrevs = {'IPython.macro.Macro' : 'Macro'}
968 abbrevs = {'IPython.macro.Macro' : 'Macro'}
969 def type_name(v):
969 def type_name(v):
970 tn = type(v).__name__
970 tn = type(v).__name__
971 return abbrevs.get(tn,tn)
971 return abbrevs.get(tn,tn)
972
972
973 varlist = map(get_vars,varnames)
973 varlist = map(get_vars,varnames)
974
974
975 typelist = []
975 typelist = []
976 for vv in varlist:
976 for vv in varlist:
977 tt = type_name(vv)
977 tt = type_name(vv)
978
978
979 if tt=='instance':
979 if tt=='instance':
980 typelist.append( abbrevs.get(str(vv.__class__),str(vv.__class__)))
980 typelist.append( abbrevs.get(str(vv.__class__),str(vv.__class__)))
981 else:
981 else:
982 typelist.append(tt)
982 typelist.append(tt)
983
983
984 # column labels and # of spaces as separator
984 # column labels and # of spaces as separator
985 varlabel = 'Variable'
985 varlabel = 'Variable'
986 typelabel = 'Type'
986 typelabel = 'Type'
987 datalabel = 'Data/Info'
987 datalabel = 'Data/Info'
988 colsep = 3
988 colsep = 3
989 # variable format strings
989 # variable format strings
990 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
990 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
991 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
991 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
992 aformat = "%s: %s elems, type `%s`, %s bytes"
992 aformat = "%s: %s elems, type `%s`, %s bytes"
993 # find the size of the columns to format the output nicely
993 # find the size of the columns to format the output nicely
994 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
994 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
995 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
995 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
996 # table header
996 # table header
997 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
997 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
998 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
998 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
999 # and the table itself
999 # and the table itself
1000 kb = 1024
1000 kb = 1024
1001 Mb = 1048576 # kb**2
1001 Mb = 1048576 # kb**2
1002 for vname,var,vtype in zip(varnames,varlist,typelist):
1002 for vname,var,vtype in zip(varnames,varlist,typelist):
1003 print itpl(vformat),
1003 print itpl(vformat),
1004 if vtype in seq_types:
1004 if vtype in seq_types:
1005 print len(var)
1005 print len(var)
1006 elif vtype==array_type:
1006 elif vtype==array_type:
1007 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1007 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1008 vsize = Numeric.size(var)
1008 vsize = Numeric.size(var)
1009 vbytes = vsize*var.itemsize()
1009 vbytes = vsize*var.itemsize()
1010 if vbytes < 100000:
1010 if vbytes < 100000:
1011 print aformat % (vshape,vsize,var.typecode(),vbytes)
1011 print aformat % (vshape,vsize,var.typecode(),vbytes)
1012 else:
1012 else:
1013 print aformat % (vshape,vsize,var.typecode(),vbytes),
1013 print aformat % (vshape,vsize,var.typecode(),vbytes),
1014 if vbytes < Mb:
1014 if vbytes < Mb:
1015 print '(%s kb)' % (vbytes/kb,)
1015 print '(%s kb)' % (vbytes/kb,)
1016 else:
1016 else:
1017 print '(%s Mb)' % (vbytes/Mb,)
1017 print '(%s Mb)' % (vbytes/Mb,)
1018 else:
1018 else:
1019 vstr = str(var).replace('\n','\\n')
1019 vstr = str(var).replace('\n','\\n')
1020 if len(vstr) < 50:
1020 if len(vstr) < 50:
1021 print vstr
1021 print vstr
1022 else:
1022 else:
1023 printpl(vfmt_short)
1023 printpl(vfmt_short)
1024
1024
1025 def magic_reset(self, parameter_s=''):
1025 def magic_reset(self, parameter_s=''):
1026 """Resets the namespace by removing all names defined by the user.
1026 """Resets the namespace by removing all names defined by the user.
1027
1027
1028 Input/Output history are left around in case you need them."""
1028 Input/Output history are left around in case you need them."""
1029
1029
1030 ans = self.shell.ask_yes_no(
1030 ans = self.shell.ask_yes_no(
1031 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1031 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1032 if not ans:
1032 if not ans:
1033 print 'Nothing done.'
1033 print 'Nothing done.'
1034 return
1034 return
1035 user_ns = self.shell.user_ns
1035 user_ns = self.shell.user_ns
1036 for i in self.magic_who_ls():
1036 for i in self.magic_who_ls():
1037 del(user_ns[i])
1037 del(user_ns[i])
1038
1038
1039 def magic_logstart(self,parameter_s=''):
1039 def magic_logstart(self,parameter_s=''):
1040 """Start logging anywhere in a session.
1040 """Start logging anywhere in a session.
1041
1041
1042 %logstart [-o|-r|-t] [log_name [log_mode]]
1042 %logstart [-o|-r|-t] [log_name [log_mode]]
1043
1043
1044 If no name is given, it defaults to a file named 'ipython_log.py' in your
1044 If no name is given, it defaults to a file named 'ipython_log.py' in your
1045 current directory, in 'rotate' mode (see below).
1045 current directory, in 'rotate' mode (see below).
1046
1046
1047 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1047 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1048 history up to that point and then continues logging.
1048 history up to that point and then continues logging.
1049
1049
1050 %logstart takes a second optional parameter: logging mode. This can be one
1050 %logstart takes a second optional parameter: logging mode. This can be one
1051 of (note that the modes are given unquoted):\\
1051 of (note that the modes are given unquoted):\\
1052 append: well, that says it.\\
1052 append: well, that says it.\\
1053 backup: rename (if exists) to name~ and start name.\\
1053 backup: rename (if exists) to name~ and start name.\\
1054 global: single logfile in your home dir, appended to.\\
1054 global: single logfile in your home dir, appended to.\\
1055 over : overwrite existing log.\\
1055 over : overwrite existing log.\\
1056 rotate: create rotating logs name.1~, name.2~, etc.
1056 rotate: create rotating logs name.1~, name.2~, etc.
1057
1057
1058 Options:
1058 Options:
1059
1059
1060 -o: log also IPython's output. In this mode, all commands which
1060 -o: log also IPython's output. In this mode, all commands which
1061 generate an Out[NN] prompt are recorded to the logfile, right after
1061 generate an Out[NN] prompt are recorded to the logfile, right after
1062 their corresponding input line. The output lines are always
1062 their corresponding input line. The output lines are always
1063 prepended with a '#[Out]# ' marker, so that the log remains valid
1063 prepended with a '#[Out]# ' marker, so that the log remains valid
1064 Python code.
1064 Python code.
1065
1065
1066 Since this marker is always the same, filtering only the output from
1066 Since this marker is always the same, filtering only the output from
1067 a log is very easy, using for example a simple awk call:
1067 a log is very easy, using for example a simple awk call:
1068
1068
1069 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1069 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1070
1070
1071 -r: log 'raw' input. Normally, IPython's logs contain the processed
1071 -r: log 'raw' input. Normally, IPython's logs contain the processed
1072 input, so that user lines are logged in their final form, converted
1072 input, so that user lines are logged in their final form, converted
1073 into valid Python. For example, %Exit is logged as
1073 into valid Python. For example, %Exit is logged as
1074 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1074 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1075 exactly as typed, with no transformations applied.
1075 exactly as typed, with no transformations applied.
1076
1076
1077 -t: put timestamps before each input line logged (these are put in
1077 -t: put timestamps before each input line logged (these are put in
1078 comments)."""
1078 comments)."""
1079
1079
1080 opts,par = self.parse_options(parameter_s,'ort')
1080 opts,par = self.parse_options(parameter_s,'ort')
1081 log_output = 'o' in opts
1081 log_output = 'o' in opts
1082 log_raw_input = 'r' in opts
1082 log_raw_input = 'r' in opts
1083 timestamp = 't' in opts
1083 timestamp = 't' in opts
1084
1084
1085 rc = self.shell.rc
1085 rc = self.shell.rc
1086 logger = self.shell.logger
1086 logger = self.shell.logger
1087
1087
1088 # if no args are given, the defaults set in the logger constructor by
1088 # if no args are given, the defaults set in the logger constructor by
1089 # ipytohn remain valid
1089 # ipytohn remain valid
1090 if par:
1090 if par:
1091 try:
1091 try:
1092 logfname,logmode = par.split()
1092 logfname,logmode = par.split()
1093 except:
1093 except:
1094 logfname = par
1094 logfname = par
1095 logmode = 'backup'
1095 logmode = 'backup'
1096 else:
1096 else:
1097 logfname = logger.logfname
1097 logfname = logger.logfname
1098 logmode = logger.logmode
1098 logmode = logger.logmode
1099 # put logfname into rc struct as if it had been called on the command
1099 # put logfname into rc struct as if it had been called on the command
1100 # line, so it ends up saved in the log header Save it in case we need
1100 # line, so it ends up saved in the log header Save it in case we need
1101 # to restore it...
1101 # to restore it...
1102 old_logfile = rc.opts.get('logfile','')
1102 old_logfile = rc.opts.get('logfile','')
1103 if logfname:
1103 if logfname:
1104 logfname = os.path.expanduser(logfname)
1104 logfname = os.path.expanduser(logfname)
1105 rc.opts.logfile = logfname
1105 rc.opts.logfile = logfname
1106 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1106 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1107 try:
1107 try:
1108 started = logger.logstart(logfname,loghead,logmode,
1108 started = logger.logstart(logfname,loghead,logmode,
1109 log_output,timestamp,log_raw_input)
1109 log_output,timestamp,log_raw_input)
1110 except:
1110 except:
1111 rc.opts.logfile = old_logfile
1111 rc.opts.logfile = old_logfile
1112 warn("Couldn't start log: %s" % sys.exc_info()[1])
1112 warn("Couldn't start log: %s" % sys.exc_info()[1])
1113 else:
1113 else:
1114 # log input history up to this point, optionally interleaving
1114 # log input history up to this point, optionally interleaving
1115 # output if requested
1115 # output if requested
1116
1116
1117 if timestamp:
1117 if timestamp:
1118 # disable timestamping for the previous history, since we've
1118 # disable timestamping for the previous history, since we've
1119 # lost those already (no time machine here).
1119 # lost those already (no time machine here).
1120 logger.timestamp = False
1120 logger.timestamp = False
1121
1121
1122 if log_raw_input:
1122 if log_raw_input:
1123 input_hist = self.shell.input_hist_raw
1123 input_hist = self.shell.input_hist_raw
1124 else:
1124 else:
1125 input_hist = self.shell.input_hist
1125 input_hist = self.shell.input_hist
1126
1126
1127 if log_output:
1127 if log_output:
1128 log_write = logger.log_write
1128 log_write = logger.log_write
1129 output_hist = self.shell.output_hist
1129 output_hist = self.shell.output_hist
1130 for n in range(1,len(input_hist)-1):
1130 for n in range(1,len(input_hist)-1):
1131 log_write(input_hist[n].rstrip())
1131 log_write(input_hist[n].rstrip())
1132 if n in output_hist:
1132 if n in output_hist:
1133 log_write(repr(output_hist[n]),'output')
1133 log_write(repr(output_hist[n]),'output')
1134 else:
1134 else:
1135 logger.log_write(input_hist[1:])
1135 logger.log_write(input_hist[1:])
1136 if timestamp:
1136 if timestamp:
1137 # re-enable timestamping
1137 # re-enable timestamping
1138 logger.timestamp = True
1138 logger.timestamp = True
1139
1139
1140 print ('Activating auto-logging. '
1140 print ('Activating auto-logging. '
1141 'Current session state plus future input saved.')
1141 'Current session state plus future input saved.')
1142 logger.logstate()
1142 logger.logstate()
1143
1143
1144 def magic_logoff(self,parameter_s=''):
1144 def magic_logoff(self,parameter_s=''):
1145 """Temporarily stop logging.
1145 """Temporarily stop logging.
1146
1146
1147 You must have previously started logging."""
1147 You must have previously started logging."""
1148 self.shell.logger.switch_log(0)
1148 self.shell.logger.switch_log(0)
1149
1149
1150 def magic_logon(self,parameter_s=''):
1150 def magic_logon(self,parameter_s=''):
1151 """Restart logging.
1151 """Restart logging.
1152
1152
1153 This function is for restarting logging which you've temporarily
1153 This function is for restarting logging which you've temporarily
1154 stopped with %logoff. For starting logging for the first time, you
1154 stopped with %logoff. For starting logging for the first time, you
1155 must use the %logstart function, which allows you to specify an
1155 must use the %logstart function, which allows you to specify an
1156 optional log filename."""
1156 optional log filename."""
1157
1157
1158 self.shell.logger.switch_log(1)
1158 self.shell.logger.switch_log(1)
1159
1159
1160 def magic_logstate(self,parameter_s=''):
1160 def magic_logstate(self,parameter_s=''):
1161 """Print the status of the logging system."""
1161 """Print the status of the logging system."""
1162
1162
1163 self.shell.logger.logstate()
1163 self.shell.logger.logstate()
1164
1164
1165 def magic_pdb(self, parameter_s=''):
1165 def magic_pdb(self, parameter_s=''):
1166 """Control the automatic calling of the pdb interactive debugger.
1166 """Control the automatic calling of the pdb interactive debugger.
1167
1167
1168 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1168 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1169 argument it works as a toggle.
1169 argument it works as a toggle.
1170
1170
1171 When an exception is triggered, IPython can optionally call the
1171 When an exception is triggered, IPython can optionally call the
1172 interactive pdb debugger after the traceback printout. %pdb toggles
1172 interactive pdb debugger after the traceback printout. %pdb toggles
1173 this feature on and off.
1173 this feature on and off.
1174
1174
1175 The initial state of this feature is set in your ipythonrc
1175 The initial state of this feature is set in your ipythonrc
1176 configuration file (the variable is called 'pdb').
1176 configuration file (the variable is called 'pdb').
1177
1177
1178 If you want to just activate the debugger AFTER an exception has fired,
1178 If you want to just activate the debugger AFTER an exception has fired,
1179 without having to type '%pdb on' and rerunning your code, you can use
1179 without having to type '%pdb on' and rerunning your code, you can use
1180 the %debug magic."""
1180 the %debug magic."""
1181
1181
1182 par = parameter_s.strip().lower()
1182 par = parameter_s.strip().lower()
1183
1183
1184 if par:
1184 if par:
1185 try:
1185 try:
1186 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1186 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1187 except KeyError:
1187 except KeyError:
1188 print ('Incorrect argument. Use on/1, off/0, '
1188 print ('Incorrect argument. Use on/1, off/0, '
1189 'or nothing for a toggle.')
1189 'or nothing for a toggle.')
1190 return
1190 return
1191 else:
1191 else:
1192 # toggle
1192 # toggle
1193 new_pdb = not self.shell.call_pdb
1193 new_pdb = not self.shell.call_pdb
1194
1194
1195 # set on the shell
1195 # set on the shell
1196 self.shell.call_pdb = new_pdb
1196 self.shell.call_pdb = new_pdb
1197 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1197 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1198
1198
1199 def magic_debug(self, parameter_s=''):
1199 def magic_debug(self, parameter_s=''):
1200 """Activate the interactive debugger in post-mortem mode.
1200 """Activate the interactive debugger in post-mortem mode.
1201
1201
1202 If an exception has just occurred, this lets you inspect its stack
1202 If an exception has just occurred, this lets you inspect its stack
1203 frames interactively. Note that this will always work only on the last
1203 frames interactively. Note that this will always work only on the last
1204 traceback that occurred, so you must call this quickly after an
1204 traceback that occurred, so you must call this quickly after an
1205 exception that you wish to inspect has fired, because if another one
1205 exception that you wish to inspect has fired, because if another one
1206 occurs, it clobbers the previous one.
1206 occurs, it clobbers the previous one.
1207
1207
1208 If you want IPython to automatically do this on every exception, see
1208 If you want IPython to automatically do this on every exception, see
1209 the %pdb magic for more details.
1209 the %pdb magic for more details.
1210 """
1210 """
1211
1211
1212 self.shell.debugger(force=True)
1212 self.shell.debugger(force=True)
1213
1213
1214 def magic_prun(self, parameter_s ='',user_mode=1,
1214 def magic_prun(self, parameter_s ='',user_mode=1,
1215 opts=None,arg_lst=None,prog_ns=None):
1215 opts=None,arg_lst=None,prog_ns=None):
1216
1216
1217 """Run a statement through the python code profiler.
1217 """Run a statement through the python code profiler.
1218
1218
1219 Usage:\\
1219 Usage:\\
1220 %prun [options] statement
1220 %prun [options] statement
1221
1221
1222 The given statement (which doesn't require quote marks) is run via the
1222 The given statement (which doesn't require quote marks) is run via the
1223 python profiler in a manner similar to the profile.run() function.
1223 python profiler in a manner similar to the profile.run() function.
1224 Namespaces are internally managed to work correctly; profile.run
1224 Namespaces are internally managed to work correctly; profile.run
1225 cannot be used in IPython because it makes certain assumptions about
1225 cannot be used in IPython because it makes certain assumptions about
1226 namespaces which do not hold under IPython.
1226 namespaces which do not hold under IPython.
1227
1227
1228 Options:
1228 Options:
1229
1229
1230 -l <limit>: you can place restrictions on what or how much of the
1230 -l <limit>: you can place restrictions on what or how much of the
1231 profile gets printed. The limit value can be:
1231 profile gets printed. The limit value can be:
1232
1232
1233 * A string: only information for function names containing this string
1233 * A string: only information for function names containing this string
1234 is printed.
1234 is printed.
1235
1235
1236 * An integer: only these many lines are printed.
1236 * An integer: only these many lines are printed.
1237
1237
1238 * A float (between 0 and 1): this fraction of the report is printed
1238 * A float (between 0 and 1): this fraction of the report is printed
1239 (for example, use a limit of 0.4 to see the topmost 40% only).
1239 (for example, use a limit of 0.4 to see the topmost 40% only).
1240
1240
1241 You can combine several limits with repeated use of the option. For
1241 You can combine several limits with repeated use of the option. For
1242 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1242 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1243 information about class constructors.
1243 information about class constructors.
1244
1244
1245 -r: return the pstats.Stats object generated by the profiling. This
1245 -r: return the pstats.Stats object generated by the profiling. This
1246 object has all the information about the profile in it, and you can
1246 object has all the information about the profile in it, and you can
1247 later use it for further analysis or in other functions.
1247 later use it for further analysis or in other functions.
1248
1248
1249 -s <key>: sort profile by given key. You can provide more than one key
1249 -s <key>: sort profile by given key. You can provide more than one key
1250 by using the option several times: '-s key1 -s key2 -s key3...'. The
1250 by using the option several times: '-s key1 -s key2 -s key3...'. The
1251 default sorting key is 'time'.
1251 default sorting key is 'time'.
1252
1252
1253 The following is copied verbatim from the profile documentation
1253 The following is copied verbatim from the profile documentation
1254 referenced below:
1254 referenced below:
1255
1255
1256 When more than one key is provided, additional keys are used as
1256 When more than one key is provided, additional keys are used as
1257 secondary criteria when the there is equality in all keys selected
1257 secondary criteria when the there is equality in all keys selected
1258 before them.
1258 before them.
1259
1259
1260 Abbreviations can be used for any key names, as long as the
1260 Abbreviations can be used for any key names, as long as the
1261 abbreviation is unambiguous. The following are the keys currently
1261 abbreviation is unambiguous. The following are the keys currently
1262 defined:
1262 defined:
1263
1263
1264 Valid Arg Meaning\\
1264 Valid Arg Meaning\\
1265 "calls" call count\\
1265 "calls" call count\\
1266 "cumulative" cumulative time\\
1266 "cumulative" cumulative time\\
1267 "file" file name\\
1267 "file" file name\\
1268 "module" file name\\
1268 "module" file name\\
1269 "pcalls" primitive call count\\
1269 "pcalls" primitive call count\\
1270 "line" line number\\
1270 "line" line number\\
1271 "name" function name\\
1271 "name" function name\\
1272 "nfl" name/file/line\\
1272 "nfl" name/file/line\\
1273 "stdname" standard name\\
1273 "stdname" standard name\\
1274 "time" internal time
1274 "time" internal time
1275
1275
1276 Note that all sorts on statistics are in descending order (placing
1276 Note that all sorts on statistics are in descending order (placing
1277 most time consuming items first), where as name, file, and line number
1277 most time consuming items first), where as name, file, and line number
1278 searches are in ascending order (i.e., alphabetical). The subtle
1278 searches are in ascending order (i.e., alphabetical). The subtle
1279 distinction between "nfl" and "stdname" is that the standard name is a
1279 distinction between "nfl" and "stdname" is that the standard name is a
1280 sort of the name as printed, which means that the embedded line
1280 sort of the name as printed, which means that the embedded line
1281 numbers get compared in an odd way. For example, lines 3, 20, and 40
1281 numbers get compared in an odd way. For example, lines 3, 20, and 40
1282 would (if the file names were the same) appear in the string order
1282 would (if the file names were the same) appear in the string order
1283 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1283 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1284 line numbers. In fact, sort_stats("nfl") is the same as
1284 line numbers. In fact, sort_stats("nfl") is the same as
1285 sort_stats("name", "file", "line").
1285 sort_stats("name", "file", "line").
1286
1286
1287 -T <filename>: save profile results as shown on screen to a text
1287 -T <filename>: save profile results as shown on screen to a text
1288 file. The profile is still shown on screen.
1288 file. The profile is still shown on screen.
1289
1289
1290 -D <filename>: save (via dump_stats) profile statistics to given
1290 -D <filename>: save (via dump_stats) profile statistics to given
1291 filename. This data is in a format understod by the pstats module, and
1291 filename. This data is in a format understod by the pstats module, and
1292 is generated by a call to the dump_stats() method of profile
1292 is generated by a call to the dump_stats() method of profile
1293 objects. The profile is still shown on screen.
1293 objects. The profile is still shown on screen.
1294
1294
1295 If you want to run complete programs under the profiler's control, use
1295 If you want to run complete programs under the profiler's control, use
1296 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1296 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1297 contains profiler specific options as described here.
1297 contains profiler specific options as described here.
1298
1298
1299 You can read the complete documentation for the profile module with:\\
1299 You can read the complete documentation for the profile module with:\\
1300 In [1]: import profile; profile.help() """
1300 In [1]: import profile; profile.help() """
1301
1301
1302 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1302 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1303 # protect user quote marks
1303 # protect user quote marks
1304 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1304 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1305
1305
1306 if user_mode: # regular user call
1306 if user_mode: # regular user call
1307 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1307 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1308 list_all=1)
1308 list_all=1)
1309 namespace = self.shell.user_ns
1309 namespace = self.shell.user_ns
1310 else: # called to run a program by %run -p
1310 else: # called to run a program by %run -p
1311 try:
1311 try:
1312 filename = get_py_filename(arg_lst[0])
1312 filename = get_py_filename(arg_lst[0])
1313 except IOError,msg:
1313 except IOError,msg:
1314 error(msg)
1314 error(msg)
1315 return
1315 return
1316
1316
1317 arg_str = 'execfile(filename,prog_ns)'
1317 arg_str = 'execfile(filename,prog_ns)'
1318 namespace = locals()
1318 namespace = locals()
1319
1319
1320 opts.merge(opts_def)
1320 opts.merge(opts_def)
1321
1321
1322 prof = profile.Profile()
1322 prof = profile.Profile()
1323 try:
1323 try:
1324 prof = prof.runctx(arg_str,namespace,namespace)
1324 prof = prof.runctx(arg_str,namespace,namespace)
1325 sys_exit = ''
1325 sys_exit = ''
1326 except SystemExit:
1326 except SystemExit:
1327 sys_exit = """*** SystemExit exception caught in code being profiled."""
1327 sys_exit = """*** SystemExit exception caught in code being profiled."""
1328
1328
1329 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1329 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1330
1330
1331 lims = opts.l
1331 lims = opts.l
1332 if lims:
1332 if lims:
1333 lims = [] # rebuild lims with ints/floats/strings
1333 lims = [] # rebuild lims with ints/floats/strings
1334 for lim in opts.l:
1334 for lim in opts.l:
1335 try:
1335 try:
1336 lims.append(int(lim))
1336 lims.append(int(lim))
1337 except ValueError:
1337 except ValueError:
1338 try:
1338 try:
1339 lims.append(float(lim))
1339 lims.append(float(lim))
1340 except ValueError:
1340 except ValueError:
1341 lims.append(lim)
1341 lims.append(lim)
1342
1342
1343 # trap output
1343 # trap output
1344 sys_stdout = sys.stdout
1344 sys_stdout = sys.stdout
1345 stdout_trap = StringIO()
1345 stdout_trap = StringIO()
1346 try:
1346 try:
1347 sys.stdout = stdout_trap
1347 sys.stdout = stdout_trap
1348 stats.print_stats(*lims)
1348 stats.print_stats(*lims)
1349 finally:
1349 finally:
1350 sys.stdout = sys_stdout
1350 sys.stdout = sys_stdout
1351 output = stdout_trap.getvalue()
1351 output = stdout_trap.getvalue()
1352 output = output.rstrip()
1352 output = output.rstrip()
1353
1353
1354 page(output,screen_lines=self.shell.rc.screen_length)
1354 page(output,screen_lines=self.shell.rc.screen_length)
1355 print sys_exit,
1355 print sys_exit,
1356
1356
1357 dump_file = opts.D[0]
1357 dump_file = opts.D[0]
1358 text_file = opts.T[0]
1358 text_file = opts.T[0]
1359 if dump_file:
1359 if dump_file:
1360 prof.dump_stats(dump_file)
1360 prof.dump_stats(dump_file)
1361 print '\n*** Profile stats marshalled to file',\
1361 print '\n*** Profile stats marshalled to file',\
1362 `dump_file`+'.',sys_exit
1362 `dump_file`+'.',sys_exit
1363 if text_file:
1363 if text_file:
1364 file(text_file,'w').write(output)
1364 file(text_file,'w').write(output)
1365 print '\n*** Profile printout saved to text file',\
1365 print '\n*** Profile printout saved to text file',\
1366 `text_file`+'.',sys_exit
1366 `text_file`+'.',sys_exit
1367
1367
1368 if opts.has_key('r'):
1368 if opts.has_key('r'):
1369 return stats
1369 return stats
1370 else:
1370 else:
1371 return None
1371 return None
1372
1372
1373 def magic_run(self, parameter_s ='',runner=None):
1373 def magic_run(self, parameter_s ='',runner=None):
1374 """Run the named file inside IPython as a program.
1374 """Run the named file inside IPython as a program.
1375
1375
1376 Usage:\\
1376 Usage:\\
1377 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1377 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1378
1378
1379 Parameters after the filename are passed as command-line arguments to
1379 Parameters after the filename are passed as command-line arguments to
1380 the program (put in sys.argv). Then, control returns to IPython's
1380 the program (put in sys.argv). Then, control returns to IPython's
1381 prompt.
1381 prompt.
1382
1382
1383 This is similar to running at a system prompt:\\
1383 This is similar to running at a system prompt:\\
1384 $ python file args\\
1384 $ python file args\\
1385 but with the advantage of giving you IPython's tracebacks, and of
1385 but with the advantage of giving you IPython's tracebacks, and of
1386 loading all variables into your interactive namespace for further use
1386 loading all variables into your interactive namespace for further use
1387 (unless -p is used, see below).
1387 (unless -p is used, see below).
1388
1388
1389 The file is executed in a namespace initially consisting only of
1389 The file is executed in a namespace initially consisting only of
1390 __name__=='__main__' and sys.argv constructed as indicated. It thus
1390 __name__=='__main__' and sys.argv constructed as indicated. It thus
1391 sees its environment as if it were being run as a stand-alone
1391 sees its environment as if it were being run as a stand-alone
1392 program. But after execution, the IPython interactive namespace gets
1392 program. But after execution, the IPython interactive namespace gets
1393 updated with all variables defined in the program (except for __name__
1393 updated with all variables defined in the program (except for __name__
1394 and sys.argv). This allows for very convenient loading of code for
1394 and sys.argv). This allows for very convenient loading of code for
1395 interactive work, while giving each program a 'clean sheet' to run in.
1395 interactive work, while giving each program a 'clean sheet' to run in.
1396
1396
1397 Options:
1397 Options:
1398
1398
1399 -n: __name__ is NOT set to '__main__', but to the running file's name
1399 -n: __name__ is NOT set to '__main__', but to the running file's name
1400 without extension (as python does under import). This allows running
1400 without extension (as python does under import). This allows running
1401 scripts and reloading the definitions in them without calling code
1401 scripts and reloading the definitions in them without calling code
1402 protected by an ' if __name__ == "__main__" ' clause.
1402 protected by an ' if __name__ == "__main__" ' clause.
1403
1403
1404 -i: run the file in IPython's namespace instead of an empty one. This
1404 -i: run the file in IPython's namespace instead of an empty one. This
1405 is useful if you are experimenting with code written in a text editor
1405 is useful if you are experimenting with code written in a text editor
1406 which depends on variables defined interactively.
1406 which depends on variables defined interactively.
1407
1407
1408 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1408 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1409 being run. This is particularly useful if IPython is being used to
1409 being run. This is particularly useful if IPython is being used to
1410 run unittests, which always exit with a sys.exit() call. In such
1410 run unittests, which always exit with a sys.exit() call. In such
1411 cases you are interested in the output of the test results, not in
1411 cases you are interested in the output of the test results, not in
1412 seeing a traceback of the unittest module.
1412 seeing a traceback of the unittest module.
1413
1413
1414 -t: print timing information at the end of the run. IPython will give
1414 -t: print timing information at the end of the run. IPython will give
1415 you an estimated CPU time consumption for your script, which under
1415 you an estimated CPU time consumption for your script, which under
1416 Unix uses the resource module to avoid the wraparound problems of
1416 Unix uses the resource module to avoid the wraparound problems of
1417 time.clock(). Under Unix, an estimate of time spent on system tasks
1417 time.clock(). Under Unix, an estimate of time spent on system tasks
1418 is also given (for Windows platforms this is reported as 0.0).
1418 is also given (for Windows platforms this is reported as 0.0).
1419
1419
1420 If -t is given, an additional -N<N> option can be given, where <N>
1420 If -t is given, an additional -N<N> option can be given, where <N>
1421 must be an integer indicating how many times you want the script to
1421 must be an integer indicating how many times you want the script to
1422 run. The final timing report will include total and per run results.
1422 run. The final timing report will include total and per run results.
1423
1423
1424 For example (testing the script uniq_stable.py):
1424 For example (testing the script uniq_stable.py):
1425
1425
1426 In [1]: run -t uniq_stable
1426 In [1]: run -t uniq_stable
1427
1427
1428 IPython CPU timings (estimated):\\
1428 IPython CPU timings (estimated):\\
1429 User : 0.19597 s.\\
1429 User : 0.19597 s.\\
1430 System: 0.0 s.\\
1430 System: 0.0 s.\\
1431
1431
1432 In [2]: run -t -N5 uniq_stable
1432 In [2]: run -t -N5 uniq_stable
1433
1433
1434 IPython CPU timings (estimated):\\
1434 IPython CPU timings (estimated):\\
1435 Total runs performed: 5\\
1435 Total runs performed: 5\\
1436 Times : Total Per run\\
1436 Times : Total Per run\\
1437 User : 0.910862 s, 0.1821724 s.\\
1437 User : 0.910862 s, 0.1821724 s.\\
1438 System: 0.0 s, 0.0 s.
1438 System: 0.0 s, 0.0 s.
1439
1439
1440 -d: run your program under the control of pdb, the Python debugger.
1440 -d: run your program under the control of pdb, the Python debugger.
1441 This allows you to execute your program step by step, watch variables,
1441 This allows you to execute your program step by step, watch variables,
1442 etc. Internally, what IPython does is similar to calling:
1442 etc. Internally, what IPython does is similar to calling:
1443
1443
1444 pdb.run('execfile("YOURFILENAME")')
1444 pdb.run('execfile("YOURFILENAME")')
1445
1445
1446 with a breakpoint set on line 1 of your file. You can change the line
1446 with a breakpoint set on line 1 of your file. You can change the line
1447 number for this automatic breakpoint to be <N> by using the -bN option
1447 number for this automatic breakpoint to be <N> by using the -bN option
1448 (where N must be an integer). For example:
1448 (where N must be an integer). For example:
1449
1449
1450 %run -d -b40 myscript
1450 %run -d -b40 myscript
1451
1451
1452 will set the first breakpoint at line 40 in myscript.py. Note that
1452 will set the first breakpoint at line 40 in myscript.py. Note that
1453 the first breakpoint must be set on a line which actually does
1453 the first breakpoint must be set on a line which actually does
1454 something (not a comment or docstring) for it to stop execution.
1454 something (not a comment or docstring) for it to stop execution.
1455
1455
1456 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1456 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1457 first enter 'c' (without qoutes) to start execution up to the first
1457 first enter 'c' (without qoutes) to start execution up to the first
1458 breakpoint.
1458 breakpoint.
1459
1459
1460 Entering 'help' gives information about the use of the debugger. You
1460 Entering 'help' gives information about the use of the debugger. You
1461 can easily see pdb's full documentation with "import pdb;pdb.help()"
1461 can easily see pdb's full documentation with "import pdb;pdb.help()"
1462 at a prompt.
1462 at a prompt.
1463
1463
1464 -p: run program under the control of the Python profiler module (which
1464 -p: run program under the control of the Python profiler module (which
1465 prints a detailed report of execution times, function calls, etc).
1465 prints a detailed report of execution times, function calls, etc).
1466
1466
1467 You can pass other options after -p which affect the behavior of the
1467 You can pass other options after -p which affect the behavior of the
1468 profiler itself. See the docs for %prun for details.
1468 profiler itself. See the docs for %prun for details.
1469
1469
1470 In this mode, the program's variables do NOT propagate back to the
1470 In this mode, the program's variables do NOT propagate back to the
1471 IPython interactive namespace (because they remain in the namespace
1471 IPython interactive namespace (because they remain in the namespace
1472 where the profiler executes them).
1472 where the profiler executes them).
1473
1473
1474 Internally this triggers a call to %prun, see its documentation for
1474 Internally this triggers a call to %prun, see its documentation for
1475 details on the options available specifically for profiling."""
1475 details on the options available specifically for profiling.
1476
1477 There is one special usage for which the text above doesn't apply:
1478 if the filename ends with .ipy, the file is run as ipython script,
1479 just as if the commands were written on IPython prompt.
1480 """
1476
1481
1477 # get arguments and set sys.argv for program to be run.
1482 # get arguments and set sys.argv for program to be run.
1478 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1483 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1479 mode='list',list_all=1)
1484 mode='list',list_all=1)
1480
1485
1481 try:
1486 try:
1482 filename = get_py_filename(arg_lst[0])
1487 filename = get_py_filename(arg_lst[0])
1483 except IndexError:
1488 except IndexError:
1484 warn('you must provide at least a filename.')
1489 warn('you must provide at least a filename.')
1485 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1490 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1486 return
1491 return
1487 except IOError,msg:
1492 except IOError,msg:
1488 error(msg)
1493 error(msg)
1489 return
1494 return
1490
1495
1496 if filename.lower().endswith('.ipy'):
1497 self.api.runlines(open(filename).read())
1498 return
1499
1491 # Control the response to exit() calls made by the script being run
1500 # Control the response to exit() calls made by the script being run
1492 exit_ignore = opts.has_key('e')
1501 exit_ignore = opts.has_key('e')
1493
1502
1494 # Make sure that the running script gets a proper sys.argv as if it
1503 # Make sure that the running script gets a proper sys.argv as if it
1495 # were run from a system shell.
1504 # were run from a system shell.
1496 save_argv = sys.argv # save it for later restoring
1505 save_argv = sys.argv # save it for later restoring
1497 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1506 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1498
1507
1499 if opts.has_key('i'):
1508 if opts.has_key('i'):
1500 prog_ns = self.shell.user_ns
1509 prog_ns = self.shell.user_ns
1501 __name__save = self.shell.user_ns['__name__']
1510 __name__save = self.shell.user_ns['__name__']
1502 prog_ns['__name__'] = '__main__'
1511 prog_ns['__name__'] = '__main__'
1503 else:
1512 else:
1504 if opts.has_key('n'):
1513 if opts.has_key('n'):
1505 name = os.path.splitext(os.path.basename(filename))[0]
1514 name = os.path.splitext(os.path.basename(filename))[0]
1506 else:
1515 else:
1507 name = '__main__'
1516 name = '__main__'
1508 prog_ns = {'__name__':name}
1517 prog_ns = {'__name__':name}
1509
1518
1510 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1519 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1511 # set the __file__ global in the script's namespace
1520 # set the __file__ global in the script's namespace
1512 prog_ns['__file__'] = filename
1521 prog_ns['__file__'] = filename
1513
1522
1514 # pickle fix. See iplib for an explanation. But we need to make sure
1523 # pickle fix. See iplib for an explanation. But we need to make sure
1515 # that, if we overwrite __main__, we replace it at the end
1524 # that, if we overwrite __main__, we replace it at the end
1516 if prog_ns['__name__'] == '__main__':
1525 if prog_ns['__name__'] == '__main__':
1517 restore_main = sys.modules['__main__']
1526 restore_main = sys.modules['__main__']
1518 else:
1527 else:
1519 restore_main = False
1528 restore_main = False
1520
1529
1521 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1530 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1522
1531
1523 stats = None
1532 stats = None
1524 try:
1533 try:
1525 if self.shell.has_readline:
1534 if self.shell.has_readline:
1526 self.shell.savehist()
1535 self.shell.savehist()
1527
1536
1528 if opts.has_key('p'):
1537 if opts.has_key('p'):
1529 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1538 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1530 else:
1539 else:
1531 if opts.has_key('d'):
1540 if opts.has_key('d'):
1532 deb = Debugger.Pdb(self.shell.rc.colors)
1541 deb = Debugger.Pdb(self.shell.rc.colors)
1533 # reset Breakpoint state, which is moronically kept
1542 # reset Breakpoint state, which is moronically kept
1534 # in a class
1543 # in a class
1535 bdb.Breakpoint.next = 1
1544 bdb.Breakpoint.next = 1
1536 bdb.Breakpoint.bplist = {}
1545 bdb.Breakpoint.bplist = {}
1537 bdb.Breakpoint.bpbynumber = [None]
1546 bdb.Breakpoint.bpbynumber = [None]
1538 # Set an initial breakpoint to stop execution
1547 # Set an initial breakpoint to stop execution
1539 maxtries = 10
1548 maxtries = 10
1540 bp = int(opts.get('b',[1])[0])
1549 bp = int(opts.get('b',[1])[0])
1541 checkline = deb.checkline(filename,bp)
1550 checkline = deb.checkline(filename,bp)
1542 if not checkline:
1551 if not checkline:
1543 for bp in range(bp+1,bp+maxtries+1):
1552 for bp in range(bp+1,bp+maxtries+1):
1544 if deb.checkline(filename,bp):
1553 if deb.checkline(filename,bp):
1545 break
1554 break
1546 else:
1555 else:
1547 msg = ("\nI failed to find a valid line to set "
1556 msg = ("\nI failed to find a valid line to set "
1548 "a breakpoint\n"
1557 "a breakpoint\n"
1549 "after trying up to line: %s.\n"
1558 "after trying up to line: %s.\n"
1550 "Please set a valid breakpoint manually "
1559 "Please set a valid breakpoint manually "
1551 "with the -b option." % bp)
1560 "with the -b option." % bp)
1552 error(msg)
1561 error(msg)
1553 return
1562 return
1554 # if we find a good linenumber, set the breakpoint
1563 # if we find a good linenumber, set the breakpoint
1555 deb.do_break('%s:%s' % (filename,bp))
1564 deb.do_break('%s:%s' % (filename,bp))
1556 # Start file run
1565 # Start file run
1557 print "NOTE: Enter 'c' at the",
1566 print "NOTE: Enter 'c' at the",
1558 print "%s prompt to start your script." % deb.prompt
1567 print "%s prompt to start your script." % deb.prompt
1559 try:
1568 try:
1560 deb.run('execfile("%s")' % filename,prog_ns)
1569 deb.run('execfile("%s")' % filename,prog_ns)
1561
1570
1562 except:
1571 except:
1563 etype, value, tb = sys.exc_info()
1572 etype, value, tb = sys.exc_info()
1564 # Skip three frames in the traceback: the %run one,
1573 # Skip three frames in the traceback: the %run one,
1565 # one inside bdb.py, and the command-line typed by the
1574 # one inside bdb.py, and the command-line typed by the
1566 # user (run by exec in pdb itself).
1575 # user (run by exec in pdb itself).
1567 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1576 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1568 else:
1577 else:
1569 if runner is None:
1578 if runner is None:
1570 runner = self.shell.safe_execfile
1579 runner = self.shell.safe_execfile
1571 if opts.has_key('t'):
1580 if opts.has_key('t'):
1572 try:
1581 try:
1573 nruns = int(opts['N'][0])
1582 nruns = int(opts['N'][0])
1574 if nruns < 1:
1583 if nruns < 1:
1575 error('Number of runs must be >=1')
1584 error('Number of runs must be >=1')
1576 return
1585 return
1577 except (KeyError):
1586 except (KeyError):
1578 nruns = 1
1587 nruns = 1
1579 if nruns == 1:
1588 if nruns == 1:
1580 t0 = clock2()
1589 t0 = clock2()
1581 runner(filename,prog_ns,prog_ns,
1590 runner(filename,prog_ns,prog_ns,
1582 exit_ignore=exit_ignore)
1591 exit_ignore=exit_ignore)
1583 t1 = clock2()
1592 t1 = clock2()
1584 t_usr = t1[0]-t0[0]
1593 t_usr = t1[0]-t0[0]
1585 t_sys = t1[1]-t1[1]
1594 t_sys = t1[1]-t1[1]
1586 print "\nIPython CPU timings (estimated):"
1595 print "\nIPython CPU timings (estimated):"
1587 print " User : %10s s." % t_usr
1596 print " User : %10s s." % t_usr
1588 print " System: %10s s." % t_sys
1597 print " System: %10s s." % t_sys
1589 else:
1598 else:
1590 runs = range(nruns)
1599 runs = range(nruns)
1591 t0 = clock2()
1600 t0 = clock2()
1592 for nr in runs:
1601 for nr in runs:
1593 runner(filename,prog_ns,prog_ns,
1602 runner(filename,prog_ns,prog_ns,
1594 exit_ignore=exit_ignore)
1603 exit_ignore=exit_ignore)
1595 t1 = clock2()
1604 t1 = clock2()
1596 t_usr = t1[0]-t0[0]
1605 t_usr = t1[0]-t0[0]
1597 t_sys = t1[1]-t1[1]
1606 t_sys = t1[1]-t1[1]
1598 print "\nIPython CPU timings (estimated):"
1607 print "\nIPython CPU timings (estimated):"
1599 print "Total runs performed:",nruns
1608 print "Total runs performed:",nruns
1600 print " Times : %10s %10s" % ('Total','Per run')
1609 print " Times : %10s %10s" % ('Total','Per run')
1601 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1610 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1602 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1611 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1603
1612
1604 else:
1613 else:
1605 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1614 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1606 if opts.has_key('i'):
1615 if opts.has_key('i'):
1607 self.shell.user_ns['__name__'] = __name__save
1616 self.shell.user_ns['__name__'] = __name__save
1608 else:
1617 else:
1609 # update IPython interactive namespace
1618 # update IPython interactive namespace
1610 del prog_ns['__name__']
1619 del prog_ns['__name__']
1611 self.shell.user_ns.update(prog_ns)
1620 self.shell.user_ns.update(prog_ns)
1612 finally:
1621 finally:
1613 sys.argv = save_argv
1622 sys.argv = save_argv
1614 if restore_main:
1623 if restore_main:
1615 sys.modules['__main__'] = restore_main
1624 sys.modules['__main__'] = restore_main
1616 if self.shell.has_readline:
1625 if self.shell.has_readline:
1617 self.shell.readline.read_history_file(self.shell.histfile)
1626 self.shell.readline.read_history_file(self.shell.histfile)
1618
1627
1619 return stats
1628 return stats
1620
1629
1621 def magic_runlog(self, parameter_s =''):
1630 def magic_runlog(self, parameter_s =''):
1622 """Run files as logs.
1631 """Run files as logs.
1623
1632
1624 Usage:\\
1633 Usage:\\
1625 %runlog file1 file2 ...
1634 %runlog file1 file2 ...
1626
1635
1627 Run the named files (treating them as log files) in sequence inside
1636 Run the named files (treating them as log files) in sequence inside
1628 the interpreter, and return to the prompt. This is much slower than
1637 the interpreter, and return to the prompt. This is much slower than
1629 %run because each line is executed in a try/except block, but it
1638 %run because each line is executed in a try/except block, but it
1630 allows running files with syntax errors in them.
1639 allows running files with syntax errors in them.
1631
1640
1632 Normally IPython will guess when a file is one of its own logfiles, so
1641 Normally IPython will guess when a file is one of its own logfiles, so
1633 you can typically use %run even for logs. This shorthand allows you to
1642 you can typically use %run even for logs. This shorthand allows you to
1634 force any file to be treated as a log file."""
1643 force any file to be treated as a log file."""
1635
1644
1636 for f in parameter_s.split():
1645 for f in parameter_s.split():
1637 self.shell.safe_execfile(f,self.shell.user_ns,
1646 self.shell.safe_execfile(f,self.shell.user_ns,
1638 self.shell.user_ns,islog=1)
1647 self.shell.user_ns,islog=1)
1639
1648
1640 def magic_timeit(self, parameter_s =''):
1649 def magic_timeit(self, parameter_s =''):
1641 """Time execution of a Python statement or expression
1650 """Time execution of a Python statement or expression
1642
1651
1643 Usage:\\
1652 Usage:\\
1644 %timeit [-n<N> -r<R> [-t|-c]] statement
1653 %timeit [-n<N> -r<R> [-t|-c]] statement
1645
1654
1646 Time execution of a Python statement or expression using the timeit
1655 Time execution of a Python statement or expression using the timeit
1647 module.
1656 module.
1648
1657
1649 Options:
1658 Options:
1650 -n<N>: execute the given statement <N> times in a loop. If this value
1659 -n<N>: execute the given statement <N> times in a loop. If this value
1651 is not given, a fitting value is chosen.
1660 is not given, a fitting value is chosen.
1652
1661
1653 -r<R>: repeat the loop iteration <R> times and take the best result.
1662 -r<R>: repeat the loop iteration <R> times and take the best result.
1654 Default: 3
1663 Default: 3
1655
1664
1656 -t: use time.time to measure the time, which is the default on Unix.
1665 -t: use time.time to measure the time, which is the default on Unix.
1657 This function measures wall time.
1666 This function measures wall time.
1658
1667
1659 -c: use time.clock to measure the time, which is the default on
1668 -c: use time.clock to measure the time, which is the default on
1660 Windows and measures wall time. On Unix, resource.getrusage is used
1669 Windows and measures wall time. On Unix, resource.getrusage is used
1661 instead and returns the CPU user time.
1670 instead and returns the CPU user time.
1662
1671
1663 -p<P>: use a precision of <P> digits to display the timing result.
1672 -p<P>: use a precision of <P> digits to display the timing result.
1664 Default: 3
1673 Default: 3
1665
1674
1666
1675
1667 Examples:\\
1676 Examples:\\
1668 In [1]: %timeit pass
1677 In [1]: %timeit pass
1669 10000000 loops, best of 3: 53.3 ns per loop
1678 10000000 loops, best of 3: 53.3 ns per loop
1670
1679
1671 In [2]: u = None
1680 In [2]: u = None
1672
1681
1673 In [3]: %timeit u is None
1682 In [3]: %timeit u is None
1674 10000000 loops, best of 3: 184 ns per loop
1683 10000000 loops, best of 3: 184 ns per loop
1675
1684
1676 In [4]: %timeit -r 4 u == None
1685 In [4]: %timeit -r 4 u == None
1677 1000000 loops, best of 4: 242 ns per loop
1686 1000000 loops, best of 4: 242 ns per loop
1678
1687
1679 In [5]: import time
1688 In [5]: import time
1680
1689
1681 In [6]: %timeit -n1 time.sleep(2)
1690 In [6]: %timeit -n1 time.sleep(2)
1682 1 loops, best of 3: 2 s per loop
1691 1 loops, best of 3: 2 s per loop
1683
1692
1684
1693
1685 The times reported by %timeit will be slightly higher than those
1694 The times reported by %timeit will be slightly higher than those
1686 reported by the timeit.py script when variables are accessed. This is
1695 reported by the timeit.py script when variables are accessed. This is
1687 due to the fact that %timeit executes the statement in the namespace
1696 due to the fact that %timeit executes the statement in the namespace
1688 of the shell, compared with timeit.py, which uses a single setup
1697 of the shell, compared with timeit.py, which uses a single setup
1689 statement to import function or create variables. Generally, the bias
1698 statement to import function or create variables. Generally, the bias
1690 does not matter as long as results from timeit.py are not mixed with
1699 does not matter as long as results from timeit.py are not mixed with
1691 those from %timeit."""
1700 those from %timeit."""
1692
1701
1693 import timeit
1702 import timeit
1694 import math
1703 import math
1695
1704
1696 units = ["s", "ms", "\xc2\xb5s", "ns"]
1705 units = ["s", "ms", "\xc2\xb5s", "ns"]
1697 scaling = [1, 1e3, 1e6, 1e9]
1706 scaling = [1, 1e3, 1e6, 1e9]
1698
1707
1699 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1708 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1700 posix=False)
1709 posix=False)
1701 if stmt == "":
1710 if stmt == "":
1702 return
1711 return
1703 timefunc = timeit.default_timer
1712 timefunc = timeit.default_timer
1704 number = int(getattr(opts, "n", 0))
1713 number = int(getattr(opts, "n", 0))
1705 repeat = int(getattr(opts, "r", timeit.default_repeat))
1714 repeat = int(getattr(opts, "r", timeit.default_repeat))
1706 precision = int(getattr(opts, "p", 3))
1715 precision = int(getattr(opts, "p", 3))
1707 if hasattr(opts, "t"):
1716 if hasattr(opts, "t"):
1708 timefunc = time.time
1717 timefunc = time.time
1709 if hasattr(opts, "c"):
1718 if hasattr(opts, "c"):
1710 timefunc = clock
1719 timefunc = clock
1711
1720
1712 timer = timeit.Timer(timer=timefunc)
1721 timer = timeit.Timer(timer=timefunc)
1713 # this code has tight coupling to the inner workings of timeit.Timer,
1722 # this code has tight coupling to the inner workings of timeit.Timer,
1714 # but is there a better way to achieve that the code stmt has access
1723 # but is there a better way to achieve that the code stmt has access
1715 # to the shell namespace?
1724 # to the shell namespace?
1716
1725
1717 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1726 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1718 'setup': "pass"}
1727 'setup': "pass"}
1719 code = compile(src, "<magic-timeit>", "exec")
1728 code = compile(src, "<magic-timeit>", "exec")
1720 ns = {}
1729 ns = {}
1721 exec code in self.shell.user_ns, ns
1730 exec code in self.shell.user_ns, ns
1722 timer.inner = ns["inner"]
1731 timer.inner = ns["inner"]
1723
1732
1724 if number == 0:
1733 if number == 0:
1725 # determine number so that 0.2 <= total time < 2.0
1734 # determine number so that 0.2 <= total time < 2.0
1726 number = 1
1735 number = 1
1727 for i in range(1, 10):
1736 for i in range(1, 10):
1728 number *= 10
1737 number *= 10
1729 if timer.timeit(number) >= 0.2:
1738 if timer.timeit(number) >= 0.2:
1730 break
1739 break
1731
1740
1732 best = min(timer.repeat(repeat, number)) / number
1741 best = min(timer.repeat(repeat, number)) / number
1733
1742
1734 if best > 0.0:
1743 if best > 0.0:
1735 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1744 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1736 else:
1745 else:
1737 order = 3
1746 order = 3
1738 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1747 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1739 precision,
1748 precision,
1740 best * scaling[order],
1749 best * scaling[order],
1741 units[order])
1750 units[order])
1742
1751
1743 def magic_time(self,parameter_s = ''):
1752 def magic_time(self,parameter_s = ''):
1744 """Time execution of a Python statement or expression.
1753 """Time execution of a Python statement or expression.
1745
1754
1746 The CPU and wall clock times are printed, and the value of the
1755 The CPU and wall clock times are printed, and the value of the
1747 expression (if any) is returned. Note that under Win32, system time
1756 expression (if any) is returned. Note that under Win32, system time
1748 is always reported as 0, since it can not be measured.
1757 is always reported as 0, since it can not be measured.
1749
1758
1750 This function provides very basic timing functionality. In Python
1759 This function provides very basic timing functionality. In Python
1751 2.3, the timeit module offers more control and sophistication, so this
1760 2.3, the timeit module offers more control and sophistication, so this
1752 could be rewritten to use it (patches welcome).
1761 could be rewritten to use it (patches welcome).
1753
1762
1754 Some examples:
1763 Some examples:
1755
1764
1756 In [1]: time 2**128
1765 In [1]: time 2**128
1757 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1766 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1758 Wall time: 0.00
1767 Wall time: 0.00
1759 Out[1]: 340282366920938463463374607431768211456L
1768 Out[1]: 340282366920938463463374607431768211456L
1760
1769
1761 In [2]: n = 1000000
1770 In [2]: n = 1000000
1762
1771
1763 In [3]: time sum(range(n))
1772 In [3]: time sum(range(n))
1764 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1773 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1765 Wall time: 1.37
1774 Wall time: 1.37
1766 Out[3]: 499999500000L
1775 Out[3]: 499999500000L
1767
1776
1768 In [4]: time print 'hello world'
1777 In [4]: time print 'hello world'
1769 hello world
1778 hello world
1770 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1779 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1771 Wall time: 0.00
1780 Wall time: 0.00
1772 """
1781 """
1773
1782
1774 # fail immediately if the given expression can't be compiled
1783 # fail immediately if the given expression can't be compiled
1775 try:
1784 try:
1776 mode = 'eval'
1785 mode = 'eval'
1777 code = compile(parameter_s,'<timed eval>',mode)
1786 code = compile(parameter_s,'<timed eval>',mode)
1778 except SyntaxError:
1787 except SyntaxError:
1779 mode = 'exec'
1788 mode = 'exec'
1780 code = compile(parameter_s,'<timed exec>',mode)
1789 code = compile(parameter_s,'<timed exec>',mode)
1781 # skew measurement as little as possible
1790 # skew measurement as little as possible
1782 glob = self.shell.user_ns
1791 glob = self.shell.user_ns
1783 clk = clock2
1792 clk = clock2
1784 wtime = time.time
1793 wtime = time.time
1785 # time execution
1794 # time execution
1786 wall_st = wtime()
1795 wall_st = wtime()
1787 if mode=='eval':
1796 if mode=='eval':
1788 st = clk()
1797 st = clk()
1789 out = eval(code,glob)
1798 out = eval(code,glob)
1790 end = clk()
1799 end = clk()
1791 else:
1800 else:
1792 st = clk()
1801 st = clk()
1793 exec code in glob
1802 exec code in glob
1794 end = clk()
1803 end = clk()
1795 out = None
1804 out = None
1796 wall_end = wtime()
1805 wall_end = wtime()
1797 # Compute actual times and report
1806 # Compute actual times and report
1798 wall_time = wall_end-wall_st
1807 wall_time = wall_end-wall_st
1799 cpu_user = end[0]-st[0]
1808 cpu_user = end[0]-st[0]
1800 cpu_sys = end[1]-st[1]
1809 cpu_sys = end[1]-st[1]
1801 cpu_tot = cpu_user+cpu_sys
1810 cpu_tot = cpu_user+cpu_sys
1802 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1811 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1803 (cpu_user,cpu_sys,cpu_tot)
1812 (cpu_user,cpu_sys,cpu_tot)
1804 print "Wall time: %.2f" % wall_time
1813 print "Wall time: %.2f" % wall_time
1805 return out
1814 return out
1806
1815
1807 def magic_macro(self,parameter_s = ''):
1816 def magic_macro(self,parameter_s = ''):
1808 """Define a set of input lines as a macro for future re-execution.
1817 """Define a set of input lines as a macro for future re-execution.
1809
1818
1810 Usage:\\
1819 Usage:\\
1811 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1820 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1812
1821
1813 Options:
1822 Options:
1814
1823
1815 -r: use 'raw' input. By default, the 'processed' history is used,
1824 -r: use 'raw' input. By default, the 'processed' history is used,
1816 so that magics are loaded in their transformed version to valid
1825 so that magics are loaded in their transformed version to valid
1817 Python. If this option is given, the raw input as typed as the
1826 Python. If this option is given, the raw input as typed as the
1818 command line is used instead.
1827 command line is used instead.
1819
1828
1820 This will define a global variable called `name` which is a string
1829 This will define a global variable called `name` which is a string
1821 made of joining the slices and lines you specify (n1,n2,... numbers
1830 made of joining the slices and lines you specify (n1,n2,... numbers
1822 above) from your input history into a single string. This variable
1831 above) from your input history into a single string. This variable
1823 acts like an automatic function which re-executes those lines as if
1832 acts like an automatic function which re-executes those lines as if
1824 you had typed them. You just type 'name' at the prompt and the code
1833 you had typed them. You just type 'name' at the prompt and the code
1825 executes.
1834 executes.
1826
1835
1827 The notation for indicating number ranges is: n1-n2 means 'use line
1836 The notation for indicating number ranges is: n1-n2 means 'use line
1828 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1837 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1829 using the lines numbered 5,6 and 7.
1838 using the lines numbered 5,6 and 7.
1830
1839
1831 Note: as a 'hidden' feature, you can also use traditional python slice
1840 Note: as a 'hidden' feature, you can also use traditional python slice
1832 notation, where N:M means numbers N through M-1.
1841 notation, where N:M means numbers N through M-1.
1833
1842
1834 For example, if your history contains (%hist prints it):
1843 For example, if your history contains (%hist prints it):
1835
1844
1836 44: x=1\\
1845 44: x=1\\
1837 45: y=3\\
1846 45: y=3\\
1838 46: z=x+y\\
1847 46: z=x+y\\
1839 47: print x\\
1848 47: print x\\
1840 48: a=5\\
1849 48: a=5\\
1841 49: print 'x',x,'y',y\\
1850 49: print 'x',x,'y',y\\
1842
1851
1843 you can create a macro with lines 44 through 47 (included) and line 49
1852 you can create a macro with lines 44 through 47 (included) and line 49
1844 called my_macro with:
1853 called my_macro with:
1845
1854
1846 In [51]: %macro my_macro 44-47 49
1855 In [51]: %macro my_macro 44-47 49
1847
1856
1848 Now, typing `my_macro` (without quotes) will re-execute all this code
1857 Now, typing `my_macro` (without quotes) will re-execute all this code
1849 in one pass.
1858 in one pass.
1850
1859
1851 You don't need to give the line-numbers in order, and any given line
1860 You don't need to give the line-numbers in order, and any given line
1852 number can appear multiple times. You can assemble macros with any
1861 number can appear multiple times. You can assemble macros with any
1853 lines from your input history in any order.
1862 lines from your input history in any order.
1854
1863
1855 The macro is a simple object which holds its value in an attribute,
1864 The macro is a simple object which holds its value in an attribute,
1856 but IPython's display system checks for macros and executes them as
1865 but IPython's display system checks for macros and executes them as
1857 code instead of printing them when you type their name.
1866 code instead of printing them when you type their name.
1858
1867
1859 You can view a macro's contents by explicitly printing it with:
1868 You can view a macro's contents by explicitly printing it with:
1860
1869
1861 'print macro_name'.
1870 'print macro_name'.
1862
1871
1863 For one-off cases which DON'T contain magic function calls in them you
1872 For one-off cases which DON'T contain magic function calls in them you
1864 can obtain similar results by explicitly executing slices from your
1873 can obtain similar results by explicitly executing slices from your
1865 input history with:
1874 input history with:
1866
1875
1867 In [60]: exec In[44:48]+In[49]"""
1876 In [60]: exec In[44:48]+In[49]"""
1868
1877
1869 opts,args = self.parse_options(parameter_s,'r',mode='list')
1878 opts,args = self.parse_options(parameter_s,'r',mode='list')
1870 name,ranges = args[0], args[1:]
1879 name,ranges = args[0], args[1:]
1871 #print 'rng',ranges # dbg
1880 #print 'rng',ranges # dbg
1872 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1881 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1873 macro = Macro(lines)
1882 macro = Macro(lines)
1874 self.shell.user_ns.update({name:macro})
1883 self.shell.user_ns.update({name:macro})
1875 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1884 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1876 print 'Macro contents:'
1885 print 'Macro contents:'
1877 print macro,
1886 print macro,
1878
1887
1879 def magic_save(self,parameter_s = ''):
1888 def magic_save(self,parameter_s = ''):
1880 """Save a set of lines to a given filename.
1889 """Save a set of lines to a given filename.
1881
1890
1882 Usage:\\
1891 Usage:\\
1883 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1892 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1884
1893
1885 Options:
1894 Options:
1886
1895
1887 -r: use 'raw' input. By default, the 'processed' history is used,
1896 -r: use 'raw' input. By default, the 'processed' history is used,
1888 so that magics are loaded in their transformed version to valid
1897 so that magics are loaded in their transformed version to valid
1889 Python. If this option is given, the raw input as typed as the
1898 Python. If this option is given, the raw input as typed as the
1890 command line is used instead.
1899 command line is used instead.
1891
1900
1892 This function uses the same syntax as %macro for line extraction, but
1901 This function uses the same syntax as %macro for line extraction, but
1893 instead of creating a macro it saves the resulting string to the
1902 instead of creating a macro it saves the resulting string to the
1894 filename you specify.
1903 filename you specify.
1895
1904
1896 It adds a '.py' extension to the file if you don't do so yourself, and
1905 It adds a '.py' extension to the file if you don't do so yourself, and
1897 it asks for confirmation before overwriting existing files."""
1906 it asks for confirmation before overwriting existing files."""
1898
1907
1899 opts,args = self.parse_options(parameter_s,'r',mode='list')
1908 opts,args = self.parse_options(parameter_s,'r',mode='list')
1900 fname,ranges = args[0], args[1:]
1909 fname,ranges = args[0], args[1:]
1901 if not fname.endswith('.py'):
1910 if not fname.endswith('.py'):
1902 fname += '.py'
1911 fname += '.py'
1903 if os.path.isfile(fname):
1912 if os.path.isfile(fname):
1904 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1913 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1905 if ans.lower() not in ['y','yes']:
1914 if ans.lower() not in ['y','yes']:
1906 print 'Operation cancelled.'
1915 print 'Operation cancelled.'
1907 return
1916 return
1908 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1917 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1909 f = file(fname,'w')
1918 f = file(fname,'w')
1910 f.write(cmds)
1919 f.write(cmds)
1911 f.close()
1920 f.close()
1912 print 'The following commands were written to file `%s`:' % fname
1921 print 'The following commands were written to file `%s`:' % fname
1913 print cmds
1922 print cmds
1914
1923
1915 def _edit_macro(self,mname,macro):
1924 def _edit_macro(self,mname,macro):
1916 """open an editor with the macro data in a file"""
1925 """open an editor with the macro data in a file"""
1917 filename = self.shell.mktempfile(macro.value)
1926 filename = self.shell.mktempfile(macro.value)
1918 self.shell.hooks.editor(filename)
1927 self.shell.hooks.editor(filename)
1919
1928
1920 # and make a new macro object, to replace the old one
1929 # and make a new macro object, to replace the old one
1921 mfile = open(filename)
1930 mfile = open(filename)
1922 mvalue = mfile.read()
1931 mvalue = mfile.read()
1923 mfile.close()
1932 mfile.close()
1924 self.shell.user_ns[mname] = Macro(mvalue)
1933 self.shell.user_ns[mname] = Macro(mvalue)
1925
1934
1926 def magic_ed(self,parameter_s=''):
1935 def magic_ed(self,parameter_s=''):
1927 """Alias to %edit."""
1936 """Alias to %edit."""
1928 return self.magic_edit(parameter_s)
1937 return self.magic_edit(parameter_s)
1929
1938
1930 def magic_edit(self,parameter_s='',last_call=['','']):
1939 def magic_edit(self,parameter_s='',last_call=['','']):
1931 """Bring up an editor and execute the resulting code.
1940 """Bring up an editor and execute the resulting code.
1932
1941
1933 Usage:
1942 Usage:
1934 %edit [options] [args]
1943 %edit [options] [args]
1935
1944
1936 %edit runs IPython's editor hook. The default version of this hook is
1945 %edit runs IPython's editor hook. The default version of this hook is
1937 set to call the __IPYTHON__.rc.editor command. This is read from your
1946 set to call the __IPYTHON__.rc.editor command. This is read from your
1938 environment variable $EDITOR. If this isn't found, it will default to
1947 environment variable $EDITOR. If this isn't found, it will default to
1939 vi under Linux/Unix and to notepad under Windows. See the end of this
1948 vi under Linux/Unix and to notepad under Windows. See the end of this
1940 docstring for how to change the editor hook.
1949 docstring for how to change the editor hook.
1941
1950
1942 You can also set the value of this editor via the command line option
1951 You can also set the value of this editor via the command line option
1943 '-editor' or in your ipythonrc file. This is useful if you wish to use
1952 '-editor' or in your ipythonrc file. This is useful if you wish to use
1944 specifically for IPython an editor different from your typical default
1953 specifically for IPython an editor different from your typical default
1945 (and for Windows users who typically don't set environment variables).
1954 (and for Windows users who typically don't set environment variables).
1946
1955
1947 This command allows you to conveniently edit multi-line code right in
1956 This command allows you to conveniently edit multi-line code right in
1948 your IPython session.
1957 your IPython session.
1949
1958
1950 If called without arguments, %edit opens up an empty editor with a
1959 If called without arguments, %edit opens up an empty editor with a
1951 temporary file and will execute the contents of this file when you
1960 temporary file and will execute the contents of this file when you
1952 close it (don't forget to save it!).
1961 close it (don't forget to save it!).
1953
1962
1954
1963
1955 Options:
1964 Options:
1956
1965
1957 -n <number>: open the editor at a specified line number. By default,
1966 -n <number>: open the editor at a specified line number. By default,
1958 the IPython editor hook uses the unix syntax 'editor +N filename', but
1967 the IPython editor hook uses the unix syntax 'editor +N filename', but
1959 you can configure this by providing your own modified hook if your
1968 you can configure this by providing your own modified hook if your
1960 favorite editor supports line-number specifications with a different
1969 favorite editor supports line-number specifications with a different
1961 syntax.
1970 syntax.
1962
1971
1963 -p: this will call the editor with the same data as the previous time
1972 -p: this will call the editor with the same data as the previous time
1964 it was used, regardless of how long ago (in your current session) it
1973 it was used, regardless of how long ago (in your current session) it
1965 was.
1974 was.
1966
1975
1967 -r: use 'raw' input. This option only applies to input taken from the
1976 -r: use 'raw' input. This option only applies to input taken from the
1968 user's history. By default, the 'processed' history is used, so that
1977 user's history. By default, the 'processed' history is used, so that
1969 magics are loaded in their transformed version to valid Python. If
1978 magics are loaded in their transformed version to valid Python. If
1970 this option is given, the raw input as typed as the command line is
1979 this option is given, the raw input as typed as the command line is
1971 used instead. When you exit the editor, it will be executed by
1980 used instead. When you exit the editor, it will be executed by
1972 IPython's own processor.
1981 IPython's own processor.
1973
1982
1974 -x: do not execute the edited code immediately upon exit. This is
1983 -x: do not execute the edited code immediately upon exit. This is
1975 mainly useful if you are editing programs which need to be called with
1984 mainly useful if you are editing programs which need to be called with
1976 command line arguments, which you can then do using %run.
1985 command line arguments, which you can then do using %run.
1977
1986
1978
1987
1979 Arguments:
1988 Arguments:
1980
1989
1981 If arguments are given, the following possibilites exist:
1990 If arguments are given, the following possibilites exist:
1982
1991
1983 - The arguments are numbers or pairs of colon-separated numbers (like
1992 - The arguments are numbers or pairs of colon-separated numbers (like
1984 1 4:8 9). These are interpreted as lines of previous input to be
1993 1 4:8 9). These are interpreted as lines of previous input to be
1985 loaded into the editor. The syntax is the same of the %macro command.
1994 loaded into the editor. The syntax is the same of the %macro command.
1986
1995
1987 - If the argument doesn't start with a number, it is evaluated as a
1996 - If the argument doesn't start with a number, it is evaluated as a
1988 variable and its contents loaded into the editor. You can thus edit
1997 variable and its contents loaded into the editor. You can thus edit
1989 any string which contains python code (including the result of
1998 any string which contains python code (including the result of
1990 previous edits).
1999 previous edits).
1991
2000
1992 - If the argument is the name of an object (other than a string),
2001 - If the argument is the name of an object (other than a string),
1993 IPython will try to locate the file where it was defined and open the
2002 IPython will try to locate the file where it was defined and open the
1994 editor at the point where it is defined. You can use `%edit function`
2003 editor at the point where it is defined. You can use `%edit function`
1995 to load an editor exactly at the point where 'function' is defined,
2004 to load an editor exactly at the point where 'function' is defined,
1996 edit it and have the file be executed automatically.
2005 edit it and have the file be executed automatically.
1997
2006
1998 If the object is a macro (see %macro for details), this opens up your
2007 If the object is a macro (see %macro for details), this opens up your
1999 specified editor with a temporary file containing the macro's data.
2008 specified editor with a temporary file containing the macro's data.
2000 Upon exit, the macro is reloaded with the contents of the file.
2009 Upon exit, the macro is reloaded with the contents of the file.
2001
2010
2002 Note: opening at an exact line is only supported under Unix, and some
2011 Note: opening at an exact line is only supported under Unix, and some
2003 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2012 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2004 '+NUMBER' parameter necessary for this feature. Good editors like
2013 '+NUMBER' parameter necessary for this feature. Good editors like
2005 (X)Emacs, vi, jed, pico and joe all do.
2014 (X)Emacs, vi, jed, pico and joe all do.
2006
2015
2007 - If the argument is not found as a variable, IPython will look for a
2016 - If the argument is not found as a variable, IPython will look for a
2008 file with that name (adding .py if necessary) and load it into the
2017 file with that name (adding .py if necessary) and load it into the
2009 editor. It will execute its contents with execfile() when you exit,
2018 editor. It will execute its contents with execfile() when you exit,
2010 loading any code in the file into your interactive namespace.
2019 loading any code in the file into your interactive namespace.
2011
2020
2012 After executing your code, %edit will return as output the code you
2021 After executing your code, %edit will return as output the code you
2013 typed in the editor (except when it was an existing file). This way
2022 typed in the editor (except when it was an existing file). This way
2014 you can reload the code in further invocations of %edit as a variable,
2023 you can reload the code in further invocations of %edit as a variable,
2015 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2024 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2016 the output.
2025 the output.
2017
2026
2018 Note that %edit is also available through the alias %ed.
2027 Note that %edit is also available through the alias %ed.
2019
2028
2020 This is an example of creating a simple function inside the editor and
2029 This is an example of creating a simple function inside the editor and
2021 then modifying it. First, start up the editor:
2030 then modifying it. First, start up the editor:
2022
2031
2023 In [1]: ed\\
2032 In [1]: ed\\
2024 Editing... done. Executing edited code...\\
2033 Editing... done. Executing edited code...\\
2025 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2034 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2026
2035
2027 We can then call the function foo():
2036 We can then call the function foo():
2028
2037
2029 In [2]: foo()\\
2038 In [2]: foo()\\
2030 foo() was defined in an editing session
2039 foo() was defined in an editing session
2031
2040
2032 Now we edit foo. IPython automatically loads the editor with the
2041 Now we edit foo. IPython automatically loads the editor with the
2033 (temporary) file where foo() was previously defined:
2042 (temporary) file where foo() was previously defined:
2034
2043
2035 In [3]: ed foo\\
2044 In [3]: ed foo\\
2036 Editing... done. Executing edited code...
2045 Editing... done. Executing edited code...
2037
2046
2038 And if we call foo() again we get the modified version:
2047 And if we call foo() again we get the modified version:
2039
2048
2040 In [4]: foo()\\
2049 In [4]: foo()\\
2041 foo() has now been changed!
2050 foo() has now been changed!
2042
2051
2043 Here is an example of how to edit a code snippet successive
2052 Here is an example of how to edit a code snippet successive
2044 times. First we call the editor:
2053 times. First we call the editor:
2045
2054
2046 In [8]: ed\\
2055 In [8]: ed\\
2047 Editing... done. Executing edited code...\\
2056 Editing... done. Executing edited code...\\
2048 hello\\
2057 hello\\
2049 Out[8]: "print 'hello'\\n"
2058 Out[8]: "print 'hello'\\n"
2050
2059
2051 Now we call it again with the previous output (stored in _):
2060 Now we call it again with the previous output (stored in _):
2052
2061
2053 In [9]: ed _\\
2062 In [9]: ed _\\
2054 Editing... done. Executing edited code...\\
2063 Editing... done. Executing edited code...\\
2055 hello world\\
2064 hello world\\
2056 Out[9]: "print 'hello world'\\n"
2065 Out[9]: "print 'hello world'\\n"
2057
2066
2058 Now we call it with the output #8 (stored in _8, also as Out[8]):
2067 Now we call it with the output #8 (stored in _8, also as Out[8]):
2059
2068
2060 In [10]: ed _8\\
2069 In [10]: ed _8\\
2061 Editing... done. Executing edited code...\\
2070 Editing... done. Executing edited code...\\
2062 hello again\\
2071 hello again\\
2063 Out[10]: "print 'hello again'\\n"
2072 Out[10]: "print 'hello again'\\n"
2064
2073
2065
2074
2066 Changing the default editor hook:
2075 Changing the default editor hook:
2067
2076
2068 If you wish to write your own editor hook, you can put it in a
2077 If you wish to write your own editor hook, you can put it in a
2069 configuration file which you load at startup time. The default hook
2078 configuration file which you load at startup time. The default hook
2070 is defined in the IPython.hooks module, and you can use that as a
2079 is defined in the IPython.hooks module, and you can use that as a
2071 starting example for further modifications. That file also has
2080 starting example for further modifications. That file also has
2072 general instructions on how to set a new hook for use once you've
2081 general instructions on how to set a new hook for use once you've
2073 defined it."""
2082 defined it."""
2074
2083
2075 # FIXME: This function has become a convoluted mess. It needs a
2084 # FIXME: This function has become a convoluted mess. It needs a
2076 # ground-up rewrite with clean, simple logic.
2085 # ground-up rewrite with clean, simple logic.
2077
2086
2078 def make_filename(arg):
2087 def make_filename(arg):
2079 "Make a filename from the given args"
2088 "Make a filename from the given args"
2080 try:
2089 try:
2081 filename = get_py_filename(arg)
2090 filename = get_py_filename(arg)
2082 except IOError:
2091 except IOError:
2083 if args.endswith('.py'):
2092 if args.endswith('.py'):
2084 filename = arg
2093 filename = arg
2085 else:
2094 else:
2086 filename = None
2095 filename = None
2087 return filename
2096 return filename
2088
2097
2089 # custom exceptions
2098 # custom exceptions
2090 class DataIsObject(Exception): pass
2099 class DataIsObject(Exception): pass
2091
2100
2092 opts,args = self.parse_options(parameter_s,'prxn:')
2101 opts,args = self.parse_options(parameter_s,'prxn:')
2093 # Set a few locals from the options for convenience:
2102 # Set a few locals from the options for convenience:
2094 opts_p = opts.has_key('p')
2103 opts_p = opts.has_key('p')
2095 opts_r = opts.has_key('r')
2104 opts_r = opts.has_key('r')
2096
2105
2097 # Default line number value
2106 # Default line number value
2098 lineno = opts.get('n',None)
2107 lineno = opts.get('n',None)
2099
2108
2100 if opts_p:
2109 if opts_p:
2101 args = '_%s' % last_call[0]
2110 args = '_%s' % last_call[0]
2102 if not self.shell.user_ns.has_key(args):
2111 if not self.shell.user_ns.has_key(args):
2103 args = last_call[1]
2112 args = last_call[1]
2104
2113
2105 # use last_call to remember the state of the previous call, but don't
2114 # use last_call to remember the state of the previous call, but don't
2106 # let it be clobbered by successive '-p' calls.
2115 # let it be clobbered by successive '-p' calls.
2107 try:
2116 try:
2108 last_call[0] = self.shell.outputcache.prompt_count
2117 last_call[0] = self.shell.outputcache.prompt_count
2109 if not opts_p:
2118 if not opts_p:
2110 last_call[1] = parameter_s
2119 last_call[1] = parameter_s
2111 except:
2120 except:
2112 pass
2121 pass
2113
2122
2114 # by default this is done with temp files, except when the given
2123 # by default this is done with temp files, except when the given
2115 # arg is a filename
2124 # arg is a filename
2116 use_temp = 1
2125 use_temp = 1
2117
2126
2118 if re.match(r'\d',args):
2127 if re.match(r'\d',args):
2119 # Mode where user specifies ranges of lines, like in %macro.
2128 # Mode where user specifies ranges of lines, like in %macro.
2120 # This means that you can't edit files whose names begin with
2129 # This means that you can't edit files whose names begin with
2121 # numbers this way. Tough.
2130 # numbers this way. Tough.
2122 ranges = args.split()
2131 ranges = args.split()
2123 data = ''.join(self.extract_input_slices(ranges,opts_r))
2132 data = ''.join(self.extract_input_slices(ranges,opts_r))
2124 elif args.endswith('.py'):
2133 elif args.endswith('.py'):
2125 filename = make_filename(args)
2134 filename = make_filename(args)
2126 data = ''
2135 data = ''
2127 use_temp = 0
2136 use_temp = 0
2128 elif args:
2137 elif args:
2129 try:
2138 try:
2130 # Load the parameter given as a variable. If not a string,
2139 # Load the parameter given as a variable. If not a string,
2131 # process it as an object instead (below)
2140 # process it as an object instead (below)
2132
2141
2133 #print '*** args',args,'type',type(args) # dbg
2142 #print '*** args',args,'type',type(args) # dbg
2134 data = eval(args,self.shell.user_ns)
2143 data = eval(args,self.shell.user_ns)
2135 if not type(data) in StringTypes:
2144 if not type(data) in StringTypes:
2136 raise DataIsObject
2145 raise DataIsObject
2137
2146
2138 except (NameError,SyntaxError):
2147 except (NameError,SyntaxError):
2139 # given argument is not a variable, try as a filename
2148 # given argument is not a variable, try as a filename
2140 filename = make_filename(args)
2149 filename = make_filename(args)
2141 if filename is None:
2150 if filename is None:
2142 warn("Argument given (%s) can't be found as a variable "
2151 warn("Argument given (%s) can't be found as a variable "
2143 "or as a filename." % args)
2152 "or as a filename." % args)
2144 return
2153 return
2145
2154
2146 data = ''
2155 data = ''
2147 use_temp = 0
2156 use_temp = 0
2148 except DataIsObject:
2157 except DataIsObject:
2149
2158
2150 # macros have a special edit function
2159 # macros have a special edit function
2151 if isinstance(data,Macro):
2160 if isinstance(data,Macro):
2152 self._edit_macro(args,data)
2161 self._edit_macro(args,data)
2153 return
2162 return
2154
2163
2155 # For objects, try to edit the file where they are defined
2164 # For objects, try to edit the file where they are defined
2156 try:
2165 try:
2157 filename = inspect.getabsfile(data)
2166 filename = inspect.getabsfile(data)
2158 datafile = 1
2167 datafile = 1
2159 except TypeError:
2168 except TypeError:
2160 filename = make_filename(args)
2169 filename = make_filename(args)
2161 datafile = 1
2170 datafile = 1
2162 warn('Could not find file where `%s` is defined.\n'
2171 warn('Could not find file where `%s` is defined.\n'
2163 'Opening a file named `%s`' % (args,filename))
2172 'Opening a file named `%s`' % (args,filename))
2164 # Now, make sure we can actually read the source (if it was in
2173 # Now, make sure we can actually read the source (if it was in
2165 # a temp file it's gone by now).
2174 # a temp file it's gone by now).
2166 if datafile:
2175 if datafile:
2167 try:
2176 try:
2168 if lineno is None:
2177 if lineno is None:
2169 lineno = inspect.getsourcelines(data)[1]
2178 lineno = inspect.getsourcelines(data)[1]
2170 except IOError:
2179 except IOError:
2171 filename = make_filename(args)
2180 filename = make_filename(args)
2172 if filename is None:
2181 if filename is None:
2173 warn('The file `%s` where `%s` was defined cannot '
2182 warn('The file `%s` where `%s` was defined cannot '
2174 'be read.' % (filename,data))
2183 'be read.' % (filename,data))
2175 return
2184 return
2176 use_temp = 0
2185 use_temp = 0
2177 else:
2186 else:
2178 data = ''
2187 data = ''
2179
2188
2180 if use_temp:
2189 if use_temp:
2181 filename = self.shell.mktempfile(data)
2190 filename = self.shell.mktempfile(data)
2182 print 'IPython will make a temporary file named:',filename
2191 print 'IPython will make a temporary file named:',filename
2183
2192
2184 # do actual editing here
2193 # do actual editing here
2185 print 'Editing...',
2194 print 'Editing...',
2186 sys.stdout.flush()
2195 sys.stdout.flush()
2187 self.shell.hooks.editor(filename,lineno)
2196 self.shell.hooks.editor(filename,lineno)
2188 if opts.has_key('x'): # -x prevents actual execution
2197 if opts.has_key('x'): # -x prevents actual execution
2189 print
2198 print
2190 else:
2199 else:
2191 print 'done. Executing edited code...'
2200 print 'done. Executing edited code...'
2192 if opts_r:
2201 if opts_r:
2193 self.shell.runlines(file_read(filename))
2202 self.shell.runlines(file_read(filename))
2194 else:
2203 else:
2195 self.shell.safe_execfile(filename,self.shell.user_ns)
2204 self.shell.safe_execfile(filename,self.shell.user_ns)
2196 if use_temp:
2205 if use_temp:
2197 try:
2206 try:
2198 return open(filename).read()
2207 return open(filename).read()
2199 except IOError,msg:
2208 except IOError,msg:
2200 if msg.filename == filename:
2209 if msg.filename == filename:
2201 warn('File not found. Did you forget to save?')
2210 warn('File not found. Did you forget to save?')
2202 return
2211 return
2203 else:
2212 else:
2204 self.shell.showtraceback()
2213 self.shell.showtraceback()
2205
2214
2206 def magic_xmode(self,parameter_s = ''):
2215 def magic_xmode(self,parameter_s = ''):
2207 """Switch modes for the exception handlers.
2216 """Switch modes for the exception handlers.
2208
2217
2209 Valid modes: Plain, Context and Verbose.
2218 Valid modes: Plain, Context and Verbose.
2210
2219
2211 If called without arguments, acts as a toggle."""
2220 If called without arguments, acts as a toggle."""
2212
2221
2213 def xmode_switch_err(name):
2222 def xmode_switch_err(name):
2214 warn('Error changing %s exception modes.\n%s' %
2223 warn('Error changing %s exception modes.\n%s' %
2215 (name,sys.exc_info()[1]))
2224 (name,sys.exc_info()[1]))
2216
2225
2217 shell = self.shell
2226 shell = self.shell
2218 new_mode = parameter_s.strip().capitalize()
2227 new_mode = parameter_s.strip().capitalize()
2219 try:
2228 try:
2220 shell.InteractiveTB.set_mode(mode=new_mode)
2229 shell.InteractiveTB.set_mode(mode=new_mode)
2221 print 'Exception reporting mode:',shell.InteractiveTB.mode
2230 print 'Exception reporting mode:',shell.InteractiveTB.mode
2222 except:
2231 except:
2223 xmode_switch_err('user')
2232 xmode_switch_err('user')
2224
2233
2225 # threaded shells use a special handler in sys.excepthook
2234 # threaded shells use a special handler in sys.excepthook
2226 if shell.isthreaded:
2235 if shell.isthreaded:
2227 try:
2236 try:
2228 shell.sys_excepthook.set_mode(mode=new_mode)
2237 shell.sys_excepthook.set_mode(mode=new_mode)
2229 except:
2238 except:
2230 xmode_switch_err('threaded')
2239 xmode_switch_err('threaded')
2231
2240
2232 def magic_colors(self,parameter_s = ''):
2241 def magic_colors(self,parameter_s = ''):
2233 """Switch color scheme for prompts, info system and exception handlers.
2242 """Switch color scheme for prompts, info system and exception handlers.
2234
2243
2235 Currently implemented schemes: NoColor, Linux, LightBG.
2244 Currently implemented schemes: NoColor, Linux, LightBG.
2236
2245
2237 Color scheme names are not case-sensitive."""
2246 Color scheme names are not case-sensitive."""
2238
2247
2239 def color_switch_err(name):
2248 def color_switch_err(name):
2240 warn('Error changing %s color schemes.\n%s' %
2249 warn('Error changing %s color schemes.\n%s' %
2241 (name,sys.exc_info()[1]))
2250 (name,sys.exc_info()[1]))
2242
2251
2243
2252
2244 new_scheme = parameter_s.strip()
2253 new_scheme = parameter_s.strip()
2245 if not new_scheme:
2254 if not new_scheme:
2246 print 'You must specify a color scheme.'
2255 print 'You must specify a color scheme.'
2247 return
2256 return
2248 import IPython.rlineimpl as readline
2257 import IPython.rlineimpl as readline
2249 if not readline.have_readline:
2258 if not readline.have_readline:
2250 msg = """\
2259 msg = """\
2251 Proper color support under MS Windows requires the pyreadline library.
2260 Proper color support under MS Windows requires the pyreadline library.
2252 You can find it at:
2261 You can find it at:
2253 http://ipython.scipy.org/moin/PyReadline/Intro
2262 http://ipython.scipy.org/moin/PyReadline/Intro
2254 Gary's readline needs the ctypes module, from:
2263 Gary's readline needs the ctypes module, from:
2255 http://starship.python.net/crew/theller/ctypes
2264 http://starship.python.net/crew/theller/ctypes
2256 (Note that ctypes is already part of Python versions 2.5 and newer).
2265 (Note that ctypes is already part of Python versions 2.5 and newer).
2257
2266
2258 Defaulting color scheme to 'NoColor'"""
2267 Defaulting color scheme to 'NoColor'"""
2259 new_scheme = 'NoColor'
2268 new_scheme = 'NoColor'
2260 warn(msg)
2269 warn(msg)
2261 # local shortcut
2270 # local shortcut
2262 shell = self.shell
2271 shell = self.shell
2263
2272
2264 # Set prompt colors
2273 # Set prompt colors
2265 try:
2274 try:
2266 shell.outputcache.set_colors(new_scheme)
2275 shell.outputcache.set_colors(new_scheme)
2267 except:
2276 except:
2268 color_switch_err('prompt')
2277 color_switch_err('prompt')
2269 else:
2278 else:
2270 shell.rc.colors = \
2279 shell.rc.colors = \
2271 shell.outputcache.color_table.active_scheme_name
2280 shell.outputcache.color_table.active_scheme_name
2272 # Set exception colors
2281 # Set exception colors
2273 try:
2282 try:
2274 shell.InteractiveTB.set_colors(scheme = new_scheme)
2283 shell.InteractiveTB.set_colors(scheme = new_scheme)
2275 shell.SyntaxTB.set_colors(scheme = new_scheme)
2284 shell.SyntaxTB.set_colors(scheme = new_scheme)
2276 except:
2285 except:
2277 color_switch_err('exception')
2286 color_switch_err('exception')
2278
2287
2279 # threaded shells use a verbose traceback in sys.excepthook
2288 # threaded shells use a verbose traceback in sys.excepthook
2280 if shell.isthreaded:
2289 if shell.isthreaded:
2281 try:
2290 try:
2282 shell.sys_excepthook.set_colors(scheme=new_scheme)
2291 shell.sys_excepthook.set_colors(scheme=new_scheme)
2283 except:
2292 except:
2284 color_switch_err('system exception handler')
2293 color_switch_err('system exception handler')
2285
2294
2286 # Set info (for 'object?') colors
2295 # Set info (for 'object?') colors
2287 if shell.rc.color_info:
2296 if shell.rc.color_info:
2288 try:
2297 try:
2289 shell.inspector.set_active_scheme(new_scheme)
2298 shell.inspector.set_active_scheme(new_scheme)
2290 except:
2299 except:
2291 color_switch_err('object inspector')
2300 color_switch_err('object inspector')
2292 else:
2301 else:
2293 shell.inspector.set_active_scheme('NoColor')
2302 shell.inspector.set_active_scheme('NoColor')
2294
2303
2295 def magic_color_info(self,parameter_s = ''):
2304 def magic_color_info(self,parameter_s = ''):
2296 """Toggle color_info.
2305 """Toggle color_info.
2297
2306
2298 The color_info configuration parameter controls whether colors are
2307 The color_info configuration parameter controls whether colors are
2299 used for displaying object details (by things like %psource, %pfile or
2308 used for displaying object details (by things like %psource, %pfile or
2300 the '?' system). This function toggles this value with each call.
2309 the '?' system). This function toggles this value with each call.
2301
2310
2302 Note that unless you have a fairly recent pager (less works better
2311 Note that unless you have a fairly recent pager (less works better
2303 than more) in your system, using colored object information displays
2312 than more) in your system, using colored object information displays
2304 will not work properly. Test it and see."""
2313 will not work properly. Test it and see."""
2305
2314
2306 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2315 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2307 self.magic_colors(self.shell.rc.colors)
2316 self.magic_colors(self.shell.rc.colors)
2308 print 'Object introspection functions have now coloring:',
2317 print 'Object introspection functions have now coloring:',
2309 print ['OFF','ON'][self.shell.rc.color_info]
2318 print ['OFF','ON'][self.shell.rc.color_info]
2310
2319
2311 def magic_Pprint(self, parameter_s=''):
2320 def magic_Pprint(self, parameter_s=''):
2312 """Toggle pretty printing on/off."""
2321 """Toggle pretty printing on/off."""
2313
2322
2314 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2323 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2315 print 'Pretty printing has been turned', \
2324 print 'Pretty printing has been turned', \
2316 ['OFF','ON'][self.shell.rc.pprint]
2325 ['OFF','ON'][self.shell.rc.pprint]
2317
2326
2318 def magic_exit(self, parameter_s=''):
2327 def magic_exit(self, parameter_s=''):
2319 """Exit IPython, confirming if configured to do so.
2328 """Exit IPython, confirming if configured to do so.
2320
2329
2321 You can configure whether IPython asks for confirmation upon exit by
2330 You can configure whether IPython asks for confirmation upon exit by
2322 setting the confirm_exit flag in the ipythonrc file."""
2331 setting the confirm_exit flag in the ipythonrc file."""
2323
2332
2324 self.shell.exit()
2333 self.shell.exit()
2325
2334
2326 def magic_quit(self, parameter_s=''):
2335 def magic_quit(self, parameter_s=''):
2327 """Exit IPython, confirming if configured to do so (like %exit)"""
2336 """Exit IPython, confirming if configured to do so (like %exit)"""
2328
2337
2329 self.shell.exit()
2338 self.shell.exit()
2330
2339
2331 def magic_Exit(self, parameter_s=''):
2340 def magic_Exit(self, parameter_s=''):
2332 """Exit IPython without confirmation."""
2341 """Exit IPython without confirmation."""
2333
2342
2334 self.shell.exit_now = True
2343 self.shell.exit_now = True
2335
2344
2336 def magic_Quit(self, parameter_s=''):
2345 def magic_Quit(self, parameter_s=''):
2337 """Exit IPython without confirmation (like %Exit)."""
2346 """Exit IPython without confirmation (like %Exit)."""
2338
2347
2339 self.shell.exit_now = True
2348 self.shell.exit_now = True
2340
2349
2341 #......................................................................
2350 #......................................................................
2342 # Functions to implement unix shell-type things
2351 # Functions to implement unix shell-type things
2343
2352
2344 def magic_alias(self, parameter_s = ''):
2353 def magic_alias(self, parameter_s = ''):
2345 """Define an alias for a system command.
2354 """Define an alias for a system command.
2346
2355
2347 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2356 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2348
2357
2349 Then, typing 'alias_name params' will execute the system command 'cmd
2358 Then, typing 'alias_name params' will execute the system command 'cmd
2350 params' (from your underlying operating system).
2359 params' (from your underlying operating system).
2351
2360
2352 Aliases have lower precedence than magic functions and Python normal
2361 Aliases have lower precedence than magic functions and Python normal
2353 variables, so if 'foo' is both a Python variable and an alias, the
2362 variables, so if 'foo' is both a Python variable and an alias, the
2354 alias can not be executed until 'del foo' removes the Python variable.
2363 alias can not be executed until 'del foo' removes the Python variable.
2355
2364
2356 You can use the %l specifier in an alias definition to represent the
2365 You can use the %l specifier in an alias definition to represent the
2357 whole line when the alias is called. For example:
2366 whole line when the alias is called. For example:
2358
2367
2359 In [2]: alias all echo "Input in brackets: <%l>"\\
2368 In [2]: alias all echo "Input in brackets: <%l>"\\
2360 In [3]: all hello world\\
2369 In [3]: all hello world\\
2361 Input in brackets: <hello world>
2370 Input in brackets: <hello world>
2362
2371
2363 You can also define aliases with parameters using %s specifiers (one
2372 You can also define aliases with parameters using %s specifiers (one
2364 per parameter):
2373 per parameter):
2365
2374
2366 In [1]: alias parts echo first %s second %s\\
2375 In [1]: alias parts echo first %s second %s\\
2367 In [2]: %parts A B\\
2376 In [2]: %parts A B\\
2368 first A second B\\
2377 first A second B\\
2369 In [3]: %parts A\\
2378 In [3]: %parts A\\
2370 Incorrect number of arguments: 2 expected.\\
2379 Incorrect number of arguments: 2 expected.\\
2371 parts is an alias to: 'echo first %s second %s'
2380 parts is an alias to: 'echo first %s second %s'
2372
2381
2373 Note that %l and %s are mutually exclusive. You can only use one or
2382 Note that %l and %s are mutually exclusive. You can only use one or
2374 the other in your aliases.
2383 the other in your aliases.
2375
2384
2376 Aliases expand Python variables just like system calls using ! or !!
2385 Aliases expand Python variables just like system calls using ! or !!
2377 do: all expressions prefixed with '$' get expanded. For details of
2386 do: all expressions prefixed with '$' get expanded. For details of
2378 the semantic rules, see PEP-215:
2387 the semantic rules, see PEP-215:
2379 http://www.python.org/peps/pep-0215.html. This is the library used by
2388 http://www.python.org/peps/pep-0215.html. This is the library used by
2380 IPython for variable expansion. If you want to access a true shell
2389 IPython for variable expansion. If you want to access a true shell
2381 variable, an extra $ is necessary to prevent its expansion by IPython:
2390 variable, an extra $ is necessary to prevent its expansion by IPython:
2382
2391
2383 In [6]: alias show echo\\
2392 In [6]: alias show echo\\
2384 In [7]: PATH='A Python string'\\
2393 In [7]: PATH='A Python string'\\
2385 In [8]: show $PATH\\
2394 In [8]: show $PATH\\
2386 A Python string\\
2395 A Python string\\
2387 In [9]: show $$PATH\\
2396 In [9]: show $$PATH\\
2388 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2397 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2389
2398
2390 You can use the alias facility to acess all of $PATH. See the %rehash
2399 You can use the alias facility to acess all of $PATH. See the %rehash
2391 and %rehashx functions, which automatically create aliases for the
2400 and %rehashx functions, which automatically create aliases for the
2392 contents of your $PATH.
2401 contents of your $PATH.
2393
2402
2394 If called with no parameters, %alias prints the current alias table."""
2403 If called with no parameters, %alias prints the current alias table."""
2395
2404
2396 par = parameter_s.strip()
2405 par = parameter_s.strip()
2397 if not par:
2406 if not par:
2398 stored = self.db.get('stored_aliases', {} )
2407 stored = self.db.get('stored_aliases', {} )
2399 atab = self.shell.alias_table
2408 atab = self.shell.alias_table
2400 aliases = atab.keys()
2409 aliases = atab.keys()
2401 aliases.sort()
2410 aliases.sort()
2402 res = []
2411 res = []
2403 showlast = []
2412 showlast = []
2404 for alias in aliases:
2413 for alias in aliases:
2405 tgt = atab[alias][1]
2414 tgt = atab[alias][1]
2406 # 'interesting' aliases
2415 # 'interesting' aliases
2407 if (alias in stored or
2416 if (alias in stored or
2408 alias != os.path.splitext(tgt)[0] or
2417 alias != os.path.splitext(tgt)[0] or
2409 ' ' in tgt):
2418 ' ' in tgt):
2410 showlast.append((alias, tgt))
2419 showlast.append((alias, tgt))
2411 else:
2420 else:
2412 res.append((alias, tgt ))
2421 res.append((alias, tgt ))
2413
2422
2414 # show most interesting aliases last
2423 # show most interesting aliases last
2415 res.extend(showlast)
2424 res.extend(showlast)
2416 print "Total number of aliases:",len(aliases)
2425 print "Total number of aliases:",len(aliases)
2417 return res
2426 return res
2418 try:
2427 try:
2419 alias,cmd = par.split(None,1)
2428 alias,cmd = par.split(None,1)
2420 except:
2429 except:
2421 print OInspect.getdoc(self.magic_alias)
2430 print OInspect.getdoc(self.magic_alias)
2422 else:
2431 else:
2423 nargs = cmd.count('%s')
2432 nargs = cmd.count('%s')
2424 if nargs>0 and cmd.find('%l')>=0:
2433 if nargs>0 and cmd.find('%l')>=0:
2425 error('The %s and %l specifiers are mutually exclusive '
2434 error('The %s and %l specifiers are mutually exclusive '
2426 'in alias definitions.')
2435 'in alias definitions.')
2427 else: # all looks OK
2436 else: # all looks OK
2428 self.shell.alias_table[alias] = (nargs,cmd)
2437 self.shell.alias_table[alias] = (nargs,cmd)
2429 self.shell.alias_table_validate(verbose=0)
2438 self.shell.alias_table_validate(verbose=0)
2430 # end magic_alias
2439 # end magic_alias
2431
2440
2432 def magic_unalias(self, parameter_s = ''):
2441 def magic_unalias(self, parameter_s = ''):
2433 """Remove an alias"""
2442 """Remove an alias"""
2434
2443
2435 aname = parameter_s.strip()
2444 aname = parameter_s.strip()
2436 if aname in self.shell.alias_table:
2445 if aname in self.shell.alias_table:
2437 del self.shell.alias_table[aname]
2446 del self.shell.alias_table[aname]
2438 stored = self.db.get('stored_aliases', {} )
2447 stored = self.db.get('stored_aliases', {} )
2439 if aname in stored:
2448 if aname in stored:
2440 print "Removing %stored alias",aname
2449 print "Removing %stored alias",aname
2441 del stored[aname]
2450 del stored[aname]
2442 self.db['stored_aliases'] = stored
2451 self.db['stored_aliases'] = stored
2443
2452
2444 def magic_rehash(self, parameter_s = ''):
2453 def magic_rehash(self, parameter_s = ''):
2445 """Update the alias table with all entries in $PATH.
2454 """Update the alias table with all entries in $PATH.
2446
2455
2447 This version does no checks on execute permissions or whether the
2456 This version does no checks on execute permissions or whether the
2448 contents of $PATH are truly files (instead of directories or something
2457 contents of $PATH are truly files (instead of directories or something
2449 else). For such a safer (but slower) version, use %rehashx."""
2458 else). For such a safer (but slower) version, use %rehashx."""
2450
2459
2451 # This function (and rehashx) manipulate the alias_table directly
2460 # This function (and rehashx) manipulate the alias_table directly
2452 # rather than calling magic_alias, for speed reasons. A rehash on a
2461 # rather than calling magic_alias, for speed reasons. A rehash on a
2453 # typical Linux box involves several thousand entries, so efficiency
2462 # typical Linux box involves several thousand entries, so efficiency
2454 # here is a top concern.
2463 # here is a top concern.
2455
2464
2456 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2465 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2457 alias_table = self.shell.alias_table
2466 alias_table = self.shell.alias_table
2458 for pdir in path:
2467 for pdir in path:
2459 for ff in os.listdir(pdir):
2468 for ff in os.listdir(pdir):
2460 # each entry in the alias table must be (N,name), where
2469 # each entry in the alias table must be (N,name), where
2461 # N is the number of positional arguments of the alias.
2470 # N is the number of positional arguments of the alias.
2462 alias_table[ff] = (0,ff)
2471 alias_table[ff] = (0,ff)
2463 # Make sure the alias table doesn't contain keywords or builtins
2472 # Make sure the alias table doesn't contain keywords or builtins
2464 self.shell.alias_table_validate()
2473 self.shell.alias_table_validate()
2465 # Call again init_auto_alias() so we get 'rm -i' and other modified
2474 # Call again init_auto_alias() so we get 'rm -i' and other modified
2466 # aliases since %rehash will probably clobber them
2475 # aliases since %rehash will probably clobber them
2467 self.shell.init_auto_alias()
2476 self.shell.init_auto_alias()
2468
2477
2469 def magic_rehashx(self, parameter_s = ''):
2478 def magic_rehashx(self, parameter_s = ''):
2470 """Update the alias table with all executable files in $PATH.
2479 """Update the alias table with all executable files in $PATH.
2471
2480
2472 This version explicitly checks that every entry in $PATH is a file
2481 This version explicitly checks that every entry in $PATH is a file
2473 with execute access (os.X_OK), so it is much slower than %rehash.
2482 with execute access (os.X_OK), so it is much slower than %rehash.
2474
2483
2475 Under Windows, it checks executability as a match agains a
2484 Under Windows, it checks executability as a match agains a
2476 '|'-separated string of extensions, stored in the IPython config
2485 '|'-separated string of extensions, stored in the IPython config
2477 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2486 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2478
2487
2479 path = [os.path.abspath(os.path.expanduser(p)) for p in
2488 path = [os.path.abspath(os.path.expanduser(p)) for p in
2480 os.environ['PATH'].split(os.pathsep)]
2489 os.environ['PATH'].split(os.pathsep)]
2481 path = filter(os.path.isdir,path)
2490 path = filter(os.path.isdir,path)
2482
2491
2483 alias_table = self.shell.alias_table
2492 alias_table = self.shell.alias_table
2484 syscmdlist = []
2493 syscmdlist = []
2485 if os.name == 'posix':
2494 if os.name == 'posix':
2486 isexec = lambda fname:os.path.isfile(fname) and \
2495 isexec = lambda fname:os.path.isfile(fname) and \
2487 os.access(fname,os.X_OK)
2496 os.access(fname,os.X_OK)
2488 else:
2497 else:
2489
2498
2490 try:
2499 try:
2491 winext = os.environ['pathext'].replace(';','|').replace('.','')
2500 winext = os.environ['pathext'].replace(';','|').replace('.','')
2492 except KeyError:
2501 except KeyError:
2493 winext = 'exe|com|bat|py'
2502 winext = 'exe|com|bat|py'
2494 if 'py' not in winext:
2503 if 'py' not in winext:
2495 winext += '|py'
2504 winext += '|py'
2496 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2505 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2497 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2506 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2498 savedir = os.getcwd()
2507 savedir = os.getcwd()
2499 try:
2508 try:
2500 # write the whole loop for posix/Windows so we don't have an if in
2509 # write the whole loop for posix/Windows so we don't have an if in
2501 # the innermost part
2510 # the innermost part
2502 if os.name == 'posix':
2511 if os.name == 'posix':
2503 for pdir in path:
2512 for pdir in path:
2504 os.chdir(pdir)
2513 os.chdir(pdir)
2505 for ff in os.listdir(pdir):
2514 for ff in os.listdir(pdir):
2506 if isexec(ff) and ff not in self.shell.no_alias:
2515 if isexec(ff) and ff not in self.shell.no_alias:
2507 # each entry in the alias table must be (N,name),
2516 # each entry in the alias table must be (N,name),
2508 # where N is the number of positional arguments of the
2517 # where N is the number of positional arguments of the
2509 # alias.
2518 # alias.
2510 alias_table[ff] = (0,ff)
2519 alias_table[ff] = (0,ff)
2511 syscmdlist.append(ff)
2520 syscmdlist.append(ff)
2512 else:
2521 else:
2513 for pdir in path:
2522 for pdir in path:
2514 os.chdir(pdir)
2523 os.chdir(pdir)
2515 for ff in os.listdir(pdir):
2524 for ff in os.listdir(pdir):
2516 base, ext = os.path.splitext(ff)
2525 base, ext = os.path.splitext(ff)
2517 if isexec(ff) and base not in self.shell.no_alias:
2526 if isexec(ff) and base not in self.shell.no_alias:
2518 if ext.lower() == '.exe':
2527 if ext.lower() == '.exe':
2519 ff = base
2528 ff = base
2520 alias_table[base] = (0,ff)
2529 alias_table[base] = (0,ff)
2521 syscmdlist.append(ff)
2530 syscmdlist.append(ff)
2522 # Make sure the alias table doesn't contain keywords or builtins
2531 # Make sure the alias table doesn't contain keywords or builtins
2523 self.shell.alias_table_validate()
2532 self.shell.alias_table_validate()
2524 # Call again init_auto_alias() so we get 'rm -i' and other
2533 # Call again init_auto_alias() so we get 'rm -i' and other
2525 # modified aliases since %rehashx will probably clobber them
2534 # modified aliases since %rehashx will probably clobber them
2526 self.shell.init_auto_alias()
2535 self.shell.init_auto_alias()
2527 db = self.getapi().db
2536 db = self.getapi().db
2528 db['syscmdlist'] = syscmdlist
2537 db['syscmdlist'] = syscmdlist
2529 finally:
2538 finally:
2530 os.chdir(savedir)
2539 os.chdir(savedir)
2531
2540
2532 def magic_pwd(self, parameter_s = ''):
2541 def magic_pwd(self, parameter_s = ''):
2533 """Return the current working directory path."""
2542 """Return the current working directory path."""
2534 return os.getcwd()
2543 return os.getcwd()
2535
2544
2536 def magic_cd(self, parameter_s=''):
2545 def magic_cd(self, parameter_s=''):
2537 """Change the current working directory.
2546 """Change the current working directory.
2538
2547
2539 This command automatically maintains an internal list of directories
2548 This command automatically maintains an internal list of directories
2540 you visit during your IPython session, in the variable _dh. The
2549 you visit during your IPython session, in the variable _dh. The
2541 command %dhist shows this history nicely formatted. You can also
2550 command %dhist shows this history nicely formatted. You can also
2542 do 'cd -<tab>' to see directory history conveniently.
2551 do 'cd -<tab>' to see directory history conveniently.
2543
2552
2544 Usage:
2553 Usage:
2545
2554
2546 cd 'dir': changes to directory 'dir'.
2555 cd 'dir': changes to directory 'dir'.
2547
2556
2548 cd -: changes to the last visited directory.
2557 cd -: changes to the last visited directory.
2549
2558
2550 cd -<n>: changes to the n-th directory in the directory history.
2559 cd -<n>: changes to the n-th directory in the directory history.
2551
2560
2552 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2561 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2553 (note: cd <bookmark_name> is enough if there is no
2562 (note: cd <bookmark_name> is enough if there is no
2554 directory <bookmark_name>, but a bookmark with the name exists.)
2563 directory <bookmark_name>, but a bookmark with the name exists.)
2555 'cd -b <tab>' allows you to tab-complete bookmark names.
2564 'cd -b <tab>' allows you to tab-complete bookmark names.
2556
2565
2557 Options:
2566 Options:
2558
2567
2559 -q: quiet. Do not print the working directory after the cd command is
2568 -q: quiet. Do not print the working directory after the cd command is
2560 executed. By default IPython's cd command does print this directory,
2569 executed. By default IPython's cd command does print this directory,
2561 since the default prompts do not display path information.
2570 since the default prompts do not display path information.
2562
2571
2563 Note that !cd doesn't work for this purpose because the shell where
2572 Note that !cd doesn't work for this purpose because the shell where
2564 !command runs is immediately discarded after executing 'command'."""
2573 !command runs is immediately discarded after executing 'command'."""
2565
2574
2566 parameter_s = parameter_s.strip()
2575 parameter_s = parameter_s.strip()
2567 #bkms = self.shell.persist.get("bookmarks",{})
2576 #bkms = self.shell.persist.get("bookmarks",{})
2568
2577
2569 numcd = re.match(r'(-)(\d+)$',parameter_s)
2578 numcd = re.match(r'(-)(\d+)$',parameter_s)
2570 # jump in directory history by number
2579 # jump in directory history by number
2571 if numcd:
2580 if numcd:
2572 nn = int(numcd.group(2))
2581 nn = int(numcd.group(2))
2573 try:
2582 try:
2574 ps = self.shell.user_ns['_dh'][nn]
2583 ps = self.shell.user_ns['_dh'][nn]
2575 except IndexError:
2584 except IndexError:
2576 print 'The requested directory does not exist in history.'
2585 print 'The requested directory does not exist in history.'
2577 return
2586 return
2578 else:
2587 else:
2579 opts = {}
2588 opts = {}
2580 else:
2589 else:
2581 #turn all non-space-escaping backslashes to slashes,
2590 #turn all non-space-escaping backslashes to slashes,
2582 # for c:\windows\directory\names\
2591 # for c:\windows\directory\names\
2583 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2592 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2584 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2593 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2585 # jump to previous
2594 # jump to previous
2586 if ps == '-':
2595 if ps == '-':
2587 try:
2596 try:
2588 ps = self.shell.user_ns['_dh'][-2]
2597 ps = self.shell.user_ns['_dh'][-2]
2589 except IndexError:
2598 except IndexError:
2590 print 'No previous directory to change to.'
2599 print 'No previous directory to change to.'
2591 return
2600 return
2592 # jump to bookmark if needed
2601 # jump to bookmark if needed
2593 else:
2602 else:
2594 if not os.path.isdir(ps) or opts.has_key('b'):
2603 if not os.path.isdir(ps) or opts.has_key('b'):
2595 bkms = self.db.get('bookmarks', {})
2604 bkms = self.db.get('bookmarks', {})
2596
2605
2597 if bkms.has_key(ps):
2606 if bkms.has_key(ps):
2598 target = bkms[ps]
2607 target = bkms[ps]
2599 print '(bookmark:%s) -> %s' % (ps,target)
2608 print '(bookmark:%s) -> %s' % (ps,target)
2600 ps = target
2609 ps = target
2601 else:
2610 else:
2602 if opts.has_key('b'):
2611 if opts.has_key('b'):
2603 error("Bookmark '%s' not found. "
2612 error("Bookmark '%s' not found. "
2604 "Use '%%bookmark -l' to see your bookmarks." % ps)
2613 "Use '%%bookmark -l' to see your bookmarks." % ps)
2605 return
2614 return
2606
2615
2607 # at this point ps should point to the target dir
2616 # at this point ps should point to the target dir
2608 if ps:
2617 if ps:
2609 try:
2618 try:
2610 os.chdir(os.path.expanduser(ps))
2619 os.chdir(os.path.expanduser(ps))
2611 ttitle = ("IPy:" + (
2620 ttitle = ("IPy:" + (
2612 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2621 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2613 platutils.set_term_title(ttitle)
2622 platutils.set_term_title(ttitle)
2614 except OSError:
2623 except OSError:
2615 print sys.exc_info()[1]
2624 print sys.exc_info()[1]
2616 else:
2625 else:
2617 self.shell.user_ns['_dh'].append(os.getcwd())
2626 self.shell.user_ns['_dh'].append(os.getcwd())
2618 else:
2627 else:
2619 os.chdir(self.shell.home_dir)
2628 os.chdir(self.shell.home_dir)
2620 platutils.set_term_title("IPy:~")
2629 platutils.set_term_title("IPy:~")
2621 self.shell.user_ns['_dh'].append(os.getcwd())
2630 self.shell.user_ns['_dh'].append(os.getcwd())
2622 if not 'q' in opts:
2631 if not 'q' in opts:
2623 print self.shell.user_ns['_dh'][-1]
2632 print self.shell.user_ns['_dh'][-1]
2624
2633
2625 def magic_dhist(self, parameter_s=''):
2634 def magic_dhist(self, parameter_s=''):
2626 """Print your history of visited directories.
2635 """Print your history of visited directories.
2627
2636
2628 %dhist -> print full history\\
2637 %dhist -> print full history\\
2629 %dhist n -> print last n entries only\\
2638 %dhist n -> print last n entries only\\
2630 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2639 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2631
2640
2632 This history is automatically maintained by the %cd command, and
2641 This history is automatically maintained by the %cd command, and
2633 always available as the global list variable _dh. You can use %cd -<n>
2642 always available as the global list variable _dh. You can use %cd -<n>
2634 to go to directory number <n>."""
2643 to go to directory number <n>."""
2635
2644
2636 dh = self.shell.user_ns['_dh']
2645 dh = self.shell.user_ns['_dh']
2637 if parameter_s:
2646 if parameter_s:
2638 try:
2647 try:
2639 args = map(int,parameter_s.split())
2648 args = map(int,parameter_s.split())
2640 except:
2649 except:
2641 self.arg_err(Magic.magic_dhist)
2650 self.arg_err(Magic.magic_dhist)
2642 return
2651 return
2643 if len(args) == 1:
2652 if len(args) == 1:
2644 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2653 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2645 elif len(args) == 2:
2654 elif len(args) == 2:
2646 ini,fin = args
2655 ini,fin = args
2647 else:
2656 else:
2648 self.arg_err(Magic.magic_dhist)
2657 self.arg_err(Magic.magic_dhist)
2649 return
2658 return
2650 else:
2659 else:
2651 ini,fin = 0,len(dh)
2660 ini,fin = 0,len(dh)
2652 nlprint(dh,
2661 nlprint(dh,
2653 header = 'Directory history (kept in _dh)',
2662 header = 'Directory history (kept in _dh)',
2654 start=ini,stop=fin)
2663 start=ini,stop=fin)
2655
2664
2656 def magic_env(self, parameter_s=''):
2665 def magic_env(self, parameter_s=''):
2657 """List environment variables."""
2666 """List environment variables."""
2658
2667
2659 return os.environ.data
2668 return os.environ.data
2660
2669
2661 def magic_pushd(self, parameter_s=''):
2670 def magic_pushd(self, parameter_s=''):
2662 """Place the current dir on stack and change directory.
2671 """Place the current dir on stack and change directory.
2663
2672
2664 Usage:\\
2673 Usage:\\
2665 %pushd ['dirname']
2674 %pushd ['dirname']
2666
2675
2667 %pushd with no arguments does a %pushd to your home directory.
2676 %pushd with no arguments does a %pushd to your home directory.
2668 """
2677 """
2669 if parameter_s == '': parameter_s = '~'
2678 if parameter_s == '': parameter_s = '~'
2670 dir_s = self.shell.dir_stack
2679 dir_s = self.shell.dir_stack
2671 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2680 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2672 os.path.expanduser(self.shell.dir_stack[0]):
2681 os.path.expanduser(self.shell.dir_stack[0]):
2673 try:
2682 try:
2674 self.magic_cd(parameter_s)
2683 self.magic_cd(parameter_s)
2675 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2684 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2676 self.magic_dirs()
2685 self.magic_dirs()
2677 except:
2686 except:
2678 print 'Invalid directory'
2687 print 'Invalid directory'
2679 else:
2688 else:
2680 print 'You are already there!'
2689 print 'You are already there!'
2681
2690
2682 def magic_popd(self, parameter_s=''):
2691 def magic_popd(self, parameter_s=''):
2683 """Change to directory popped off the top of the stack.
2692 """Change to directory popped off the top of the stack.
2684 """
2693 """
2685 if len (self.shell.dir_stack) > 1:
2694 if len (self.shell.dir_stack) > 1:
2686 self.shell.dir_stack.pop(0)
2695 self.shell.dir_stack.pop(0)
2687 self.magic_cd(self.shell.dir_stack[0])
2696 self.magic_cd(self.shell.dir_stack[0])
2688 print self.shell.dir_stack[0]
2697 print self.shell.dir_stack[0]
2689 else:
2698 else:
2690 print "You can't remove the starting directory from the stack:",\
2699 print "You can't remove the starting directory from the stack:",\
2691 self.shell.dir_stack
2700 self.shell.dir_stack
2692
2701
2693 def magic_dirs(self, parameter_s=''):
2702 def magic_dirs(self, parameter_s=''):
2694 """Return the current directory stack."""
2703 """Return the current directory stack."""
2695
2704
2696 return self.shell.dir_stack[:]
2705 return self.shell.dir_stack[:]
2697
2706
2698 def magic_sc(self, parameter_s=''):
2707 def magic_sc(self, parameter_s=''):
2699 """Shell capture - execute a shell command and capture its output.
2708 """Shell capture - execute a shell command and capture its output.
2700
2709
2701 DEPRECATED. Suboptimal, retained for backwards compatibility.
2710 DEPRECATED. Suboptimal, retained for backwards compatibility.
2702
2711
2703 You should use the form 'var = !command' instead. Example:
2712 You should use the form 'var = !command' instead. Example:
2704
2713
2705 "%sc -l myfiles = ls ~" should now be written as
2714 "%sc -l myfiles = ls ~" should now be written as
2706
2715
2707 "myfiles = !ls ~"
2716 "myfiles = !ls ~"
2708
2717
2709 myfiles.s, myfiles.l and myfiles.n still apply as documented
2718 myfiles.s, myfiles.l and myfiles.n still apply as documented
2710 below.
2719 below.
2711
2720
2712 --
2721 --
2713 %sc [options] varname=command
2722 %sc [options] varname=command
2714
2723
2715 IPython will run the given command using commands.getoutput(), and
2724 IPython will run the given command using commands.getoutput(), and
2716 will then update the user's interactive namespace with a variable
2725 will then update the user's interactive namespace with a variable
2717 called varname, containing the value of the call. Your command can
2726 called varname, containing the value of the call. Your command can
2718 contain shell wildcards, pipes, etc.
2727 contain shell wildcards, pipes, etc.
2719
2728
2720 The '=' sign in the syntax is mandatory, and the variable name you
2729 The '=' sign in the syntax is mandatory, and the variable name you
2721 supply must follow Python's standard conventions for valid names.
2730 supply must follow Python's standard conventions for valid names.
2722
2731
2723 (A special format without variable name exists for internal use)
2732 (A special format without variable name exists for internal use)
2724
2733
2725 Options:
2734 Options:
2726
2735
2727 -l: list output. Split the output on newlines into a list before
2736 -l: list output. Split the output on newlines into a list before
2728 assigning it to the given variable. By default the output is stored
2737 assigning it to the given variable. By default the output is stored
2729 as a single string.
2738 as a single string.
2730
2739
2731 -v: verbose. Print the contents of the variable.
2740 -v: verbose. Print the contents of the variable.
2732
2741
2733 In most cases you should not need to split as a list, because the
2742 In most cases you should not need to split as a list, because the
2734 returned value is a special type of string which can automatically
2743 returned value is a special type of string which can automatically
2735 provide its contents either as a list (split on newlines) or as a
2744 provide its contents either as a list (split on newlines) or as a
2736 space-separated string. These are convenient, respectively, either
2745 space-separated string. These are convenient, respectively, either
2737 for sequential processing or to be passed to a shell command.
2746 for sequential processing or to be passed to a shell command.
2738
2747
2739 For example:
2748 For example:
2740
2749
2741 # Capture into variable a
2750 # Capture into variable a
2742 In [9]: sc a=ls *py
2751 In [9]: sc a=ls *py
2743
2752
2744 # a is a string with embedded newlines
2753 # a is a string with embedded newlines
2745 In [10]: a
2754 In [10]: a
2746 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2755 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2747
2756
2748 # which can be seen as a list:
2757 # which can be seen as a list:
2749 In [11]: a.l
2758 In [11]: a.l
2750 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2759 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2751
2760
2752 # or as a whitespace-separated string:
2761 # or as a whitespace-separated string:
2753 In [12]: a.s
2762 In [12]: a.s
2754 Out[12]: 'setup.py win32_manual_post_install.py'
2763 Out[12]: 'setup.py win32_manual_post_install.py'
2755
2764
2756 # a.s is useful to pass as a single command line:
2765 # a.s is useful to pass as a single command line:
2757 In [13]: !wc -l $a.s
2766 In [13]: !wc -l $a.s
2758 146 setup.py
2767 146 setup.py
2759 130 win32_manual_post_install.py
2768 130 win32_manual_post_install.py
2760 276 total
2769 276 total
2761
2770
2762 # while the list form is useful to loop over:
2771 # while the list form is useful to loop over:
2763 In [14]: for f in a.l:
2772 In [14]: for f in a.l:
2764 ....: !wc -l $f
2773 ....: !wc -l $f
2765 ....:
2774 ....:
2766 146 setup.py
2775 146 setup.py
2767 130 win32_manual_post_install.py
2776 130 win32_manual_post_install.py
2768
2777
2769 Similiarly, the lists returned by the -l option are also special, in
2778 Similiarly, the lists returned by the -l option are also special, in
2770 the sense that you can equally invoke the .s attribute on them to
2779 the sense that you can equally invoke the .s attribute on them to
2771 automatically get a whitespace-separated string from their contents:
2780 automatically get a whitespace-separated string from their contents:
2772
2781
2773 In [1]: sc -l b=ls *py
2782 In [1]: sc -l b=ls *py
2774
2783
2775 In [2]: b
2784 In [2]: b
2776 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2785 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2777
2786
2778 In [3]: b.s
2787 In [3]: b.s
2779 Out[3]: 'setup.py win32_manual_post_install.py'
2788 Out[3]: 'setup.py win32_manual_post_install.py'
2780
2789
2781 In summary, both the lists and strings used for ouptut capture have
2790 In summary, both the lists and strings used for ouptut capture have
2782 the following special attributes:
2791 the following special attributes:
2783
2792
2784 .l (or .list) : value as list.
2793 .l (or .list) : value as list.
2785 .n (or .nlstr): value as newline-separated string.
2794 .n (or .nlstr): value as newline-separated string.
2786 .s (or .spstr): value as space-separated string.
2795 .s (or .spstr): value as space-separated string.
2787 """
2796 """
2788
2797
2789 opts,args = self.parse_options(parameter_s,'lv')
2798 opts,args = self.parse_options(parameter_s,'lv')
2790 # Try to get a variable name and command to run
2799 # Try to get a variable name and command to run
2791 try:
2800 try:
2792 # the variable name must be obtained from the parse_options
2801 # the variable name must be obtained from the parse_options
2793 # output, which uses shlex.split to strip options out.
2802 # output, which uses shlex.split to strip options out.
2794 var,_ = args.split('=',1)
2803 var,_ = args.split('=',1)
2795 var = var.strip()
2804 var = var.strip()
2796 # But the the command has to be extracted from the original input
2805 # But the the command has to be extracted from the original input
2797 # parameter_s, not on what parse_options returns, to avoid the
2806 # parameter_s, not on what parse_options returns, to avoid the
2798 # quote stripping which shlex.split performs on it.
2807 # quote stripping which shlex.split performs on it.
2799 _,cmd = parameter_s.split('=',1)
2808 _,cmd = parameter_s.split('=',1)
2800 except ValueError:
2809 except ValueError:
2801 var,cmd = '',''
2810 var,cmd = '',''
2802 # If all looks ok, proceed
2811 # If all looks ok, proceed
2803 out,err = self.shell.getoutputerror(cmd)
2812 out,err = self.shell.getoutputerror(cmd)
2804 if err:
2813 if err:
2805 print >> Term.cerr,err
2814 print >> Term.cerr,err
2806 if opts.has_key('l'):
2815 if opts.has_key('l'):
2807 out = SList(out.split('\n'))
2816 out = SList(out.split('\n'))
2808 else:
2817 else:
2809 out = LSString(out)
2818 out = LSString(out)
2810 if opts.has_key('v'):
2819 if opts.has_key('v'):
2811 print '%s ==\n%s' % (var,pformat(out))
2820 print '%s ==\n%s' % (var,pformat(out))
2812 if var:
2821 if var:
2813 self.shell.user_ns.update({var:out})
2822 self.shell.user_ns.update({var:out})
2814 else:
2823 else:
2815 return out
2824 return out
2816
2825
2817 def magic_sx(self, parameter_s=''):
2826 def magic_sx(self, parameter_s=''):
2818 """Shell execute - run a shell command and capture its output.
2827 """Shell execute - run a shell command and capture its output.
2819
2828
2820 %sx command
2829 %sx command
2821
2830
2822 IPython will run the given command using commands.getoutput(), and
2831 IPython will run the given command using commands.getoutput(), and
2823 return the result formatted as a list (split on '\\n'). Since the
2832 return the result formatted as a list (split on '\\n'). Since the
2824 output is _returned_, it will be stored in ipython's regular output
2833 output is _returned_, it will be stored in ipython's regular output
2825 cache Out[N] and in the '_N' automatic variables.
2834 cache Out[N] and in the '_N' automatic variables.
2826
2835
2827 Notes:
2836 Notes:
2828
2837
2829 1) If an input line begins with '!!', then %sx is automatically
2838 1) If an input line begins with '!!', then %sx is automatically
2830 invoked. That is, while:
2839 invoked. That is, while:
2831 !ls
2840 !ls
2832 causes ipython to simply issue system('ls'), typing
2841 causes ipython to simply issue system('ls'), typing
2833 !!ls
2842 !!ls
2834 is a shorthand equivalent to:
2843 is a shorthand equivalent to:
2835 %sx ls
2844 %sx ls
2836
2845
2837 2) %sx differs from %sc in that %sx automatically splits into a list,
2846 2) %sx differs from %sc in that %sx automatically splits into a list,
2838 like '%sc -l'. The reason for this is to make it as easy as possible
2847 like '%sc -l'. The reason for this is to make it as easy as possible
2839 to process line-oriented shell output via further python commands.
2848 to process line-oriented shell output via further python commands.
2840 %sc is meant to provide much finer control, but requires more
2849 %sc is meant to provide much finer control, but requires more
2841 typing.
2850 typing.
2842
2851
2843 3) Just like %sc -l, this is a list with special attributes:
2852 3) Just like %sc -l, this is a list with special attributes:
2844
2853
2845 .l (or .list) : value as list.
2854 .l (or .list) : value as list.
2846 .n (or .nlstr): value as newline-separated string.
2855 .n (or .nlstr): value as newline-separated string.
2847 .s (or .spstr): value as whitespace-separated string.
2856 .s (or .spstr): value as whitespace-separated string.
2848
2857
2849 This is very useful when trying to use such lists as arguments to
2858 This is very useful when trying to use such lists as arguments to
2850 system commands."""
2859 system commands."""
2851
2860
2852 if parameter_s:
2861 if parameter_s:
2853 out,err = self.shell.getoutputerror(parameter_s)
2862 out,err = self.shell.getoutputerror(parameter_s)
2854 if err:
2863 if err:
2855 print >> Term.cerr,err
2864 print >> Term.cerr,err
2856 return SList(out.split('\n'))
2865 return SList(out.split('\n'))
2857
2866
2858 def magic_bg(self, parameter_s=''):
2867 def magic_bg(self, parameter_s=''):
2859 """Run a job in the background, in a separate thread.
2868 """Run a job in the background, in a separate thread.
2860
2869
2861 For example,
2870 For example,
2862
2871
2863 %bg myfunc(x,y,z=1)
2872 %bg myfunc(x,y,z=1)
2864
2873
2865 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2874 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2866 execution starts, a message will be printed indicating the job
2875 execution starts, a message will be printed indicating the job
2867 number. If your job number is 5, you can use
2876 number. If your job number is 5, you can use
2868
2877
2869 myvar = jobs.result(5) or myvar = jobs[5].result
2878 myvar = jobs.result(5) or myvar = jobs[5].result
2870
2879
2871 to assign this result to variable 'myvar'.
2880 to assign this result to variable 'myvar'.
2872
2881
2873 IPython has a job manager, accessible via the 'jobs' object. You can
2882 IPython has a job manager, accessible via the 'jobs' object. You can
2874 type jobs? to get more information about it, and use jobs.<TAB> to see
2883 type jobs? to get more information about it, and use jobs.<TAB> to see
2875 its attributes. All attributes not starting with an underscore are
2884 its attributes. All attributes not starting with an underscore are
2876 meant for public use.
2885 meant for public use.
2877
2886
2878 In particular, look at the jobs.new() method, which is used to create
2887 In particular, look at the jobs.new() method, which is used to create
2879 new jobs. This magic %bg function is just a convenience wrapper
2888 new jobs. This magic %bg function is just a convenience wrapper
2880 around jobs.new(), for expression-based jobs. If you want to create a
2889 around jobs.new(), for expression-based jobs. If you want to create a
2881 new job with an explicit function object and arguments, you must call
2890 new job with an explicit function object and arguments, you must call
2882 jobs.new() directly.
2891 jobs.new() directly.
2883
2892
2884 The jobs.new docstring also describes in detail several important
2893 The jobs.new docstring also describes in detail several important
2885 caveats associated with a thread-based model for background job
2894 caveats associated with a thread-based model for background job
2886 execution. Type jobs.new? for details.
2895 execution. Type jobs.new? for details.
2887
2896
2888 You can check the status of all jobs with jobs.status().
2897 You can check the status of all jobs with jobs.status().
2889
2898
2890 The jobs variable is set by IPython into the Python builtin namespace.
2899 The jobs variable is set by IPython into the Python builtin namespace.
2891 If you ever declare a variable named 'jobs', you will shadow this
2900 If you ever declare a variable named 'jobs', you will shadow this
2892 name. You can either delete your global jobs variable to regain
2901 name. You can either delete your global jobs variable to regain
2893 access to the job manager, or make a new name and assign it manually
2902 access to the job manager, or make a new name and assign it manually
2894 to the manager (stored in IPython's namespace). For example, to
2903 to the manager (stored in IPython's namespace). For example, to
2895 assign the job manager to the Jobs name, use:
2904 assign the job manager to the Jobs name, use:
2896
2905
2897 Jobs = __builtins__.jobs"""
2906 Jobs = __builtins__.jobs"""
2898
2907
2899 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2908 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2900
2909
2901
2910
2902 def magic_bookmark(self, parameter_s=''):
2911 def magic_bookmark(self, parameter_s=''):
2903 """Manage IPython's bookmark system.
2912 """Manage IPython's bookmark system.
2904
2913
2905 %bookmark <name> - set bookmark to current dir
2914 %bookmark <name> - set bookmark to current dir
2906 %bookmark <name> <dir> - set bookmark to <dir>
2915 %bookmark <name> <dir> - set bookmark to <dir>
2907 %bookmark -l - list all bookmarks
2916 %bookmark -l - list all bookmarks
2908 %bookmark -d <name> - remove bookmark
2917 %bookmark -d <name> - remove bookmark
2909 %bookmark -r - remove all bookmarks
2918 %bookmark -r - remove all bookmarks
2910
2919
2911 You can later on access a bookmarked folder with:
2920 You can later on access a bookmarked folder with:
2912 %cd -b <name>
2921 %cd -b <name>
2913 or simply '%cd <name>' if there is no directory called <name> AND
2922 or simply '%cd <name>' if there is no directory called <name> AND
2914 there is such a bookmark defined.
2923 there is such a bookmark defined.
2915
2924
2916 Your bookmarks persist through IPython sessions, but they are
2925 Your bookmarks persist through IPython sessions, but they are
2917 associated with each profile."""
2926 associated with each profile."""
2918
2927
2919 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2928 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2920 if len(args) > 2:
2929 if len(args) > 2:
2921 error('You can only give at most two arguments')
2930 error('You can only give at most two arguments')
2922 return
2931 return
2923
2932
2924 bkms = self.db.get('bookmarks',{})
2933 bkms = self.db.get('bookmarks',{})
2925
2934
2926 if opts.has_key('d'):
2935 if opts.has_key('d'):
2927 try:
2936 try:
2928 todel = args[0]
2937 todel = args[0]
2929 except IndexError:
2938 except IndexError:
2930 error('You must provide a bookmark to delete')
2939 error('You must provide a bookmark to delete')
2931 else:
2940 else:
2932 try:
2941 try:
2933 del bkms[todel]
2942 del bkms[todel]
2934 except:
2943 except:
2935 error("Can't delete bookmark '%s'" % todel)
2944 error("Can't delete bookmark '%s'" % todel)
2936 elif opts.has_key('r'):
2945 elif opts.has_key('r'):
2937 bkms = {}
2946 bkms = {}
2938 elif opts.has_key('l'):
2947 elif opts.has_key('l'):
2939 bks = bkms.keys()
2948 bks = bkms.keys()
2940 bks.sort()
2949 bks.sort()
2941 if bks:
2950 if bks:
2942 size = max(map(len,bks))
2951 size = max(map(len,bks))
2943 else:
2952 else:
2944 size = 0
2953 size = 0
2945 fmt = '%-'+str(size)+'s -> %s'
2954 fmt = '%-'+str(size)+'s -> %s'
2946 print 'Current bookmarks:'
2955 print 'Current bookmarks:'
2947 for bk in bks:
2956 for bk in bks:
2948 print fmt % (bk,bkms[bk])
2957 print fmt % (bk,bkms[bk])
2949 else:
2958 else:
2950 if not args:
2959 if not args:
2951 error("You must specify the bookmark name")
2960 error("You must specify the bookmark name")
2952 elif len(args)==1:
2961 elif len(args)==1:
2953 bkms[args[0]] = os.getcwd()
2962 bkms[args[0]] = os.getcwd()
2954 elif len(args)==2:
2963 elif len(args)==2:
2955 bkms[args[0]] = args[1]
2964 bkms[args[0]] = args[1]
2956 self.db['bookmarks'] = bkms
2965 self.db['bookmarks'] = bkms
2957
2966
2958 def magic_pycat(self, parameter_s=''):
2967 def magic_pycat(self, parameter_s=''):
2959 """Show a syntax-highlighted file through a pager.
2968 """Show a syntax-highlighted file through a pager.
2960
2969
2961 This magic is similar to the cat utility, but it will assume the file
2970 This magic is similar to the cat utility, but it will assume the file
2962 to be Python source and will show it with syntax highlighting. """
2971 to be Python source and will show it with syntax highlighting. """
2963
2972
2964 try:
2973 try:
2965 filename = get_py_filename(parameter_s)
2974 filename = get_py_filename(parameter_s)
2966 cont = file_read(filename)
2975 cont = file_read(filename)
2967 except IOError:
2976 except IOError:
2968 try:
2977 try:
2969 cont = eval(parameter_s,self.user_ns)
2978 cont = eval(parameter_s,self.user_ns)
2970 except NameError:
2979 except NameError:
2971 cont = None
2980 cont = None
2972 if cont is None:
2981 if cont is None:
2973 print "Error: no such file or variable"
2982 print "Error: no such file or variable"
2974 return
2983 return
2975
2984
2976 page(self.shell.pycolorize(cont),
2985 page(self.shell.pycolorize(cont),
2977 screen_lines=self.shell.rc.screen_length)
2986 screen_lines=self.shell.rc.screen_length)
2978
2987
2979 def magic_cpaste(self, parameter_s=''):
2988 def magic_cpaste(self, parameter_s=''):
2980 """Allows you to paste & execute a pre-formatted code block from clipboard
2989 """Allows you to paste & execute a pre-formatted code block from clipboard
2981
2990
2982 You must terminate the block with '--' (two minus-signs) alone on the
2991 You must terminate the block with '--' (two minus-signs) alone on the
2983 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2992 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2984 is the new sentinel for this operation)
2993 is the new sentinel for this operation)
2985
2994
2986 The block is dedented prior to execution to enable execution of
2995 The block is dedented prior to execution to enable execution of
2987 method definitions. '>' characters at the beginning of a line is
2996 method definitions. '>' characters at the beginning of a line is
2988 ignored, to allow pasting directly from e-mails. The executed block
2997 ignored, to allow pasting directly from e-mails. The executed block
2989 is also assigned to variable named 'pasted_block' for later editing
2998 is also assigned to variable named 'pasted_block' for later editing
2990 with '%edit pasted_block'.
2999 with '%edit pasted_block'.
2991
3000
2992 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3001 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2993 This assigns the pasted block to variable 'foo' as string, without
3002 This assigns the pasted block to variable 'foo' as string, without
2994 dedenting or executing it.
3003 dedenting or executing it.
2995
3004
2996 Do not be alarmed by garbled output on Windows (it's a readline bug).
3005 Do not be alarmed by garbled output on Windows (it's a readline bug).
2997 Just press enter and type -- (and press enter again) and the block
3006 Just press enter and type -- (and press enter again) and the block
2998 will be what was just pasted.
3007 will be what was just pasted.
2999
3008
3000 IPython statements (magics, shell escapes) are not supported (yet).
3009 IPython statements (magics, shell escapes) are not supported (yet).
3001 """
3010 """
3002 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3011 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3003 par = args.strip()
3012 par = args.strip()
3004 sentinel = opts.get('s','--')
3013 sentinel = opts.get('s','--')
3005
3014
3006 from IPython import iplib
3015 from IPython import iplib
3007 lines = []
3016 lines = []
3008 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3017 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3009 while 1:
3018 while 1:
3010 l = iplib.raw_input_original(':')
3019 l = iplib.raw_input_original(':')
3011 if l ==sentinel:
3020 if l ==sentinel:
3012 break
3021 break
3013 lines.append(l.lstrip('>'))
3022 lines.append(l.lstrip('>'))
3014 block = "\n".join(lines) + '\n'
3023 block = "\n".join(lines) + '\n'
3015 #print "block:\n",block
3024 #print "block:\n",block
3016 if not par:
3025 if not par:
3017 b = textwrap.dedent(block)
3026 b = textwrap.dedent(block)
3018 exec b in self.user_ns
3027 exec b in self.user_ns
3019 self.user_ns['pasted_block'] = b
3028 self.user_ns['pasted_block'] = b
3020 else:
3029 else:
3021 self.user_ns[par] = block
3030 self.user_ns[par] = block
3022 print "Block assigned to '%s'" % par
3031 print "Block assigned to '%s'" % par
3023
3032
3024 def magic_quickref(self,arg):
3033 def magic_quickref(self,arg):
3025 """ Show a quick reference sheet """
3034 """ Show a quick reference sheet """
3026 import IPython.usage
3035 import IPython.usage
3027 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3036 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3028
3037
3029 page(qr)
3038 page(qr)
3030
3039
3031 def magic_upgrade(self,arg):
3040 def magic_upgrade(self,arg):
3032 """ Upgrade your IPython installation
3041 """ Upgrade your IPython installation
3033
3042
3034 This will copy the config files that don't yet exist in your
3043 This will copy the config files that don't yet exist in your
3035 ipython dir from the system config dir. Use this after upgrading
3044 ipython dir from the system config dir. Use this after upgrading
3036 IPython if you don't wish to delete your .ipython dir.
3045 IPython if you don't wish to delete your .ipython dir.
3037
3046
3038 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3047 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3039 new users)
3048 new users)
3040
3049
3041 """
3050 """
3042 ip = self.getapi()
3051 ip = self.getapi()
3043 ipinstallation = path(IPython.__file__).dirname()
3052 ipinstallation = path(IPython.__file__).dirname()
3044 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3053 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3045 src_config = ipinstallation / 'UserConfig'
3054 src_config = ipinstallation / 'UserConfig'
3046 userdir = path(ip.options.ipythondir)
3055 userdir = path(ip.options.ipythondir)
3047 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3056 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3048 print ">",cmd
3057 print ">",cmd
3049 shell(cmd)
3058 shell(cmd)
3050 if arg == '-nolegacy':
3059 if arg == '-nolegacy':
3051 legacy = userdir.files('ipythonrc*')
3060 legacy = userdir.files('ipythonrc*')
3052 print "Nuking legacy files:",legacy
3061 print "Nuking legacy files:",legacy
3053
3062
3054 [p.remove() for p in legacy]
3063 [p.remove() for p in legacy]
3055 suffix = (sys.platform == 'win32' and '.ini' or '')
3064 suffix = (sys.platform == 'win32' and '.ini' or '')
3056 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3065 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3057
3066
3058
3067
3059 # end Magic
3068 # end Magic
@@ -1,6082 +1,6086 b''
1 2006-12-12 Ville Vainio <vivainio@gmail.com>
1 2006-12-12 Ville Vainio <vivainio@gmail.com>
2
2
3 * ipmaker.py: apply david cournapeau's patch to make
3 * ipmaker.py: apply david cournapeau's patch to make
4 import_some work properly even when ipythonrc does
4 import_some work properly even when ipythonrc does
5 import_some on empty list (it was an old bug!).
5 import_some on empty list (it was an old bug!).
6
6
7 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
7 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
8 Add deprecation note to ipythonrc and a url to wiki
8 Add deprecation note to ipythonrc and a url to wiki
9 in ipy_user_conf.py
9 in ipy_user_conf.py
10
11 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
12 as if it was typed on IPython command prompt, i.e.
13 as IPython script.
10
14
11 2006-12-08 Ville Vainio <vivainio@gmail.com>
15 2006-12-08 Ville Vainio <vivainio@gmail.com>
12
16
13 * Extensions/ipy_stock_completers.py.py: fix cd completer
17 * Extensions/ipy_stock_completers.py.py: fix cd completer
14 to translate /'s to \'s again.
18 to translate /'s to \'s again.
15
19
16 * completer.py: prevent traceback on file completions w/
20 * completer.py: prevent traceback on file completions w/
17 backslash.
21 backslash.
18
22
19 * Release.py: Update release number to 0.7.3b3 for release
23 * Release.py: Update release number to 0.7.3b3 for release
20
24
21 2006-12-07 Ville Vainio <vivainio@gmail.com>
25 2006-12-07 Ville Vainio <vivainio@gmail.com>
22
26
23 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
27 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
24 while executing external code. Provides more shell-like behaviour
28 while executing external code. Provides more shell-like behaviour
25 and overall better response to ctrl + C / ctrl + break.
29 and overall better response to ctrl + C / ctrl + break.
26
30
27 * tools/make_tarball.py: new script to create tarball straight from svn
31 * tools/make_tarball.py: new script to create tarball straight from svn
28 (setup.py sdist doesn't work on win32).
32 (setup.py sdist doesn't work on win32).
29
33
30 * Extensions/ipy_stock_completers.py: fix cd completer to give up
34 * Extensions/ipy_stock_completers.py: fix cd completer to give up
31 on dirnames with spaces and use the default completer instead.
35 on dirnames with spaces and use the default completer instead.
32
36
33 * Revision.py: Change version to 0.7.3b2 for release.
37 * Revision.py: Change version to 0.7.3b2 for release.
34
38
35 2006-12-05 Ville Vainio <vivainio@gmail.com>
39 2006-12-05 Ville Vainio <vivainio@gmail.com>
36
40
37 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
41 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
38 pydb patch 4 (rm debug printing, py 2.5 checking)
42 pydb patch 4 (rm debug printing, py 2.5 checking)
39
43
40 2006-11-30 Walter Doerwald <walter@livinglogic.de>
44 2006-11-30 Walter Doerwald <walter@livinglogic.de>
41 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
45 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
42 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
46 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
43 "refreshfind" (mapped to "R") does the same but tries to go back to the same
47 "refreshfind" (mapped to "R") does the same but tries to go back to the same
44 object the cursor was on before the refresh. The command "markrange" is
48 object the cursor was on before the refresh. The command "markrange" is
45 mapped to "%" now.
49 mapped to "%" now.
46 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
50 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
47
51
48 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
52 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
49
53
50 * IPython/Magic.py (magic_debug): new %debug magic to activate the
54 * IPython/Magic.py (magic_debug): new %debug magic to activate the
51 interactive debugger on the last traceback, without having to call
55 interactive debugger on the last traceback, without having to call
52 %pdb and rerun your code. Made minor changes in various modules,
56 %pdb and rerun your code. Made minor changes in various modules,
53 should automatically recognize pydb if available.
57 should automatically recognize pydb if available.
54
58
55 2006-11-28 Ville Vainio <vivainio@gmail.com>
59 2006-11-28 Ville Vainio <vivainio@gmail.com>
56
60
57 * completer.py: If the text start with !, show file completions
61 * completer.py: If the text start with !, show file completions
58 properly. This helps when trying to complete command name
62 properly. This helps when trying to complete command name
59 for shell escapes.
63 for shell escapes.
60
64
61 2006-11-27 Ville Vainio <vivainio@gmail.com>
65 2006-11-27 Ville Vainio <vivainio@gmail.com>
62
66
63 * ipy_stock_completers.py: bzr completer submitted by Stefan van
67 * ipy_stock_completers.py: bzr completer submitted by Stefan van
64 der Walt. Clean up svn and hg completers by using a common
68 der Walt. Clean up svn and hg completers by using a common
65 vcs_completer.
69 vcs_completer.
66
70
67 2006-11-26 Ville Vainio <vivainio@gmail.com>
71 2006-11-26 Ville Vainio <vivainio@gmail.com>
68
72
69 * Remove ipconfig and %config; you should use _ip.options structure
73 * Remove ipconfig and %config; you should use _ip.options structure
70 directly instead!
74 directly instead!
71
75
72 * genutils.py: add wrap_deprecated function for deprecating callables
76 * genutils.py: add wrap_deprecated function for deprecating callables
73
77
74 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
78 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
75 _ip.system instead. ipalias is redundant.
79 _ip.system instead. ipalias is redundant.
76
80
77 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
81 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
78 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
82 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
79 explicit.
83 explicit.
80
84
81 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
85 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
82 completer. Try it by entering 'hg ' and pressing tab.
86 completer. Try it by entering 'hg ' and pressing tab.
83
87
84 * macro.py: Give Macro a useful __repr__ method
88 * macro.py: Give Macro a useful __repr__ method
85
89
86 * Magic.py: %whos abbreviates the typename of Macro for brevity.
90 * Magic.py: %whos abbreviates the typename of Macro for brevity.
87
91
88 2006-11-24 Walter Doerwald <walter@livinglogic.de>
92 2006-11-24 Walter Doerwald <walter@livinglogic.de>
89 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
93 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
90 we don't get a duplicate ipipe module, where registration of the xrepr
94 we don't get a duplicate ipipe module, where registration of the xrepr
91 implementation for Text is useless.
95 implementation for Text is useless.
92
96
93 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
97 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
94
98
95 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
99 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
96
100
97 2006-11-24 Ville Vainio <vivainio@gmail.com>
101 2006-11-24 Ville Vainio <vivainio@gmail.com>
98
102
99 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
103 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
100 try to use "cProfile" instead of the slower pure python
104 try to use "cProfile" instead of the slower pure python
101 "profile"
105 "profile"
102
106
103 2006-11-23 Ville Vainio <vivainio@gmail.com>
107 2006-11-23 Ville Vainio <vivainio@gmail.com>
104
108
105 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
109 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
106 Qt+IPython+Designer link in documentation.
110 Qt+IPython+Designer link in documentation.
107
111
108 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
112 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
109 correct Pdb object to %pydb.
113 correct Pdb object to %pydb.
110
114
111
115
112 2006-11-22 Walter Doerwald <walter@livinglogic.de>
116 2006-11-22 Walter Doerwald <walter@livinglogic.de>
113 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
117 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
114 generic xrepr(), otherwise the list implementation would kick in.
118 generic xrepr(), otherwise the list implementation would kick in.
115
119
116 2006-11-21 Ville Vainio <vivainio@gmail.com>
120 2006-11-21 Ville Vainio <vivainio@gmail.com>
117
121
118 * upgrade_dir.py: Now actually overwrites a nonmodified user file
122 * upgrade_dir.py: Now actually overwrites a nonmodified user file
119 with one from UserConfig.
123 with one from UserConfig.
120
124
121 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
125 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
122 it was missing which broke the sh profile.
126 it was missing which broke the sh profile.
123
127
124 * completer.py: file completer now uses explicit '/' instead
128 * completer.py: file completer now uses explicit '/' instead
125 of os.path.join, expansion of 'foo' was broken on win32
129 of os.path.join, expansion of 'foo' was broken on win32
126 if there was one directory with name 'foobar'.
130 if there was one directory with name 'foobar'.
127
131
128 * A bunch of patches from Kirill Smelkov:
132 * A bunch of patches from Kirill Smelkov:
129
133
130 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
134 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
131
135
132 * [patch 7/9] Implement %page -r (page in raw mode) -
136 * [patch 7/9] Implement %page -r (page in raw mode) -
133
137
134 * [patch 5/9] ScientificPython webpage has moved
138 * [patch 5/9] ScientificPython webpage has moved
135
139
136 * [patch 4/9] The manual mentions %ds, should be %dhist
140 * [patch 4/9] The manual mentions %ds, should be %dhist
137
141
138 * [patch 3/9] Kill old bits from %prun doc.
142 * [patch 3/9] Kill old bits from %prun doc.
139
143
140 * [patch 1/9] Fix typos here and there.
144 * [patch 1/9] Fix typos here and there.
141
145
142 2006-11-08 Ville Vainio <vivainio@gmail.com>
146 2006-11-08 Ville Vainio <vivainio@gmail.com>
143
147
144 * completer.py (attr_matches): catch all exceptions raised
148 * completer.py (attr_matches): catch all exceptions raised
145 by eval of expr with dots.
149 by eval of expr with dots.
146
150
147 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
151 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
148
152
149 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
153 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
150 input if it starts with whitespace. This allows you to paste
154 input if it starts with whitespace. This allows you to paste
151 indented input from any editor without manually having to type in
155 indented input from any editor without manually having to type in
152 the 'if 1:', which is convenient when working interactively.
156 the 'if 1:', which is convenient when working interactively.
153 Slightly modifed version of a patch by Bo Peng
157 Slightly modifed version of a patch by Bo Peng
154 <bpeng-AT-rice.edu>.
158 <bpeng-AT-rice.edu>.
155
159
156 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
160 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
157
161
158 * IPython/irunner.py (main): modified irunner so it automatically
162 * IPython/irunner.py (main): modified irunner so it automatically
159 recognizes the right runner to use based on the extension (.py for
163 recognizes the right runner to use based on the extension (.py for
160 python, .ipy for ipython and .sage for sage).
164 python, .ipy for ipython and .sage for sage).
161
165
162 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
166 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
163 visible in ipapi as ip.config(), to programatically control the
167 visible in ipapi as ip.config(), to programatically control the
164 internal rc object. There's an accompanying %config magic for
168 internal rc object. There's an accompanying %config magic for
165 interactive use, which has been enhanced to match the
169 interactive use, which has been enhanced to match the
166 funtionality in ipconfig.
170 funtionality in ipconfig.
167
171
168 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
172 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
169 so it's not just a toggle, it now takes an argument. Add support
173 so it's not just a toggle, it now takes an argument. Add support
170 for a customizable header when making system calls, as the new
174 for a customizable header when making system calls, as the new
171 system_header variable in the ipythonrc file.
175 system_header variable in the ipythonrc file.
172
176
173 2006-11-03 Walter Doerwald <walter@livinglogic.de>
177 2006-11-03 Walter Doerwald <walter@livinglogic.de>
174
178
175 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
179 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
176 generic functions (using Philip J. Eby's simplegeneric package).
180 generic functions (using Philip J. Eby's simplegeneric package).
177 This makes it possible to customize the display of third-party classes
181 This makes it possible to customize the display of third-party classes
178 without having to monkeypatch them. xiter() no longer supports a mode
182 without having to monkeypatch them. xiter() no longer supports a mode
179 argument and the XMode class has been removed. The same functionality can
183 argument and the XMode class has been removed. The same functionality can
180 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
184 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
181 One consequence of the switch to generic functions is that xrepr() and
185 One consequence of the switch to generic functions is that xrepr() and
182 xattrs() implementation must define the default value for the mode
186 xattrs() implementation must define the default value for the mode
183 argument themselves and xattrs() implementations must return real
187 argument themselves and xattrs() implementations must return real
184 descriptors.
188 descriptors.
185
189
186 * IPython/external: This new subpackage will contain all third-party
190 * IPython/external: This new subpackage will contain all third-party
187 packages that are bundled with IPython. (The first one is simplegeneric).
191 packages that are bundled with IPython. (The first one is simplegeneric).
188
192
189 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
193 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
190 directory which as been dropped in r1703.
194 directory which as been dropped in r1703.
191
195
192 * IPython/Extensions/ipipe.py (iless): Fixed.
196 * IPython/Extensions/ipipe.py (iless): Fixed.
193
197
194 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
198 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
195
199
196 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
200 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
197
201
198 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
202 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
199 handling in variable expansion so that shells and magics recognize
203 handling in variable expansion so that shells and magics recognize
200 function local scopes correctly. Bug reported by Brian.
204 function local scopes correctly. Bug reported by Brian.
201
205
202 * scripts/ipython: remove the very first entry in sys.path which
206 * scripts/ipython: remove the very first entry in sys.path which
203 Python auto-inserts for scripts, so that sys.path under IPython is
207 Python auto-inserts for scripts, so that sys.path under IPython is
204 as similar as possible to that under plain Python.
208 as similar as possible to that under plain Python.
205
209
206 * IPython/completer.py (IPCompleter.file_matches): Fix
210 * IPython/completer.py (IPCompleter.file_matches): Fix
207 tab-completion so that quotes are not closed unless the completion
211 tab-completion so that quotes are not closed unless the completion
208 is unambiguous. After a request by Stefan. Minor cleanups in
212 is unambiguous. After a request by Stefan. Minor cleanups in
209 ipy_stock_completers.
213 ipy_stock_completers.
210
214
211 2006-11-02 Ville Vainio <vivainio@gmail.com>
215 2006-11-02 Ville Vainio <vivainio@gmail.com>
212
216
213 * ipy_stock_completers.py: Add %run and %cd completers.
217 * ipy_stock_completers.py: Add %run and %cd completers.
214
218
215 * completer.py: Try running custom completer for both
219 * completer.py: Try running custom completer for both
216 "foo" and "%foo" if the command is just "foo". Ignore case
220 "foo" and "%foo" if the command is just "foo". Ignore case
217 when filtering possible completions.
221 when filtering possible completions.
218
222
219 * UserConfig/ipy_user_conf.py: install stock completers as default
223 * UserConfig/ipy_user_conf.py: install stock completers as default
220
224
221 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
225 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
222 simplified readline history save / restore through a wrapper
226 simplified readline history save / restore through a wrapper
223 function
227 function
224
228
225
229
226 2006-10-31 Ville Vainio <vivainio@gmail.com>
230 2006-10-31 Ville Vainio <vivainio@gmail.com>
227
231
228 * strdispatch.py, completer.py, ipy_stock_completers.py:
232 * strdispatch.py, completer.py, ipy_stock_completers.py:
229 Allow str_key ("command") in completer hooks. Implement
233 Allow str_key ("command") in completer hooks. Implement
230 trivial completer for 'import' (stdlib modules only). Rename
234 trivial completer for 'import' (stdlib modules only). Rename
231 ipy_linux_package_managers.py to ipy_stock_completers.py.
235 ipy_linux_package_managers.py to ipy_stock_completers.py.
232 SVN completer.
236 SVN completer.
233
237
234 * Extensions/ledit.py: %magic line editor for easily and
238 * Extensions/ledit.py: %magic line editor for easily and
235 incrementally manipulating lists of strings. The magic command
239 incrementally manipulating lists of strings. The magic command
236 name is %led.
240 name is %led.
237
241
238 2006-10-30 Ville Vainio <vivainio@gmail.com>
242 2006-10-30 Ville Vainio <vivainio@gmail.com>
239
243
240 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
244 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
241 Bernsteins's patches for pydb integration.
245 Bernsteins's patches for pydb integration.
242 http://bashdb.sourceforge.net/pydb/
246 http://bashdb.sourceforge.net/pydb/
243
247
244 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
248 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
245 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
249 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
246 custom completer hook to allow the users to implement their own
250 custom completer hook to allow the users to implement their own
247 completers. See ipy_linux_package_managers.py for example. The
251 completers. See ipy_linux_package_managers.py for example. The
248 hook name is 'complete_command'.
252 hook name is 'complete_command'.
249
253
250 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
254 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
251
255
252 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
256 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
253 Numeric leftovers.
257 Numeric leftovers.
254
258
255 * ipython.el (py-execute-region): apply Stefan's patch to fix
259 * ipython.el (py-execute-region): apply Stefan's patch to fix
256 garbled results if the python shell hasn't been previously started.
260 garbled results if the python shell hasn't been previously started.
257
261
258 * IPython/genutils.py (arg_split): moved to genutils, since it's a
262 * IPython/genutils.py (arg_split): moved to genutils, since it's a
259 pretty generic function and useful for other things.
263 pretty generic function and useful for other things.
260
264
261 * IPython/OInspect.py (getsource): Add customizable source
265 * IPython/OInspect.py (getsource): Add customizable source
262 extractor. After a request/patch form W. Stein (SAGE).
266 extractor. After a request/patch form W. Stein (SAGE).
263
267
264 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
268 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
265 window size to a more reasonable value from what pexpect does,
269 window size to a more reasonable value from what pexpect does,
266 since their choice causes wrapping bugs with long input lines.
270 since their choice causes wrapping bugs with long input lines.
267
271
268 2006-10-28 Ville Vainio <vivainio@gmail.com>
272 2006-10-28 Ville Vainio <vivainio@gmail.com>
269
273
270 * Magic.py (%run): Save and restore the readline history from
274 * Magic.py (%run): Save and restore the readline history from
271 file around %run commands to prevent side effects from
275 file around %run commands to prevent side effects from
272 %runned programs that might use readline (e.g. pydb).
276 %runned programs that might use readline (e.g. pydb).
273
277
274 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
278 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
275 invoking the pydb enhanced debugger.
279 invoking the pydb enhanced debugger.
276
280
277 2006-10-23 Walter Doerwald <walter@livinglogic.de>
281 2006-10-23 Walter Doerwald <walter@livinglogic.de>
278
282
279 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
283 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
280 call the base class method and propagate the return value to
284 call the base class method and propagate the return value to
281 ifile. This is now done by path itself.
285 ifile. This is now done by path itself.
282
286
283 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
287 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
284
288
285 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
289 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
286 api: set_crash_handler(), to expose the ability to change the
290 api: set_crash_handler(), to expose the ability to change the
287 internal crash handler.
291 internal crash handler.
288
292
289 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
293 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
290 the various parameters of the crash handler so that apps using
294 the various parameters of the crash handler so that apps using
291 IPython as their engine can customize crash handling. Ipmlemented
295 IPython as their engine can customize crash handling. Ipmlemented
292 at the request of SAGE.
296 at the request of SAGE.
293
297
294 2006-10-14 Ville Vainio <vivainio@gmail.com>
298 2006-10-14 Ville Vainio <vivainio@gmail.com>
295
299
296 * Magic.py, ipython.el: applied first "safe" part of Rocky
300 * Magic.py, ipython.el: applied first "safe" part of Rocky
297 Bernstein's patch set for pydb integration.
301 Bernstein's patch set for pydb integration.
298
302
299 * Magic.py (%unalias, %alias): %store'd aliases can now be
303 * Magic.py (%unalias, %alias): %store'd aliases can now be
300 removed with '%unalias'. %alias w/o args now shows most
304 removed with '%unalias'. %alias w/o args now shows most
301 interesting (stored / manually defined) aliases last
305 interesting (stored / manually defined) aliases last
302 where they catch the eye w/o scrolling.
306 where they catch the eye w/o scrolling.
303
307
304 * Magic.py (%rehashx), ext_rehashdir.py: files with
308 * Magic.py (%rehashx), ext_rehashdir.py: files with
305 'py' extension are always considered executable, even
309 'py' extension are always considered executable, even
306 when not in PATHEXT environment variable.
310 when not in PATHEXT environment variable.
307
311
308 2006-10-12 Ville Vainio <vivainio@gmail.com>
312 2006-10-12 Ville Vainio <vivainio@gmail.com>
309
313
310 * jobctrl.py: Add new "jobctrl" extension for spawning background
314 * jobctrl.py: Add new "jobctrl" extension for spawning background
311 processes with "&find /". 'import jobctrl' to try it out. Requires
315 processes with "&find /". 'import jobctrl' to try it out. Requires
312 'subprocess' module, standard in python 2.4+.
316 'subprocess' module, standard in python 2.4+.
313
317
314 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
318 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
315 so if foo -> bar and bar -> baz, then foo -> baz.
319 so if foo -> bar and bar -> baz, then foo -> baz.
316
320
317 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
321 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
318
322
319 * IPython/Magic.py (Magic.parse_options): add a new posix option
323 * IPython/Magic.py (Magic.parse_options): add a new posix option
320 to allow parsing of input args in magics that doesn't strip quotes
324 to allow parsing of input args in magics that doesn't strip quotes
321 (if posix=False). This also closes %timeit bug reported by
325 (if posix=False). This also closes %timeit bug reported by
322 Stefan.
326 Stefan.
323
327
324 2006-10-03 Ville Vainio <vivainio@gmail.com>
328 2006-10-03 Ville Vainio <vivainio@gmail.com>
325
329
326 * iplib.py (raw_input, interact): Return ValueError catching for
330 * iplib.py (raw_input, interact): Return ValueError catching for
327 raw_input. Fixes infinite loop for sys.stdin.close() or
331 raw_input. Fixes infinite loop for sys.stdin.close() or
328 sys.stdout.close().
332 sys.stdout.close().
329
333
330 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
334 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
331
335
332 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
336 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
333 to help in handling doctests. irunner is now pretty useful for
337 to help in handling doctests. irunner is now pretty useful for
334 running standalone scripts and simulate a full interactive session
338 running standalone scripts and simulate a full interactive session
335 in a format that can be then pasted as a doctest.
339 in a format that can be then pasted as a doctest.
336
340
337 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
341 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
338 on top of the default (useless) ones. This also fixes the nasty
342 on top of the default (useless) ones. This also fixes the nasty
339 way in which 2.5's Quitter() exits (reverted [1785]).
343 way in which 2.5's Quitter() exits (reverted [1785]).
340
344
341 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
345 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
342 2.5.
346 2.5.
343
347
344 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
348 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
345 color scheme is updated as well when color scheme is changed
349 color scheme is updated as well when color scheme is changed
346 interactively.
350 interactively.
347
351
348 2006-09-27 Ville Vainio <vivainio@gmail.com>
352 2006-09-27 Ville Vainio <vivainio@gmail.com>
349
353
350 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
354 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
351 infinite loop and just exit. It's a hack, but will do for a while.
355 infinite loop and just exit. It's a hack, but will do for a while.
352
356
353 2006-08-25 Walter Doerwald <walter@livinglogic.de>
357 2006-08-25 Walter Doerwald <walter@livinglogic.de>
354
358
355 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
359 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
356 the constructor, this makes it possible to get a list of only directories
360 the constructor, this makes it possible to get a list of only directories
357 or only files.
361 or only files.
358
362
359 2006-08-12 Ville Vainio <vivainio@gmail.com>
363 2006-08-12 Ville Vainio <vivainio@gmail.com>
360
364
361 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
365 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
362 they broke unittest
366 they broke unittest
363
367
364 2006-08-11 Ville Vainio <vivainio@gmail.com>
368 2006-08-11 Ville Vainio <vivainio@gmail.com>
365
369
366 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
370 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
367 by resolving issue properly, i.e. by inheriting FakeModule
371 by resolving issue properly, i.e. by inheriting FakeModule
368 from types.ModuleType. Pickling ipython interactive data
372 from types.ModuleType. Pickling ipython interactive data
369 should still work as usual (testing appreciated).
373 should still work as usual (testing appreciated).
370
374
371 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
375 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
372
376
373 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
377 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
374 running under python 2.3 with code from 2.4 to fix a bug with
378 running under python 2.3 with code from 2.4 to fix a bug with
375 help(). Reported by the Debian maintainers, Norbert Tretkowski
379 help(). Reported by the Debian maintainers, Norbert Tretkowski
376 <norbert-AT-tretkowski.de> and Alexandre Fayolle
380 <norbert-AT-tretkowski.de> and Alexandre Fayolle
377 <afayolle-AT-debian.org>.
381 <afayolle-AT-debian.org>.
378
382
379 2006-08-04 Walter Doerwald <walter@livinglogic.de>
383 2006-08-04 Walter Doerwald <walter@livinglogic.de>
380
384
381 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
385 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
382 (which was displaying "quit" twice).
386 (which was displaying "quit" twice).
383
387
384 2006-07-28 Walter Doerwald <walter@livinglogic.de>
388 2006-07-28 Walter Doerwald <walter@livinglogic.de>
385
389
386 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
390 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
387 the mode argument).
391 the mode argument).
388
392
389 2006-07-27 Walter Doerwald <walter@livinglogic.de>
393 2006-07-27 Walter Doerwald <walter@livinglogic.de>
390
394
391 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
395 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
392 not running under IPython.
396 not running under IPython.
393
397
394 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
398 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
395 and make it iterable (iterating over the attribute itself). Add two new
399 and make it iterable (iterating over the attribute itself). Add two new
396 magic strings for __xattrs__(): If the string starts with "-", the attribute
400 magic strings for __xattrs__(): If the string starts with "-", the attribute
397 will not be displayed in ibrowse's detail view (but it can still be
401 will not be displayed in ibrowse's detail view (but it can still be
398 iterated over). This makes it possible to add attributes that are large
402 iterated over). This makes it possible to add attributes that are large
399 lists or generator methods to the detail view. Replace magic attribute names
403 lists or generator methods to the detail view. Replace magic attribute names
400 and _attrname() and _getattr() with "descriptors": For each type of magic
404 and _attrname() and _getattr() with "descriptors": For each type of magic
401 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
405 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
402 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
406 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
403 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
407 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
404 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
408 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
405 are still supported.
409 are still supported.
406
410
407 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
411 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
408 fails in ibrowse.fetch(), the exception object is added as the last item
412 fails in ibrowse.fetch(), the exception object is added as the last item
409 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
413 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
410 a generator throws an exception midway through execution.
414 a generator throws an exception midway through execution.
411
415
412 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
416 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
413 encoding into methods.
417 encoding into methods.
414
418
415 2006-07-26 Ville Vainio <vivainio@gmail.com>
419 2006-07-26 Ville Vainio <vivainio@gmail.com>
416
420
417 * iplib.py: history now stores multiline input as single
421 * iplib.py: history now stores multiline input as single
418 history entries. Patch by Jorgen Cederlof.
422 history entries. Patch by Jorgen Cederlof.
419
423
420 2006-07-18 Walter Doerwald <walter@livinglogic.de>
424 2006-07-18 Walter Doerwald <walter@livinglogic.de>
421
425
422 * IPython/Extensions/ibrowse.py: Make cursor visible over
426 * IPython/Extensions/ibrowse.py: Make cursor visible over
423 non existing attributes.
427 non existing attributes.
424
428
425 2006-07-14 Walter Doerwald <walter@livinglogic.de>
429 2006-07-14 Walter Doerwald <walter@livinglogic.de>
426
430
427 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
431 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
428 error output of the running command doesn't mess up the screen.
432 error output of the running command doesn't mess up the screen.
429
433
430 2006-07-13 Walter Doerwald <walter@livinglogic.de>
434 2006-07-13 Walter Doerwald <walter@livinglogic.de>
431
435
432 * IPython/Extensions/ipipe.py (isort): Make isort usable without
436 * IPython/Extensions/ipipe.py (isort): Make isort usable without
433 argument. This sorts the items themselves.
437 argument. This sorts the items themselves.
434
438
435 2006-07-12 Walter Doerwald <walter@livinglogic.de>
439 2006-07-12 Walter Doerwald <walter@livinglogic.de>
436
440
437 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
441 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
438 Compile expression strings into code objects. This should speed
442 Compile expression strings into code objects. This should speed
439 up ifilter and friends somewhat.
443 up ifilter and friends somewhat.
440
444
441 2006-07-08 Ville Vainio <vivainio@gmail.com>
445 2006-07-08 Ville Vainio <vivainio@gmail.com>
442
446
443 * Magic.py: %cpaste now strips > from the beginning of lines
447 * Magic.py: %cpaste now strips > from the beginning of lines
444 to ease pasting quoted code from emails. Contributed by
448 to ease pasting quoted code from emails. Contributed by
445 Stefan van der Walt.
449 Stefan van der Walt.
446
450
447 2006-06-29 Ville Vainio <vivainio@gmail.com>
451 2006-06-29 Ville Vainio <vivainio@gmail.com>
448
452
449 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
453 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
450 mode, patch contributed by Darren Dale. NEEDS TESTING!
454 mode, patch contributed by Darren Dale. NEEDS TESTING!
451
455
452 2006-06-28 Walter Doerwald <walter@livinglogic.de>
456 2006-06-28 Walter Doerwald <walter@livinglogic.de>
453
457
454 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
458 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
455 a blue background. Fix fetching new display rows when the browser
459 a blue background. Fix fetching new display rows when the browser
456 scrolls more than a screenful (e.g. by using the goto command).
460 scrolls more than a screenful (e.g. by using the goto command).
457
461
458 2006-06-27 Ville Vainio <vivainio@gmail.com>
462 2006-06-27 Ville Vainio <vivainio@gmail.com>
459
463
460 * Magic.py (_inspect, _ofind) Apply David Huard's
464 * Magic.py (_inspect, _ofind) Apply David Huard's
461 patch for displaying the correct docstring for 'property'
465 patch for displaying the correct docstring for 'property'
462 attributes.
466 attributes.
463
467
464 2006-06-23 Walter Doerwald <walter@livinglogic.de>
468 2006-06-23 Walter Doerwald <walter@livinglogic.de>
465
469
466 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
470 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
467 commands into the methods implementing them.
471 commands into the methods implementing them.
468
472
469 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
473 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
470
474
471 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
475 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
472 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
476 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
473 autoindent support was authored by Jin Liu.
477 autoindent support was authored by Jin Liu.
474
478
475 2006-06-22 Walter Doerwald <walter@livinglogic.de>
479 2006-06-22 Walter Doerwald <walter@livinglogic.de>
476
480
477 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
481 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
478 for keymaps with a custom class that simplifies handling.
482 for keymaps with a custom class that simplifies handling.
479
483
480 2006-06-19 Walter Doerwald <walter@livinglogic.de>
484 2006-06-19 Walter Doerwald <walter@livinglogic.de>
481
485
482 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
486 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
483 resizing. This requires Python 2.5 to work.
487 resizing. This requires Python 2.5 to work.
484
488
485 2006-06-16 Walter Doerwald <walter@livinglogic.de>
489 2006-06-16 Walter Doerwald <walter@livinglogic.de>
486
490
487 * IPython/Extensions/ibrowse.py: Add two new commands to
491 * IPython/Extensions/ibrowse.py: Add two new commands to
488 ibrowse: "hideattr" (mapped to "h") hides the attribute under
492 ibrowse: "hideattr" (mapped to "h") hides the attribute under
489 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
493 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
490 attributes again. Remapped the help command to "?". Display
494 attributes again. Remapped the help command to "?". Display
491 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
495 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
492 as keys for the "home" and "end" commands. Add three new commands
496 as keys for the "home" and "end" commands. Add three new commands
493 to the input mode for "find" and friends: "delend" (CTRL-K)
497 to the input mode for "find" and friends: "delend" (CTRL-K)
494 deletes to the end of line. "incsearchup" searches upwards in the
498 deletes to the end of line. "incsearchup" searches upwards in the
495 command history for an input that starts with the text before the cursor.
499 command history for an input that starts with the text before the cursor.
496 "incsearchdown" does the same downwards. Removed a bogus mapping of
500 "incsearchdown" does the same downwards. Removed a bogus mapping of
497 the x key to "delete".
501 the x key to "delete".
498
502
499 2006-06-15 Ville Vainio <vivainio@gmail.com>
503 2006-06-15 Ville Vainio <vivainio@gmail.com>
500
504
501 * iplib.py, hooks.py: Added new generate_prompt hook that can be
505 * iplib.py, hooks.py: Added new generate_prompt hook that can be
502 used to create prompts dynamically, instead of the "old" way of
506 used to create prompts dynamically, instead of the "old" way of
503 assigning "magic" strings to prompt_in1 and prompt_in2. The old
507 assigning "magic" strings to prompt_in1 and prompt_in2. The old
504 way still works (it's invoked by the default hook), of course.
508 way still works (it's invoked by the default hook), of course.
505
509
506 * Prompts.py: added generate_output_prompt hook for altering output
510 * Prompts.py: added generate_output_prompt hook for altering output
507 prompt
511 prompt
508
512
509 * Release.py: Changed version string to 0.7.3.svn.
513 * Release.py: Changed version string to 0.7.3.svn.
510
514
511 2006-06-15 Walter Doerwald <walter@livinglogic.de>
515 2006-06-15 Walter Doerwald <walter@livinglogic.de>
512
516
513 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
517 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
514 the call to fetch() always tries to fetch enough data for at least one
518 the call to fetch() always tries to fetch enough data for at least one
515 full screen. This makes it possible to simply call moveto(0,0,True) in
519 full screen. This makes it possible to simply call moveto(0,0,True) in
516 the constructor. Fix typos and removed the obsolete goto attribute.
520 the constructor. Fix typos and removed the obsolete goto attribute.
517
521
518 2006-06-12 Ville Vainio <vivainio@gmail.com>
522 2006-06-12 Ville Vainio <vivainio@gmail.com>
519
523
520 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
524 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
521 allowing $variable interpolation within multiline statements,
525 allowing $variable interpolation within multiline statements,
522 though so far only with "sh" profile for a testing period.
526 though so far only with "sh" profile for a testing period.
523 The patch also enables splitting long commands with \ but it
527 The patch also enables splitting long commands with \ but it
524 doesn't work properly yet.
528 doesn't work properly yet.
525
529
526 2006-06-12 Walter Doerwald <walter@livinglogic.de>
530 2006-06-12 Walter Doerwald <walter@livinglogic.de>
527
531
528 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
532 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
529 input history and the position of the cursor in the input history for
533 input history and the position of the cursor in the input history for
530 the find, findbackwards and goto command.
534 the find, findbackwards and goto command.
531
535
532 2006-06-10 Walter Doerwald <walter@livinglogic.de>
536 2006-06-10 Walter Doerwald <walter@livinglogic.de>
533
537
534 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
538 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
535 implements the basic functionality of browser commands that require
539 implements the basic functionality of browser commands that require
536 input. Reimplement the goto, find and findbackwards commands as
540 input. Reimplement the goto, find and findbackwards commands as
537 subclasses of _CommandInput. Add an input history and keymaps to those
541 subclasses of _CommandInput. Add an input history and keymaps to those
538 commands. Add "\r" as a keyboard shortcut for the enterdefault and
542 commands. Add "\r" as a keyboard shortcut for the enterdefault and
539 execute commands.
543 execute commands.
540
544
541 2006-06-07 Ville Vainio <vivainio@gmail.com>
545 2006-06-07 Ville Vainio <vivainio@gmail.com>
542
546
543 * iplib.py: ipython mybatch.ipy exits ipython immediately after
547 * iplib.py: ipython mybatch.ipy exits ipython immediately after
544 running the batch files instead of leaving the session open.
548 running the batch files instead of leaving the session open.
545
549
546 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
550 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
547
551
548 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
552 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
549 the original fix was incomplete. Patch submitted by W. Maier.
553 the original fix was incomplete. Patch submitted by W. Maier.
550
554
551 2006-06-07 Ville Vainio <vivainio@gmail.com>
555 2006-06-07 Ville Vainio <vivainio@gmail.com>
552
556
553 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
557 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
554 Confirmation prompts can be supressed by 'quiet' option.
558 Confirmation prompts can be supressed by 'quiet' option.
555 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
559 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
556
560
557 2006-06-06 *** Released version 0.7.2
561 2006-06-06 *** Released version 0.7.2
558
562
559 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
563 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
560
564
561 * IPython/Release.py (version): Made 0.7.2 final for release.
565 * IPython/Release.py (version): Made 0.7.2 final for release.
562 Repo tagged and release cut.
566 Repo tagged and release cut.
563
567
564 2006-06-05 Ville Vainio <vivainio@gmail.com>
568 2006-06-05 Ville Vainio <vivainio@gmail.com>
565
569
566 * Magic.py (magic_rehashx): Honor no_alias list earlier in
570 * Magic.py (magic_rehashx): Honor no_alias list earlier in
567 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
571 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
568
572
569 * upgrade_dir.py: try import 'path' module a bit harder
573 * upgrade_dir.py: try import 'path' module a bit harder
570 (for %upgrade)
574 (for %upgrade)
571
575
572 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
576 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
573
577
574 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
578 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
575 instead of looping 20 times.
579 instead of looping 20 times.
576
580
577 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
581 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
578 correctly at initialization time. Bug reported by Krishna Mohan
582 correctly at initialization time. Bug reported by Krishna Mohan
579 Gundu <gkmohan-AT-gmail.com> on the user list.
583 Gundu <gkmohan-AT-gmail.com> on the user list.
580
584
581 * IPython/Release.py (version): Mark 0.7.2 version to start
585 * IPython/Release.py (version): Mark 0.7.2 version to start
582 testing for release on 06/06.
586 testing for release on 06/06.
583
587
584 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
588 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
585
589
586 * scripts/irunner: thin script interface so users don't have to
590 * scripts/irunner: thin script interface so users don't have to
587 find the module and call it as an executable, since modules rarely
591 find the module and call it as an executable, since modules rarely
588 live in people's PATH.
592 live in people's PATH.
589
593
590 * IPython/irunner.py (InteractiveRunner.__init__): added
594 * IPython/irunner.py (InteractiveRunner.__init__): added
591 delaybeforesend attribute to control delays with newer versions of
595 delaybeforesend attribute to control delays with newer versions of
592 pexpect. Thanks to detailed help from pexpect's author, Noah
596 pexpect. Thanks to detailed help from pexpect's author, Noah
593 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
597 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
594 correctly (it works in NoColor mode).
598 correctly (it works in NoColor mode).
595
599
596 * IPython/iplib.py (handle_normal): fix nasty crash reported on
600 * IPython/iplib.py (handle_normal): fix nasty crash reported on
597 SAGE list, from improper log() calls.
601 SAGE list, from improper log() calls.
598
602
599 2006-05-31 Ville Vainio <vivainio@gmail.com>
603 2006-05-31 Ville Vainio <vivainio@gmail.com>
600
604
601 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
605 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
602 with args in parens to work correctly with dirs that have spaces.
606 with args in parens to work correctly with dirs that have spaces.
603
607
604 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
608 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
605
609
606 * IPython/Logger.py (Logger.logstart): add option to log raw input
610 * IPython/Logger.py (Logger.logstart): add option to log raw input
607 instead of the processed one. A -r flag was added to the
611 instead of the processed one. A -r flag was added to the
608 %logstart magic used for controlling logging.
612 %logstart magic used for controlling logging.
609
613
610 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
614 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
611
615
612 * IPython/iplib.py (InteractiveShell.__init__): add check for the
616 * IPython/iplib.py (InteractiveShell.__init__): add check for the
613 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
617 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
614 recognize the option. After a bug report by Will Maier. This
618 recognize the option. After a bug report by Will Maier. This
615 closes #64 (will do it after confirmation from W. Maier).
619 closes #64 (will do it after confirmation from W. Maier).
616
620
617 * IPython/irunner.py: New module to run scripts as if manually
621 * IPython/irunner.py: New module to run scripts as if manually
618 typed into an interactive environment, based on pexpect. After a
622 typed into an interactive environment, based on pexpect. After a
619 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
623 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
620 ipython-user list. Simple unittests in the tests/ directory.
624 ipython-user list. Simple unittests in the tests/ directory.
621
625
622 * tools/release: add Will Maier, OpenBSD port maintainer, to
626 * tools/release: add Will Maier, OpenBSD port maintainer, to
623 recepients list. We are now officially part of the OpenBSD ports:
627 recepients list. We are now officially part of the OpenBSD ports:
624 http://www.openbsd.org/ports.html ! Many thanks to Will for the
628 http://www.openbsd.org/ports.html ! Many thanks to Will for the
625 work.
629 work.
626
630
627 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
631 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
628
632
629 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
633 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
630 so that it doesn't break tkinter apps.
634 so that it doesn't break tkinter apps.
631
635
632 * IPython/iplib.py (_prefilter): fix bug where aliases would
636 * IPython/iplib.py (_prefilter): fix bug where aliases would
633 shadow variables when autocall was fully off. Reported by SAGE
637 shadow variables when autocall was fully off. Reported by SAGE
634 author William Stein.
638 author William Stein.
635
639
636 * IPython/OInspect.py (Inspector.__init__): add a flag to control
640 * IPython/OInspect.py (Inspector.__init__): add a flag to control
637 at what detail level strings are computed when foo? is requested.
641 at what detail level strings are computed when foo? is requested.
638 This allows users to ask for example that the string form of an
642 This allows users to ask for example that the string form of an
639 object is only computed when foo?? is called, or even never, by
643 object is only computed when foo?? is called, or even never, by
640 setting the object_info_string_level >= 2 in the configuration
644 setting the object_info_string_level >= 2 in the configuration
641 file. This new option has been added and documented. After a
645 file. This new option has been added and documented. After a
642 request by SAGE to be able to control the printing of very large
646 request by SAGE to be able to control the printing of very large
643 objects more easily.
647 objects more easily.
644
648
645 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
649 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
646
650
647 * IPython/ipmaker.py (make_IPython): remove the ipython call path
651 * IPython/ipmaker.py (make_IPython): remove the ipython call path
648 from sys.argv, to be 100% consistent with how Python itself works
652 from sys.argv, to be 100% consistent with how Python itself works
649 (as seen for example with python -i file.py). After a bug report
653 (as seen for example with python -i file.py). After a bug report
650 by Jeffrey Collins.
654 by Jeffrey Collins.
651
655
652 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
656 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
653 nasty bug which was preventing custom namespaces with -pylab,
657 nasty bug which was preventing custom namespaces with -pylab,
654 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
658 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
655 compatibility (long gone from mpl).
659 compatibility (long gone from mpl).
656
660
657 * IPython/ipapi.py (make_session): name change: create->make. We
661 * IPython/ipapi.py (make_session): name change: create->make. We
658 use make in other places (ipmaker,...), it's shorter and easier to
662 use make in other places (ipmaker,...), it's shorter and easier to
659 type and say, etc. I'm trying to clean things before 0.7.2 so
663 type and say, etc. I'm trying to clean things before 0.7.2 so
660 that I can keep things stable wrt to ipapi in the chainsaw branch.
664 that I can keep things stable wrt to ipapi in the chainsaw branch.
661
665
662 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
666 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
663 python-mode recognizes our debugger mode. Add support for
667 python-mode recognizes our debugger mode. Add support for
664 autoindent inside (X)emacs. After a patch sent in by Jin Liu
668 autoindent inside (X)emacs. After a patch sent in by Jin Liu
665 <m.liu.jin-AT-gmail.com> originally written by
669 <m.liu.jin-AT-gmail.com> originally written by
666 doxgen-AT-newsmth.net (with minor modifications for xemacs
670 doxgen-AT-newsmth.net (with minor modifications for xemacs
667 compatibility)
671 compatibility)
668
672
669 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
673 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
670 tracebacks when walking the stack so that the stack tracking system
674 tracebacks when walking the stack so that the stack tracking system
671 in emacs' python-mode can identify the frames correctly.
675 in emacs' python-mode can identify the frames correctly.
672
676
673 * IPython/ipmaker.py (make_IPython): make the internal (and
677 * IPython/ipmaker.py (make_IPython): make the internal (and
674 default config) autoedit_syntax value false by default. Too many
678 default config) autoedit_syntax value false by default. Too many
675 users have complained to me (both on and off-list) about problems
679 users have complained to me (both on and off-list) about problems
676 with this option being on by default, so I'm making it default to
680 with this option being on by default, so I'm making it default to
677 off. It can still be enabled by anyone via the usual mechanisms.
681 off. It can still be enabled by anyone via the usual mechanisms.
678
682
679 * IPython/completer.py (Completer.attr_matches): add support for
683 * IPython/completer.py (Completer.attr_matches): add support for
680 PyCrust-style _getAttributeNames magic method. Patch contributed
684 PyCrust-style _getAttributeNames magic method. Patch contributed
681 by <mscott-AT-goldenspud.com>. Closes #50.
685 by <mscott-AT-goldenspud.com>. Closes #50.
682
686
683 * IPython/iplib.py (InteractiveShell.__init__): remove the
687 * IPython/iplib.py (InteractiveShell.__init__): remove the
684 deletion of exit/quit from __builtin__, which can break
688 deletion of exit/quit from __builtin__, which can break
685 third-party tools like the Zope debugging console. The
689 third-party tools like the Zope debugging console. The
686 %exit/%quit magics remain. In general, it's probably a good idea
690 %exit/%quit magics remain. In general, it's probably a good idea
687 not to delete anything from __builtin__, since we never know what
691 not to delete anything from __builtin__, since we never know what
688 that will break. In any case, python now (for 2.5) will support
692 that will break. In any case, python now (for 2.5) will support
689 'real' exit/quit, so this issue is moot. Closes #55.
693 'real' exit/quit, so this issue is moot. Closes #55.
690
694
691 * IPython/genutils.py (with_obj): rename the 'with' function to
695 * IPython/genutils.py (with_obj): rename the 'with' function to
692 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
696 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
693 becomes a language keyword. Closes #53.
697 becomes a language keyword. Closes #53.
694
698
695 * IPython/FakeModule.py (FakeModule.__init__): add a proper
699 * IPython/FakeModule.py (FakeModule.__init__): add a proper
696 __file__ attribute to this so it fools more things into thinking
700 __file__ attribute to this so it fools more things into thinking
697 it is a real module. Closes #59.
701 it is a real module. Closes #59.
698
702
699 * IPython/Magic.py (magic_edit): add -n option to open the editor
703 * IPython/Magic.py (magic_edit): add -n option to open the editor
700 at a specific line number. After a patch by Stefan van der Walt.
704 at a specific line number. After a patch by Stefan van der Walt.
701
705
702 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
706 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
703
707
704 * IPython/iplib.py (edit_syntax_error): fix crash when for some
708 * IPython/iplib.py (edit_syntax_error): fix crash when for some
705 reason the file could not be opened. After automatic crash
709 reason the file could not be opened. After automatic crash
706 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
710 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
707 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
711 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
708 (_should_recompile): Don't fire editor if using %bg, since there
712 (_should_recompile): Don't fire editor if using %bg, since there
709 is no file in the first place. From the same report as above.
713 is no file in the first place. From the same report as above.
710 (raw_input): protect against faulty third-party prefilters. After
714 (raw_input): protect against faulty third-party prefilters. After
711 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
715 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
712 while running under SAGE.
716 while running under SAGE.
713
717
714 2006-05-23 Ville Vainio <vivainio@gmail.com>
718 2006-05-23 Ville Vainio <vivainio@gmail.com>
715
719
716 * ipapi.py: Stripped down ip.to_user_ns() to work only as
720 * ipapi.py: Stripped down ip.to_user_ns() to work only as
717 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
721 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
718 now returns None (again), unless dummy is specifically allowed by
722 now returns None (again), unless dummy is specifically allowed by
719 ipapi.get(allow_dummy=True).
723 ipapi.get(allow_dummy=True).
720
724
721 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
725 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
722
726
723 * IPython: remove all 2.2-compatibility objects and hacks from
727 * IPython: remove all 2.2-compatibility objects and hacks from
724 everywhere, since we only support 2.3 at this point. Docs
728 everywhere, since we only support 2.3 at this point. Docs
725 updated.
729 updated.
726
730
727 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
731 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
728 Anything requiring extra validation can be turned into a Python
732 Anything requiring extra validation can be turned into a Python
729 property in the future. I used a property for the db one b/c
733 property in the future. I used a property for the db one b/c
730 there was a nasty circularity problem with the initialization
734 there was a nasty circularity problem with the initialization
731 order, which right now I don't have time to clean up.
735 order, which right now I don't have time to clean up.
732
736
733 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
737 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
734 another locking bug reported by Jorgen. I'm not 100% sure though,
738 another locking bug reported by Jorgen. I'm not 100% sure though,
735 so more testing is needed...
739 so more testing is needed...
736
740
737 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
741 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
738
742
739 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
743 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
740 local variables from any routine in user code (typically executed
744 local variables from any routine in user code (typically executed
741 with %run) directly into the interactive namespace. Very useful
745 with %run) directly into the interactive namespace. Very useful
742 when doing complex debugging.
746 when doing complex debugging.
743 (IPythonNotRunning): Changed the default None object to a dummy
747 (IPythonNotRunning): Changed the default None object to a dummy
744 whose attributes can be queried as well as called without
748 whose attributes can be queried as well as called without
745 exploding, to ease writing code which works transparently both in
749 exploding, to ease writing code which works transparently both in
746 and out of ipython and uses some of this API.
750 and out of ipython and uses some of this API.
747
751
748 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
752 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
749
753
750 * IPython/hooks.py (result_display): Fix the fact that our display
754 * IPython/hooks.py (result_display): Fix the fact that our display
751 hook was using str() instead of repr(), as the default python
755 hook was using str() instead of repr(), as the default python
752 console does. This had gone unnoticed b/c it only happened if
756 console does. This had gone unnoticed b/c it only happened if
753 %Pprint was off, but the inconsistency was there.
757 %Pprint was off, but the inconsistency was there.
754
758
755 2006-05-15 Ville Vainio <vivainio@gmail.com>
759 2006-05-15 Ville Vainio <vivainio@gmail.com>
756
760
757 * Oinspect.py: Only show docstring for nonexisting/binary files
761 * Oinspect.py: Only show docstring for nonexisting/binary files
758 when doing object??, closing ticket #62
762 when doing object??, closing ticket #62
759
763
760 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
764 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
761
765
762 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
766 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
763 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
767 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
764 was being released in a routine which hadn't checked if it had
768 was being released in a routine which hadn't checked if it had
765 been the one to acquire it.
769 been the one to acquire it.
766
770
767 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
771 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
768
772
769 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
773 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
770
774
771 2006-04-11 Ville Vainio <vivainio@gmail.com>
775 2006-04-11 Ville Vainio <vivainio@gmail.com>
772
776
773 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
777 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
774 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
778 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
775 prefilters, allowing stuff like magics and aliases in the file.
779 prefilters, allowing stuff like magics and aliases in the file.
776
780
777 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
781 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
778 added. Supported now are "%clear in" and "%clear out" (clear input and
782 added. Supported now are "%clear in" and "%clear out" (clear input and
779 output history, respectively). Also fixed CachedOutput.flush to
783 output history, respectively). Also fixed CachedOutput.flush to
780 properly flush the output cache.
784 properly flush the output cache.
781
785
782 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
786 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
783 half-success (and fail explicitly).
787 half-success (and fail explicitly).
784
788
785 2006-03-28 Ville Vainio <vivainio@gmail.com>
789 2006-03-28 Ville Vainio <vivainio@gmail.com>
786
790
787 * iplib.py: Fix quoting of aliases so that only argless ones
791 * iplib.py: Fix quoting of aliases so that only argless ones
788 are quoted
792 are quoted
789
793
790 2006-03-28 Ville Vainio <vivainio@gmail.com>
794 2006-03-28 Ville Vainio <vivainio@gmail.com>
791
795
792 * iplib.py: Quote aliases with spaces in the name.
796 * iplib.py: Quote aliases with spaces in the name.
793 "c:\program files\blah\bin" is now legal alias target.
797 "c:\program files\blah\bin" is now legal alias target.
794
798
795 * ext_rehashdir.py: Space no longer allowed as arg
799 * ext_rehashdir.py: Space no longer allowed as arg
796 separator, since space is legal in path names.
800 separator, since space is legal in path names.
797
801
798 2006-03-16 Ville Vainio <vivainio@gmail.com>
802 2006-03-16 Ville Vainio <vivainio@gmail.com>
799
803
800 * upgrade_dir.py: Take path.py from Extensions, correcting
804 * upgrade_dir.py: Take path.py from Extensions, correcting
801 %upgrade magic
805 %upgrade magic
802
806
803 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
807 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
804
808
805 * hooks.py: Only enclose editor binary in quotes if legal and
809 * hooks.py: Only enclose editor binary in quotes if legal and
806 necessary (space in the name, and is an existing file). Fixes a bug
810 necessary (space in the name, and is an existing file). Fixes a bug
807 reported by Zachary Pincus.
811 reported by Zachary Pincus.
808
812
809 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
813 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
810
814
811 * Manual: thanks to a tip on proper color handling for Emacs, by
815 * Manual: thanks to a tip on proper color handling for Emacs, by
812 Eric J Haywiser <ejh1-AT-MIT.EDU>.
816 Eric J Haywiser <ejh1-AT-MIT.EDU>.
813
817
814 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
818 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
815 by applying the provided patch. Thanks to Liu Jin
819 by applying the provided patch. Thanks to Liu Jin
816 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
820 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
817 XEmacs/Linux, I'm trusting the submitter that it actually helps
821 XEmacs/Linux, I'm trusting the submitter that it actually helps
818 under win32/GNU Emacs. Will revisit if any problems are reported.
822 under win32/GNU Emacs. Will revisit if any problems are reported.
819
823
820 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
824 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
821
825
822 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
826 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
823 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
827 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
824
828
825 2006-03-12 Ville Vainio <vivainio@gmail.com>
829 2006-03-12 Ville Vainio <vivainio@gmail.com>
826
830
827 * Magic.py (magic_timeit): Added %timeit magic, contributed by
831 * Magic.py (magic_timeit): Added %timeit magic, contributed by
828 Torsten Marek.
832 Torsten Marek.
829
833
830 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
834 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
831
835
832 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
836 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
833 line ranges works again.
837 line ranges works again.
834
838
835 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
839 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
836
840
837 * IPython/iplib.py (showtraceback): add back sys.last_traceback
841 * IPython/iplib.py (showtraceback): add back sys.last_traceback
838 and friends, after a discussion with Zach Pincus on ipython-user.
842 and friends, after a discussion with Zach Pincus on ipython-user.
839 I'm not 100% sure, but after thinking about it quite a bit, it may
843 I'm not 100% sure, but after thinking about it quite a bit, it may
840 be OK. Testing with the multithreaded shells didn't reveal any
844 be OK. Testing with the multithreaded shells didn't reveal any
841 problems, but let's keep an eye out.
845 problems, but let's keep an eye out.
842
846
843 In the process, I fixed a few things which were calling
847 In the process, I fixed a few things which were calling
844 self.InteractiveTB() directly (like safe_execfile), which is a
848 self.InteractiveTB() directly (like safe_execfile), which is a
845 mistake: ALL exception reporting should be done by calling
849 mistake: ALL exception reporting should be done by calling
846 self.showtraceback(), which handles state and tab-completion and
850 self.showtraceback(), which handles state and tab-completion and
847 more.
851 more.
848
852
849 2006-03-01 Ville Vainio <vivainio@gmail.com>
853 2006-03-01 Ville Vainio <vivainio@gmail.com>
850
854
851 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
855 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
852 To use, do "from ipipe import *".
856 To use, do "from ipipe import *".
853
857
854 2006-02-24 Ville Vainio <vivainio@gmail.com>
858 2006-02-24 Ville Vainio <vivainio@gmail.com>
855
859
856 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
860 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
857 "cleanly" and safely than the older upgrade mechanism.
861 "cleanly" and safely than the older upgrade mechanism.
858
862
859 2006-02-21 Ville Vainio <vivainio@gmail.com>
863 2006-02-21 Ville Vainio <vivainio@gmail.com>
860
864
861 * Magic.py: %save works again.
865 * Magic.py: %save works again.
862
866
863 2006-02-15 Ville Vainio <vivainio@gmail.com>
867 2006-02-15 Ville Vainio <vivainio@gmail.com>
864
868
865 * Magic.py: %Pprint works again
869 * Magic.py: %Pprint works again
866
870
867 * Extensions/ipy_sane_defaults.py: Provide everything provided
871 * Extensions/ipy_sane_defaults.py: Provide everything provided
868 in default ipythonrc, to make it possible to have a completely empty
872 in default ipythonrc, to make it possible to have a completely empty
869 ipythonrc (and thus completely rc-file free configuration)
873 ipythonrc (and thus completely rc-file free configuration)
870
874
871 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
875 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
872
876
873 * IPython/hooks.py (editor): quote the call to the editor command,
877 * IPython/hooks.py (editor): quote the call to the editor command,
874 to allow commands with spaces in them. Problem noted by watching
878 to allow commands with spaces in them. Problem noted by watching
875 Ian Oswald's video about textpad under win32 at
879 Ian Oswald's video about textpad under win32 at
876 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
880 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
877
881
878 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
882 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
879 describing magics (we haven't used @ for a loong time).
883 describing magics (we haven't used @ for a loong time).
880
884
881 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
885 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
882 contributed by marienz to close
886 contributed by marienz to close
883 http://www.scipy.net/roundup/ipython/issue53.
887 http://www.scipy.net/roundup/ipython/issue53.
884
888
885 2006-02-10 Ville Vainio <vivainio@gmail.com>
889 2006-02-10 Ville Vainio <vivainio@gmail.com>
886
890
887 * genutils.py: getoutput now works in win32 too
891 * genutils.py: getoutput now works in win32 too
888
892
889 * completer.py: alias and magic completion only invoked
893 * completer.py: alias and magic completion only invoked
890 at the first "item" in the line, to avoid "cd %store"
894 at the first "item" in the line, to avoid "cd %store"
891 nonsense.
895 nonsense.
892
896
893 2006-02-09 Ville Vainio <vivainio@gmail.com>
897 2006-02-09 Ville Vainio <vivainio@gmail.com>
894
898
895 * test/*: Added a unit testing framework (finally).
899 * test/*: Added a unit testing framework (finally).
896 '%run runtests.py' to run test_*.
900 '%run runtests.py' to run test_*.
897
901
898 * ipapi.py: Exposed runlines and set_custom_exc
902 * ipapi.py: Exposed runlines and set_custom_exc
899
903
900 2006-02-07 Ville Vainio <vivainio@gmail.com>
904 2006-02-07 Ville Vainio <vivainio@gmail.com>
901
905
902 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
906 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
903 instead use "f(1 2)" as before.
907 instead use "f(1 2)" as before.
904
908
905 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
909 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
906
910
907 * IPython/demo.py (IPythonDemo): Add new classes to the demo
911 * IPython/demo.py (IPythonDemo): Add new classes to the demo
908 facilities, for demos processed by the IPython input filter
912 facilities, for demos processed by the IPython input filter
909 (IPythonDemo), and for running a script one-line-at-a-time as a
913 (IPythonDemo), and for running a script one-line-at-a-time as a
910 demo, both for pure Python (LineDemo) and for IPython-processed
914 demo, both for pure Python (LineDemo) and for IPython-processed
911 input (IPythonLineDemo). After a request by Dave Kohel, from the
915 input (IPythonLineDemo). After a request by Dave Kohel, from the
912 SAGE team.
916 SAGE team.
913 (Demo.edit): added an edit() method to the demo objects, to edit
917 (Demo.edit): added an edit() method to the demo objects, to edit
914 the in-memory copy of the last executed block.
918 the in-memory copy of the last executed block.
915
919
916 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
920 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
917 processing to %edit, %macro and %save. These commands can now be
921 processing to %edit, %macro and %save. These commands can now be
918 invoked on the unprocessed input as it was typed by the user
922 invoked on the unprocessed input as it was typed by the user
919 (without any prefilters applied). After requests by the SAGE team
923 (without any prefilters applied). After requests by the SAGE team
920 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
924 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
921
925
922 2006-02-01 Ville Vainio <vivainio@gmail.com>
926 2006-02-01 Ville Vainio <vivainio@gmail.com>
923
927
924 * setup.py, eggsetup.py: easy_install ipython==dev works
928 * setup.py, eggsetup.py: easy_install ipython==dev works
925 correctly now (on Linux)
929 correctly now (on Linux)
926
930
927 * ipy_user_conf,ipmaker: user config changes, removed spurious
931 * ipy_user_conf,ipmaker: user config changes, removed spurious
928 warnings
932 warnings
929
933
930 * iplib: if rc.banner is string, use it as is.
934 * iplib: if rc.banner is string, use it as is.
931
935
932 * Magic: %pycat accepts a string argument and pages it's contents.
936 * Magic: %pycat accepts a string argument and pages it's contents.
933
937
934
938
935 2006-01-30 Ville Vainio <vivainio@gmail.com>
939 2006-01-30 Ville Vainio <vivainio@gmail.com>
936
940
937 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
941 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
938 Now %store and bookmarks work through PickleShare, meaning that
942 Now %store and bookmarks work through PickleShare, meaning that
939 concurrent access is possible and all ipython sessions see the
943 concurrent access is possible and all ipython sessions see the
940 same database situation all the time, instead of snapshot of
944 same database situation all the time, instead of snapshot of
941 the situation when the session was started. Hence, %bookmark
945 the situation when the session was started. Hence, %bookmark
942 results are immediately accessible from othes sessions. The database
946 results are immediately accessible from othes sessions. The database
943 is also available for use by user extensions. See:
947 is also available for use by user extensions. See:
944 http://www.python.org/pypi/pickleshare
948 http://www.python.org/pypi/pickleshare
945
949
946 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
950 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
947
951
948 * aliases can now be %store'd
952 * aliases can now be %store'd
949
953
950 * path.py moved to Extensions so that pickleshare does not need
954 * path.py moved to Extensions so that pickleshare does not need
951 IPython-specific import. Extensions added to pythonpath right
955 IPython-specific import. Extensions added to pythonpath right
952 at __init__.
956 at __init__.
953
957
954 * iplib.py: ipalias deprecated/redundant; aliases are converted and
958 * iplib.py: ipalias deprecated/redundant; aliases are converted and
955 called with _ip.system and the pre-transformed command string.
959 called with _ip.system and the pre-transformed command string.
956
960
957 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
961 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
958
962
959 * IPython/iplib.py (interact): Fix that we were not catching
963 * IPython/iplib.py (interact): Fix that we were not catching
960 KeyboardInterrupt exceptions properly. I'm not quite sure why the
964 KeyboardInterrupt exceptions properly. I'm not quite sure why the
961 logic here had to change, but it's fixed now.
965 logic here had to change, but it's fixed now.
962
966
963 2006-01-29 Ville Vainio <vivainio@gmail.com>
967 2006-01-29 Ville Vainio <vivainio@gmail.com>
964
968
965 * iplib.py: Try to import pyreadline on Windows.
969 * iplib.py: Try to import pyreadline on Windows.
966
970
967 2006-01-27 Ville Vainio <vivainio@gmail.com>
971 2006-01-27 Ville Vainio <vivainio@gmail.com>
968
972
969 * iplib.py: Expose ipapi as _ip in builtin namespace.
973 * iplib.py: Expose ipapi as _ip in builtin namespace.
970 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
974 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
971 and ip_set_hook (-> _ip.set_hook) redundant. % and !
975 and ip_set_hook (-> _ip.set_hook) redundant. % and !
972 syntax now produce _ip.* variant of the commands.
976 syntax now produce _ip.* variant of the commands.
973
977
974 * "_ip.options().autoedit_syntax = 2" automatically throws
978 * "_ip.options().autoedit_syntax = 2" automatically throws
975 user to editor for syntax error correction without prompting.
979 user to editor for syntax error correction without prompting.
976
980
977 2006-01-27 Ville Vainio <vivainio@gmail.com>
981 2006-01-27 Ville Vainio <vivainio@gmail.com>
978
982
979 * ipmaker.py: Give "realistic" sys.argv for scripts (without
983 * ipmaker.py: Give "realistic" sys.argv for scripts (without
980 'ipython' at argv[0]) executed through command line.
984 'ipython' at argv[0]) executed through command line.
981 NOTE: this DEPRECATES calling ipython with multiple scripts
985 NOTE: this DEPRECATES calling ipython with multiple scripts
982 ("ipython a.py b.py c.py")
986 ("ipython a.py b.py c.py")
983
987
984 * iplib.py, hooks.py: Added configurable input prefilter,
988 * iplib.py, hooks.py: Added configurable input prefilter,
985 named 'input_prefilter'. See ext_rescapture.py for example
989 named 'input_prefilter'. See ext_rescapture.py for example
986 usage.
990 usage.
987
991
988 * ext_rescapture.py, Magic.py: Better system command output capture
992 * ext_rescapture.py, Magic.py: Better system command output capture
989 through 'var = !ls' (deprecates user-visible %sc). Same notation
993 through 'var = !ls' (deprecates user-visible %sc). Same notation
990 applies for magics, 'var = %alias' assigns alias list to var.
994 applies for magics, 'var = %alias' assigns alias list to var.
991
995
992 * ipapi.py: added meta() for accessing extension-usable data store.
996 * ipapi.py: added meta() for accessing extension-usable data store.
993
997
994 * iplib.py: added InteractiveShell.getapi(). New magics should be
998 * iplib.py: added InteractiveShell.getapi(). New magics should be
995 written doing self.getapi() instead of using the shell directly.
999 written doing self.getapi() instead of using the shell directly.
996
1000
997 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1001 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
998 %store foo >> ~/myfoo.txt to store variables to files (in clean
1002 %store foo >> ~/myfoo.txt to store variables to files (in clean
999 textual form, not a restorable pickle).
1003 textual form, not a restorable pickle).
1000
1004
1001 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1005 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1002
1006
1003 * usage.py, Magic.py: added %quickref
1007 * usage.py, Magic.py: added %quickref
1004
1008
1005 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1009 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1006
1010
1007 * GetoptErrors when invoking magics etc. with wrong args
1011 * GetoptErrors when invoking magics etc. with wrong args
1008 are now more helpful:
1012 are now more helpful:
1009 GetoptError: option -l not recognized (allowed: "qb" )
1013 GetoptError: option -l not recognized (allowed: "qb" )
1010
1014
1011 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1015 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1012
1016
1013 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1017 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1014 computationally intensive blocks don't appear to stall the demo.
1018 computationally intensive blocks don't appear to stall the demo.
1015
1019
1016 2006-01-24 Ville Vainio <vivainio@gmail.com>
1020 2006-01-24 Ville Vainio <vivainio@gmail.com>
1017
1021
1018 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1022 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1019 value to manipulate resulting history entry.
1023 value to manipulate resulting history entry.
1020
1024
1021 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1025 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1022 to instance methods of IPApi class, to make extending an embedded
1026 to instance methods of IPApi class, to make extending an embedded
1023 IPython feasible. See ext_rehashdir.py for example usage.
1027 IPython feasible. See ext_rehashdir.py for example usage.
1024
1028
1025 * Merged 1071-1076 from branches/0.7.1
1029 * Merged 1071-1076 from branches/0.7.1
1026
1030
1027
1031
1028 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1032 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1029
1033
1030 * tools/release (daystamp): Fix build tools to use the new
1034 * tools/release (daystamp): Fix build tools to use the new
1031 eggsetup.py script to build lightweight eggs.
1035 eggsetup.py script to build lightweight eggs.
1032
1036
1033 * Applied changesets 1062 and 1064 before 0.7.1 release.
1037 * Applied changesets 1062 and 1064 before 0.7.1 release.
1034
1038
1035 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1039 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1036 see the raw input history (without conversions like %ls ->
1040 see the raw input history (without conversions like %ls ->
1037 ipmagic("ls")). After a request from W. Stein, SAGE
1041 ipmagic("ls")). After a request from W. Stein, SAGE
1038 (http://modular.ucsd.edu/sage) developer. This information is
1042 (http://modular.ucsd.edu/sage) developer. This information is
1039 stored in the input_hist_raw attribute of the IPython instance, so
1043 stored in the input_hist_raw attribute of the IPython instance, so
1040 developers can access it if needed (it's an InputList instance).
1044 developers can access it if needed (it's an InputList instance).
1041
1045
1042 * Versionstring = 0.7.2.svn
1046 * Versionstring = 0.7.2.svn
1043
1047
1044 * eggsetup.py: A separate script for constructing eggs, creates
1048 * eggsetup.py: A separate script for constructing eggs, creates
1045 proper launch scripts even on Windows (an .exe file in
1049 proper launch scripts even on Windows (an .exe file in
1046 \python24\scripts).
1050 \python24\scripts).
1047
1051
1048 * ipapi.py: launch_new_instance, launch entry point needed for the
1052 * ipapi.py: launch_new_instance, launch entry point needed for the
1049 egg.
1053 egg.
1050
1054
1051 2006-01-23 Ville Vainio <vivainio@gmail.com>
1055 2006-01-23 Ville Vainio <vivainio@gmail.com>
1052
1056
1053 * Added %cpaste magic for pasting python code
1057 * Added %cpaste magic for pasting python code
1054
1058
1055 2006-01-22 Ville Vainio <vivainio@gmail.com>
1059 2006-01-22 Ville Vainio <vivainio@gmail.com>
1056
1060
1057 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1061 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1058
1062
1059 * Versionstring = 0.7.2.svn
1063 * Versionstring = 0.7.2.svn
1060
1064
1061 * eggsetup.py: A separate script for constructing eggs, creates
1065 * eggsetup.py: A separate script for constructing eggs, creates
1062 proper launch scripts even on Windows (an .exe file in
1066 proper launch scripts even on Windows (an .exe file in
1063 \python24\scripts).
1067 \python24\scripts).
1064
1068
1065 * ipapi.py: launch_new_instance, launch entry point needed for the
1069 * ipapi.py: launch_new_instance, launch entry point needed for the
1066 egg.
1070 egg.
1067
1071
1068 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1072 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1069
1073
1070 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1074 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1071 %pfile foo would print the file for foo even if it was a binary.
1075 %pfile foo would print the file for foo even if it was a binary.
1072 Now, extensions '.so' and '.dll' are skipped.
1076 Now, extensions '.so' and '.dll' are skipped.
1073
1077
1074 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1078 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1075 bug, where macros would fail in all threaded modes. I'm not 100%
1079 bug, where macros would fail in all threaded modes. I'm not 100%
1076 sure, so I'm going to put out an rc instead of making a release
1080 sure, so I'm going to put out an rc instead of making a release
1077 today, and wait for feedback for at least a few days.
1081 today, and wait for feedback for at least a few days.
1078
1082
1079 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1083 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1080 it...) the handling of pasting external code with autoindent on.
1084 it...) the handling of pasting external code with autoindent on.
1081 To get out of a multiline input, the rule will appear for most
1085 To get out of a multiline input, the rule will appear for most
1082 users unchanged: two blank lines or change the indent level
1086 users unchanged: two blank lines or change the indent level
1083 proposed by IPython. But there is a twist now: you can
1087 proposed by IPython. But there is a twist now: you can
1084 add/subtract only *one or two spaces*. If you add/subtract three
1088 add/subtract only *one or two spaces*. If you add/subtract three
1085 or more (unless you completely delete the line), IPython will
1089 or more (unless you completely delete the line), IPython will
1086 accept that line, and you'll need to enter a second one of pure
1090 accept that line, and you'll need to enter a second one of pure
1087 whitespace. I know it sounds complicated, but I can't find a
1091 whitespace. I know it sounds complicated, but I can't find a
1088 different solution that covers all the cases, with the right
1092 different solution that covers all the cases, with the right
1089 heuristics. Hopefully in actual use, nobody will really notice
1093 heuristics. Hopefully in actual use, nobody will really notice
1090 all these strange rules and things will 'just work'.
1094 all these strange rules and things will 'just work'.
1091
1095
1092 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1096 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1093
1097
1094 * IPython/iplib.py (interact): catch exceptions which can be
1098 * IPython/iplib.py (interact): catch exceptions which can be
1095 triggered asynchronously by signal handlers. Thanks to an
1099 triggered asynchronously by signal handlers. Thanks to an
1096 automatic crash report, submitted by Colin Kingsley
1100 automatic crash report, submitted by Colin Kingsley
1097 <tercel-AT-gentoo.org>.
1101 <tercel-AT-gentoo.org>.
1098
1102
1099 2006-01-20 Ville Vainio <vivainio@gmail.com>
1103 2006-01-20 Ville Vainio <vivainio@gmail.com>
1100
1104
1101 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1105 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1102 (%rehashdir, very useful, try it out) of how to extend ipython
1106 (%rehashdir, very useful, try it out) of how to extend ipython
1103 with new magics. Also added Extensions dir to pythonpath to make
1107 with new magics. Also added Extensions dir to pythonpath to make
1104 importing extensions easy.
1108 importing extensions easy.
1105
1109
1106 * %store now complains when trying to store interactively declared
1110 * %store now complains when trying to store interactively declared
1107 classes / instances of those classes.
1111 classes / instances of those classes.
1108
1112
1109 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1113 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1110 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1114 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1111 if they exist, and ipy_user_conf.py with some defaults is created for
1115 if they exist, and ipy_user_conf.py with some defaults is created for
1112 the user.
1116 the user.
1113
1117
1114 * Startup rehashing done by the config file, not InterpreterExec.
1118 * Startup rehashing done by the config file, not InterpreterExec.
1115 This means system commands are available even without selecting the
1119 This means system commands are available even without selecting the
1116 pysh profile. It's the sensible default after all.
1120 pysh profile. It's the sensible default after all.
1117
1121
1118 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1122 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1119
1123
1120 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1124 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1121 multiline code with autoindent on working. But I am really not
1125 multiline code with autoindent on working. But I am really not
1122 sure, so this needs more testing. Will commit a debug-enabled
1126 sure, so this needs more testing. Will commit a debug-enabled
1123 version for now, while I test it some more, so that Ville and
1127 version for now, while I test it some more, so that Ville and
1124 others may also catch any problems. Also made
1128 others may also catch any problems. Also made
1125 self.indent_current_str() a method, to ensure that there's no
1129 self.indent_current_str() a method, to ensure that there's no
1126 chance of the indent space count and the corresponding string
1130 chance of the indent space count and the corresponding string
1127 falling out of sync. All code needing the string should just call
1131 falling out of sync. All code needing the string should just call
1128 the method.
1132 the method.
1129
1133
1130 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1134 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1131
1135
1132 * IPython/Magic.py (magic_edit): fix check for when users don't
1136 * IPython/Magic.py (magic_edit): fix check for when users don't
1133 save their output files, the try/except was in the wrong section.
1137 save their output files, the try/except was in the wrong section.
1134
1138
1135 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1139 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1136
1140
1137 * IPython/Magic.py (magic_run): fix __file__ global missing from
1141 * IPython/Magic.py (magic_run): fix __file__ global missing from
1138 script's namespace when executed via %run. After a report by
1142 script's namespace when executed via %run. After a report by
1139 Vivian.
1143 Vivian.
1140
1144
1141 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1145 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1142 when using python 2.4. The parent constructor changed in 2.4, and
1146 when using python 2.4. The parent constructor changed in 2.4, and
1143 we need to track it directly (we can't call it, as it messes up
1147 we need to track it directly (we can't call it, as it messes up
1144 readline and tab-completion inside our pdb would stop working).
1148 readline and tab-completion inside our pdb would stop working).
1145 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1149 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1146
1150
1147 2006-01-16 Ville Vainio <vivainio@gmail.com>
1151 2006-01-16 Ville Vainio <vivainio@gmail.com>
1148
1152
1149 * Ipython/magic.py: Reverted back to old %edit functionality
1153 * Ipython/magic.py: Reverted back to old %edit functionality
1150 that returns file contents on exit.
1154 that returns file contents on exit.
1151
1155
1152 * IPython/path.py: Added Jason Orendorff's "path" module to
1156 * IPython/path.py: Added Jason Orendorff's "path" module to
1153 IPython tree, http://www.jorendorff.com/articles/python/path/.
1157 IPython tree, http://www.jorendorff.com/articles/python/path/.
1154 You can get path objects conveniently through %sc, and !!, e.g.:
1158 You can get path objects conveniently through %sc, and !!, e.g.:
1155 sc files=ls
1159 sc files=ls
1156 for p in files.paths: # or files.p
1160 for p in files.paths: # or files.p
1157 print p,p.mtime
1161 print p,p.mtime
1158
1162
1159 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1163 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1160 now work again without considering the exclusion regexp -
1164 now work again without considering the exclusion regexp -
1161 hence, things like ',foo my/path' turn to 'foo("my/path")'
1165 hence, things like ',foo my/path' turn to 'foo("my/path")'
1162 instead of syntax error.
1166 instead of syntax error.
1163
1167
1164
1168
1165 2006-01-14 Ville Vainio <vivainio@gmail.com>
1169 2006-01-14 Ville Vainio <vivainio@gmail.com>
1166
1170
1167 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1171 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1168 ipapi decorators for python 2.4 users, options() provides access to rc
1172 ipapi decorators for python 2.4 users, options() provides access to rc
1169 data.
1173 data.
1170
1174
1171 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1175 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1172 as path separators (even on Linux ;-). Space character after
1176 as path separators (even on Linux ;-). Space character after
1173 backslash (as yielded by tab completer) is still space;
1177 backslash (as yielded by tab completer) is still space;
1174 "%cd long\ name" works as expected.
1178 "%cd long\ name" works as expected.
1175
1179
1176 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1180 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1177 as "chain of command", with priority. API stays the same,
1181 as "chain of command", with priority. API stays the same,
1178 TryNext exception raised by a hook function signals that
1182 TryNext exception raised by a hook function signals that
1179 current hook failed and next hook should try handling it, as
1183 current hook failed and next hook should try handling it, as
1180 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
1184 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
1181 requested configurable display hook, which is now implemented.
1185 requested configurable display hook, which is now implemented.
1182
1186
1183 2006-01-13 Ville Vainio <vivainio@gmail.com>
1187 2006-01-13 Ville Vainio <vivainio@gmail.com>
1184
1188
1185 * IPython/platutils*.py: platform specific utility functions,
1189 * IPython/platutils*.py: platform specific utility functions,
1186 so far only set_term_title is implemented (change terminal
1190 so far only set_term_title is implemented (change terminal
1187 label in windowing systems). %cd now changes the title to
1191 label in windowing systems). %cd now changes the title to
1188 current dir.
1192 current dir.
1189
1193
1190 * IPython/Release.py: Added myself to "authors" list,
1194 * IPython/Release.py: Added myself to "authors" list,
1191 had to create new files.
1195 had to create new files.
1192
1196
1193 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1197 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1194 shell escape; not a known bug but had potential to be one in the
1198 shell escape; not a known bug but had potential to be one in the
1195 future.
1199 future.
1196
1200
1197 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1201 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1198 extension API for IPython! See the module for usage example. Fix
1202 extension API for IPython! See the module for usage example. Fix
1199 OInspect for docstring-less magic functions.
1203 OInspect for docstring-less magic functions.
1200
1204
1201
1205
1202 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1206 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1203
1207
1204 * IPython/iplib.py (raw_input): temporarily deactivate all
1208 * IPython/iplib.py (raw_input): temporarily deactivate all
1205 attempts at allowing pasting of code with autoindent on. It
1209 attempts at allowing pasting of code with autoindent on. It
1206 introduced bugs (reported by Prabhu) and I can't seem to find a
1210 introduced bugs (reported by Prabhu) and I can't seem to find a
1207 robust combination which works in all cases. Will have to revisit
1211 robust combination which works in all cases. Will have to revisit
1208 later.
1212 later.
1209
1213
1210 * IPython/genutils.py: remove isspace() function. We've dropped
1214 * IPython/genutils.py: remove isspace() function. We've dropped
1211 2.2 compatibility, so it's OK to use the string method.
1215 2.2 compatibility, so it's OK to use the string method.
1212
1216
1213 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1217 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1214
1218
1215 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1219 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1216 matching what NOT to autocall on, to include all python binary
1220 matching what NOT to autocall on, to include all python binary
1217 operators (including things like 'and', 'or', 'is' and 'in').
1221 operators (including things like 'and', 'or', 'is' and 'in').
1218 Prompted by a bug report on 'foo & bar', but I realized we had
1222 Prompted by a bug report on 'foo & bar', but I realized we had
1219 many more potential bug cases with other operators. The regexp is
1223 many more potential bug cases with other operators. The regexp is
1220 self.re_exclude_auto, it's fairly commented.
1224 self.re_exclude_auto, it's fairly commented.
1221
1225
1222 2006-01-12 Ville Vainio <vivainio@gmail.com>
1226 2006-01-12 Ville Vainio <vivainio@gmail.com>
1223
1227
1224 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1228 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1225 Prettified and hardened string/backslash quoting with ipsystem(),
1229 Prettified and hardened string/backslash quoting with ipsystem(),
1226 ipalias() and ipmagic(). Now even \ characters are passed to
1230 ipalias() and ipmagic(). Now even \ characters are passed to
1227 %magics, !shell escapes and aliases exactly as they are in the
1231 %magics, !shell escapes and aliases exactly as they are in the
1228 ipython command line. Should improve backslash experience,
1232 ipython command line. Should improve backslash experience,
1229 particularly in Windows (path delimiter for some commands that
1233 particularly in Windows (path delimiter for some commands that
1230 won't understand '/'), but Unix benefits as well (regexps). %cd
1234 won't understand '/'), but Unix benefits as well (regexps). %cd
1231 magic still doesn't support backslash path delimiters, though. Also
1235 magic still doesn't support backslash path delimiters, though. Also
1232 deleted all pretense of supporting multiline command strings in
1236 deleted all pretense of supporting multiline command strings in
1233 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1237 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1234
1238
1235 * doc/build_doc_instructions.txt added. Documentation on how to
1239 * doc/build_doc_instructions.txt added. Documentation on how to
1236 use doc/update_manual.py, added yesterday. Both files contributed
1240 use doc/update_manual.py, added yesterday. Both files contributed
1237 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1241 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1238 doc/*.sh for deprecation at a later date.
1242 doc/*.sh for deprecation at a later date.
1239
1243
1240 * /ipython.py Added ipython.py to root directory for
1244 * /ipython.py Added ipython.py to root directory for
1241 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1245 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1242 ipython.py) and development convenience (no need to keep doing
1246 ipython.py) and development convenience (no need to keep doing
1243 "setup.py install" between changes).
1247 "setup.py install" between changes).
1244
1248
1245 * Made ! and !! shell escapes work (again) in multiline expressions:
1249 * Made ! and !! shell escapes work (again) in multiline expressions:
1246 if 1:
1250 if 1:
1247 !ls
1251 !ls
1248 !!ls
1252 !!ls
1249
1253
1250 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1254 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1251
1255
1252 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1256 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1253 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1257 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1254 module in case-insensitive installation. Was causing crashes
1258 module in case-insensitive installation. Was causing crashes
1255 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1259 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1256
1260
1257 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1261 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1258 <marienz-AT-gentoo.org>, closes
1262 <marienz-AT-gentoo.org>, closes
1259 http://www.scipy.net/roundup/ipython/issue51.
1263 http://www.scipy.net/roundup/ipython/issue51.
1260
1264
1261 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1265 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1262
1266
1263 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1267 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1264 problem of excessive CPU usage under *nix and keyboard lag under
1268 problem of excessive CPU usage under *nix and keyboard lag under
1265 win32.
1269 win32.
1266
1270
1267 2006-01-10 *** Released version 0.7.0
1271 2006-01-10 *** Released version 0.7.0
1268
1272
1269 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1273 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1270
1274
1271 * IPython/Release.py (revision): tag version number to 0.7.0,
1275 * IPython/Release.py (revision): tag version number to 0.7.0,
1272 ready for release.
1276 ready for release.
1273
1277
1274 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1278 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1275 it informs the user of the name of the temp. file used. This can
1279 it informs the user of the name of the temp. file used. This can
1276 help if you decide later to reuse that same file, so you know
1280 help if you decide later to reuse that same file, so you know
1277 where to copy the info from.
1281 where to copy the info from.
1278
1282
1279 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1283 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1280
1284
1281 * setup_bdist_egg.py: little script to build an egg. Added
1285 * setup_bdist_egg.py: little script to build an egg. Added
1282 support in the release tools as well.
1286 support in the release tools as well.
1283
1287
1284 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1288 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1285
1289
1286 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1290 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1287 version selection (new -wxversion command line and ipythonrc
1291 version selection (new -wxversion command line and ipythonrc
1288 parameter). Patch contributed by Arnd Baecker
1292 parameter). Patch contributed by Arnd Baecker
1289 <arnd.baecker-AT-web.de>.
1293 <arnd.baecker-AT-web.de>.
1290
1294
1291 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1295 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1292 embedded instances, for variables defined at the interactive
1296 embedded instances, for variables defined at the interactive
1293 prompt of the embedded ipython. Reported by Arnd.
1297 prompt of the embedded ipython. Reported by Arnd.
1294
1298
1295 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1299 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1296 it can be used as a (stateful) toggle, or with a direct parameter.
1300 it can be used as a (stateful) toggle, or with a direct parameter.
1297
1301
1298 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1302 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1299 could be triggered in certain cases and cause the traceback
1303 could be triggered in certain cases and cause the traceback
1300 printer not to work.
1304 printer not to work.
1301
1305
1302 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1306 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1303
1307
1304 * IPython/iplib.py (_should_recompile): Small fix, closes
1308 * IPython/iplib.py (_should_recompile): Small fix, closes
1305 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1309 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1306
1310
1307 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1311 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1308
1312
1309 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1313 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1310 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1314 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1311 Moad for help with tracking it down.
1315 Moad for help with tracking it down.
1312
1316
1313 * IPython/iplib.py (handle_auto): fix autocall handling for
1317 * IPython/iplib.py (handle_auto): fix autocall handling for
1314 objects which support BOTH __getitem__ and __call__ (so that f [x]
1318 objects which support BOTH __getitem__ and __call__ (so that f [x]
1315 is left alone, instead of becoming f([x]) automatically).
1319 is left alone, instead of becoming f([x]) automatically).
1316
1320
1317 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1321 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1318 Ville's patch.
1322 Ville's patch.
1319
1323
1320 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1324 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1321
1325
1322 * IPython/iplib.py (handle_auto): changed autocall semantics to
1326 * IPython/iplib.py (handle_auto): changed autocall semantics to
1323 include 'smart' mode, where the autocall transformation is NOT
1327 include 'smart' mode, where the autocall transformation is NOT
1324 applied if there are no arguments on the line. This allows you to
1328 applied if there are no arguments on the line. This allows you to
1325 just type 'foo' if foo is a callable to see its internal form,
1329 just type 'foo' if foo is a callable to see its internal form,
1326 instead of having it called with no arguments (typically a
1330 instead of having it called with no arguments (typically a
1327 mistake). The old 'full' autocall still exists: for that, you
1331 mistake). The old 'full' autocall still exists: for that, you
1328 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1332 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1329
1333
1330 * IPython/completer.py (Completer.attr_matches): add
1334 * IPython/completer.py (Completer.attr_matches): add
1331 tab-completion support for Enthoughts' traits. After a report by
1335 tab-completion support for Enthoughts' traits. After a report by
1332 Arnd and a patch by Prabhu.
1336 Arnd and a patch by Prabhu.
1333
1337
1334 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1338 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1335
1339
1336 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1340 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1337 Schmolck's patch to fix inspect.getinnerframes().
1341 Schmolck's patch to fix inspect.getinnerframes().
1338
1342
1339 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1343 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1340 for embedded instances, regarding handling of namespaces and items
1344 for embedded instances, regarding handling of namespaces and items
1341 added to the __builtin__ one. Multiple embedded instances and
1345 added to the __builtin__ one. Multiple embedded instances and
1342 recursive embeddings should work better now (though I'm not sure
1346 recursive embeddings should work better now (though I'm not sure
1343 I've got all the corner cases fixed, that code is a bit of a brain
1347 I've got all the corner cases fixed, that code is a bit of a brain
1344 twister).
1348 twister).
1345
1349
1346 * IPython/Magic.py (magic_edit): added support to edit in-memory
1350 * IPython/Magic.py (magic_edit): added support to edit in-memory
1347 macros (automatically creates the necessary temp files). %edit
1351 macros (automatically creates the necessary temp files). %edit
1348 also doesn't return the file contents anymore, it's just noise.
1352 also doesn't return the file contents anymore, it's just noise.
1349
1353
1350 * IPython/completer.py (Completer.attr_matches): revert change to
1354 * IPython/completer.py (Completer.attr_matches): revert change to
1351 complete only on attributes listed in __all__. I realized it
1355 complete only on attributes listed in __all__. I realized it
1352 cripples the tab-completion system as a tool for exploring the
1356 cripples the tab-completion system as a tool for exploring the
1353 internals of unknown libraries (it renders any non-__all__
1357 internals of unknown libraries (it renders any non-__all__
1354 attribute off-limits). I got bit by this when trying to see
1358 attribute off-limits). I got bit by this when trying to see
1355 something inside the dis module.
1359 something inside the dis module.
1356
1360
1357 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1361 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1358
1362
1359 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1363 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1360 namespace for users and extension writers to hold data in. This
1364 namespace for users and extension writers to hold data in. This
1361 follows the discussion in
1365 follows the discussion in
1362 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1366 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1363
1367
1364 * IPython/completer.py (IPCompleter.complete): small patch to help
1368 * IPython/completer.py (IPCompleter.complete): small patch to help
1365 tab-completion under Emacs, after a suggestion by John Barnard
1369 tab-completion under Emacs, after a suggestion by John Barnard
1366 <barnarj-AT-ccf.org>.
1370 <barnarj-AT-ccf.org>.
1367
1371
1368 * IPython/Magic.py (Magic.extract_input_slices): added support for
1372 * IPython/Magic.py (Magic.extract_input_slices): added support for
1369 the slice notation in magics to use N-M to represent numbers N...M
1373 the slice notation in magics to use N-M to represent numbers N...M
1370 (closed endpoints). This is used by %macro and %save.
1374 (closed endpoints). This is used by %macro and %save.
1371
1375
1372 * IPython/completer.py (Completer.attr_matches): for modules which
1376 * IPython/completer.py (Completer.attr_matches): for modules which
1373 define __all__, complete only on those. After a patch by Jeffrey
1377 define __all__, complete only on those. After a patch by Jeffrey
1374 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1378 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1375 speed up this routine.
1379 speed up this routine.
1376
1380
1377 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1381 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1378 don't know if this is the end of it, but the behavior now is
1382 don't know if this is the end of it, but the behavior now is
1379 certainly much more correct. Note that coupled with macros,
1383 certainly much more correct. Note that coupled with macros,
1380 slightly surprising (at first) behavior may occur: a macro will in
1384 slightly surprising (at first) behavior may occur: a macro will in
1381 general expand to multiple lines of input, so upon exiting, the
1385 general expand to multiple lines of input, so upon exiting, the
1382 in/out counters will both be bumped by the corresponding amount
1386 in/out counters will both be bumped by the corresponding amount
1383 (as if the macro's contents had been typed interactively). Typing
1387 (as if the macro's contents had been typed interactively). Typing
1384 %hist will reveal the intermediate (silently processed) lines.
1388 %hist will reveal the intermediate (silently processed) lines.
1385
1389
1386 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1390 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1387 pickle to fail (%run was overwriting __main__ and not restoring
1391 pickle to fail (%run was overwriting __main__ and not restoring
1388 it, but pickle relies on __main__ to operate).
1392 it, but pickle relies on __main__ to operate).
1389
1393
1390 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1394 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1391 using properties, but forgot to make the main InteractiveShell
1395 using properties, but forgot to make the main InteractiveShell
1392 class a new-style class. Properties fail silently, and
1396 class a new-style class. Properties fail silently, and
1393 mysteriously, with old-style class (getters work, but
1397 mysteriously, with old-style class (getters work, but
1394 setters don't do anything).
1398 setters don't do anything).
1395
1399
1396 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1400 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1397
1401
1398 * IPython/Magic.py (magic_history): fix history reporting bug (I
1402 * IPython/Magic.py (magic_history): fix history reporting bug (I
1399 know some nasties are still there, I just can't seem to find a
1403 know some nasties are still there, I just can't seem to find a
1400 reproducible test case to track them down; the input history is
1404 reproducible test case to track them down; the input history is
1401 falling out of sync...)
1405 falling out of sync...)
1402
1406
1403 * IPython/iplib.py (handle_shell_escape): fix bug where both
1407 * IPython/iplib.py (handle_shell_escape): fix bug where both
1404 aliases and system accesses where broken for indented code (such
1408 aliases and system accesses where broken for indented code (such
1405 as loops).
1409 as loops).
1406
1410
1407 * IPython/genutils.py (shell): fix small but critical bug for
1411 * IPython/genutils.py (shell): fix small but critical bug for
1408 win32 system access.
1412 win32 system access.
1409
1413
1410 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1414 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1411
1415
1412 * IPython/iplib.py (showtraceback): remove use of the
1416 * IPython/iplib.py (showtraceback): remove use of the
1413 sys.last_{type/value/traceback} structures, which are non
1417 sys.last_{type/value/traceback} structures, which are non
1414 thread-safe.
1418 thread-safe.
1415 (_prefilter): change control flow to ensure that we NEVER
1419 (_prefilter): change control flow to ensure that we NEVER
1416 introspect objects when autocall is off. This will guarantee that
1420 introspect objects when autocall is off. This will guarantee that
1417 having an input line of the form 'x.y', where access to attribute
1421 having an input line of the form 'x.y', where access to attribute
1418 'y' has side effects, doesn't trigger the side effect TWICE. It
1422 'y' has side effects, doesn't trigger the side effect TWICE. It
1419 is important to note that, with autocall on, these side effects
1423 is important to note that, with autocall on, these side effects
1420 can still happen.
1424 can still happen.
1421 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1425 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1422 trio. IPython offers these three kinds of special calls which are
1426 trio. IPython offers these three kinds of special calls which are
1423 not python code, and it's a good thing to have their call method
1427 not python code, and it's a good thing to have their call method
1424 be accessible as pure python functions (not just special syntax at
1428 be accessible as pure python functions (not just special syntax at
1425 the command line). It gives us a better internal implementation
1429 the command line). It gives us a better internal implementation
1426 structure, as well as exposing these for user scripting more
1430 structure, as well as exposing these for user scripting more
1427 cleanly.
1431 cleanly.
1428
1432
1429 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1433 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1430 file. Now that they'll be more likely to be used with the
1434 file. Now that they'll be more likely to be used with the
1431 persistance system (%store), I want to make sure their module path
1435 persistance system (%store), I want to make sure their module path
1432 doesn't change in the future, so that we don't break things for
1436 doesn't change in the future, so that we don't break things for
1433 users' persisted data.
1437 users' persisted data.
1434
1438
1435 * IPython/iplib.py (autoindent_update): move indentation
1439 * IPython/iplib.py (autoindent_update): move indentation
1436 management into the _text_ processing loop, not the keyboard
1440 management into the _text_ processing loop, not the keyboard
1437 interactive one. This is necessary to correctly process non-typed
1441 interactive one. This is necessary to correctly process non-typed
1438 multiline input (such as macros).
1442 multiline input (such as macros).
1439
1443
1440 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1444 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1441 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1445 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1442 which was producing problems in the resulting manual.
1446 which was producing problems in the resulting manual.
1443 (magic_whos): improve reporting of instances (show their class,
1447 (magic_whos): improve reporting of instances (show their class,
1444 instead of simply printing 'instance' which isn't terribly
1448 instead of simply printing 'instance' which isn't terribly
1445 informative).
1449 informative).
1446
1450
1447 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1451 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1448 (minor mods) to support network shares under win32.
1452 (minor mods) to support network shares under win32.
1449
1453
1450 * IPython/winconsole.py (get_console_size): add new winconsole
1454 * IPython/winconsole.py (get_console_size): add new winconsole
1451 module and fixes to page_dumb() to improve its behavior under
1455 module and fixes to page_dumb() to improve its behavior under
1452 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1456 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1453
1457
1454 * IPython/Magic.py (Macro): simplified Macro class to just
1458 * IPython/Magic.py (Macro): simplified Macro class to just
1455 subclass list. We've had only 2.2 compatibility for a very long
1459 subclass list. We've had only 2.2 compatibility for a very long
1456 time, yet I was still avoiding subclassing the builtin types. No
1460 time, yet I was still avoiding subclassing the builtin types. No
1457 more (I'm also starting to use properties, though I won't shift to
1461 more (I'm also starting to use properties, though I won't shift to
1458 2.3-specific features quite yet).
1462 2.3-specific features quite yet).
1459 (magic_store): added Ville's patch for lightweight variable
1463 (magic_store): added Ville's patch for lightweight variable
1460 persistence, after a request on the user list by Matt Wilkie
1464 persistence, after a request on the user list by Matt Wilkie
1461 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1465 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1462 details.
1466 details.
1463
1467
1464 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1468 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1465 changed the default logfile name from 'ipython.log' to
1469 changed the default logfile name from 'ipython.log' to
1466 'ipython_log.py'. These logs are real python files, and now that
1470 'ipython_log.py'. These logs are real python files, and now that
1467 we have much better multiline support, people are more likely to
1471 we have much better multiline support, people are more likely to
1468 want to use them as such. Might as well name them correctly.
1472 want to use them as such. Might as well name them correctly.
1469
1473
1470 * IPython/Magic.py: substantial cleanup. While we can't stop
1474 * IPython/Magic.py: substantial cleanup. While we can't stop
1471 using magics as mixins, due to the existing customizations 'out
1475 using magics as mixins, due to the existing customizations 'out
1472 there' which rely on the mixin naming conventions, at least I
1476 there' which rely on the mixin naming conventions, at least I
1473 cleaned out all cross-class name usage. So once we are OK with
1477 cleaned out all cross-class name usage. So once we are OK with
1474 breaking compatibility, the two systems can be separated.
1478 breaking compatibility, the two systems can be separated.
1475
1479
1476 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1480 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1477 anymore, and the class is a fair bit less hideous as well. New
1481 anymore, and the class is a fair bit less hideous as well. New
1478 features were also introduced: timestamping of input, and logging
1482 features were also introduced: timestamping of input, and logging
1479 of output results. These are user-visible with the -t and -o
1483 of output results. These are user-visible with the -t and -o
1480 options to %logstart. Closes
1484 options to %logstart. Closes
1481 http://www.scipy.net/roundup/ipython/issue11 and a request by
1485 http://www.scipy.net/roundup/ipython/issue11 and a request by
1482 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1486 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1483
1487
1484 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1488 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1485
1489
1486 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1490 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1487 better handle backslashes in paths. See the thread 'More Windows
1491 better handle backslashes in paths. See the thread 'More Windows
1488 questions part 2 - \/ characters revisited' on the iypthon user
1492 questions part 2 - \/ characters revisited' on the iypthon user
1489 list:
1493 list:
1490 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1494 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1491
1495
1492 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1496 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1493
1497
1494 (InteractiveShell.__init__): change threaded shells to not use the
1498 (InteractiveShell.__init__): change threaded shells to not use the
1495 ipython crash handler. This was causing more problems than not,
1499 ipython crash handler. This was causing more problems than not,
1496 as exceptions in the main thread (GUI code, typically) would
1500 as exceptions in the main thread (GUI code, typically) would
1497 always show up as a 'crash', when they really weren't.
1501 always show up as a 'crash', when they really weren't.
1498
1502
1499 The colors and exception mode commands (%colors/%xmode) have been
1503 The colors and exception mode commands (%colors/%xmode) have been
1500 synchronized to also take this into account, so users can get
1504 synchronized to also take this into account, so users can get
1501 verbose exceptions for their threaded code as well. I also added
1505 verbose exceptions for their threaded code as well. I also added
1502 support for activating pdb inside this exception handler as well,
1506 support for activating pdb inside this exception handler as well,
1503 so now GUI authors can use IPython's enhanced pdb at runtime.
1507 so now GUI authors can use IPython's enhanced pdb at runtime.
1504
1508
1505 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1509 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1506 true by default, and add it to the shipped ipythonrc file. Since
1510 true by default, and add it to the shipped ipythonrc file. Since
1507 this asks the user before proceeding, I think it's OK to make it
1511 this asks the user before proceeding, I think it's OK to make it
1508 true by default.
1512 true by default.
1509
1513
1510 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1514 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1511 of the previous special-casing of input in the eval loop. I think
1515 of the previous special-casing of input in the eval loop. I think
1512 this is cleaner, as they really are commands and shouldn't have
1516 this is cleaner, as they really are commands and shouldn't have
1513 a special role in the middle of the core code.
1517 a special role in the middle of the core code.
1514
1518
1515 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1519 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1516
1520
1517 * IPython/iplib.py (edit_syntax_error): added support for
1521 * IPython/iplib.py (edit_syntax_error): added support for
1518 automatically reopening the editor if the file had a syntax error
1522 automatically reopening the editor if the file had a syntax error
1519 in it. Thanks to scottt who provided the patch at:
1523 in it. Thanks to scottt who provided the patch at:
1520 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1524 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1521 version committed).
1525 version committed).
1522
1526
1523 * IPython/iplib.py (handle_normal): add suport for multi-line
1527 * IPython/iplib.py (handle_normal): add suport for multi-line
1524 input with emtpy lines. This fixes
1528 input with emtpy lines. This fixes
1525 http://www.scipy.net/roundup/ipython/issue43 and a similar
1529 http://www.scipy.net/roundup/ipython/issue43 and a similar
1526 discussion on the user list.
1530 discussion on the user list.
1527
1531
1528 WARNING: a behavior change is necessarily introduced to support
1532 WARNING: a behavior change is necessarily introduced to support
1529 blank lines: now a single blank line with whitespace does NOT
1533 blank lines: now a single blank line with whitespace does NOT
1530 break the input loop, which means that when autoindent is on, by
1534 break the input loop, which means that when autoindent is on, by
1531 default hitting return on the next (indented) line does NOT exit.
1535 default hitting return on the next (indented) line does NOT exit.
1532
1536
1533 Instead, to exit a multiline input you can either have:
1537 Instead, to exit a multiline input you can either have:
1534
1538
1535 - TWO whitespace lines (just hit return again), or
1539 - TWO whitespace lines (just hit return again), or
1536 - a single whitespace line of a different length than provided
1540 - a single whitespace line of a different length than provided
1537 by the autoindent (add or remove a space).
1541 by the autoindent (add or remove a space).
1538
1542
1539 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1543 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1540 module to better organize all readline-related functionality.
1544 module to better organize all readline-related functionality.
1541 I've deleted FlexCompleter and put all completion clases here.
1545 I've deleted FlexCompleter and put all completion clases here.
1542
1546
1543 * IPython/iplib.py (raw_input): improve indentation management.
1547 * IPython/iplib.py (raw_input): improve indentation management.
1544 It is now possible to paste indented code with autoindent on, and
1548 It is now possible to paste indented code with autoindent on, and
1545 the code is interpreted correctly (though it still looks bad on
1549 the code is interpreted correctly (though it still looks bad on
1546 screen, due to the line-oriented nature of ipython).
1550 screen, due to the line-oriented nature of ipython).
1547 (MagicCompleter.complete): change behavior so that a TAB key on an
1551 (MagicCompleter.complete): change behavior so that a TAB key on an
1548 otherwise empty line actually inserts a tab, instead of completing
1552 otherwise empty line actually inserts a tab, instead of completing
1549 on the entire global namespace. This makes it easier to use the
1553 on the entire global namespace. This makes it easier to use the
1550 TAB key for indentation. After a request by Hans Meine
1554 TAB key for indentation. After a request by Hans Meine
1551 <hans_meine-AT-gmx.net>
1555 <hans_meine-AT-gmx.net>
1552 (_prefilter): add support so that typing plain 'exit' or 'quit'
1556 (_prefilter): add support so that typing plain 'exit' or 'quit'
1553 does a sensible thing. Originally I tried to deviate as little as
1557 does a sensible thing. Originally I tried to deviate as little as
1554 possible from the default python behavior, but even that one may
1558 possible from the default python behavior, but even that one may
1555 change in this direction (thread on python-dev to that effect).
1559 change in this direction (thread on python-dev to that effect).
1556 Regardless, ipython should do the right thing even if CPython's
1560 Regardless, ipython should do the right thing even if CPython's
1557 '>>>' prompt doesn't.
1561 '>>>' prompt doesn't.
1558 (InteractiveShell): removed subclassing code.InteractiveConsole
1562 (InteractiveShell): removed subclassing code.InteractiveConsole
1559 class. By now we'd overridden just about all of its methods: I've
1563 class. By now we'd overridden just about all of its methods: I've
1560 copied the remaining two over, and now ipython is a standalone
1564 copied the remaining two over, and now ipython is a standalone
1561 class. This will provide a clearer picture for the chainsaw
1565 class. This will provide a clearer picture for the chainsaw
1562 branch refactoring.
1566 branch refactoring.
1563
1567
1564 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1568 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1565
1569
1566 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1570 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1567 failures for objects which break when dir() is called on them.
1571 failures for objects which break when dir() is called on them.
1568
1572
1569 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1573 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1570 distinct local and global namespaces in the completer API. This
1574 distinct local and global namespaces in the completer API. This
1571 change allows us to properly handle completion with distinct
1575 change allows us to properly handle completion with distinct
1572 scopes, including in embedded instances (this had never really
1576 scopes, including in embedded instances (this had never really
1573 worked correctly).
1577 worked correctly).
1574
1578
1575 Note: this introduces a change in the constructor for
1579 Note: this introduces a change in the constructor for
1576 MagicCompleter, as a new global_namespace parameter is now the
1580 MagicCompleter, as a new global_namespace parameter is now the
1577 second argument (the others were bumped one position).
1581 second argument (the others were bumped one position).
1578
1582
1579 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1583 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1580
1584
1581 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1585 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1582 embedded instances (which can be done now thanks to Vivian's
1586 embedded instances (which can be done now thanks to Vivian's
1583 frame-handling fixes for pdb).
1587 frame-handling fixes for pdb).
1584 (InteractiveShell.__init__): Fix namespace handling problem in
1588 (InteractiveShell.__init__): Fix namespace handling problem in
1585 embedded instances. We were overwriting __main__ unconditionally,
1589 embedded instances. We were overwriting __main__ unconditionally,
1586 and this should only be done for 'full' (non-embedded) IPython;
1590 and this should only be done for 'full' (non-embedded) IPython;
1587 embedded instances must respect the caller's __main__. Thanks to
1591 embedded instances must respect the caller's __main__. Thanks to
1588 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1592 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1589
1593
1590 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1594 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1591
1595
1592 * setup.py: added download_url to setup(). This registers the
1596 * setup.py: added download_url to setup(). This registers the
1593 download address at PyPI, which is not only useful to humans
1597 download address at PyPI, which is not only useful to humans
1594 browsing the site, but is also picked up by setuptools (the Eggs
1598 browsing the site, but is also picked up by setuptools (the Eggs
1595 machinery). Thanks to Ville and R. Kern for the info/discussion
1599 machinery). Thanks to Ville and R. Kern for the info/discussion
1596 on this.
1600 on this.
1597
1601
1598 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1602 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1599
1603
1600 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1604 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1601 This brings a lot of nice functionality to the pdb mode, which now
1605 This brings a lot of nice functionality to the pdb mode, which now
1602 has tab-completion, syntax highlighting, and better stack handling
1606 has tab-completion, syntax highlighting, and better stack handling
1603 than before. Many thanks to Vivian De Smedt
1607 than before. Many thanks to Vivian De Smedt
1604 <vivian-AT-vdesmedt.com> for the original patches.
1608 <vivian-AT-vdesmedt.com> for the original patches.
1605
1609
1606 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1610 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1607
1611
1608 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1612 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1609 sequence to consistently accept the banner argument. The
1613 sequence to consistently accept the banner argument. The
1610 inconsistency was tripping SAGE, thanks to Gary Zablackis
1614 inconsistency was tripping SAGE, thanks to Gary Zablackis
1611 <gzabl-AT-yahoo.com> for the report.
1615 <gzabl-AT-yahoo.com> for the report.
1612
1616
1613 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1617 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1614
1618
1615 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1619 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1616 Fix bug where a naked 'alias' call in the ipythonrc file would
1620 Fix bug where a naked 'alias' call in the ipythonrc file would
1617 cause a crash. Bug reported by Jorgen Stenarson.
1621 cause a crash. Bug reported by Jorgen Stenarson.
1618
1622
1619 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1623 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1620
1624
1621 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1625 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1622 startup time.
1626 startup time.
1623
1627
1624 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1628 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1625 instances had introduced a bug with globals in normal code. Now
1629 instances had introduced a bug with globals in normal code. Now
1626 it's working in all cases.
1630 it's working in all cases.
1627
1631
1628 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1632 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1629 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1633 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1630 has been introduced to set the default case sensitivity of the
1634 has been introduced to set the default case sensitivity of the
1631 searches. Users can still select either mode at runtime on a
1635 searches. Users can still select either mode at runtime on a
1632 per-search basis.
1636 per-search basis.
1633
1637
1634 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1638 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1635
1639
1636 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1640 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1637 attributes in wildcard searches for subclasses. Modified version
1641 attributes in wildcard searches for subclasses. Modified version
1638 of a patch by Jorgen.
1642 of a patch by Jorgen.
1639
1643
1640 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1644 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1641
1645
1642 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1646 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1643 embedded instances. I added a user_global_ns attribute to the
1647 embedded instances. I added a user_global_ns attribute to the
1644 InteractiveShell class to handle this.
1648 InteractiveShell class to handle this.
1645
1649
1646 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1650 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1647
1651
1648 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1652 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1649 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1653 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1650 (reported under win32, but may happen also in other platforms).
1654 (reported under win32, but may happen also in other platforms).
1651 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1655 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1652
1656
1653 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1657 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1654
1658
1655 * IPython/Magic.py (magic_psearch): new support for wildcard
1659 * IPython/Magic.py (magic_psearch): new support for wildcard
1656 patterns. Now, typing ?a*b will list all names which begin with a
1660 patterns. Now, typing ?a*b will list all names which begin with a
1657 and end in b, for example. The %psearch magic has full
1661 and end in b, for example. The %psearch magic has full
1658 docstrings. Many thanks to JΓΆrgen Stenarson
1662 docstrings. Many thanks to JΓΆrgen Stenarson
1659 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1663 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1660 implementing this functionality.
1664 implementing this functionality.
1661
1665
1662 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1666 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1663
1667
1664 * Manual: fixed long-standing annoyance of double-dashes (as in
1668 * Manual: fixed long-standing annoyance of double-dashes (as in
1665 --prefix=~, for example) being stripped in the HTML version. This
1669 --prefix=~, for example) being stripped in the HTML version. This
1666 is a latex2html bug, but a workaround was provided. Many thanks
1670 is a latex2html bug, but a workaround was provided. Many thanks
1667 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1671 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1668 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1672 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1669 rolling. This seemingly small issue had tripped a number of users
1673 rolling. This seemingly small issue had tripped a number of users
1670 when first installing, so I'm glad to see it gone.
1674 when first installing, so I'm glad to see it gone.
1671
1675
1672 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1676 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1673
1677
1674 * IPython/Extensions/numeric_formats.py: fix missing import,
1678 * IPython/Extensions/numeric_formats.py: fix missing import,
1675 reported by Stephen Walton.
1679 reported by Stephen Walton.
1676
1680
1677 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1681 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1678
1682
1679 * IPython/demo.py: finish demo module, fully documented now.
1683 * IPython/demo.py: finish demo module, fully documented now.
1680
1684
1681 * IPython/genutils.py (file_read): simple little utility to read a
1685 * IPython/genutils.py (file_read): simple little utility to read a
1682 file and ensure it's closed afterwards.
1686 file and ensure it's closed afterwards.
1683
1687
1684 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1688 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1685
1689
1686 * IPython/demo.py (Demo.__init__): added support for individually
1690 * IPython/demo.py (Demo.__init__): added support for individually
1687 tagging blocks for automatic execution.
1691 tagging blocks for automatic execution.
1688
1692
1689 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1693 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1690 syntax-highlighted python sources, requested by John.
1694 syntax-highlighted python sources, requested by John.
1691
1695
1692 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1696 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1693
1697
1694 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1698 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1695 finishing.
1699 finishing.
1696
1700
1697 * IPython/genutils.py (shlex_split): moved from Magic to here,
1701 * IPython/genutils.py (shlex_split): moved from Magic to here,
1698 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1702 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1699
1703
1700 * IPython/demo.py (Demo.__init__): added support for silent
1704 * IPython/demo.py (Demo.__init__): added support for silent
1701 blocks, improved marks as regexps, docstrings written.
1705 blocks, improved marks as regexps, docstrings written.
1702 (Demo.__init__): better docstring, added support for sys.argv.
1706 (Demo.__init__): better docstring, added support for sys.argv.
1703
1707
1704 * IPython/genutils.py (marquee): little utility used by the demo
1708 * IPython/genutils.py (marquee): little utility used by the demo
1705 code, handy in general.
1709 code, handy in general.
1706
1710
1707 * IPython/demo.py (Demo.__init__): new class for interactive
1711 * IPython/demo.py (Demo.__init__): new class for interactive
1708 demos. Not documented yet, I just wrote it in a hurry for
1712 demos. Not documented yet, I just wrote it in a hurry for
1709 scipy'05. Will docstring later.
1713 scipy'05. Will docstring later.
1710
1714
1711 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1715 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1712
1716
1713 * IPython/Shell.py (sigint_handler): Drastic simplification which
1717 * IPython/Shell.py (sigint_handler): Drastic simplification which
1714 also seems to make Ctrl-C work correctly across threads! This is
1718 also seems to make Ctrl-C work correctly across threads! This is
1715 so simple, that I can't beleive I'd missed it before. Needs more
1719 so simple, that I can't beleive I'd missed it before. Needs more
1716 testing, though.
1720 testing, though.
1717 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1721 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1718 like this before...
1722 like this before...
1719
1723
1720 * IPython/genutils.py (get_home_dir): add protection against
1724 * IPython/genutils.py (get_home_dir): add protection against
1721 non-dirs in win32 registry.
1725 non-dirs in win32 registry.
1722
1726
1723 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1727 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1724 bug where dict was mutated while iterating (pysh crash).
1728 bug where dict was mutated while iterating (pysh crash).
1725
1729
1726 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1730 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1727
1731
1728 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1732 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1729 spurious newlines added by this routine. After a report by
1733 spurious newlines added by this routine. After a report by
1730 F. Mantegazza.
1734 F. Mantegazza.
1731
1735
1732 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1736 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1733
1737
1734 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1738 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1735 calls. These were a leftover from the GTK 1.x days, and can cause
1739 calls. These were a leftover from the GTK 1.x days, and can cause
1736 problems in certain cases (after a report by John Hunter).
1740 problems in certain cases (after a report by John Hunter).
1737
1741
1738 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1742 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1739 os.getcwd() fails at init time. Thanks to patch from David Remahl
1743 os.getcwd() fails at init time. Thanks to patch from David Remahl
1740 <chmod007-AT-mac.com>.
1744 <chmod007-AT-mac.com>.
1741 (InteractiveShell.__init__): prevent certain special magics from
1745 (InteractiveShell.__init__): prevent certain special magics from
1742 being shadowed by aliases. Closes
1746 being shadowed by aliases. Closes
1743 http://www.scipy.net/roundup/ipython/issue41.
1747 http://www.scipy.net/roundup/ipython/issue41.
1744
1748
1745 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1749 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1746
1750
1747 * IPython/iplib.py (InteractiveShell.complete): Added new
1751 * IPython/iplib.py (InteractiveShell.complete): Added new
1748 top-level completion method to expose the completion mechanism
1752 top-level completion method to expose the completion mechanism
1749 beyond readline-based environments.
1753 beyond readline-based environments.
1750
1754
1751 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1755 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1752
1756
1753 * tools/ipsvnc (svnversion): fix svnversion capture.
1757 * tools/ipsvnc (svnversion): fix svnversion capture.
1754
1758
1755 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1759 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1756 attribute to self, which was missing. Before, it was set by a
1760 attribute to self, which was missing. Before, it was set by a
1757 routine which in certain cases wasn't being called, so the
1761 routine which in certain cases wasn't being called, so the
1758 instance could end up missing the attribute. This caused a crash.
1762 instance could end up missing the attribute. This caused a crash.
1759 Closes http://www.scipy.net/roundup/ipython/issue40.
1763 Closes http://www.scipy.net/roundup/ipython/issue40.
1760
1764
1761 2005-08-16 Fernando Perez <fperez@colorado.edu>
1765 2005-08-16 Fernando Perez <fperez@colorado.edu>
1762
1766
1763 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1767 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1764 contains non-string attribute. Closes
1768 contains non-string attribute. Closes
1765 http://www.scipy.net/roundup/ipython/issue38.
1769 http://www.scipy.net/roundup/ipython/issue38.
1766
1770
1767 2005-08-14 Fernando Perez <fperez@colorado.edu>
1771 2005-08-14 Fernando Perez <fperez@colorado.edu>
1768
1772
1769 * tools/ipsvnc: Minor improvements, to add changeset info.
1773 * tools/ipsvnc: Minor improvements, to add changeset info.
1770
1774
1771 2005-08-12 Fernando Perez <fperez@colorado.edu>
1775 2005-08-12 Fernando Perez <fperez@colorado.edu>
1772
1776
1773 * IPython/iplib.py (runsource): remove self.code_to_run_src
1777 * IPython/iplib.py (runsource): remove self.code_to_run_src
1774 attribute. I realized this is nothing more than
1778 attribute. I realized this is nothing more than
1775 '\n'.join(self.buffer), and having the same data in two different
1779 '\n'.join(self.buffer), and having the same data in two different
1776 places is just asking for synchronization bugs. This may impact
1780 places is just asking for synchronization bugs. This may impact
1777 people who have custom exception handlers, so I need to warn
1781 people who have custom exception handlers, so I need to warn
1778 ipython-dev about it (F. Mantegazza may use them).
1782 ipython-dev about it (F. Mantegazza may use them).
1779
1783
1780 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1784 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1781
1785
1782 * IPython/genutils.py: fix 2.2 compatibility (generators)
1786 * IPython/genutils.py: fix 2.2 compatibility (generators)
1783
1787
1784 2005-07-18 Fernando Perez <fperez@colorado.edu>
1788 2005-07-18 Fernando Perez <fperez@colorado.edu>
1785
1789
1786 * IPython/genutils.py (get_home_dir): fix to help users with
1790 * IPython/genutils.py (get_home_dir): fix to help users with
1787 invalid $HOME under win32.
1791 invalid $HOME under win32.
1788
1792
1789 2005-07-17 Fernando Perez <fperez@colorado.edu>
1793 2005-07-17 Fernando Perez <fperez@colorado.edu>
1790
1794
1791 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1795 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1792 some old hacks and clean up a bit other routines; code should be
1796 some old hacks and clean up a bit other routines; code should be
1793 simpler and a bit faster.
1797 simpler and a bit faster.
1794
1798
1795 * IPython/iplib.py (interact): removed some last-resort attempts
1799 * IPython/iplib.py (interact): removed some last-resort attempts
1796 to survive broken stdout/stderr. That code was only making it
1800 to survive broken stdout/stderr. That code was only making it
1797 harder to abstract out the i/o (necessary for gui integration),
1801 harder to abstract out the i/o (necessary for gui integration),
1798 and the crashes it could prevent were extremely rare in practice
1802 and the crashes it could prevent were extremely rare in practice
1799 (besides being fully user-induced in a pretty violent manner).
1803 (besides being fully user-induced in a pretty violent manner).
1800
1804
1801 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1805 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1802 Nothing major yet, but the code is simpler to read; this should
1806 Nothing major yet, but the code is simpler to read; this should
1803 make it easier to do more serious modifications in the future.
1807 make it easier to do more serious modifications in the future.
1804
1808
1805 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1809 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1806 which broke in .15 (thanks to a report by Ville).
1810 which broke in .15 (thanks to a report by Ville).
1807
1811
1808 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1812 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1809 be quite correct, I know next to nothing about unicode). This
1813 be quite correct, I know next to nothing about unicode). This
1810 will allow unicode strings to be used in prompts, amongst other
1814 will allow unicode strings to be used in prompts, amongst other
1811 cases. It also will prevent ipython from crashing when unicode
1815 cases. It also will prevent ipython from crashing when unicode
1812 shows up unexpectedly in many places. If ascii encoding fails, we
1816 shows up unexpectedly in many places. If ascii encoding fails, we
1813 assume utf_8. Currently the encoding is not a user-visible
1817 assume utf_8. Currently the encoding is not a user-visible
1814 setting, though it could be made so if there is demand for it.
1818 setting, though it could be made so if there is demand for it.
1815
1819
1816 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1820 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1817
1821
1818 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1822 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1819
1823
1820 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1824 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1821
1825
1822 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1826 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1823 code can work transparently for 2.2/2.3.
1827 code can work transparently for 2.2/2.3.
1824
1828
1825 2005-07-16 Fernando Perez <fperez@colorado.edu>
1829 2005-07-16 Fernando Perez <fperez@colorado.edu>
1826
1830
1827 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1831 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1828 out of the color scheme table used for coloring exception
1832 out of the color scheme table used for coloring exception
1829 tracebacks. This allows user code to add new schemes at runtime.
1833 tracebacks. This allows user code to add new schemes at runtime.
1830 This is a minimally modified version of the patch at
1834 This is a minimally modified version of the patch at
1831 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1835 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1832 for the contribution.
1836 for the contribution.
1833
1837
1834 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1838 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1835 slightly modified version of the patch in
1839 slightly modified version of the patch in
1836 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1840 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1837 to remove the previous try/except solution (which was costlier).
1841 to remove the previous try/except solution (which was costlier).
1838 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1842 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1839
1843
1840 2005-06-08 Fernando Perez <fperez@colorado.edu>
1844 2005-06-08 Fernando Perez <fperez@colorado.edu>
1841
1845
1842 * IPython/iplib.py (write/write_err): Add methods to abstract all
1846 * IPython/iplib.py (write/write_err): Add methods to abstract all
1843 I/O a bit more.
1847 I/O a bit more.
1844
1848
1845 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1849 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1846 warning, reported by Aric Hagberg, fix by JD Hunter.
1850 warning, reported by Aric Hagberg, fix by JD Hunter.
1847
1851
1848 2005-06-02 *** Released version 0.6.15
1852 2005-06-02 *** Released version 0.6.15
1849
1853
1850 2005-06-01 Fernando Perez <fperez@colorado.edu>
1854 2005-06-01 Fernando Perez <fperez@colorado.edu>
1851
1855
1852 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1856 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1853 tab-completion of filenames within open-quoted strings. Note that
1857 tab-completion of filenames within open-quoted strings. Note that
1854 this requires that in ~/.ipython/ipythonrc, users change the
1858 this requires that in ~/.ipython/ipythonrc, users change the
1855 readline delimiters configuration to read:
1859 readline delimiters configuration to read:
1856
1860
1857 readline_remove_delims -/~
1861 readline_remove_delims -/~
1858
1862
1859
1863
1860 2005-05-31 *** Released version 0.6.14
1864 2005-05-31 *** Released version 0.6.14
1861
1865
1862 2005-05-29 Fernando Perez <fperez@colorado.edu>
1866 2005-05-29 Fernando Perez <fperez@colorado.edu>
1863
1867
1864 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1868 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1865 with files not on the filesystem. Reported by Eliyahu Sandler
1869 with files not on the filesystem. Reported by Eliyahu Sandler
1866 <eli@gondolin.net>
1870 <eli@gondolin.net>
1867
1871
1868 2005-05-22 Fernando Perez <fperez@colorado.edu>
1872 2005-05-22 Fernando Perez <fperez@colorado.edu>
1869
1873
1870 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1874 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1871 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1875 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1872
1876
1873 2005-05-19 Fernando Perez <fperez@colorado.edu>
1877 2005-05-19 Fernando Perez <fperez@colorado.edu>
1874
1878
1875 * IPython/iplib.py (safe_execfile): close a file which could be
1879 * IPython/iplib.py (safe_execfile): close a file which could be
1876 left open (causing problems in win32, which locks open files).
1880 left open (causing problems in win32, which locks open files).
1877 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1881 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1878
1882
1879 2005-05-18 Fernando Perez <fperez@colorado.edu>
1883 2005-05-18 Fernando Perez <fperez@colorado.edu>
1880
1884
1881 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1885 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1882 keyword arguments correctly to safe_execfile().
1886 keyword arguments correctly to safe_execfile().
1883
1887
1884 2005-05-13 Fernando Perez <fperez@colorado.edu>
1888 2005-05-13 Fernando Perez <fperez@colorado.edu>
1885
1889
1886 * ipython.1: Added info about Qt to manpage, and threads warning
1890 * ipython.1: Added info about Qt to manpage, and threads warning
1887 to usage page (invoked with --help).
1891 to usage page (invoked with --help).
1888
1892
1889 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1893 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1890 new matcher (it goes at the end of the priority list) to do
1894 new matcher (it goes at the end of the priority list) to do
1891 tab-completion on named function arguments. Submitted by George
1895 tab-completion on named function arguments. Submitted by George
1892 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1896 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1893 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1897 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1894 for more details.
1898 for more details.
1895
1899
1896 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1900 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1897 SystemExit exceptions in the script being run. Thanks to a report
1901 SystemExit exceptions in the script being run. Thanks to a report
1898 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1902 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1899 producing very annoying behavior when running unit tests.
1903 producing very annoying behavior when running unit tests.
1900
1904
1901 2005-05-12 Fernando Perez <fperez@colorado.edu>
1905 2005-05-12 Fernando Perez <fperez@colorado.edu>
1902
1906
1903 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1907 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1904 which I'd broken (again) due to a changed regexp. In the process,
1908 which I'd broken (again) due to a changed regexp. In the process,
1905 added ';' as an escape to auto-quote the whole line without
1909 added ';' as an escape to auto-quote the whole line without
1906 splitting its arguments. Thanks to a report by Jerry McRae
1910 splitting its arguments. Thanks to a report by Jerry McRae
1907 <qrs0xyc02-AT-sneakemail.com>.
1911 <qrs0xyc02-AT-sneakemail.com>.
1908
1912
1909 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1913 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1910 possible crashes caused by a TokenError. Reported by Ed Schofield
1914 possible crashes caused by a TokenError. Reported by Ed Schofield
1911 <schofield-AT-ftw.at>.
1915 <schofield-AT-ftw.at>.
1912
1916
1913 2005-05-06 Fernando Perez <fperez@colorado.edu>
1917 2005-05-06 Fernando Perez <fperez@colorado.edu>
1914
1918
1915 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1919 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1916
1920
1917 2005-04-29 Fernando Perez <fperez@colorado.edu>
1921 2005-04-29 Fernando Perez <fperez@colorado.edu>
1918
1922
1919 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1923 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1920 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1924 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1921 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1925 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1922 which provides support for Qt interactive usage (similar to the
1926 which provides support for Qt interactive usage (similar to the
1923 existing one for WX and GTK). This had been often requested.
1927 existing one for WX and GTK). This had been often requested.
1924
1928
1925 2005-04-14 *** Released version 0.6.13
1929 2005-04-14 *** Released version 0.6.13
1926
1930
1927 2005-04-08 Fernando Perez <fperez@colorado.edu>
1931 2005-04-08 Fernando Perez <fperez@colorado.edu>
1928
1932
1929 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1933 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1930 from _ofind, which gets called on almost every input line. Now,
1934 from _ofind, which gets called on almost every input line. Now,
1931 we only try to get docstrings if they are actually going to be
1935 we only try to get docstrings if they are actually going to be
1932 used (the overhead of fetching unnecessary docstrings can be
1936 used (the overhead of fetching unnecessary docstrings can be
1933 noticeable for certain objects, such as Pyro proxies).
1937 noticeable for certain objects, such as Pyro proxies).
1934
1938
1935 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1939 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1936 for completers. For some reason I had been passing them the state
1940 for completers. For some reason I had been passing them the state
1937 variable, which completers never actually need, and was in
1941 variable, which completers never actually need, and was in
1938 conflict with the rlcompleter API. Custom completers ONLY need to
1942 conflict with the rlcompleter API. Custom completers ONLY need to
1939 take the text parameter.
1943 take the text parameter.
1940
1944
1941 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1945 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1942 work correctly in pysh. I've also moved all the logic which used
1946 work correctly in pysh. I've also moved all the logic which used
1943 to be in pysh.py here, which will prevent problems with future
1947 to be in pysh.py here, which will prevent problems with future
1944 upgrades. However, this time I must warn users to update their
1948 upgrades. However, this time I must warn users to update their
1945 pysh profile to include the line
1949 pysh profile to include the line
1946
1950
1947 import_all IPython.Extensions.InterpreterExec
1951 import_all IPython.Extensions.InterpreterExec
1948
1952
1949 because otherwise things won't work for them. They MUST also
1953 because otherwise things won't work for them. They MUST also
1950 delete pysh.py and the line
1954 delete pysh.py and the line
1951
1955
1952 execfile pysh.py
1956 execfile pysh.py
1953
1957
1954 from their ipythonrc-pysh.
1958 from their ipythonrc-pysh.
1955
1959
1956 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1960 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1957 robust in the face of objects whose dir() returns non-strings
1961 robust in the face of objects whose dir() returns non-strings
1958 (which it shouldn't, but some broken libs like ITK do). Thanks to
1962 (which it shouldn't, but some broken libs like ITK do). Thanks to
1959 a patch by John Hunter (implemented differently, though). Also
1963 a patch by John Hunter (implemented differently, though). Also
1960 minor improvements by using .extend instead of + on lists.
1964 minor improvements by using .extend instead of + on lists.
1961
1965
1962 * pysh.py:
1966 * pysh.py:
1963
1967
1964 2005-04-06 Fernando Perez <fperez@colorado.edu>
1968 2005-04-06 Fernando Perez <fperez@colorado.edu>
1965
1969
1966 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1970 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1967 by default, so that all users benefit from it. Those who don't
1971 by default, so that all users benefit from it. Those who don't
1968 want it can still turn it off.
1972 want it can still turn it off.
1969
1973
1970 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1974 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1971 config file, I'd forgotten about this, so users were getting it
1975 config file, I'd forgotten about this, so users were getting it
1972 off by default.
1976 off by default.
1973
1977
1974 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1978 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1975 consistency. Now magics can be called in multiline statements,
1979 consistency. Now magics can be called in multiline statements,
1976 and python variables can be expanded in magic calls via $var.
1980 and python variables can be expanded in magic calls via $var.
1977 This makes the magic system behave just like aliases or !system
1981 This makes the magic system behave just like aliases or !system
1978 calls.
1982 calls.
1979
1983
1980 2005-03-28 Fernando Perez <fperez@colorado.edu>
1984 2005-03-28 Fernando Perez <fperez@colorado.edu>
1981
1985
1982 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1986 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1983 expensive string additions for building command. Add support for
1987 expensive string additions for building command. Add support for
1984 trailing ';' when autocall is used.
1988 trailing ';' when autocall is used.
1985
1989
1986 2005-03-26 Fernando Perez <fperez@colorado.edu>
1990 2005-03-26 Fernando Perez <fperez@colorado.edu>
1987
1991
1988 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1992 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1989 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1993 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1990 ipython.el robust against prompts with any number of spaces
1994 ipython.el robust against prompts with any number of spaces
1991 (including 0) after the ':' character.
1995 (including 0) after the ':' character.
1992
1996
1993 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1997 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1994 continuation prompt, which misled users to think the line was
1998 continuation prompt, which misled users to think the line was
1995 already indented. Closes debian Bug#300847, reported to me by
1999 already indented. Closes debian Bug#300847, reported to me by
1996 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2000 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1997
2001
1998 2005-03-23 Fernando Perez <fperez@colorado.edu>
2002 2005-03-23 Fernando Perez <fperez@colorado.edu>
1999
2003
2000 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2004 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2001 properly aligned if they have embedded newlines.
2005 properly aligned if they have embedded newlines.
2002
2006
2003 * IPython/iplib.py (runlines): Add a public method to expose
2007 * IPython/iplib.py (runlines): Add a public method to expose
2004 IPython's code execution machinery, so that users can run strings
2008 IPython's code execution machinery, so that users can run strings
2005 as if they had been typed at the prompt interactively.
2009 as if they had been typed at the prompt interactively.
2006 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2010 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2007 methods which can call the system shell, but with python variable
2011 methods which can call the system shell, but with python variable
2008 expansion. The three such methods are: __IPYTHON__.system,
2012 expansion. The three such methods are: __IPYTHON__.system,
2009 .getoutput and .getoutputerror. These need to be documented in a
2013 .getoutput and .getoutputerror. These need to be documented in a
2010 'public API' section (to be written) of the manual.
2014 'public API' section (to be written) of the manual.
2011
2015
2012 2005-03-20 Fernando Perez <fperez@colorado.edu>
2016 2005-03-20 Fernando Perez <fperez@colorado.edu>
2013
2017
2014 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2018 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2015 for custom exception handling. This is quite powerful, and it
2019 for custom exception handling. This is quite powerful, and it
2016 allows for user-installable exception handlers which can trap
2020 allows for user-installable exception handlers which can trap
2017 custom exceptions at runtime and treat them separately from
2021 custom exceptions at runtime and treat them separately from
2018 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
2022 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
2019 Mantegazza <mantegazza-AT-ill.fr>.
2023 Mantegazza <mantegazza-AT-ill.fr>.
2020 (InteractiveShell.set_custom_completer): public API function to
2024 (InteractiveShell.set_custom_completer): public API function to
2021 add new completers at runtime.
2025 add new completers at runtime.
2022
2026
2023 2005-03-19 Fernando Perez <fperez@colorado.edu>
2027 2005-03-19 Fernando Perez <fperez@colorado.edu>
2024
2028
2025 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2029 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2026 allow objects which provide their docstrings via non-standard
2030 allow objects which provide their docstrings via non-standard
2027 mechanisms (like Pyro proxies) to still be inspected by ipython's
2031 mechanisms (like Pyro proxies) to still be inspected by ipython's
2028 ? system.
2032 ? system.
2029
2033
2030 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2034 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2031 automatic capture system. I tried quite hard to make it work
2035 automatic capture system. I tried quite hard to make it work
2032 reliably, and simply failed. I tried many combinations with the
2036 reliably, and simply failed. I tried many combinations with the
2033 subprocess module, but eventually nothing worked in all needed
2037 subprocess module, but eventually nothing worked in all needed
2034 cases (not blocking stdin for the child, duplicating stdout
2038 cases (not blocking stdin for the child, duplicating stdout
2035 without blocking, etc). The new %sc/%sx still do capture to these
2039 without blocking, etc). The new %sc/%sx still do capture to these
2036 magical list/string objects which make shell use much more
2040 magical list/string objects which make shell use much more
2037 conveninent, so not all is lost.
2041 conveninent, so not all is lost.
2038
2042
2039 XXX - FIX MANUAL for the change above!
2043 XXX - FIX MANUAL for the change above!
2040
2044
2041 (runsource): I copied code.py's runsource() into ipython to modify
2045 (runsource): I copied code.py's runsource() into ipython to modify
2042 it a bit. Now the code object and source to be executed are
2046 it a bit. Now the code object and source to be executed are
2043 stored in ipython. This makes this info accessible to third-party
2047 stored in ipython. This makes this info accessible to third-party
2044 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
2048 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
2045 Mantegazza <mantegazza-AT-ill.fr>.
2049 Mantegazza <mantegazza-AT-ill.fr>.
2046
2050
2047 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2051 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2048 history-search via readline (like C-p/C-n). I'd wanted this for a
2052 history-search via readline (like C-p/C-n). I'd wanted this for a
2049 long time, but only recently found out how to do it. For users
2053 long time, but only recently found out how to do it. For users
2050 who already have their ipythonrc files made and want this, just
2054 who already have their ipythonrc files made and want this, just
2051 add:
2055 add:
2052
2056
2053 readline_parse_and_bind "\e[A": history-search-backward
2057 readline_parse_and_bind "\e[A": history-search-backward
2054 readline_parse_and_bind "\e[B": history-search-forward
2058 readline_parse_and_bind "\e[B": history-search-forward
2055
2059
2056 2005-03-18 Fernando Perez <fperez@colorado.edu>
2060 2005-03-18 Fernando Perez <fperez@colorado.edu>
2057
2061
2058 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2062 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2059 LSString and SList classes which allow transparent conversions
2063 LSString and SList classes which allow transparent conversions
2060 between list mode and whitespace-separated string.
2064 between list mode and whitespace-separated string.
2061 (magic_r): Fix recursion problem in %r.
2065 (magic_r): Fix recursion problem in %r.
2062
2066
2063 * IPython/genutils.py (LSString): New class to be used for
2067 * IPython/genutils.py (LSString): New class to be used for
2064 automatic storage of the results of all alias/system calls in _o
2068 automatic storage of the results of all alias/system calls in _o
2065 and _e (stdout/err). These provide a .l/.list attribute which
2069 and _e (stdout/err). These provide a .l/.list attribute which
2066 does automatic splitting on newlines. This means that for most
2070 does automatic splitting on newlines. This means that for most
2067 uses, you'll never need to do capturing of output with %sc/%sx
2071 uses, you'll never need to do capturing of output with %sc/%sx
2068 anymore, since ipython keeps this always done for you. Note that
2072 anymore, since ipython keeps this always done for you. Note that
2069 only the LAST results are stored, the _o/e variables are
2073 only the LAST results are stored, the _o/e variables are
2070 overwritten on each call. If you need to save their contents
2074 overwritten on each call. If you need to save their contents
2071 further, simply bind them to any other name.
2075 further, simply bind them to any other name.
2072
2076
2073 2005-03-17 Fernando Perez <fperez@colorado.edu>
2077 2005-03-17 Fernando Perez <fperez@colorado.edu>
2074
2078
2075 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2079 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2076 prompt namespace handling.
2080 prompt namespace handling.
2077
2081
2078 2005-03-16 Fernando Perez <fperez@colorado.edu>
2082 2005-03-16 Fernando Perez <fperez@colorado.edu>
2079
2083
2080 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2084 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2081 classic prompts to be '>>> ' (final space was missing, and it
2085 classic prompts to be '>>> ' (final space was missing, and it
2082 trips the emacs python mode).
2086 trips the emacs python mode).
2083 (BasePrompt.__str__): Added safe support for dynamic prompt
2087 (BasePrompt.__str__): Added safe support for dynamic prompt
2084 strings. Now you can set your prompt string to be '$x', and the
2088 strings. Now you can set your prompt string to be '$x', and the
2085 value of x will be printed from your interactive namespace. The
2089 value of x will be printed from your interactive namespace. The
2086 interpolation syntax includes the full Itpl support, so
2090 interpolation syntax includes the full Itpl support, so
2087 ${foo()+x+bar()} is a valid prompt string now, and the function
2091 ${foo()+x+bar()} is a valid prompt string now, and the function
2088 calls will be made at runtime.
2092 calls will be made at runtime.
2089
2093
2090 2005-03-15 Fernando Perez <fperez@colorado.edu>
2094 2005-03-15 Fernando Perez <fperez@colorado.edu>
2091
2095
2092 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2096 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2093 avoid name clashes in pylab. %hist still works, it just forwards
2097 avoid name clashes in pylab. %hist still works, it just forwards
2094 the call to %history.
2098 the call to %history.
2095
2099
2096 2005-03-02 *** Released version 0.6.12
2100 2005-03-02 *** Released version 0.6.12
2097
2101
2098 2005-03-02 Fernando Perez <fperez@colorado.edu>
2102 2005-03-02 Fernando Perez <fperez@colorado.edu>
2099
2103
2100 * IPython/iplib.py (handle_magic): log magic calls properly as
2104 * IPython/iplib.py (handle_magic): log magic calls properly as
2101 ipmagic() function calls.
2105 ipmagic() function calls.
2102
2106
2103 * IPython/Magic.py (magic_time): Improved %time to support
2107 * IPython/Magic.py (magic_time): Improved %time to support
2104 statements and provide wall-clock as well as CPU time.
2108 statements and provide wall-clock as well as CPU time.
2105
2109
2106 2005-02-27 Fernando Perez <fperez@colorado.edu>
2110 2005-02-27 Fernando Perez <fperez@colorado.edu>
2107
2111
2108 * IPython/hooks.py: New hooks module, to expose user-modifiable
2112 * IPython/hooks.py: New hooks module, to expose user-modifiable
2109 IPython functionality in a clean manner. For now only the editor
2113 IPython functionality in a clean manner. For now only the editor
2110 hook is actually written, and other thigns which I intend to turn
2114 hook is actually written, and other thigns which I intend to turn
2111 into proper hooks aren't yet there. The display and prefilter
2115 into proper hooks aren't yet there. The display and prefilter
2112 stuff, for example, should be hooks. But at least now the
2116 stuff, for example, should be hooks. But at least now the
2113 framework is in place, and the rest can be moved here with more
2117 framework is in place, and the rest can be moved here with more
2114 time later. IPython had had a .hooks variable for a long time for
2118 time later. IPython had had a .hooks variable for a long time for
2115 this purpose, but I'd never actually used it for anything.
2119 this purpose, but I'd never actually used it for anything.
2116
2120
2117 2005-02-26 Fernando Perez <fperez@colorado.edu>
2121 2005-02-26 Fernando Perez <fperez@colorado.edu>
2118
2122
2119 * IPython/ipmaker.py (make_IPython): make the default ipython
2123 * IPython/ipmaker.py (make_IPython): make the default ipython
2120 directory be called _ipython under win32, to follow more the
2124 directory be called _ipython under win32, to follow more the
2121 naming peculiarities of that platform (where buggy software like
2125 naming peculiarities of that platform (where buggy software like
2122 Visual Sourcesafe breaks with .named directories). Reported by
2126 Visual Sourcesafe breaks with .named directories). Reported by
2123 Ville Vainio.
2127 Ville Vainio.
2124
2128
2125 2005-02-23 Fernando Perez <fperez@colorado.edu>
2129 2005-02-23 Fernando Perez <fperez@colorado.edu>
2126
2130
2127 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2131 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2128 auto_aliases for win32 which were causing problems. Users can
2132 auto_aliases for win32 which were causing problems. Users can
2129 define the ones they personally like.
2133 define the ones they personally like.
2130
2134
2131 2005-02-21 Fernando Perez <fperez@colorado.edu>
2135 2005-02-21 Fernando Perez <fperez@colorado.edu>
2132
2136
2133 * IPython/Magic.py (magic_time): new magic to time execution of
2137 * IPython/Magic.py (magic_time): new magic to time execution of
2134 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2138 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2135
2139
2136 2005-02-19 Fernando Perez <fperez@colorado.edu>
2140 2005-02-19 Fernando Perez <fperez@colorado.edu>
2137
2141
2138 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2142 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2139 into keys (for prompts, for example).
2143 into keys (for prompts, for example).
2140
2144
2141 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2145 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2142 prompts in case users want them. This introduces a small behavior
2146 prompts in case users want them. This introduces a small behavior
2143 change: ipython does not automatically add a space to all prompts
2147 change: ipython does not automatically add a space to all prompts
2144 anymore. To get the old prompts with a space, users should add it
2148 anymore. To get the old prompts with a space, users should add it
2145 manually to their ipythonrc file, so for example prompt_in1 should
2149 manually to their ipythonrc file, so for example prompt_in1 should
2146 now read 'In [\#]: ' instead of 'In [\#]:'.
2150 now read 'In [\#]: ' instead of 'In [\#]:'.
2147 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2151 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2148 file) to control left-padding of secondary prompts.
2152 file) to control left-padding of secondary prompts.
2149
2153
2150 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2154 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2151 the profiler can't be imported. Fix for Debian, which removed
2155 the profiler can't be imported. Fix for Debian, which removed
2152 profile.py because of License issues. I applied a slightly
2156 profile.py because of License issues. I applied a slightly
2153 modified version of the original Debian patch at
2157 modified version of the original Debian patch at
2154 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2158 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2155
2159
2156 2005-02-17 Fernando Perez <fperez@colorado.edu>
2160 2005-02-17 Fernando Perez <fperez@colorado.edu>
2157
2161
2158 * IPython/genutils.py (native_line_ends): Fix bug which would
2162 * IPython/genutils.py (native_line_ends): Fix bug which would
2159 cause improper line-ends under win32 b/c I was not opening files
2163 cause improper line-ends under win32 b/c I was not opening files
2160 in binary mode. Bug report and fix thanks to Ville.
2164 in binary mode. Bug report and fix thanks to Ville.
2161
2165
2162 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2166 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2163 trying to catch spurious foo[1] autocalls. My fix actually broke
2167 trying to catch spurious foo[1] autocalls. My fix actually broke
2164 ',/' autoquote/call with explicit escape (bad regexp).
2168 ',/' autoquote/call with explicit escape (bad regexp).
2165
2169
2166 2005-02-15 *** Released version 0.6.11
2170 2005-02-15 *** Released version 0.6.11
2167
2171
2168 2005-02-14 Fernando Perez <fperez@colorado.edu>
2172 2005-02-14 Fernando Perez <fperez@colorado.edu>
2169
2173
2170 * IPython/background_jobs.py: New background job management
2174 * IPython/background_jobs.py: New background job management
2171 subsystem. This is implemented via a new set of classes, and
2175 subsystem. This is implemented via a new set of classes, and
2172 IPython now provides a builtin 'jobs' object for background job
2176 IPython now provides a builtin 'jobs' object for background job
2173 execution. A convenience %bg magic serves as a lightweight
2177 execution. A convenience %bg magic serves as a lightweight
2174 frontend for starting the more common type of calls. This was
2178 frontend for starting the more common type of calls. This was
2175 inspired by discussions with B. Granger and the BackgroundCommand
2179 inspired by discussions with B. Granger and the BackgroundCommand
2176 class described in the book Python Scripting for Computational
2180 class described in the book Python Scripting for Computational
2177 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2181 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2178 (although ultimately no code from this text was used, as IPython's
2182 (although ultimately no code from this text was used, as IPython's
2179 system is a separate implementation).
2183 system is a separate implementation).
2180
2184
2181 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2185 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2182 to control the completion of single/double underscore names
2186 to control the completion of single/double underscore names
2183 separately. As documented in the example ipytonrc file, the
2187 separately. As documented in the example ipytonrc file, the
2184 readline_omit__names variable can now be set to 2, to omit even
2188 readline_omit__names variable can now be set to 2, to omit even
2185 single underscore names. Thanks to a patch by Brian Wong
2189 single underscore names. Thanks to a patch by Brian Wong
2186 <BrianWong-AT-AirgoNetworks.Com>.
2190 <BrianWong-AT-AirgoNetworks.Com>.
2187 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2191 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2188 be autocalled as foo([1]) if foo were callable. A problem for
2192 be autocalled as foo([1]) if foo were callable. A problem for
2189 things which are both callable and implement __getitem__.
2193 things which are both callable and implement __getitem__.
2190 (init_readline): Fix autoindentation for win32. Thanks to a patch
2194 (init_readline): Fix autoindentation for win32. Thanks to a patch
2191 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2195 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2192
2196
2193 2005-02-12 Fernando Perez <fperez@colorado.edu>
2197 2005-02-12 Fernando Perez <fperez@colorado.edu>
2194
2198
2195 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2199 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2196 which I had written long ago to sort out user error messages which
2200 which I had written long ago to sort out user error messages which
2197 may occur during startup. This seemed like a good idea initially,
2201 may occur during startup. This seemed like a good idea initially,
2198 but it has proven a disaster in retrospect. I don't want to
2202 but it has proven a disaster in retrospect. I don't want to
2199 change much code for now, so my fix is to set the internal 'debug'
2203 change much code for now, so my fix is to set the internal 'debug'
2200 flag to true everywhere, whose only job was precisely to control
2204 flag to true everywhere, whose only job was precisely to control
2201 this subsystem. This closes issue 28 (as well as avoiding all
2205 this subsystem. This closes issue 28 (as well as avoiding all
2202 sorts of strange hangups which occur from time to time).
2206 sorts of strange hangups which occur from time to time).
2203
2207
2204 2005-02-07 Fernando Perez <fperez@colorado.edu>
2208 2005-02-07 Fernando Perez <fperez@colorado.edu>
2205
2209
2206 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2210 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2207 previous call produced a syntax error.
2211 previous call produced a syntax error.
2208
2212
2209 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2213 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2210 classes without constructor.
2214 classes without constructor.
2211
2215
2212 2005-02-06 Fernando Perez <fperez@colorado.edu>
2216 2005-02-06 Fernando Perez <fperez@colorado.edu>
2213
2217
2214 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2218 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2215 completions with the results of each matcher, so we return results
2219 completions with the results of each matcher, so we return results
2216 to the user from all namespaces. This breaks with ipython
2220 to the user from all namespaces. This breaks with ipython
2217 tradition, but I think it's a nicer behavior. Now you get all
2221 tradition, but I think it's a nicer behavior. Now you get all
2218 possible completions listed, from all possible namespaces (python,
2222 possible completions listed, from all possible namespaces (python,
2219 filesystem, magics...) After a request by John Hunter
2223 filesystem, magics...) After a request by John Hunter
2220 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2224 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2221
2225
2222 2005-02-05 Fernando Perez <fperez@colorado.edu>
2226 2005-02-05 Fernando Perez <fperez@colorado.edu>
2223
2227
2224 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2228 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2225 the call had quote characters in it (the quotes were stripped).
2229 the call had quote characters in it (the quotes were stripped).
2226
2230
2227 2005-01-31 Fernando Perez <fperez@colorado.edu>
2231 2005-01-31 Fernando Perez <fperez@colorado.edu>
2228
2232
2229 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2233 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2230 Itpl.itpl() to make the code more robust against psyco
2234 Itpl.itpl() to make the code more robust against psyco
2231 optimizations.
2235 optimizations.
2232
2236
2233 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2237 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2234 of causing an exception. Quicker, cleaner.
2238 of causing an exception. Quicker, cleaner.
2235
2239
2236 2005-01-28 Fernando Perez <fperez@colorado.edu>
2240 2005-01-28 Fernando Perez <fperez@colorado.edu>
2237
2241
2238 * scripts/ipython_win_post_install.py (install): hardcode
2242 * scripts/ipython_win_post_install.py (install): hardcode
2239 sys.prefix+'python.exe' as the executable path. It turns out that
2243 sys.prefix+'python.exe' as the executable path. It turns out that
2240 during the post-installation run, sys.executable resolves to the
2244 during the post-installation run, sys.executable resolves to the
2241 name of the binary installer! I should report this as a distutils
2245 name of the binary installer! I should report this as a distutils
2242 bug, I think. I updated the .10 release with this tiny fix, to
2246 bug, I think. I updated the .10 release with this tiny fix, to
2243 avoid annoying the lists further.
2247 avoid annoying the lists further.
2244
2248
2245 2005-01-27 *** Released version 0.6.10
2249 2005-01-27 *** Released version 0.6.10
2246
2250
2247 2005-01-27 Fernando Perez <fperez@colorado.edu>
2251 2005-01-27 Fernando Perez <fperez@colorado.edu>
2248
2252
2249 * IPython/numutils.py (norm): Added 'inf' as optional name for
2253 * IPython/numutils.py (norm): Added 'inf' as optional name for
2250 L-infinity norm, included references to mathworld.com for vector
2254 L-infinity norm, included references to mathworld.com for vector
2251 norm definitions.
2255 norm definitions.
2252 (amin/amax): added amin/amax for array min/max. Similar to what
2256 (amin/amax): added amin/amax for array min/max. Similar to what
2253 pylab ships with after the recent reorganization of names.
2257 pylab ships with after the recent reorganization of names.
2254 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2258 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2255
2259
2256 * ipython.el: committed Alex's recent fixes and improvements.
2260 * ipython.el: committed Alex's recent fixes and improvements.
2257 Tested with python-mode from CVS, and it looks excellent. Since
2261 Tested with python-mode from CVS, and it looks excellent. Since
2258 python-mode hasn't released anything in a while, I'm temporarily
2262 python-mode hasn't released anything in a while, I'm temporarily
2259 putting a copy of today's CVS (v 4.70) of python-mode in:
2263 putting a copy of today's CVS (v 4.70) of python-mode in:
2260 http://ipython.scipy.org/tmp/python-mode.el
2264 http://ipython.scipy.org/tmp/python-mode.el
2261
2265
2262 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2266 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2263 sys.executable for the executable name, instead of assuming it's
2267 sys.executable for the executable name, instead of assuming it's
2264 called 'python.exe' (the post-installer would have produced broken
2268 called 'python.exe' (the post-installer would have produced broken
2265 setups on systems with a differently named python binary).
2269 setups on systems with a differently named python binary).
2266
2270
2267 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2271 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2268 references to os.linesep, to make the code more
2272 references to os.linesep, to make the code more
2269 platform-independent. This is also part of the win32 coloring
2273 platform-independent. This is also part of the win32 coloring
2270 fixes.
2274 fixes.
2271
2275
2272 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2276 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2273 lines, which actually cause coloring bugs because the length of
2277 lines, which actually cause coloring bugs because the length of
2274 the line is very difficult to correctly compute with embedded
2278 the line is very difficult to correctly compute with embedded
2275 escapes. This was the source of all the coloring problems under
2279 escapes. This was the source of all the coloring problems under
2276 Win32. I think that _finally_, Win32 users have a properly
2280 Win32. I think that _finally_, Win32 users have a properly
2277 working ipython in all respects. This would never have happened
2281 working ipython in all respects. This would never have happened
2278 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2282 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2279
2283
2280 2005-01-26 *** Released version 0.6.9
2284 2005-01-26 *** Released version 0.6.9
2281
2285
2282 2005-01-25 Fernando Perez <fperez@colorado.edu>
2286 2005-01-25 Fernando Perez <fperez@colorado.edu>
2283
2287
2284 * setup.py: finally, we have a true Windows installer, thanks to
2288 * setup.py: finally, we have a true Windows installer, thanks to
2285 the excellent work of Viktor Ransmayr
2289 the excellent work of Viktor Ransmayr
2286 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2290 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2287 Windows users. The setup routine is quite a bit cleaner thanks to
2291 Windows users. The setup routine is quite a bit cleaner thanks to
2288 this, and the post-install script uses the proper functions to
2292 this, and the post-install script uses the proper functions to
2289 allow a clean de-installation using the standard Windows Control
2293 allow a clean de-installation using the standard Windows Control
2290 Panel.
2294 Panel.
2291
2295
2292 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2296 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2293 environment variable under all OSes (including win32) if
2297 environment variable under all OSes (including win32) if
2294 available. This will give consistency to win32 users who have set
2298 available. This will give consistency to win32 users who have set
2295 this variable for any reason. If os.environ['HOME'] fails, the
2299 this variable for any reason. If os.environ['HOME'] fails, the
2296 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2300 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2297
2301
2298 2005-01-24 Fernando Perez <fperez@colorado.edu>
2302 2005-01-24 Fernando Perez <fperez@colorado.edu>
2299
2303
2300 * IPython/numutils.py (empty_like): add empty_like(), similar to
2304 * IPython/numutils.py (empty_like): add empty_like(), similar to
2301 zeros_like() but taking advantage of the new empty() Numeric routine.
2305 zeros_like() but taking advantage of the new empty() Numeric routine.
2302
2306
2303 2005-01-23 *** Released version 0.6.8
2307 2005-01-23 *** Released version 0.6.8
2304
2308
2305 2005-01-22 Fernando Perez <fperez@colorado.edu>
2309 2005-01-22 Fernando Perez <fperez@colorado.edu>
2306
2310
2307 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2311 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2308 automatic show() calls. After discussing things with JDH, it
2312 automatic show() calls. After discussing things with JDH, it
2309 turns out there are too many corner cases where this can go wrong.
2313 turns out there are too many corner cases where this can go wrong.
2310 It's best not to try to be 'too smart', and simply have ipython
2314 It's best not to try to be 'too smart', and simply have ipython
2311 reproduce as much as possible the default behavior of a normal
2315 reproduce as much as possible the default behavior of a normal
2312 python shell.
2316 python shell.
2313
2317
2314 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2318 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2315 line-splitting regexp and _prefilter() to avoid calling getattr()
2319 line-splitting regexp and _prefilter() to avoid calling getattr()
2316 on assignments. This closes
2320 on assignments. This closes
2317 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2321 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2318 readline uses getattr(), so a simple <TAB> keypress is still
2322 readline uses getattr(), so a simple <TAB> keypress is still
2319 enough to trigger getattr() calls on an object.
2323 enough to trigger getattr() calls on an object.
2320
2324
2321 2005-01-21 Fernando Perez <fperez@colorado.edu>
2325 2005-01-21 Fernando Perez <fperez@colorado.edu>
2322
2326
2323 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2327 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2324 docstring under pylab so it doesn't mask the original.
2328 docstring under pylab so it doesn't mask the original.
2325
2329
2326 2005-01-21 *** Released version 0.6.7
2330 2005-01-21 *** Released version 0.6.7
2327
2331
2328 2005-01-21 Fernando Perez <fperez@colorado.edu>
2332 2005-01-21 Fernando Perez <fperez@colorado.edu>
2329
2333
2330 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2334 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2331 signal handling for win32 users in multithreaded mode.
2335 signal handling for win32 users in multithreaded mode.
2332
2336
2333 2005-01-17 Fernando Perez <fperez@colorado.edu>
2337 2005-01-17 Fernando Perez <fperez@colorado.edu>
2334
2338
2335 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2339 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2336 instances with no __init__. After a crash report by Norbert Nemec
2340 instances with no __init__. After a crash report by Norbert Nemec
2337 <Norbert-AT-nemec-online.de>.
2341 <Norbert-AT-nemec-online.de>.
2338
2342
2339 2005-01-14 Fernando Perez <fperez@colorado.edu>
2343 2005-01-14 Fernando Perez <fperez@colorado.edu>
2340
2344
2341 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2345 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2342 names for verbose exceptions, when multiple dotted names and the
2346 names for verbose exceptions, when multiple dotted names and the
2343 'parent' object were present on the same line.
2347 'parent' object were present on the same line.
2344
2348
2345 2005-01-11 Fernando Perez <fperez@colorado.edu>
2349 2005-01-11 Fernando Perez <fperez@colorado.edu>
2346
2350
2347 * IPython/genutils.py (flag_calls): new utility to trap and flag
2351 * IPython/genutils.py (flag_calls): new utility to trap and flag
2348 calls in functions. I need it to clean up matplotlib support.
2352 calls in functions. I need it to clean up matplotlib support.
2349 Also removed some deprecated code in genutils.
2353 Also removed some deprecated code in genutils.
2350
2354
2351 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2355 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2352 that matplotlib scripts called with %run, which don't call show()
2356 that matplotlib scripts called with %run, which don't call show()
2353 themselves, still have their plotting windows open.
2357 themselves, still have their plotting windows open.
2354
2358
2355 2005-01-05 Fernando Perez <fperez@colorado.edu>
2359 2005-01-05 Fernando Perez <fperez@colorado.edu>
2356
2360
2357 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2361 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2358 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2362 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2359
2363
2360 2004-12-19 Fernando Perez <fperez@colorado.edu>
2364 2004-12-19 Fernando Perez <fperez@colorado.edu>
2361
2365
2362 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2366 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2363 parent_runcode, which was an eyesore. The same result can be
2367 parent_runcode, which was an eyesore. The same result can be
2364 obtained with Python's regular superclass mechanisms.
2368 obtained with Python's regular superclass mechanisms.
2365
2369
2366 2004-12-17 Fernando Perez <fperez@colorado.edu>
2370 2004-12-17 Fernando Perez <fperez@colorado.edu>
2367
2371
2368 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2372 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2369 reported by Prabhu.
2373 reported by Prabhu.
2370 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2374 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2371 sys.stderr) instead of explicitly calling sys.stderr. This helps
2375 sys.stderr) instead of explicitly calling sys.stderr. This helps
2372 maintain our I/O abstractions clean, for future GUI embeddings.
2376 maintain our I/O abstractions clean, for future GUI embeddings.
2373
2377
2374 * IPython/genutils.py (info): added new utility for sys.stderr
2378 * IPython/genutils.py (info): added new utility for sys.stderr
2375 unified info message handling (thin wrapper around warn()).
2379 unified info message handling (thin wrapper around warn()).
2376
2380
2377 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2381 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2378 composite (dotted) names on verbose exceptions.
2382 composite (dotted) names on verbose exceptions.
2379 (VerboseTB.nullrepr): harden against another kind of errors which
2383 (VerboseTB.nullrepr): harden against another kind of errors which
2380 Python's inspect module can trigger, and which were crashing
2384 Python's inspect module can trigger, and which were crashing
2381 IPython. Thanks to a report by Marco Lombardi
2385 IPython. Thanks to a report by Marco Lombardi
2382 <mlombard-AT-ma010192.hq.eso.org>.
2386 <mlombard-AT-ma010192.hq.eso.org>.
2383
2387
2384 2004-12-13 *** Released version 0.6.6
2388 2004-12-13 *** Released version 0.6.6
2385
2389
2386 2004-12-12 Fernando Perez <fperez@colorado.edu>
2390 2004-12-12 Fernando Perez <fperez@colorado.edu>
2387
2391
2388 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2392 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2389 generated by pygtk upon initialization if it was built without
2393 generated by pygtk upon initialization if it was built without
2390 threads (for matplotlib users). After a crash reported by
2394 threads (for matplotlib users). After a crash reported by
2391 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2395 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2392
2396
2393 * IPython/ipmaker.py (make_IPython): fix small bug in the
2397 * IPython/ipmaker.py (make_IPython): fix small bug in the
2394 import_some parameter for multiple imports.
2398 import_some parameter for multiple imports.
2395
2399
2396 * IPython/iplib.py (ipmagic): simplified the interface of
2400 * IPython/iplib.py (ipmagic): simplified the interface of
2397 ipmagic() to take a single string argument, just as it would be
2401 ipmagic() to take a single string argument, just as it would be
2398 typed at the IPython cmd line.
2402 typed at the IPython cmd line.
2399 (ipalias): Added new ipalias() with an interface identical to
2403 (ipalias): Added new ipalias() with an interface identical to
2400 ipmagic(). This completes exposing a pure python interface to the
2404 ipmagic(). This completes exposing a pure python interface to the
2401 alias and magic system, which can be used in loops or more complex
2405 alias and magic system, which can be used in loops or more complex
2402 code where IPython's automatic line mangling is not active.
2406 code where IPython's automatic line mangling is not active.
2403
2407
2404 * IPython/genutils.py (timing): changed interface of timing to
2408 * IPython/genutils.py (timing): changed interface of timing to
2405 simply run code once, which is the most common case. timings()
2409 simply run code once, which is the most common case. timings()
2406 remains unchanged, for the cases where you want multiple runs.
2410 remains unchanged, for the cases where you want multiple runs.
2407
2411
2408 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2412 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2409 bug where Python2.2 crashes with exec'ing code which does not end
2413 bug where Python2.2 crashes with exec'ing code which does not end
2410 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2414 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2411 before.
2415 before.
2412
2416
2413 2004-12-10 Fernando Perez <fperez@colorado.edu>
2417 2004-12-10 Fernando Perez <fperez@colorado.edu>
2414
2418
2415 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2419 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2416 -t to -T, to accomodate the new -t flag in %run (the %run and
2420 -t to -T, to accomodate the new -t flag in %run (the %run and
2417 %prun options are kind of intermixed, and it's not easy to change
2421 %prun options are kind of intermixed, and it's not easy to change
2418 this with the limitations of python's getopt).
2422 this with the limitations of python's getopt).
2419
2423
2420 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2424 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2421 the execution of scripts. It's not as fine-tuned as timeit.py,
2425 the execution of scripts. It's not as fine-tuned as timeit.py,
2422 but it works from inside ipython (and under 2.2, which lacks
2426 but it works from inside ipython (and under 2.2, which lacks
2423 timeit.py). Optionally a number of runs > 1 can be given for
2427 timeit.py). Optionally a number of runs > 1 can be given for
2424 timing very short-running code.
2428 timing very short-running code.
2425
2429
2426 * IPython/genutils.py (uniq_stable): new routine which returns a
2430 * IPython/genutils.py (uniq_stable): new routine which returns a
2427 list of unique elements in any iterable, but in stable order of
2431 list of unique elements in any iterable, but in stable order of
2428 appearance. I needed this for the ultraTB fixes, and it's a handy
2432 appearance. I needed this for the ultraTB fixes, and it's a handy
2429 utility.
2433 utility.
2430
2434
2431 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2435 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2432 dotted names in Verbose exceptions. This had been broken since
2436 dotted names in Verbose exceptions. This had been broken since
2433 the very start, now x.y will properly be printed in a Verbose
2437 the very start, now x.y will properly be printed in a Verbose
2434 traceback, instead of x being shown and y appearing always as an
2438 traceback, instead of x being shown and y appearing always as an
2435 'undefined global'. Getting this to work was a bit tricky,
2439 'undefined global'. Getting this to work was a bit tricky,
2436 because by default python tokenizers are stateless. Saved by
2440 because by default python tokenizers are stateless. Saved by
2437 python's ability to easily add a bit of state to an arbitrary
2441 python's ability to easily add a bit of state to an arbitrary
2438 function (without needing to build a full-blown callable object).
2442 function (without needing to build a full-blown callable object).
2439
2443
2440 Also big cleanup of this code, which had horrendous runtime
2444 Also big cleanup of this code, which had horrendous runtime
2441 lookups of zillions of attributes for colorization. Moved all
2445 lookups of zillions of attributes for colorization. Moved all
2442 this code into a few templates, which make it cleaner and quicker.
2446 this code into a few templates, which make it cleaner and quicker.
2443
2447
2444 Printout quality was also improved for Verbose exceptions: one
2448 Printout quality was also improved for Verbose exceptions: one
2445 variable per line, and memory addresses are printed (this can be
2449 variable per line, and memory addresses are printed (this can be
2446 quite handy in nasty debugging situations, which is what Verbose
2450 quite handy in nasty debugging situations, which is what Verbose
2447 is for).
2451 is for).
2448
2452
2449 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2453 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2450 the command line as scripts to be loaded by embedded instances.
2454 the command line as scripts to be loaded by embedded instances.
2451 Doing so has the potential for an infinite recursion if there are
2455 Doing so has the potential for an infinite recursion if there are
2452 exceptions thrown in the process. This fixes a strange crash
2456 exceptions thrown in the process. This fixes a strange crash
2453 reported by Philippe MULLER <muller-AT-irit.fr>.
2457 reported by Philippe MULLER <muller-AT-irit.fr>.
2454
2458
2455 2004-12-09 Fernando Perez <fperez@colorado.edu>
2459 2004-12-09 Fernando Perez <fperez@colorado.edu>
2456
2460
2457 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2461 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2458 to reflect new names in matplotlib, which now expose the
2462 to reflect new names in matplotlib, which now expose the
2459 matlab-compatible interface via a pylab module instead of the
2463 matlab-compatible interface via a pylab module instead of the
2460 'matlab' name. The new code is backwards compatible, so users of
2464 'matlab' name. The new code is backwards compatible, so users of
2461 all matplotlib versions are OK. Patch by J. Hunter.
2465 all matplotlib versions are OK. Patch by J. Hunter.
2462
2466
2463 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2467 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2464 of __init__ docstrings for instances (class docstrings are already
2468 of __init__ docstrings for instances (class docstrings are already
2465 automatically printed). Instances with customized docstrings
2469 automatically printed). Instances with customized docstrings
2466 (indep. of the class) are also recognized and all 3 separate
2470 (indep. of the class) are also recognized and all 3 separate
2467 docstrings are printed (instance, class, constructor). After some
2471 docstrings are printed (instance, class, constructor). After some
2468 comments/suggestions by J. Hunter.
2472 comments/suggestions by J. Hunter.
2469
2473
2470 2004-12-05 Fernando Perez <fperez@colorado.edu>
2474 2004-12-05 Fernando Perez <fperez@colorado.edu>
2471
2475
2472 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2476 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2473 warnings when tab-completion fails and triggers an exception.
2477 warnings when tab-completion fails and triggers an exception.
2474
2478
2475 2004-12-03 Fernando Perez <fperez@colorado.edu>
2479 2004-12-03 Fernando Perez <fperez@colorado.edu>
2476
2480
2477 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2481 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2478 be triggered when using 'run -p'. An incorrect option flag was
2482 be triggered when using 'run -p'. An incorrect option flag was
2479 being set ('d' instead of 'D').
2483 being set ('d' instead of 'D').
2480 (manpage): fix missing escaped \- sign.
2484 (manpage): fix missing escaped \- sign.
2481
2485
2482 2004-11-30 *** Released version 0.6.5
2486 2004-11-30 *** Released version 0.6.5
2483
2487
2484 2004-11-30 Fernando Perez <fperez@colorado.edu>
2488 2004-11-30 Fernando Perez <fperez@colorado.edu>
2485
2489
2486 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2490 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2487 setting with -d option.
2491 setting with -d option.
2488
2492
2489 * setup.py (docfiles): Fix problem where the doc glob I was using
2493 * setup.py (docfiles): Fix problem where the doc glob I was using
2490 was COMPLETELY BROKEN. It was giving the right files by pure
2494 was COMPLETELY BROKEN. It was giving the right files by pure
2491 accident, but failed once I tried to include ipython.el. Note:
2495 accident, but failed once I tried to include ipython.el. Note:
2492 glob() does NOT allow you to do exclusion on multiple endings!
2496 glob() does NOT allow you to do exclusion on multiple endings!
2493
2497
2494 2004-11-29 Fernando Perez <fperez@colorado.edu>
2498 2004-11-29 Fernando Perez <fperez@colorado.edu>
2495
2499
2496 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2500 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2497 the manpage as the source. Better formatting & consistency.
2501 the manpage as the source. Better formatting & consistency.
2498
2502
2499 * IPython/Magic.py (magic_run): Added new -d option, to run
2503 * IPython/Magic.py (magic_run): Added new -d option, to run
2500 scripts under the control of the python pdb debugger. Note that
2504 scripts under the control of the python pdb debugger. Note that
2501 this required changing the %prun option -d to -D, to avoid a clash
2505 this required changing the %prun option -d to -D, to avoid a clash
2502 (since %run must pass options to %prun, and getopt is too dumb to
2506 (since %run must pass options to %prun, and getopt is too dumb to
2503 handle options with string values with embedded spaces). Thanks
2507 handle options with string values with embedded spaces). Thanks
2504 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2508 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2505 (magic_who_ls): added type matching to %who and %whos, so that one
2509 (magic_who_ls): added type matching to %who and %whos, so that one
2506 can filter their output to only include variables of certain
2510 can filter their output to only include variables of certain
2507 types. Another suggestion by Matthew.
2511 types. Another suggestion by Matthew.
2508 (magic_whos): Added memory summaries in kb and Mb for arrays.
2512 (magic_whos): Added memory summaries in kb and Mb for arrays.
2509 (magic_who): Improve formatting (break lines every 9 vars).
2513 (magic_who): Improve formatting (break lines every 9 vars).
2510
2514
2511 2004-11-28 Fernando Perez <fperez@colorado.edu>
2515 2004-11-28 Fernando Perez <fperez@colorado.edu>
2512
2516
2513 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2517 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2514 cache when empty lines were present.
2518 cache when empty lines were present.
2515
2519
2516 2004-11-24 Fernando Perez <fperez@colorado.edu>
2520 2004-11-24 Fernando Perez <fperez@colorado.edu>
2517
2521
2518 * IPython/usage.py (__doc__): document the re-activated threading
2522 * IPython/usage.py (__doc__): document the re-activated threading
2519 options for WX and GTK.
2523 options for WX and GTK.
2520
2524
2521 2004-11-23 Fernando Perez <fperez@colorado.edu>
2525 2004-11-23 Fernando Perez <fperez@colorado.edu>
2522
2526
2523 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2527 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2524 the -wthread and -gthread options, along with a new -tk one to try
2528 the -wthread and -gthread options, along with a new -tk one to try
2525 and coordinate Tk threading with wx/gtk. The tk support is very
2529 and coordinate Tk threading with wx/gtk. The tk support is very
2526 platform dependent, since it seems to require Tcl and Tk to be
2530 platform dependent, since it seems to require Tcl and Tk to be
2527 built with threads (Fedora1/2 appears NOT to have it, but in
2531 built with threads (Fedora1/2 appears NOT to have it, but in
2528 Prabhu's Debian boxes it works OK). But even with some Tk
2532 Prabhu's Debian boxes it works OK). But even with some Tk
2529 limitations, this is a great improvement.
2533 limitations, this is a great improvement.
2530
2534
2531 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2535 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2532 info in user prompts. Patch by Prabhu.
2536 info in user prompts. Patch by Prabhu.
2533
2537
2534 2004-11-18 Fernando Perez <fperez@colorado.edu>
2538 2004-11-18 Fernando Perez <fperez@colorado.edu>
2535
2539
2536 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2540 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2537 EOFErrors and bail, to avoid infinite loops if a non-terminating
2541 EOFErrors and bail, to avoid infinite loops if a non-terminating
2538 file is fed into ipython. Patch submitted in issue 19 by user,
2542 file is fed into ipython. Patch submitted in issue 19 by user,
2539 many thanks.
2543 many thanks.
2540
2544
2541 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2545 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2542 autoquote/parens in continuation prompts, which can cause lots of
2546 autoquote/parens in continuation prompts, which can cause lots of
2543 problems. Closes roundup issue 20.
2547 problems. Closes roundup issue 20.
2544
2548
2545 2004-11-17 Fernando Perez <fperez@colorado.edu>
2549 2004-11-17 Fernando Perez <fperez@colorado.edu>
2546
2550
2547 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2551 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2548 reported as debian bug #280505. I'm not sure my local changelog
2552 reported as debian bug #280505. I'm not sure my local changelog
2549 entry has the proper debian format (Jack?).
2553 entry has the proper debian format (Jack?).
2550
2554
2551 2004-11-08 *** Released version 0.6.4
2555 2004-11-08 *** Released version 0.6.4
2552
2556
2553 2004-11-08 Fernando Perez <fperez@colorado.edu>
2557 2004-11-08 Fernando Perez <fperez@colorado.edu>
2554
2558
2555 * IPython/iplib.py (init_readline): Fix exit message for Windows
2559 * IPython/iplib.py (init_readline): Fix exit message for Windows
2556 when readline is active. Thanks to a report by Eric Jones
2560 when readline is active. Thanks to a report by Eric Jones
2557 <eric-AT-enthought.com>.
2561 <eric-AT-enthought.com>.
2558
2562
2559 2004-11-07 Fernando Perez <fperez@colorado.edu>
2563 2004-11-07 Fernando Perez <fperez@colorado.edu>
2560
2564
2561 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2565 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2562 sometimes seen by win2k/cygwin users.
2566 sometimes seen by win2k/cygwin users.
2563
2567
2564 2004-11-06 Fernando Perez <fperez@colorado.edu>
2568 2004-11-06 Fernando Perez <fperez@colorado.edu>
2565
2569
2566 * IPython/iplib.py (interact): Change the handling of %Exit from
2570 * IPython/iplib.py (interact): Change the handling of %Exit from
2567 trying to propagate a SystemExit to an internal ipython flag.
2571 trying to propagate a SystemExit to an internal ipython flag.
2568 This is less elegant than using Python's exception mechanism, but
2572 This is less elegant than using Python's exception mechanism, but
2569 I can't get that to work reliably with threads, so under -pylab
2573 I can't get that to work reliably with threads, so under -pylab
2570 %Exit was hanging IPython. Cross-thread exception handling is
2574 %Exit was hanging IPython. Cross-thread exception handling is
2571 really a bitch. Thaks to a bug report by Stephen Walton
2575 really a bitch. Thaks to a bug report by Stephen Walton
2572 <stephen.walton-AT-csun.edu>.
2576 <stephen.walton-AT-csun.edu>.
2573
2577
2574 2004-11-04 Fernando Perez <fperez@colorado.edu>
2578 2004-11-04 Fernando Perez <fperez@colorado.edu>
2575
2579
2576 * IPython/iplib.py (raw_input_original): store a pointer to the
2580 * IPython/iplib.py (raw_input_original): store a pointer to the
2577 true raw_input to harden against code which can modify it
2581 true raw_input to harden against code which can modify it
2578 (wx.py.PyShell does this and would otherwise crash ipython).
2582 (wx.py.PyShell does this and would otherwise crash ipython).
2579 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2583 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2580
2584
2581 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2585 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2582 Ctrl-C problem, which does not mess up the input line.
2586 Ctrl-C problem, which does not mess up the input line.
2583
2587
2584 2004-11-03 Fernando Perez <fperez@colorado.edu>
2588 2004-11-03 Fernando Perez <fperez@colorado.edu>
2585
2589
2586 * IPython/Release.py: Changed licensing to BSD, in all files.
2590 * IPython/Release.py: Changed licensing to BSD, in all files.
2587 (name): lowercase name for tarball/RPM release.
2591 (name): lowercase name for tarball/RPM release.
2588
2592
2589 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2593 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2590 use throughout ipython.
2594 use throughout ipython.
2591
2595
2592 * IPython/Magic.py (Magic._ofind): Switch to using the new
2596 * IPython/Magic.py (Magic._ofind): Switch to using the new
2593 OInspect.getdoc() function.
2597 OInspect.getdoc() function.
2594
2598
2595 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2599 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2596 of the line currently being canceled via Ctrl-C. It's extremely
2600 of the line currently being canceled via Ctrl-C. It's extremely
2597 ugly, but I don't know how to do it better (the problem is one of
2601 ugly, but I don't know how to do it better (the problem is one of
2598 handling cross-thread exceptions).
2602 handling cross-thread exceptions).
2599
2603
2600 2004-10-28 Fernando Perez <fperez@colorado.edu>
2604 2004-10-28 Fernando Perez <fperez@colorado.edu>
2601
2605
2602 * IPython/Shell.py (signal_handler): add signal handlers to trap
2606 * IPython/Shell.py (signal_handler): add signal handlers to trap
2603 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2607 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2604 report by Francesc Alted.
2608 report by Francesc Alted.
2605
2609
2606 2004-10-21 Fernando Perez <fperez@colorado.edu>
2610 2004-10-21 Fernando Perez <fperez@colorado.edu>
2607
2611
2608 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2612 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2609 to % for pysh syntax extensions.
2613 to % for pysh syntax extensions.
2610
2614
2611 2004-10-09 Fernando Perez <fperez@colorado.edu>
2615 2004-10-09 Fernando Perez <fperez@colorado.edu>
2612
2616
2613 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2617 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2614 arrays to print a more useful summary, without calling str(arr).
2618 arrays to print a more useful summary, without calling str(arr).
2615 This avoids the problem of extremely lengthy computations which
2619 This avoids the problem of extremely lengthy computations which
2616 occur if arr is large, and appear to the user as a system lockup
2620 occur if arr is large, and appear to the user as a system lockup
2617 with 100% cpu activity. After a suggestion by Kristian Sandberg
2621 with 100% cpu activity. After a suggestion by Kristian Sandberg
2618 <Kristian.Sandberg@colorado.edu>.
2622 <Kristian.Sandberg@colorado.edu>.
2619 (Magic.__init__): fix bug in global magic escapes not being
2623 (Magic.__init__): fix bug in global magic escapes not being
2620 correctly set.
2624 correctly set.
2621
2625
2622 2004-10-08 Fernando Perez <fperez@colorado.edu>
2626 2004-10-08 Fernando Perez <fperez@colorado.edu>
2623
2627
2624 * IPython/Magic.py (__license__): change to absolute imports of
2628 * IPython/Magic.py (__license__): change to absolute imports of
2625 ipython's own internal packages, to start adapting to the absolute
2629 ipython's own internal packages, to start adapting to the absolute
2626 import requirement of PEP-328.
2630 import requirement of PEP-328.
2627
2631
2628 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2632 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2629 files, and standardize author/license marks through the Release
2633 files, and standardize author/license marks through the Release
2630 module instead of having per/file stuff (except for files with
2634 module instead of having per/file stuff (except for files with
2631 particular licenses, like the MIT/PSF-licensed codes).
2635 particular licenses, like the MIT/PSF-licensed codes).
2632
2636
2633 * IPython/Debugger.py: remove dead code for python 2.1
2637 * IPython/Debugger.py: remove dead code for python 2.1
2634
2638
2635 2004-10-04 Fernando Perez <fperez@colorado.edu>
2639 2004-10-04 Fernando Perez <fperez@colorado.edu>
2636
2640
2637 * IPython/iplib.py (ipmagic): New function for accessing magics
2641 * IPython/iplib.py (ipmagic): New function for accessing magics
2638 via a normal python function call.
2642 via a normal python function call.
2639
2643
2640 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2644 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2641 from '@' to '%', to accomodate the new @decorator syntax of python
2645 from '@' to '%', to accomodate the new @decorator syntax of python
2642 2.4.
2646 2.4.
2643
2647
2644 2004-09-29 Fernando Perez <fperez@colorado.edu>
2648 2004-09-29 Fernando Perez <fperez@colorado.edu>
2645
2649
2646 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2650 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2647 matplotlib.use to prevent running scripts which try to switch
2651 matplotlib.use to prevent running scripts which try to switch
2648 interactive backends from within ipython. This will just crash
2652 interactive backends from within ipython. This will just crash
2649 the python interpreter, so we can't allow it (but a detailed error
2653 the python interpreter, so we can't allow it (but a detailed error
2650 is given to the user).
2654 is given to the user).
2651
2655
2652 2004-09-28 Fernando Perez <fperez@colorado.edu>
2656 2004-09-28 Fernando Perez <fperez@colorado.edu>
2653
2657
2654 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2658 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2655 matplotlib-related fixes so that using @run with non-matplotlib
2659 matplotlib-related fixes so that using @run with non-matplotlib
2656 scripts doesn't pop up spurious plot windows. This requires
2660 scripts doesn't pop up spurious plot windows. This requires
2657 matplotlib >= 0.63, where I had to make some changes as well.
2661 matplotlib >= 0.63, where I had to make some changes as well.
2658
2662
2659 * IPython/ipmaker.py (make_IPython): update version requirement to
2663 * IPython/ipmaker.py (make_IPython): update version requirement to
2660 python 2.2.
2664 python 2.2.
2661
2665
2662 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2666 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2663 banner arg for embedded customization.
2667 banner arg for embedded customization.
2664
2668
2665 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2669 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2666 explicit uses of __IP as the IPython's instance name. Now things
2670 explicit uses of __IP as the IPython's instance name. Now things
2667 are properly handled via the shell.name value. The actual code
2671 are properly handled via the shell.name value. The actual code
2668 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2672 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2669 is much better than before. I'll clean things completely when the
2673 is much better than before. I'll clean things completely when the
2670 magic stuff gets a real overhaul.
2674 magic stuff gets a real overhaul.
2671
2675
2672 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2676 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2673 minor changes to debian dir.
2677 minor changes to debian dir.
2674
2678
2675 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2679 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2676 pointer to the shell itself in the interactive namespace even when
2680 pointer to the shell itself in the interactive namespace even when
2677 a user-supplied dict is provided. This is needed for embedding
2681 a user-supplied dict is provided. This is needed for embedding
2678 purposes (found by tests with Michel Sanner).
2682 purposes (found by tests with Michel Sanner).
2679
2683
2680 2004-09-27 Fernando Perez <fperez@colorado.edu>
2684 2004-09-27 Fernando Perez <fperez@colorado.edu>
2681
2685
2682 * IPython/UserConfig/ipythonrc: remove []{} from
2686 * IPython/UserConfig/ipythonrc: remove []{} from
2683 readline_remove_delims, so that things like [modname.<TAB> do
2687 readline_remove_delims, so that things like [modname.<TAB> do
2684 proper completion. This disables [].TAB, but that's a less common
2688 proper completion. This disables [].TAB, but that's a less common
2685 case than module names in list comprehensions, for example.
2689 case than module names in list comprehensions, for example.
2686 Thanks to a report by Andrea Riciputi.
2690 Thanks to a report by Andrea Riciputi.
2687
2691
2688 2004-09-09 Fernando Perez <fperez@colorado.edu>
2692 2004-09-09 Fernando Perez <fperez@colorado.edu>
2689
2693
2690 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2694 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2691 blocking problems in win32 and osx. Fix by John.
2695 blocking problems in win32 and osx. Fix by John.
2692
2696
2693 2004-09-08 Fernando Perez <fperez@colorado.edu>
2697 2004-09-08 Fernando Perez <fperez@colorado.edu>
2694
2698
2695 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2699 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2696 for Win32 and OSX. Fix by John Hunter.
2700 for Win32 and OSX. Fix by John Hunter.
2697
2701
2698 2004-08-30 *** Released version 0.6.3
2702 2004-08-30 *** Released version 0.6.3
2699
2703
2700 2004-08-30 Fernando Perez <fperez@colorado.edu>
2704 2004-08-30 Fernando Perez <fperez@colorado.edu>
2701
2705
2702 * setup.py (isfile): Add manpages to list of dependent files to be
2706 * setup.py (isfile): Add manpages to list of dependent files to be
2703 updated.
2707 updated.
2704
2708
2705 2004-08-27 Fernando Perez <fperez@colorado.edu>
2709 2004-08-27 Fernando Perez <fperez@colorado.edu>
2706
2710
2707 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2711 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2708 for now. They don't really work with standalone WX/GTK code
2712 for now. They don't really work with standalone WX/GTK code
2709 (though matplotlib IS working fine with both of those backends).
2713 (though matplotlib IS working fine with both of those backends).
2710 This will neeed much more testing. I disabled most things with
2714 This will neeed much more testing. I disabled most things with
2711 comments, so turning it back on later should be pretty easy.
2715 comments, so turning it back on later should be pretty easy.
2712
2716
2713 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2717 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2714 autocalling of expressions like r'foo', by modifying the line
2718 autocalling of expressions like r'foo', by modifying the line
2715 split regexp. Closes
2719 split regexp. Closes
2716 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2720 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2717 Riley <ipythonbugs-AT-sabi.net>.
2721 Riley <ipythonbugs-AT-sabi.net>.
2718 (InteractiveShell.mainloop): honor --nobanner with banner
2722 (InteractiveShell.mainloop): honor --nobanner with banner
2719 extensions.
2723 extensions.
2720
2724
2721 * IPython/Shell.py: Significant refactoring of all classes, so
2725 * IPython/Shell.py: Significant refactoring of all classes, so
2722 that we can really support ALL matplotlib backends and threading
2726 that we can really support ALL matplotlib backends and threading
2723 models (John spotted a bug with Tk which required this). Now we
2727 models (John spotted a bug with Tk which required this). Now we
2724 should support single-threaded, WX-threads and GTK-threads, both
2728 should support single-threaded, WX-threads and GTK-threads, both
2725 for generic code and for matplotlib.
2729 for generic code and for matplotlib.
2726
2730
2727 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2731 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2728 -pylab, to simplify things for users. Will also remove the pylab
2732 -pylab, to simplify things for users. Will also remove the pylab
2729 profile, since now all of matplotlib configuration is directly
2733 profile, since now all of matplotlib configuration is directly
2730 handled here. This also reduces startup time.
2734 handled here. This also reduces startup time.
2731
2735
2732 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2736 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2733 shell wasn't being correctly called. Also in IPShellWX.
2737 shell wasn't being correctly called. Also in IPShellWX.
2734
2738
2735 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2739 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2736 fine-tune banner.
2740 fine-tune banner.
2737
2741
2738 * IPython/numutils.py (spike): Deprecate these spike functions,
2742 * IPython/numutils.py (spike): Deprecate these spike functions,
2739 delete (long deprecated) gnuplot_exec handler.
2743 delete (long deprecated) gnuplot_exec handler.
2740
2744
2741 2004-08-26 Fernando Perez <fperez@colorado.edu>
2745 2004-08-26 Fernando Perez <fperez@colorado.edu>
2742
2746
2743 * ipython.1: Update for threading options, plus some others which
2747 * ipython.1: Update for threading options, plus some others which
2744 were missing.
2748 were missing.
2745
2749
2746 * IPython/ipmaker.py (__call__): Added -wthread option for
2750 * IPython/ipmaker.py (__call__): Added -wthread option for
2747 wxpython thread handling. Make sure threading options are only
2751 wxpython thread handling. Make sure threading options are only
2748 valid at the command line.
2752 valid at the command line.
2749
2753
2750 * scripts/ipython: moved shell selection into a factory function
2754 * scripts/ipython: moved shell selection into a factory function
2751 in Shell.py, to keep the starter script to a minimum.
2755 in Shell.py, to keep the starter script to a minimum.
2752
2756
2753 2004-08-25 Fernando Perez <fperez@colorado.edu>
2757 2004-08-25 Fernando Perez <fperez@colorado.edu>
2754
2758
2755 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2759 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2756 John. Along with some recent changes he made to matplotlib, the
2760 John. Along with some recent changes he made to matplotlib, the
2757 next versions of both systems should work very well together.
2761 next versions of both systems should work very well together.
2758
2762
2759 2004-08-24 Fernando Perez <fperez@colorado.edu>
2763 2004-08-24 Fernando Perez <fperez@colorado.edu>
2760
2764
2761 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2765 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2762 tried to switch the profiling to using hotshot, but I'm getting
2766 tried to switch the profiling to using hotshot, but I'm getting
2763 strange errors from prof.runctx() there. I may be misreading the
2767 strange errors from prof.runctx() there. I may be misreading the
2764 docs, but it looks weird. For now the profiling code will
2768 docs, but it looks weird. For now the profiling code will
2765 continue to use the standard profiler.
2769 continue to use the standard profiler.
2766
2770
2767 2004-08-23 Fernando Perez <fperez@colorado.edu>
2771 2004-08-23 Fernando Perez <fperez@colorado.edu>
2768
2772
2769 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2773 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2770 threaded shell, by John Hunter. It's not quite ready yet, but
2774 threaded shell, by John Hunter. It's not quite ready yet, but
2771 close.
2775 close.
2772
2776
2773 2004-08-22 Fernando Perez <fperez@colorado.edu>
2777 2004-08-22 Fernando Perez <fperez@colorado.edu>
2774
2778
2775 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2779 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2776 in Magic and ultraTB.
2780 in Magic and ultraTB.
2777
2781
2778 * ipython.1: document threading options in manpage.
2782 * ipython.1: document threading options in manpage.
2779
2783
2780 * scripts/ipython: Changed name of -thread option to -gthread,
2784 * scripts/ipython: Changed name of -thread option to -gthread,
2781 since this is GTK specific. I want to leave the door open for a
2785 since this is GTK specific. I want to leave the door open for a
2782 -wthread option for WX, which will most likely be necessary. This
2786 -wthread option for WX, which will most likely be necessary. This
2783 change affects usage and ipmaker as well.
2787 change affects usage and ipmaker as well.
2784
2788
2785 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2789 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2786 handle the matplotlib shell issues. Code by John Hunter
2790 handle the matplotlib shell issues. Code by John Hunter
2787 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2791 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2788 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2792 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2789 broken (and disabled for end users) for now, but it puts the
2793 broken (and disabled for end users) for now, but it puts the
2790 infrastructure in place.
2794 infrastructure in place.
2791
2795
2792 2004-08-21 Fernando Perez <fperez@colorado.edu>
2796 2004-08-21 Fernando Perez <fperez@colorado.edu>
2793
2797
2794 * ipythonrc-pylab: Add matplotlib support.
2798 * ipythonrc-pylab: Add matplotlib support.
2795
2799
2796 * matplotlib_config.py: new files for matplotlib support, part of
2800 * matplotlib_config.py: new files for matplotlib support, part of
2797 the pylab profile.
2801 the pylab profile.
2798
2802
2799 * IPython/usage.py (__doc__): documented the threading options.
2803 * IPython/usage.py (__doc__): documented the threading options.
2800
2804
2801 2004-08-20 Fernando Perez <fperez@colorado.edu>
2805 2004-08-20 Fernando Perez <fperez@colorado.edu>
2802
2806
2803 * ipython: Modified the main calling routine to handle the -thread
2807 * ipython: Modified the main calling routine to handle the -thread
2804 and -mpthread options. This needs to be done as a top-level hack,
2808 and -mpthread options. This needs to be done as a top-level hack,
2805 because it determines which class to instantiate for IPython
2809 because it determines which class to instantiate for IPython
2806 itself.
2810 itself.
2807
2811
2808 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2812 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2809 classes to support multithreaded GTK operation without blocking,
2813 classes to support multithreaded GTK operation without blocking,
2810 and matplotlib with all backends. This is a lot of still very
2814 and matplotlib with all backends. This is a lot of still very
2811 experimental code, and threads are tricky. So it may still have a
2815 experimental code, and threads are tricky. So it may still have a
2812 few rough edges... This code owes a lot to
2816 few rough edges... This code owes a lot to
2813 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2817 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2814 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2818 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2815 to John Hunter for all the matplotlib work.
2819 to John Hunter for all the matplotlib work.
2816
2820
2817 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2821 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2818 options for gtk thread and matplotlib support.
2822 options for gtk thread and matplotlib support.
2819
2823
2820 2004-08-16 Fernando Perez <fperez@colorado.edu>
2824 2004-08-16 Fernando Perez <fperez@colorado.edu>
2821
2825
2822 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2826 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2823 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2827 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2824 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2828 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2825
2829
2826 2004-08-11 Fernando Perez <fperez@colorado.edu>
2830 2004-08-11 Fernando Perez <fperez@colorado.edu>
2827
2831
2828 * setup.py (isfile): Fix build so documentation gets updated for
2832 * setup.py (isfile): Fix build so documentation gets updated for
2829 rpms (it was only done for .tgz builds).
2833 rpms (it was only done for .tgz builds).
2830
2834
2831 2004-08-10 Fernando Perez <fperez@colorado.edu>
2835 2004-08-10 Fernando Perez <fperez@colorado.edu>
2832
2836
2833 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2837 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2834
2838
2835 * iplib.py : Silence syntax error exceptions in tab-completion.
2839 * iplib.py : Silence syntax error exceptions in tab-completion.
2836
2840
2837 2004-08-05 Fernando Perez <fperez@colorado.edu>
2841 2004-08-05 Fernando Perez <fperez@colorado.edu>
2838
2842
2839 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2843 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2840 'color off' mark for continuation prompts. This was causing long
2844 'color off' mark for continuation prompts. This was causing long
2841 continuation lines to mis-wrap.
2845 continuation lines to mis-wrap.
2842
2846
2843 2004-08-01 Fernando Perez <fperez@colorado.edu>
2847 2004-08-01 Fernando Perez <fperez@colorado.edu>
2844
2848
2845 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2849 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2846 for building ipython to be a parameter. All this is necessary
2850 for building ipython to be a parameter. All this is necessary
2847 right now to have a multithreaded version, but this insane
2851 right now to have a multithreaded version, but this insane
2848 non-design will be cleaned up soon. For now, it's a hack that
2852 non-design will be cleaned up soon. For now, it's a hack that
2849 works.
2853 works.
2850
2854
2851 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2855 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2852 args in various places. No bugs so far, but it's a dangerous
2856 args in various places. No bugs so far, but it's a dangerous
2853 practice.
2857 practice.
2854
2858
2855 2004-07-31 Fernando Perez <fperez@colorado.edu>
2859 2004-07-31 Fernando Perez <fperez@colorado.edu>
2856
2860
2857 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2861 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2858 fix completion of files with dots in their names under most
2862 fix completion of files with dots in their names under most
2859 profiles (pysh was OK because the completion order is different).
2863 profiles (pysh was OK because the completion order is different).
2860
2864
2861 2004-07-27 Fernando Perez <fperez@colorado.edu>
2865 2004-07-27 Fernando Perez <fperez@colorado.edu>
2862
2866
2863 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2867 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2864 keywords manually, b/c the one in keyword.py was removed in python
2868 keywords manually, b/c the one in keyword.py was removed in python
2865 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2869 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2866 This is NOT a bug under python 2.3 and earlier.
2870 This is NOT a bug under python 2.3 and earlier.
2867
2871
2868 2004-07-26 Fernando Perez <fperez@colorado.edu>
2872 2004-07-26 Fernando Perez <fperez@colorado.edu>
2869
2873
2870 * IPython/ultraTB.py (VerboseTB.text): Add another
2874 * IPython/ultraTB.py (VerboseTB.text): Add another
2871 linecache.checkcache() call to try to prevent inspect.py from
2875 linecache.checkcache() call to try to prevent inspect.py from
2872 crashing under python 2.3. I think this fixes
2876 crashing under python 2.3. I think this fixes
2873 http://www.scipy.net/roundup/ipython/issue17.
2877 http://www.scipy.net/roundup/ipython/issue17.
2874
2878
2875 2004-07-26 *** Released version 0.6.2
2879 2004-07-26 *** Released version 0.6.2
2876
2880
2877 2004-07-26 Fernando Perez <fperez@colorado.edu>
2881 2004-07-26 Fernando Perez <fperez@colorado.edu>
2878
2882
2879 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2883 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2880 fail for any number.
2884 fail for any number.
2881 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2885 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2882 empty bookmarks.
2886 empty bookmarks.
2883
2887
2884 2004-07-26 *** Released version 0.6.1
2888 2004-07-26 *** Released version 0.6.1
2885
2889
2886 2004-07-26 Fernando Perez <fperez@colorado.edu>
2890 2004-07-26 Fernando Perez <fperez@colorado.edu>
2887
2891
2888 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2892 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2889
2893
2890 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2894 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2891 escaping '()[]{}' in filenames.
2895 escaping '()[]{}' in filenames.
2892
2896
2893 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2897 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2894 Python 2.2 users who lack a proper shlex.split.
2898 Python 2.2 users who lack a proper shlex.split.
2895
2899
2896 2004-07-19 Fernando Perez <fperez@colorado.edu>
2900 2004-07-19 Fernando Perez <fperez@colorado.edu>
2897
2901
2898 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2902 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2899 for reading readline's init file. I follow the normal chain:
2903 for reading readline's init file. I follow the normal chain:
2900 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2904 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2901 report by Mike Heeter. This closes
2905 report by Mike Heeter. This closes
2902 http://www.scipy.net/roundup/ipython/issue16.
2906 http://www.scipy.net/roundup/ipython/issue16.
2903
2907
2904 2004-07-18 Fernando Perez <fperez@colorado.edu>
2908 2004-07-18 Fernando Perez <fperez@colorado.edu>
2905
2909
2906 * IPython/iplib.py (__init__): Add better handling of '\' under
2910 * IPython/iplib.py (__init__): Add better handling of '\' under
2907 Win32 for filenames. After a patch by Ville.
2911 Win32 for filenames. After a patch by Ville.
2908
2912
2909 2004-07-17 Fernando Perez <fperez@colorado.edu>
2913 2004-07-17 Fernando Perez <fperez@colorado.edu>
2910
2914
2911 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2915 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2912 autocalling would be triggered for 'foo is bar' if foo is
2916 autocalling would be triggered for 'foo is bar' if foo is
2913 callable. I also cleaned up the autocall detection code to use a
2917 callable. I also cleaned up the autocall detection code to use a
2914 regexp, which is faster. Bug reported by Alexander Schmolck.
2918 regexp, which is faster. Bug reported by Alexander Schmolck.
2915
2919
2916 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2920 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2917 '?' in them would confuse the help system. Reported by Alex
2921 '?' in them would confuse the help system. Reported by Alex
2918 Schmolck.
2922 Schmolck.
2919
2923
2920 2004-07-16 Fernando Perez <fperez@colorado.edu>
2924 2004-07-16 Fernando Perez <fperez@colorado.edu>
2921
2925
2922 * IPython/GnuplotInteractive.py (__all__): added plot2.
2926 * IPython/GnuplotInteractive.py (__all__): added plot2.
2923
2927
2924 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2928 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2925 plotting dictionaries, lists or tuples of 1d arrays.
2929 plotting dictionaries, lists or tuples of 1d arrays.
2926
2930
2927 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2931 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2928 optimizations.
2932 optimizations.
2929
2933
2930 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2934 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2931 the information which was there from Janko's original IPP code:
2935 the information which was there from Janko's original IPP code:
2932
2936
2933 03.05.99 20:53 porto.ifm.uni-kiel.de
2937 03.05.99 20:53 porto.ifm.uni-kiel.de
2934 --Started changelog.
2938 --Started changelog.
2935 --make clear do what it say it does
2939 --make clear do what it say it does
2936 --added pretty output of lines from inputcache
2940 --added pretty output of lines from inputcache
2937 --Made Logger a mixin class, simplifies handling of switches
2941 --Made Logger a mixin class, simplifies handling of switches
2938 --Added own completer class. .string<TAB> expands to last history
2942 --Added own completer class. .string<TAB> expands to last history
2939 line which starts with string. The new expansion is also present
2943 line which starts with string. The new expansion is also present
2940 with Ctrl-r from the readline library. But this shows, who this
2944 with Ctrl-r from the readline library. But this shows, who this
2941 can be done for other cases.
2945 can be done for other cases.
2942 --Added convention that all shell functions should accept a
2946 --Added convention that all shell functions should accept a
2943 parameter_string This opens the door for different behaviour for
2947 parameter_string This opens the door for different behaviour for
2944 each function. @cd is a good example of this.
2948 each function. @cd is a good example of this.
2945
2949
2946 04.05.99 12:12 porto.ifm.uni-kiel.de
2950 04.05.99 12:12 porto.ifm.uni-kiel.de
2947 --added logfile rotation
2951 --added logfile rotation
2948 --added new mainloop method which freezes first the namespace
2952 --added new mainloop method which freezes first the namespace
2949
2953
2950 07.05.99 21:24 porto.ifm.uni-kiel.de
2954 07.05.99 21:24 porto.ifm.uni-kiel.de
2951 --added the docreader classes. Now there is a help system.
2955 --added the docreader classes. Now there is a help system.
2952 -This is only a first try. Currently it's not easy to put new
2956 -This is only a first try. Currently it's not easy to put new
2953 stuff in the indices. But this is the way to go. Info would be
2957 stuff in the indices. But this is the way to go. Info would be
2954 better, but HTML is every where and not everybody has an info
2958 better, but HTML is every where and not everybody has an info
2955 system installed and it's not so easy to change html-docs to info.
2959 system installed and it's not so easy to change html-docs to info.
2956 --added global logfile option
2960 --added global logfile option
2957 --there is now a hook for object inspection method pinfo needs to
2961 --there is now a hook for object inspection method pinfo needs to
2958 be provided for this. Can be reached by two '??'.
2962 be provided for this. Can be reached by two '??'.
2959
2963
2960 08.05.99 20:51 porto.ifm.uni-kiel.de
2964 08.05.99 20:51 porto.ifm.uni-kiel.de
2961 --added a README
2965 --added a README
2962 --bug in rc file. Something has changed so functions in the rc
2966 --bug in rc file. Something has changed so functions in the rc
2963 file need to reference the shell and not self. Not clear if it's a
2967 file need to reference the shell and not self. Not clear if it's a
2964 bug or feature.
2968 bug or feature.
2965 --changed rc file for new behavior
2969 --changed rc file for new behavior
2966
2970
2967 2004-07-15 Fernando Perez <fperez@colorado.edu>
2971 2004-07-15 Fernando Perez <fperez@colorado.edu>
2968
2972
2969 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2973 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2970 cache was falling out of sync in bizarre manners when multi-line
2974 cache was falling out of sync in bizarre manners when multi-line
2971 input was present. Minor optimizations and cleanup.
2975 input was present. Minor optimizations and cleanup.
2972
2976
2973 (Logger): Remove old Changelog info for cleanup. This is the
2977 (Logger): Remove old Changelog info for cleanup. This is the
2974 information which was there from Janko's original code:
2978 information which was there from Janko's original code:
2975
2979
2976 Changes to Logger: - made the default log filename a parameter
2980 Changes to Logger: - made the default log filename a parameter
2977
2981
2978 - put a check for lines beginning with !@? in log(). Needed
2982 - put a check for lines beginning with !@? in log(). Needed
2979 (even if the handlers properly log their lines) for mid-session
2983 (even if the handlers properly log their lines) for mid-session
2980 logging activation to work properly. Without this, lines logged
2984 logging activation to work properly. Without this, lines logged
2981 in mid session, which get read from the cache, would end up
2985 in mid session, which get read from the cache, would end up
2982 'bare' (with !@? in the open) in the log. Now they are caught
2986 'bare' (with !@? in the open) in the log. Now they are caught
2983 and prepended with a #.
2987 and prepended with a #.
2984
2988
2985 * IPython/iplib.py (InteractiveShell.init_readline): added check
2989 * IPython/iplib.py (InteractiveShell.init_readline): added check
2986 in case MagicCompleter fails to be defined, so we don't crash.
2990 in case MagicCompleter fails to be defined, so we don't crash.
2987
2991
2988 2004-07-13 Fernando Perez <fperez@colorado.edu>
2992 2004-07-13 Fernando Perez <fperez@colorado.edu>
2989
2993
2990 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2994 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2991 of EPS if the requested filename ends in '.eps'.
2995 of EPS if the requested filename ends in '.eps'.
2992
2996
2993 2004-07-04 Fernando Perez <fperez@colorado.edu>
2997 2004-07-04 Fernando Perez <fperez@colorado.edu>
2994
2998
2995 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2999 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2996 escaping of quotes when calling the shell.
3000 escaping of quotes when calling the shell.
2997
3001
2998 2004-07-02 Fernando Perez <fperez@colorado.edu>
3002 2004-07-02 Fernando Perez <fperez@colorado.edu>
2999
3003
3000 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3004 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3001 gettext not working because we were clobbering '_'. Fixes
3005 gettext not working because we were clobbering '_'. Fixes
3002 http://www.scipy.net/roundup/ipython/issue6.
3006 http://www.scipy.net/roundup/ipython/issue6.
3003
3007
3004 2004-07-01 Fernando Perez <fperez@colorado.edu>
3008 2004-07-01 Fernando Perez <fperez@colorado.edu>
3005
3009
3006 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3010 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3007 into @cd. Patch by Ville.
3011 into @cd. Patch by Ville.
3008
3012
3009 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3013 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3010 new function to store things after ipmaker runs. Patch by Ville.
3014 new function to store things after ipmaker runs. Patch by Ville.
3011 Eventually this will go away once ipmaker is removed and the class
3015 Eventually this will go away once ipmaker is removed and the class
3012 gets cleaned up, but for now it's ok. Key functionality here is
3016 gets cleaned up, but for now it's ok. Key functionality here is
3013 the addition of the persistent storage mechanism, a dict for
3017 the addition of the persistent storage mechanism, a dict for
3014 keeping data across sessions (for now just bookmarks, but more can
3018 keeping data across sessions (for now just bookmarks, but more can
3015 be implemented later).
3019 be implemented later).
3016
3020
3017 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3021 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3018 persistent across sections. Patch by Ville, I modified it
3022 persistent across sections. Patch by Ville, I modified it
3019 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3023 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3020 added a '-l' option to list all bookmarks.
3024 added a '-l' option to list all bookmarks.
3021
3025
3022 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3026 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3023 center for cleanup. Registered with atexit.register(). I moved
3027 center for cleanup. Registered with atexit.register(). I moved
3024 here the old exit_cleanup(). After a patch by Ville.
3028 here the old exit_cleanup(). After a patch by Ville.
3025
3029
3026 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3030 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3027 characters in the hacked shlex_split for python 2.2.
3031 characters in the hacked shlex_split for python 2.2.
3028
3032
3029 * IPython/iplib.py (file_matches): more fixes to filenames with
3033 * IPython/iplib.py (file_matches): more fixes to filenames with
3030 whitespace in them. It's not perfect, but limitations in python's
3034 whitespace in them. It's not perfect, but limitations in python's
3031 readline make it impossible to go further.
3035 readline make it impossible to go further.
3032
3036
3033 2004-06-29 Fernando Perez <fperez@colorado.edu>
3037 2004-06-29 Fernando Perez <fperez@colorado.edu>
3034
3038
3035 * IPython/iplib.py (file_matches): escape whitespace correctly in
3039 * IPython/iplib.py (file_matches): escape whitespace correctly in
3036 filename completions. Bug reported by Ville.
3040 filename completions. Bug reported by Ville.
3037
3041
3038 2004-06-28 Fernando Perez <fperez@colorado.edu>
3042 2004-06-28 Fernando Perez <fperez@colorado.edu>
3039
3043
3040 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3044 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3041 the history file will be called 'history-PROFNAME' (or just
3045 the history file will be called 'history-PROFNAME' (or just
3042 'history' if no profile is loaded). I was getting annoyed at
3046 'history' if no profile is loaded). I was getting annoyed at
3043 getting my Numerical work history clobbered by pysh sessions.
3047 getting my Numerical work history clobbered by pysh sessions.
3044
3048
3045 * IPython/iplib.py (InteractiveShell.__init__): Internal
3049 * IPython/iplib.py (InteractiveShell.__init__): Internal
3046 getoutputerror() function so that we can honor the system_verbose
3050 getoutputerror() function so that we can honor the system_verbose
3047 flag for _all_ system calls. I also added escaping of #
3051 flag for _all_ system calls. I also added escaping of #
3048 characters here to avoid confusing Itpl.
3052 characters here to avoid confusing Itpl.
3049
3053
3050 * IPython/Magic.py (shlex_split): removed call to shell in
3054 * IPython/Magic.py (shlex_split): removed call to shell in
3051 parse_options and replaced it with shlex.split(). The annoying
3055 parse_options and replaced it with shlex.split(). The annoying
3052 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3056 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3053 to backport it from 2.3, with several frail hacks (the shlex
3057 to backport it from 2.3, with several frail hacks (the shlex
3054 module is rather limited in 2.2). Thanks to a suggestion by Ville
3058 module is rather limited in 2.2). Thanks to a suggestion by Ville
3055 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3059 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3056 problem.
3060 problem.
3057
3061
3058 (Magic.magic_system_verbose): new toggle to print the actual
3062 (Magic.magic_system_verbose): new toggle to print the actual
3059 system calls made by ipython. Mainly for debugging purposes.
3063 system calls made by ipython. Mainly for debugging purposes.
3060
3064
3061 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3065 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3062 doesn't support persistence. Reported (and fix suggested) by
3066 doesn't support persistence. Reported (and fix suggested) by
3063 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3067 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3064
3068
3065 2004-06-26 Fernando Perez <fperez@colorado.edu>
3069 2004-06-26 Fernando Perez <fperez@colorado.edu>
3066
3070
3067 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3071 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3068 continue prompts.
3072 continue prompts.
3069
3073
3070 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3074 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3071 function (basically a big docstring) and a few more things here to
3075 function (basically a big docstring) and a few more things here to
3072 speedup startup. pysh.py is now very lightweight. We want because
3076 speedup startup. pysh.py is now very lightweight. We want because
3073 it gets execfile'd, while InterpreterExec gets imported, so
3077 it gets execfile'd, while InterpreterExec gets imported, so
3074 byte-compilation saves time.
3078 byte-compilation saves time.
3075
3079
3076 2004-06-25 Fernando Perez <fperez@colorado.edu>
3080 2004-06-25 Fernando Perez <fperez@colorado.edu>
3077
3081
3078 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3082 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3079 -NUM', which was recently broken.
3083 -NUM', which was recently broken.
3080
3084
3081 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3085 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3082 in multi-line input (but not !!, which doesn't make sense there).
3086 in multi-line input (but not !!, which doesn't make sense there).
3083
3087
3084 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3088 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3085 It's just too useful, and people can turn it off in the less
3089 It's just too useful, and people can turn it off in the less
3086 common cases where it's a problem.
3090 common cases where it's a problem.
3087
3091
3088 2004-06-24 Fernando Perez <fperez@colorado.edu>
3092 2004-06-24 Fernando Perez <fperez@colorado.edu>
3089
3093
3090 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3094 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3091 special syntaxes (like alias calling) is now allied in multi-line
3095 special syntaxes (like alias calling) is now allied in multi-line
3092 input. This is still _very_ experimental, but it's necessary for
3096 input. This is still _very_ experimental, but it's necessary for
3093 efficient shell usage combining python looping syntax with system
3097 efficient shell usage combining python looping syntax with system
3094 calls. For now it's restricted to aliases, I don't think it
3098 calls. For now it's restricted to aliases, I don't think it
3095 really even makes sense to have this for magics.
3099 really even makes sense to have this for magics.
3096
3100
3097 2004-06-23 Fernando Perez <fperez@colorado.edu>
3101 2004-06-23 Fernando Perez <fperez@colorado.edu>
3098
3102
3099 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3103 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3100 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3104 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3101
3105
3102 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3106 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3103 extensions under Windows (after code sent by Gary Bishop). The
3107 extensions under Windows (after code sent by Gary Bishop). The
3104 extensions considered 'executable' are stored in IPython's rc
3108 extensions considered 'executable' are stored in IPython's rc
3105 structure as win_exec_ext.
3109 structure as win_exec_ext.
3106
3110
3107 * IPython/genutils.py (shell): new function, like system() but
3111 * IPython/genutils.py (shell): new function, like system() but
3108 without return value. Very useful for interactive shell work.
3112 without return value. Very useful for interactive shell work.
3109
3113
3110 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3114 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3111 delete aliases.
3115 delete aliases.
3112
3116
3113 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3117 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3114 sure that the alias table doesn't contain python keywords.
3118 sure that the alias table doesn't contain python keywords.
3115
3119
3116 2004-06-21 Fernando Perez <fperez@colorado.edu>
3120 2004-06-21 Fernando Perez <fperez@colorado.edu>
3117
3121
3118 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3122 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3119 non-existent items are found in $PATH. Reported by Thorsten.
3123 non-existent items are found in $PATH. Reported by Thorsten.
3120
3124
3121 2004-06-20 Fernando Perez <fperez@colorado.edu>
3125 2004-06-20 Fernando Perez <fperez@colorado.edu>
3122
3126
3123 * IPython/iplib.py (complete): modified the completer so that the
3127 * IPython/iplib.py (complete): modified the completer so that the
3124 order of priorities can be easily changed at runtime.
3128 order of priorities can be easily changed at runtime.
3125
3129
3126 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3130 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3127 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3131 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3128
3132
3129 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3133 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3130 expand Python variables prepended with $ in all system calls. The
3134 expand Python variables prepended with $ in all system calls. The
3131 same was done to InteractiveShell.handle_shell_escape. Now all
3135 same was done to InteractiveShell.handle_shell_escape. Now all
3132 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3136 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3133 expansion of python variables and expressions according to the
3137 expansion of python variables and expressions according to the
3134 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3138 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3135
3139
3136 Though PEP-215 has been rejected, a similar (but simpler) one
3140 Though PEP-215 has been rejected, a similar (but simpler) one
3137 seems like it will go into Python 2.4, PEP-292 -
3141 seems like it will go into Python 2.4, PEP-292 -
3138 http://www.python.org/peps/pep-0292.html.
3142 http://www.python.org/peps/pep-0292.html.
3139
3143
3140 I'll keep the full syntax of PEP-215, since IPython has since the
3144 I'll keep the full syntax of PEP-215, since IPython has since the
3141 start used Ka-Ping Yee's reference implementation discussed there
3145 start used Ka-Ping Yee's reference implementation discussed there
3142 (Itpl), and I actually like the powerful semantics it offers.
3146 (Itpl), and I actually like the powerful semantics it offers.
3143
3147
3144 In order to access normal shell variables, the $ has to be escaped
3148 In order to access normal shell variables, the $ has to be escaped
3145 via an extra $. For example:
3149 via an extra $. For example:
3146
3150
3147 In [7]: PATH='a python variable'
3151 In [7]: PATH='a python variable'
3148
3152
3149 In [8]: !echo $PATH
3153 In [8]: !echo $PATH
3150 a python variable
3154 a python variable
3151
3155
3152 In [9]: !echo $$PATH
3156 In [9]: !echo $$PATH
3153 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3157 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3154
3158
3155 (Magic.parse_options): escape $ so the shell doesn't evaluate
3159 (Magic.parse_options): escape $ so the shell doesn't evaluate
3156 things prematurely.
3160 things prematurely.
3157
3161
3158 * IPython/iplib.py (InteractiveShell.call_alias): added the
3162 * IPython/iplib.py (InteractiveShell.call_alias): added the
3159 ability for aliases to expand python variables via $.
3163 ability for aliases to expand python variables via $.
3160
3164
3161 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3165 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3162 system, now there's a @rehash/@rehashx pair of magics. These work
3166 system, now there's a @rehash/@rehashx pair of magics. These work
3163 like the csh rehash command, and can be invoked at any time. They
3167 like the csh rehash command, and can be invoked at any time. They
3164 build a table of aliases to everything in the user's $PATH
3168 build a table of aliases to everything in the user's $PATH
3165 (@rehash uses everything, @rehashx is slower but only adds
3169 (@rehash uses everything, @rehashx is slower but only adds
3166 executable files). With this, the pysh.py-based shell profile can
3170 executable files). With this, the pysh.py-based shell profile can
3167 now simply call rehash upon startup, and full access to all
3171 now simply call rehash upon startup, and full access to all
3168 programs in the user's path is obtained.
3172 programs in the user's path is obtained.
3169
3173
3170 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3174 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3171 functionality is now fully in place. I removed the old dynamic
3175 functionality is now fully in place. I removed the old dynamic
3172 code generation based approach, in favor of a much lighter one
3176 code generation based approach, in favor of a much lighter one
3173 based on a simple dict. The advantage is that this allows me to
3177 based on a simple dict. The advantage is that this allows me to
3174 now have thousands of aliases with negligible cost (unthinkable
3178 now have thousands of aliases with negligible cost (unthinkable
3175 with the old system).
3179 with the old system).
3176
3180
3177 2004-06-19 Fernando Perez <fperez@colorado.edu>
3181 2004-06-19 Fernando Perez <fperez@colorado.edu>
3178
3182
3179 * IPython/iplib.py (__init__): extended MagicCompleter class to
3183 * IPython/iplib.py (__init__): extended MagicCompleter class to
3180 also complete (last in priority) on user aliases.
3184 also complete (last in priority) on user aliases.
3181
3185
3182 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3186 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3183 call to eval.
3187 call to eval.
3184 (ItplNS.__init__): Added a new class which functions like Itpl,
3188 (ItplNS.__init__): Added a new class which functions like Itpl,
3185 but allows configuring the namespace for the evaluation to occur
3189 but allows configuring the namespace for the evaluation to occur
3186 in.
3190 in.
3187
3191
3188 2004-06-18 Fernando Perez <fperez@colorado.edu>
3192 2004-06-18 Fernando Perez <fperez@colorado.edu>
3189
3193
3190 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3194 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3191 better message when 'exit' or 'quit' are typed (a common newbie
3195 better message when 'exit' or 'quit' are typed (a common newbie
3192 confusion).
3196 confusion).
3193
3197
3194 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3198 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3195 check for Windows users.
3199 check for Windows users.
3196
3200
3197 * IPython/iplib.py (InteractiveShell.user_setup): removed
3201 * IPython/iplib.py (InteractiveShell.user_setup): removed
3198 disabling of colors for Windows. I'll test at runtime and issue a
3202 disabling of colors for Windows. I'll test at runtime and issue a
3199 warning if Gary's readline isn't found, as to nudge users to
3203 warning if Gary's readline isn't found, as to nudge users to
3200 download it.
3204 download it.
3201
3205
3202 2004-06-16 Fernando Perez <fperez@colorado.edu>
3206 2004-06-16 Fernando Perez <fperez@colorado.edu>
3203
3207
3204 * IPython/genutils.py (Stream.__init__): changed to print errors
3208 * IPython/genutils.py (Stream.__init__): changed to print errors
3205 to sys.stderr. I had a circular dependency here. Now it's
3209 to sys.stderr. I had a circular dependency here. Now it's
3206 possible to run ipython as IDLE's shell (consider this pre-alpha,
3210 possible to run ipython as IDLE's shell (consider this pre-alpha,
3207 since true stdout things end up in the starting terminal instead
3211 since true stdout things end up in the starting terminal instead
3208 of IDLE's out).
3212 of IDLE's out).
3209
3213
3210 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3214 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3211 users who haven't # updated their prompt_in2 definitions. Remove
3215 users who haven't # updated their prompt_in2 definitions. Remove
3212 eventually.
3216 eventually.
3213 (multiple_replace): added credit to original ASPN recipe.
3217 (multiple_replace): added credit to original ASPN recipe.
3214
3218
3215 2004-06-15 Fernando Perez <fperez@colorado.edu>
3219 2004-06-15 Fernando Perez <fperez@colorado.edu>
3216
3220
3217 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3221 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3218 list of auto-defined aliases.
3222 list of auto-defined aliases.
3219
3223
3220 2004-06-13 Fernando Perez <fperez@colorado.edu>
3224 2004-06-13 Fernando Perez <fperez@colorado.edu>
3221
3225
3222 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3226 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3223 install was really requested (so setup.py can be used for other
3227 install was really requested (so setup.py can be used for other
3224 things under Windows).
3228 things under Windows).
3225
3229
3226 2004-06-10 Fernando Perez <fperez@colorado.edu>
3230 2004-06-10 Fernando Perez <fperez@colorado.edu>
3227
3231
3228 * IPython/Logger.py (Logger.create_log): Manually remove any old
3232 * IPython/Logger.py (Logger.create_log): Manually remove any old
3229 backup, since os.remove may fail under Windows. Fixes bug
3233 backup, since os.remove may fail under Windows. Fixes bug
3230 reported by Thorsten.
3234 reported by Thorsten.
3231
3235
3232 2004-06-09 Fernando Perez <fperez@colorado.edu>
3236 2004-06-09 Fernando Perez <fperez@colorado.edu>
3233
3237
3234 * examples/example-embed.py: fixed all references to %n (replaced
3238 * examples/example-embed.py: fixed all references to %n (replaced
3235 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3239 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3236 for all examples and the manual as well.
3240 for all examples and the manual as well.
3237
3241
3238 2004-06-08 Fernando Perez <fperez@colorado.edu>
3242 2004-06-08 Fernando Perez <fperez@colorado.edu>
3239
3243
3240 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3244 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3241 alignment and color management. All 3 prompt subsystems now
3245 alignment and color management. All 3 prompt subsystems now
3242 inherit from BasePrompt.
3246 inherit from BasePrompt.
3243
3247
3244 * tools/release: updates for windows installer build and tag rpms
3248 * tools/release: updates for windows installer build and tag rpms
3245 with python version (since paths are fixed).
3249 with python version (since paths are fixed).
3246
3250
3247 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3251 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3248 which will become eventually obsolete. Also fixed the default
3252 which will become eventually obsolete. Also fixed the default
3249 prompt_in2 to use \D, so at least new users start with the correct
3253 prompt_in2 to use \D, so at least new users start with the correct
3250 defaults.
3254 defaults.
3251 WARNING: Users with existing ipythonrc files will need to apply
3255 WARNING: Users with existing ipythonrc files will need to apply
3252 this fix manually!
3256 this fix manually!
3253
3257
3254 * setup.py: make windows installer (.exe). This is finally the
3258 * setup.py: make windows installer (.exe). This is finally the
3255 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3259 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3256 which I hadn't included because it required Python 2.3 (or recent
3260 which I hadn't included because it required Python 2.3 (or recent
3257 distutils).
3261 distutils).
3258
3262
3259 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3263 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3260 usage of new '\D' escape.
3264 usage of new '\D' escape.
3261
3265
3262 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3266 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3263 lacks os.getuid())
3267 lacks os.getuid())
3264 (CachedOutput.set_colors): Added the ability to turn coloring
3268 (CachedOutput.set_colors): Added the ability to turn coloring
3265 on/off with @colors even for manually defined prompt colors. It
3269 on/off with @colors even for manually defined prompt colors. It
3266 uses a nasty global, but it works safely and via the generic color
3270 uses a nasty global, but it works safely and via the generic color
3267 handling mechanism.
3271 handling mechanism.
3268 (Prompt2.__init__): Introduced new escape '\D' for continuation
3272 (Prompt2.__init__): Introduced new escape '\D' for continuation
3269 prompts. It represents the counter ('\#') as dots.
3273 prompts. It represents the counter ('\#') as dots.
3270 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3274 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3271 need to update their ipythonrc files and replace '%n' with '\D' in
3275 need to update their ipythonrc files and replace '%n' with '\D' in
3272 their prompt_in2 settings everywhere. Sorry, but there's
3276 their prompt_in2 settings everywhere. Sorry, but there's
3273 otherwise no clean way to get all prompts to properly align. The
3277 otherwise no clean way to get all prompts to properly align. The
3274 ipythonrc shipped with IPython has been updated.
3278 ipythonrc shipped with IPython has been updated.
3275
3279
3276 2004-06-07 Fernando Perez <fperez@colorado.edu>
3280 2004-06-07 Fernando Perez <fperez@colorado.edu>
3277
3281
3278 * setup.py (isfile): Pass local_icons option to latex2html, so the
3282 * setup.py (isfile): Pass local_icons option to latex2html, so the
3279 resulting HTML file is self-contained. Thanks to
3283 resulting HTML file is self-contained. Thanks to
3280 dryice-AT-liu.com.cn for the tip.
3284 dryice-AT-liu.com.cn for the tip.
3281
3285
3282 * pysh.py: I created a new profile 'shell', which implements a
3286 * pysh.py: I created a new profile 'shell', which implements a
3283 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3287 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3284 system shell, nor will it become one anytime soon. It's mainly
3288 system shell, nor will it become one anytime soon. It's mainly
3285 meant to illustrate the use of the new flexible bash-like prompts.
3289 meant to illustrate the use of the new flexible bash-like prompts.
3286 I guess it could be used by hardy souls for true shell management,
3290 I guess it could be used by hardy souls for true shell management,
3287 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3291 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3288 profile. This uses the InterpreterExec extension provided by
3292 profile. This uses the InterpreterExec extension provided by
3289 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3293 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3290
3294
3291 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3295 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3292 auto-align itself with the length of the previous input prompt
3296 auto-align itself with the length of the previous input prompt
3293 (taking into account the invisible color escapes).
3297 (taking into account the invisible color escapes).
3294 (CachedOutput.__init__): Large restructuring of this class. Now
3298 (CachedOutput.__init__): Large restructuring of this class. Now
3295 all three prompts (primary1, primary2, output) are proper objects,
3299 all three prompts (primary1, primary2, output) are proper objects,
3296 managed by the 'parent' CachedOutput class. The code is still a
3300 managed by the 'parent' CachedOutput class. The code is still a
3297 bit hackish (all prompts share state via a pointer to the cache),
3301 bit hackish (all prompts share state via a pointer to the cache),
3298 but it's overall far cleaner than before.
3302 but it's overall far cleaner than before.
3299
3303
3300 * IPython/genutils.py (getoutputerror): modified to add verbose,
3304 * IPython/genutils.py (getoutputerror): modified to add verbose,
3301 debug and header options. This makes the interface of all getout*
3305 debug and header options. This makes the interface of all getout*
3302 functions uniform.
3306 functions uniform.
3303 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3307 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3304
3308
3305 * IPython/Magic.py (Magic.default_option): added a function to
3309 * IPython/Magic.py (Magic.default_option): added a function to
3306 allow registering default options for any magic command. This
3310 allow registering default options for any magic command. This
3307 makes it easy to have profiles which customize the magics globally
3311 makes it easy to have profiles which customize the magics globally
3308 for a certain use. The values set through this function are
3312 for a certain use. The values set through this function are
3309 picked up by the parse_options() method, which all magics should
3313 picked up by the parse_options() method, which all magics should
3310 use to parse their options.
3314 use to parse their options.
3311
3315
3312 * IPython/genutils.py (warn): modified the warnings framework to
3316 * IPython/genutils.py (warn): modified the warnings framework to
3313 use the Term I/O class. I'm trying to slowly unify all of
3317 use the Term I/O class. I'm trying to slowly unify all of
3314 IPython's I/O operations to pass through Term.
3318 IPython's I/O operations to pass through Term.
3315
3319
3316 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3320 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3317 the secondary prompt to correctly match the length of the primary
3321 the secondary prompt to correctly match the length of the primary
3318 one for any prompt. Now multi-line code will properly line up
3322 one for any prompt. Now multi-line code will properly line up
3319 even for path dependent prompts, such as the new ones available
3323 even for path dependent prompts, such as the new ones available
3320 via the prompt_specials.
3324 via the prompt_specials.
3321
3325
3322 2004-06-06 Fernando Perez <fperez@colorado.edu>
3326 2004-06-06 Fernando Perez <fperez@colorado.edu>
3323
3327
3324 * IPython/Prompts.py (prompt_specials): Added the ability to have
3328 * IPython/Prompts.py (prompt_specials): Added the ability to have
3325 bash-like special sequences in the prompts, which get
3329 bash-like special sequences in the prompts, which get
3326 automatically expanded. Things like hostname, current working
3330 automatically expanded. Things like hostname, current working
3327 directory and username are implemented already, but it's easy to
3331 directory and username are implemented already, but it's easy to
3328 add more in the future. Thanks to a patch by W.J. van der Laan
3332 add more in the future. Thanks to a patch by W.J. van der Laan
3329 <gnufnork-AT-hetdigitalegat.nl>
3333 <gnufnork-AT-hetdigitalegat.nl>
3330 (prompt_specials): Added color support for prompt strings, so
3334 (prompt_specials): Added color support for prompt strings, so
3331 users can define arbitrary color setups for their prompts.
3335 users can define arbitrary color setups for their prompts.
3332
3336
3333 2004-06-05 Fernando Perez <fperez@colorado.edu>
3337 2004-06-05 Fernando Perez <fperez@colorado.edu>
3334
3338
3335 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3339 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3336 code to load Gary Bishop's readline and configure it
3340 code to load Gary Bishop's readline and configure it
3337 automatically. Thanks to Gary for help on this.
3341 automatically. Thanks to Gary for help on this.
3338
3342
3339 2004-06-01 Fernando Perez <fperez@colorado.edu>
3343 2004-06-01 Fernando Perez <fperez@colorado.edu>
3340
3344
3341 * IPython/Logger.py (Logger.create_log): fix bug for logging
3345 * IPython/Logger.py (Logger.create_log): fix bug for logging
3342 with no filename (previous fix was incomplete).
3346 with no filename (previous fix was incomplete).
3343
3347
3344 2004-05-25 Fernando Perez <fperez@colorado.edu>
3348 2004-05-25 Fernando Perez <fperez@colorado.edu>
3345
3349
3346 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3350 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3347 parens would get passed to the shell.
3351 parens would get passed to the shell.
3348
3352
3349 2004-05-20 Fernando Perez <fperez@colorado.edu>
3353 2004-05-20 Fernando Perez <fperez@colorado.edu>
3350
3354
3351 * IPython/Magic.py (Magic.magic_prun): changed default profile
3355 * IPython/Magic.py (Magic.magic_prun): changed default profile
3352 sort order to 'time' (the more common profiling need).
3356 sort order to 'time' (the more common profiling need).
3353
3357
3354 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3358 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3355 so that source code shown is guaranteed in sync with the file on
3359 so that source code shown is guaranteed in sync with the file on
3356 disk (also changed in psource). Similar fix to the one for
3360 disk (also changed in psource). Similar fix to the one for
3357 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3361 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3358 <yann.ledu-AT-noos.fr>.
3362 <yann.ledu-AT-noos.fr>.
3359
3363
3360 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3364 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3361 with a single option would not be correctly parsed. Closes
3365 with a single option would not be correctly parsed. Closes
3362 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3366 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3363 introduced in 0.6.0 (on 2004-05-06).
3367 introduced in 0.6.0 (on 2004-05-06).
3364
3368
3365 2004-05-13 *** Released version 0.6.0
3369 2004-05-13 *** Released version 0.6.0
3366
3370
3367 2004-05-13 Fernando Perez <fperez@colorado.edu>
3371 2004-05-13 Fernando Perez <fperez@colorado.edu>
3368
3372
3369 * debian/: Added debian/ directory to CVS, so that debian support
3373 * debian/: Added debian/ directory to CVS, so that debian support
3370 is publicly accessible. The debian package is maintained by Jack
3374 is publicly accessible. The debian package is maintained by Jack
3371 Moffit <jack-AT-xiph.org>.
3375 Moffit <jack-AT-xiph.org>.
3372
3376
3373 * Documentation: included the notes about an ipython-based system
3377 * Documentation: included the notes about an ipython-based system
3374 shell (the hypothetical 'pysh') into the new_design.pdf document,
3378 shell (the hypothetical 'pysh') into the new_design.pdf document,
3375 so that these ideas get distributed to users along with the
3379 so that these ideas get distributed to users along with the
3376 official documentation.
3380 official documentation.
3377
3381
3378 2004-05-10 Fernando Perez <fperez@colorado.edu>
3382 2004-05-10 Fernando Perez <fperez@colorado.edu>
3379
3383
3380 * IPython/Logger.py (Logger.create_log): fix recently introduced
3384 * IPython/Logger.py (Logger.create_log): fix recently introduced
3381 bug (misindented line) where logstart would fail when not given an
3385 bug (misindented line) where logstart would fail when not given an
3382 explicit filename.
3386 explicit filename.
3383
3387
3384 2004-05-09 Fernando Perez <fperez@colorado.edu>
3388 2004-05-09 Fernando Perez <fperez@colorado.edu>
3385
3389
3386 * IPython/Magic.py (Magic.parse_options): skip system call when
3390 * IPython/Magic.py (Magic.parse_options): skip system call when
3387 there are no options to look for. Faster, cleaner for the common
3391 there are no options to look for. Faster, cleaner for the common
3388 case.
3392 case.
3389
3393
3390 * Documentation: many updates to the manual: describing Windows
3394 * Documentation: many updates to the manual: describing Windows
3391 support better, Gnuplot updates, credits, misc small stuff. Also
3395 support better, Gnuplot updates, credits, misc small stuff. Also
3392 updated the new_design doc a bit.
3396 updated the new_design doc a bit.
3393
3397
3394 2004-05-06 *** Released version 0.6.0.rc1
3398 2004-05-06 *** Released version 0.6.0.rc1
3395
3399
3396 2004-05-06 Fernando Perez <fperez@colorado.edu>
3400 2004-05-06 Fernando Perez <fperez@colorado.edu>
3397
3401
3398 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3402 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3399 operations to use the vastly more efficient list/''.join() method.
3403 operations to use the vastly more efficient list/''.join() method.
3400 (FormattedTB.text): Fix
3404 (FormattedTB.text): Fix
3401 http://www.scipy.net/roundup/ipython/issue12 - exception source
3405 http://www.scipy.net/roundup/ipython/issue12 - exception source
3402 extract not updated after reload. Thanks to Mike Salib
3406 extract not updated after reload. Thanks to Mike Salib
3403 <msalib-AT-mit.edu> for pinning the source of the problem.
3407 <msalib-AT-mit.edu> for pinning the source of the problem.
3404 Fortunately, the solution works inside ipython and doesn't require
3408 Fortunately, the solution works inside ipython and doesn't require
3405 any changes to python proper.
3409 any changes to python proper.
3406
3410
3407 * IPython/Magic.py (Magic.parse_options): Improved to process the
3411 * IPython/Magic.py (Magic.parse_options): Improved to process the
3408 argument list as a true shell would (by actually using the
3412 argument list as a true shell would (by actually using the
3409 underlying system shell). This way, all @magics automatically get
3413 underlying system shell). This way, all @magics automatically get
3410 shell expansion for variables. Thanks to a comment by Alex
3414 shell expansion for variables. Thanks to a comment by Alex
3411 Schmolck.
3415 Schmolck.
3412
3416
3413 2004-04-04 Fernando Perez <fperez@colorado.edu>
3417 2004-04-04 Fernando Perez <fperez@colorado.edu>
3414
3418
3415 * IPython/iplib.py (InteractiveShell.interact): Added a special
3419 * IPython/iplib.py (InteractiveShell.interact): Added a special
3416 trap for a debugger quit exception, which is basically impossible
3420 trap for a debugger quit exception, which is basically impossible
3417 to handle by normal mechanisms, given what pdb does to the stack.
3421 to handle by normal mechanisms, given what pdb does to the stack.
3418 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3422 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3419
3423
3420 2004-04-03 Fernando Perez <fperez@colorado.edu>
3424 2004-04-03 Fernando Perez <fperez@colorado.edu>
3421
3425
3422 * IPython/genutils.py (Term): Standardized the names of the Term
3426 * IPython/genutils.py (Term): Standardized the names of the Term
3423 class streams to cin/cout/cerr, following C++ naming conventions
3427 class streams to cin/cout/cerr, following C++ naming conventions
3424 (I can't use in/out/err because 'in' is not a valid attribute
3428 (I can't use in/out/err because 'in' is not a valid attribute
3425 name).
3429 name).
3426
3430
3427 * IPython/iplib.py (InteractiveShell.interact): don't increment
3431 * IPython/iplib.py (InteractiveShell.interact): don't increment
3428 the prompt if there's no user input. By Daniel 'Dang' Griffith
3432 the prompt if there's no user input. By Daniel 'Dang' Griffith
3429 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3433 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3430 Francois Pinard.
3434 Francois Pinard.
3431
3435
3432 2004-04-02 Fernando Perez <fperez@colorado.edu>
3436 2004-04-02 Fernando Perez <fperez@colorado.edu>
3433
3437
3434 * IPython/genutils.py (Stream.__init__): Modified to survive at
3438 * IPython/genutils.py (Stream.__init__): Modified to survive at
3435 least importing in contexts where stdin/out/err aren't true file
3439 least importing in contexts where stdin/out/err aren't true file
3436 objects, such as PyCrust (they lack fileno() and mode). However,
3440 objects, such as PyCrust (they lack fileno() and mode). However,
3437 the recovery facilities which rely on these things existing will
3441 the recovery facilities which rely on these things existing will
3438 not work.
3442 not work.
3439
3443
3440 2004-04-01 Fernando Perez <fperez@colorado.edu>
3444 2004-04-01 Fernando Perez <fperez@colorado.edu>
3441
3445
3442 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3446 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3443 use the new getoutputerror() function, so it properly
3447 use the new getoutputerror() function, so it properly
3444 distinguishes stdout/err.
3448 distinguishes stdout/err.
3445
3449
3446 * IPython/genutils.py (getoutputerror): added a function to
3450 * IPython/genutils.py (getoutputerror): added a function to
3447 capture separately the standard output and error of a command.
3451 capture separately the standard output and error of a command.
3448 After a comment from dang on the mailing lists. This code is
3452 After a comment from dang on the mailing lists. This code is
3449 basically a modified version of commands.getstatusoutput(), from
3453 basically a modified version of commands.getstatusoutput(), from
3450 the standard library.
3454 the standard library.
3451
3455
3452 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3456 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3453 '!!' as a special syntax (shorthand) to access @sx.
3457 '!!' as a special syntax (shorthand) to access @sx.
3454
3458
3455 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3459 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3456 command and return its output as a list split on '\n'.
3460 command and return its output as a list split on '\n'.
3457
3461
3458 2004-03-31 Fernando Perez <fperez@colorado.edu>
3462 2004-03-31 Fernando Perez <fperez@colorado.edu>
3459
3463
3460 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3464 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3461 method to dictionaries used as FakeModule instances if they lack
3465 method to dictionaries used as FakeModule instances if they lack
3462 it. At least pydoc in python2.3 breaks for runtime-defined
3466 it. At least pydoc in python2.3 breaks for runtime-defined
3463 functions without this hack. At some point I need to _really_
3467 functions without this hack. At some point I need to _really_
3464 understand what FakeModule is doing, because it's a gross hack.
3468 understand what FakeModule is doing, because it's a gross hack.
3465 But it solves Arnd's problem for now...
3469 But it solves Arnd's problem for now...
3466
3470
3467 2004-02-27 Fernando Perez <fperez@colorado.edu>
3471 2004-02-27 Fernando Perez <fperez@colorado.edu>
3468
3472
3469 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3473 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3470 mode would behave erratically. Also increased the number of
3474 mode would behave erratically. Also increased the number of
3471 possible logs in rotate mod to 999. Thanks to Rod Holland
3475 possible logs in rotate mod to 999. Thanks to Rod Holland
3472 <rhh@StructureLABS.com> for the report and fixes.
3476 <rhh@StructureLABS.com> for the report and fixes.
3473
3477
3474 2004-02-26 Fernando Perez <fperez@colorado.edu>
3478 2004-02-26 Fernando Perez <fperez@colorado.edu>
3475
3479
3476 * IPython/genutils.py (page): Check that the curses module really
3480 * IPython/genutils.py (page): Check that the curses module really
3477 has the initscr attribute before trying to use it. For some
3481 has the initscr attribute before trying to use it. For some
3478 reason, the Solaris curses module is missing this. I think this
3482 reason, the Solaris curses module is missing this. I think this
3479 should be considered a Solaris python bug, but I'm not sure.
3483 should be considered a Solaris python bug, but I'm not sure.
3480
3484
3481 2004-01-17 Fernando Perez <fperez@colorado.edu>
3485 2004-01-17 Fernando Perez <fperez@colorado.edu>
3482
3486
3483 * IPython/genutils.py (Stream.__init__): Changes to try to make
3487 * IPython/genutils.py (Stream.__init__): Changes to try to make
3484 ipython robust against stdin/out/err being closed by the user.
3488 ipython robust against stdin/out/err being closed by the user.
3485 This is 'user error' (and blocks a normal python session, at least
3489 This is 'user error' (and blocks a normal python session, at least
3486 the stdout case). However, Ipython should be able to survive such
3490 the stdout case). However, Ipython should be able to survive such
3487 instances of abuse as gracefully as possible. To simplify the
3491 instances of abuse as gracefully as possible. To simplify the
3488 coding and maintain compatibility with Gary Bishop's Term
3492 coding and maintain compatibility with Gary Bishop's Term
3489 contributions, I've made use of classmethods for this. I think
3493 contributions, I've made use of classmethods for this. I think
3490 this introduces a dependency on python 2.2.
3494 this introduces a dependency on python 2.2.
3491
3495
3492 2004-01-13 Fernando Perez <fperez@colorado.edu>
3496 2004-01-13 Fernando Perez <fperez@colorado.edu>
3493
3497
3494 * IPython/numutils.py (exp_safe): simplified the code a bit and
3498 * IPython/numutils.py (exp_safe): simplified the code a bit and
3495 removed the need for importing the kinds module altogether.
3499 removed the need for importing the kinds module altogether.
3496
3500
3497 2004-01-06 Fernando Perez <fperez@colorado.edu>
3501 2004-01-06 Fernando Perez <fperez@colorado.edu>
3498
3502
3499 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3503 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3500 a magic function instead, after some community feedback. No
3504 a magic function instead, after some community feedback. No
3501 special syntax will exist for it, but its name is deliberately
3505 special syntax will exist for it, but its name is deliberately
3502 very short.
3506 very short.
3503
3507
3504 2003-12-20 Fernando Perez <fperez@colorado.edu>
3508 2003-12-20 Fernando Perez <fperez@colorado.edu>
3505
3509
3506 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3510 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3507 new functionality, to automagically assign the result of a shell
3511 new functionality, to automagically assign the result of a shell
3508 command to a variable. I'll solicit some community feedback on
3512 command to a variable. I'll solicit some community feedback on
3509 this before making it permanent.
3513 this before making it permanent.
3510
3514
3511 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3515 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3512 requested about callables for which inspect couldn't obtain a
3516 requested about callables for which inspect couldn't obtain a
3513 proper argspec. Thanks to a crash report sent by Etienne
3517 proper argspec. Thanks to a crash report sent by Etienne
3514 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3518 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3515
3519
3516 2003-12-09 Fernando Perez <fperez@colorado.edu>
3520 2003-12-09 Fernando Perez <fperez@colorado.edu>
3517
3521
3518 * IPython/genutils.py (page): patch for the pager to work across
3522 * IPython/genutils.py (page): patch for the pager to work across
3519 various versions of Windows. By Gary Bishop.
3523 various versions of Windows. By Gary Bishop.
3520
3524
3521 2003-12-04 Fernando Perez <fperez@colorado.edu>
3525 2003-12-04 Fernando Perez <fperez@colorado.edu>
3522
3526
3523 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3527 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3524 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3528 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3525 While I tested this and it looks ok, there may still be corner
3529 While I tested this and it looks ok, there may still be corner
3526 cases I've missed.
3530 cases I've missed.
3527
3531
3528 2003-12-01 Fernando Perez <fperez@colorado.edu>
3532 2003-12-01 Fernando Perez <fperez@colorado.edu>
3529
3533
3530 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3534 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3531 where a line like 'p,q=1,2' would fail because the automagic
3535 where a line like 'p,q=1,2' would fail because the automagic
3532 system would be triggered for @p.
3536 system would be triggered for @p.
3533
3537
3534 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3538 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3535 cleanups, code unmodified.
3539 cleanups, code unmodified.
3536
3540
3537 * IPython/genutils.py (Term): added a class for IPython to handle
3541 * IPython/genutils.py (Term): added a class for IPython to handle
3538 output. In most cases it will just be a proxy for stdout/err, but
3542 output. In most cases it will just be a proxy for stdout/err, but
3539 having this allows modifications to be made for some platforms,
3543 having this allows modifications to be made for some platforms,
3540 such as handling color escapes under Windows. All of this code
3544 such as handling color escapes under Windows. All of this code
3541 was contributed by Gary Bishop, with minor modifications by me.
3545 was contributed by Gary Bishop, with minor modifications by me.
3542 The actual changes affect many files.
3546 The actual changes affect many files.
3543
3547
3544 2003-11-30 Fernando Perez <fperez@colorado.edu>
3548 2003-11-30 Fernando Perez <fperez@colorado.edu>
3545
3549
3546 * IPython/iplib.py (file_matches): new completion code, courtesy
3550 * IPython/iplib.py (file_matches): new completion code, courtesy
3547 of Jeff Collins. This enables filename completion again under
3551 of Jeff Collins. This enables filename completion again under
3548 python 2.3, which disabled it at the C level.
3552 python 2.3, which disabled it at the C level.
3549
3553
3550 2003-11-11 Fernando Perez <fperez@colorado.edu>
3554 2003-11-11 Fernando Perez <fperez@colorado.edu>
3551
3555
3552 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3556 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3553 for Numeric.array(map(...)), but often convenient.
3557 for Numeric.array(map(...)), but often convenient.
3554
3558
3555 2003-11-05 Fernando Perez <fperez@colorado.edu>
3559 2003-11-05 Fernando Perez <fperez@colorado.edu>
3556
3560
3557 * IPython/numutils.py (frange): Changed a call from int() to
3561 * IPython/numutils.py (frange): Changed a call from int() to
3558 int(round()) to prevent a problem reported with arange() in the
3562 int(round()) to prevent a problem reported with arange() in the
3559 numpy list.
3563 numpy list.
3560
3564
3561 2003-10-06 Fernando Perez <fperez@colorado.edu>
3565 2003-10-06 Fernando Perez <fperez@colorado.edu>
3562
3566
3563 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3567 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3564 prevent crashes if sys lacks an argv attribute (it happens with
3568 prevent crashes if sys lacks an argv attribute (it happens with
3565 embedded interpreters which build a bare-bones sys module).
3569 embedded interpreters which build a bare-bones sys module).
3566 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3570 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3567
3571
3568 2003-09-24 Fernando Perez <fperez@colorado.edu>
3572 2003-09-24 Fernando Perez <fperez@colorado.edu>
3569
3573
3570 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3574 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3571 to protect against poorly written user objects where __getattr__
3575 to protect against poorly written user objects where __getattr__
3572 raises exceptions other than AttributeError. Thanks to a bug
3576 raises exceptions other than AttributeError. Thanks to a bug
3573 report by Oliver Sander <osander-AT-gmx.de>.
3577 report by Oliver Sander <osander-AT-gmx.de>.
3574
3578
3575 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3579 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3576 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3580 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3577
3581
3578 2003-09-09 Fernando Perez <fperez@colorado.edu>
3582 2003-09-09 Fernando Perez <fperez@colorado.edu>
3579
3583
3580 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3584 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3581 unpacking a list whith a callable as first element would
3585 unpacking a list whith a callable as first element would
3582 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3586 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3583 Collins.
3587 Collins.
3584
3588
3585 2003-08-25 *** Released version 0.5.0
3589 2003-08-25 *** Released version 0.5.0
3586
3590
3587 2003-08-22 Fernando Perez <fperez@colorado.edu>
3591 2003-08-22 Fernando Perez <fperez@colorado.edu>
3588
3592
3589 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3593 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3590 improperly defined user exceptions. Thanks to feedback from Mark
3594 improperly defined user exceptions. Thanks to feedback from Mark
3591 Russell <mrussell-AT-verio.net>.
3595 Russell <mrussell-AT-verio.net>.
3592
3596
3593 2003-08-20 Fernando Perez <fperez@colorado.edu>
3597 2003-08-20 Fernando Perez <fperez@colorado.edu>
3594
3598
3595 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3599 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3596 printing so that it would print multi-line string forms starting
3600 printing so that it would print multi-line string forms starting
3597 with a new line. This way the formatting is better respected for
3601 with a new line. This way the formatting is better respected for
3598 objects which work hard to make nice string forms.
3602 objects which work hard to make nice string forms.
3599
3603
3600 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3604 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3601 autocall would overtake data access for objects with both
3605 autocall would overtake data access for objects with both
3602 __getitem__ and __call__.
3606 __getitem__ and __call__.
3603
3607
3604 2003-08-19 *** Released version 0.5.0-rc1
3608 2003-08-19 *** Released version 0.5.0-rc1
3605
3609
3606 2003-08-19 Fernando Perez <fperez@colorado.edu>
3610 2003-08-19 Fernando Perez <fperez@colorado.edu>
3607
3611
3608 * IPython/deep_reload.py (load_tail): single tiny change here
3612 * IPython/deep_reload.py (load_tail): single tiny change here
3609 seems to fix the long-standing bug of dreload() failing to work
3613 seems to fix the long-standing bug of dreload() failing to work
3610 for dotted names. But this module is pretty tricky, so I may have
3614 for dotted names. But this module is pretty tricky, so I may have
3611 missed some subtlety. Needs more testing!.
3615 missed some subtlety. Needs more testing!.
3612
3616
3613 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3617 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3614 exceptions which have badly implemented __str__ methods.
3618 exceptions which have badly implemented __str__ methods.
3615 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3619 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3616 which I've been getting reports about from Python 2.3 users. I
3620 which I've been getting reports about from Python 2.3 users. I
3617 wish I had a simple test case to reproduce the problem, so I could
3621 wish I had a simple test case to reproduce the problem, so I could
3618 either write a cleaner workaround or file a bug report if
3622 either write a cleaner workaround or file a bug report if
3619 necessary.
3623 necessary.
3620
3624
3621 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3625 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3622 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3626 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3623 a bug report by Tjabo Kloppenburg.
3627 a bug report by Tjabo Kloppenburg.
3624
3628
3625 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3629 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3626 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3630 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3627 seems rather unstable. Thanks to a bug report by Tjabo
3631 seems rather unstable. Thanks to a bug report by Tjabo
3628 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3632 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3629
3633
3630 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3634 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3631 this out soon because of the critical fixes in the inner loop for
3635 this out soon because of the critical fixes in the inner loop for
3632 generators.
3636 generators.
3633
3637
3634 * IPython/Magic.py (Magic.getargspec): removed. This (and
3638 * IPython/Magic.py (Magic.getargspec): removed. This (and
3635 _get_def) have been obsoleted by OInspect for a long time, I
3639 _get_def) have been obsoleted by OInspect for a long time, I
3636 hadn't noticed that they were dead code.
3640 hadn't noticed that they were dead code.
3637 (Magic._ofind): restored _ofind functionality for a few literals
3641 (Magic._ofind): restored _ofind functionality for a few literals
3638 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3642 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3639 for things like "hello".capitalize?, since that would require a
3643 for things like "hello".capitalize?, since that would require a
3640 potentially dangerous eval() again.
3644 potentially dangerous eval() again.
3641
3645
3642 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3646 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3643 logic a bit more to clean up the escapes handling and minimize the
3647 logic a bit more to clean up the escapes handling and minimize the
3644 use of _ofind to only necessary cases. The interactive 'feel' of
3648 use of _ofind to only necessary cases. The interactive 'feel' of
3645 IPython should have improved quite a bit with the changes in
3649 IPython should have improved quite a bit with the changes in
3646 _prefilter and _ofind (besides being far safer than before).
3650 _prefilter and _ofind (besides being far safer than before).
3647
3651
3648 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3652 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3649 obscure, never reported). Edit would fail to find the object to
3653 obscure, never reported). Edit would fail to find the object to
3650 edit under some circumstances.
3654 edit under some circumstances.
3651 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3655 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3652 which were causing double-calling of generators. Those eval calls
3656 which were causing double-calling of generators. Those eval calls
3653 were _very_ dangerous, since code with side effects could be
3657 were _very_ dangerous, since code with side effects could be
3654 triggered. As they say, 'eval is evil'... These were the
3658 triggered. As they say, 'eval is evil'... These were the
3655 nastiest evals in IPython. Besides, _ofind is now far simpler,
3659 nastiest evals in IPython. Besides, _ofind is now far simpler,
3656 and it should also be quite a bit faster. Its use of inspect is
3660 and it should also be quite a bit faster. Its use of inspect is
3657 also safer, so perhaps some of the inspect-related crashes I've
3661 also safer, so perhaps some of the inspect-related crashes I've
3658 seen lately with Python 2.3 might be taken care of. That will
3662 seen lately with Python 2.3 might be taken care of. That will
3659 need more testing.
3663 need more testing.
3660
3664
3661 2003-08-17 Fernando Perez <fperez@colorado.edu>
3665 2003-08-17 Fernando Perez <fperez@colorado.edu>
3662
3666
3663 * IPython/iplib.py (InteractiveShell._prefilter): significant
3667 * IPython/iplib.py (InteractiveShell._prefilter): significant
3664 simplifications to the logic for handling user escapes. Faster
3668 simplifications to the logic for handling user escapes. Faster
3665 and simpler code.
3669 and simpler code.
3666
3670
3667 2003-08-14 Fernando Perez <fperez@colorado.edu>
3671 2003-08-14 Fernando Perez <fperez@colorado.edu>
3668
3672
3669 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3673 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3670 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3674 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3671 but it should be quite a bit faster. And the recursive version
3675 but it should be quite a bit faster. And the recursive version
3672 generated O(log N) intermediate storage for all rank>1 arrays,
3676 generated O(log N) intermediate storage for all rank>1 arrays,
3673 even if they were contiguous.
3677 even if they were contiguous.
3674 (l1norm): Added this function.
3678 (l1norm): Added this function.
3675 (norm): Added this function for arbitrary norms (including
3679 (norm): Added this function for arbitrary norms (including
3676 l-infinity). l1 and l2 are still special cases for convenience
3680 l-infinity). l1 and l2 are still special cases for convenience
3677 and speed.
3681 and speed.
3678
3682
3679 2003-08-03 Fernando Perez <fperez@colorado.edu>
3683 2003-08-03 Fernando Perez <fperez@colorado.edu>
3680
3684
3681 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3685 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3682 exceptions, which now raise PendingDeprecationWarnings in Python
3686 exceptions, which now raise PendingDeprecationWarnings in Python
3683 2.3. There were some in Magic and some in Gnuplot2.
3687 2.3. There were some in Magic and some in Gnuplot2.
3684
3688
3685 2003-06-30 Fernando Perez <fperez@colorado.edu>
3689 2003-06-30 Fernando Perez <fperez@colorado.edu>
3686
3690
3687 * IPython/genutils.py (page): modified to call curses only for
3691 * IPython/genutils.py (page): modified to call curses only for
3688 terminals where TERM=='xterm'. After problems under many other
3692 terminals where TERM=='xterm'. After problems under many other
3689 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3693 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3690
3694
3691 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3695 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3692 would be triggered when readline was absent. This was just an old
3696 would be triggered when readline was absent. This was just an old
3693 debugging statement I'd forgotten to take out.
3697 debugging statement I'd forgotten to take out.
3694
3698
3695 2003-06-20 Fernando Perez <fperez@colorado.edu>
3699 2003-06-20 Fernando Perez <fperez@colorado.edu>
3696
3700
3697 * IPython/genutils.py (clock): modified to return only user time
3701 * IPython/genutils.py (clock): modified to return only user time
3698 (not counting system time), after a discussion on scipy. While
3702 (not counting system time), after a discussion on scipy. While
3699 system time may be a useful quantity occasionally, it may much
3703 system time may be a useful quantity occasionally, it may much
3700 more easily be skewed by occasional swapping or other similar
3704 more easily be skewed by occasional swapping or other similar
3701 activity.
3705 activity.
3702
3706
3703 2003-06-05 Fernando Perez <fperez@colorado.edu>
3707 2003-06-05 Fernando Perez <fperez@colorado.edu>
3704
3708
3705 * IPython/numutils.py (identity): new function, for building
3709 * IPython/numutils.py (identity): new function, for building
3706 arbitrary rank Kronecker deltas (mostly backwards compatible with
3710 arbitrary rank Kronecker deltas (mostly backwards compatible with
3707 Numeric.identity)
3711 Numeric.identity)
3708
3712
3709 2003-06-03 Fernando Perez <fperez@colorado.edu>
3713 2003-06-03 Fernando Perez <fperez@colorado.edu>
3710
3714
3711 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3715 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3712 arguments passed to magics with spaces, to allow trailing '\' to
3716 arguments passed to magics with spaces, to allow trailing '\' to
3713 work normally (mainly for Windows users).
3717 work normally (mainly for Windows users).
3714
3718
3715 2003-05-29 Fernando Perez <fperez@colorado.edu>
3719 2003-05-29 Fernando Perez <fperez@colorado.edu>
3716
3720
3717 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3721 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3718 instead of pydoc.help. This fixes a bizarre behavior where
3722 instead of pydoc.help. This fixes a bizarre behavior where
3719 printing '%s' % locals() would trigger the help system. Now
3723 printing '%s' % locals() would trigger the help system. Now
3720 ipython behaves like normal python does.
3724 ipython behaves like normal python does.
3721
3725
3722 Note that if one does 'from pydoc import help', the bizarre
3726 Note that if one does 'from pydoc import help', the bizarre
3723 behavior returns, but this will also happen in normal python, so
3727 behavior returns, but this will also happen in normal python, so
3724 it's not an ipython bug anymore (it has to do with how pydoc.help
3728 it's not an ipython bug anymore (it has to do with how pydoc.help
3725 is implemented).
3729 is implemented).
3726
3730
3727 2003-05-22 Fernando Perez <fperez@colorado.edu>
3731 2003-05-22 Fernando Perez <fperez@colorado.edu>
3728
3732
3729 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3733 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3730 return [] instead of None when nothing matches, also match to end
3734 return [] instead of None when nothing matches, also match to end
3731 of line. Patch by Gary Bishop.
3735 of line. Patch by Gary Bishop.
3732
3736
3733 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3737 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3734 protection as before, for files passed on the command line. This
3738 protection as before, for files passed on the command line. This
3735 prevents the CrashHandler from kicking in if user files call into
3739 prevents the CrashHandler from kicking in if user files call into
3736 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3740 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3737 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3741 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3738
3742
3739 2003-05-20 *** Released version 0.4.0
3743 2003-05-20 *** Released version 0.4.0
3740
3744
3741 2003-05-20 Fernando Perez <fperez@colorado.edu>
3745 2003-05-20 Fernando Perez <fperez@colorado.edu>
3742
3746
3743 * setup.py: added support for manpages. It's a bit hackish b/c of
3747 * setup.py: added support for manpages. It's a bit hackish b/c of
3744 a bug in the way the bdist_rpm distutils target handles gzipped
3748 a bug in the way the bdist_rpm distutils target handles gzipped
3745 manpages, but it works. After a patch by Jack.
3749 manpages, but it works. After a patch by Jack.
3746
3750
3747 2003-05-19 Fernando Perez <fperez@colorado.edu>
3751 2003-05-19 Fernando Perez <fperez@colorado.edu>
3748
3752
3749 * IPython/numutils.py: added a mockup of the kinds module, since
3753 * IPython/numutils.py: added a mockup of the kinds module, since
3750 it was recently removed from Numeric. This way, numutils will
3754 it was recently removed from Numeric. This way, numutils will
3751 work for all users even if they are missing kinds.
3755 work for all users even if they are missing kinds.
3752
3756
3753 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3757 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3754 failure, which can occur with SWIG-wrapped extensions. After a
3758 failure, which can occur with SWIG-wrapped extensions. After a
3755 crash report from Prabhu.
3759 crash report from Prabhu.
3756
3760
3757 2003-05-16 Fernando Perez <fperez@colorado.edu>
3761 2003-05-16 Fernando Perez <fperez@colorado.edu>
3758
3762
3759 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3763 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3760 protect ipython from user code which may call directly
3764 protect ipython from user code which may call directly
3761 sys.excepthook (this looks like an ipython crash to the user, even
3765 sys.excepthook (this looks like an ipython crash to the user, even
3762 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3766 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3763 This is especially important to help users of WxWindows, but may
3767 This is especially important to help users of WxWindows, but may
3764 also be useful in other cases.
3768 also be useful in other cases.
3765
3769
3766 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3770 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3767 an optional tb_offset to be specified, and to preserve exception
3771 an optional tb_offset to be specified, and to preserve exception
3768 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3772 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3769
3773
3770 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3774 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3771
3775
3772 2003-05-15 Fernando Perez <fperez@colorado.edu>
3776 2003-05-15 Fernando Perez <fperez@colorado.edu>
3773
3777
3774 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3778 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3775 installing for a new user under Windows.
3779 installing for a new user under Windows.
3776
3780
3777 2003-05-12 Fernando Perez <fperez@colorado.edu>
3781 2003-05-12 Fernando Perez <fperez@colorado.edu>
3778
3782
3779 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3783 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3780 handler for Emacs comint-based lines. Currently it doesn't do
3784 handler for Emacs comint-based lines. Currently it doesn't do
3781 much (but importantly, it doesn't update the history cache). In
3785 much (but importantly, it doesn't update the history cache). In
3782 the future it may be expanded if Alex needs more functionality
3786 the future it may be expanded if Alex needs more functionality
3783 there.
3787 there.
3784
3788
3785 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3789 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3786 info to crash reports.
3790 info to crash reports.
3787
3791
3788 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3792 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3789 just like Python's -c. Also fixed crash with invalid -color
3793 just like Python's -c. Also fixed crash with invalid -color
3790 option value at startup. Thanks to Will French
3794 option value at startup. Thanks to Will French
3791 <wfrench-AT-bestweb.net> for the bug report.
3795 <wfrench-AT-bestweb.net> for the bug report.
3792
3796
3793 2003-05-09 Fernando Perez <fperez@colorado.edu>
3797 2003-05-09 Fernando Perez <fperez@colorado.edu>
3794
3798
3795 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3799 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3796 to EvalDict (it's a mapping, after all) and simplified its code
3800 to EvalDict (it's a mapping, after all) and simplified its code
3797 quite a bit, after a nice discussion on c.l.py where Gustavo
3801 quite a bit, after a nice discussion on c.l.py where Gustavo
3798 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3802 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3799
3803
3800 2003-04-30 Fernando Perez <fperez@colorado.edu>
3804 2003-04-30 Fernando Perez <fperez@colorado.edu>
3801
3805
3802 * IPython/genutils.py (timings_out): modified it to reduce its
3806 * IPython/genutils.py (timings_out): modified it to reduce its
3803 overhead in the common reps==1 case.
3807 overhead in the common reps==1 case.
3804
3808
3805 2003-04-29 Fernando Perez <fperez@colorado.edu>
3809 2003-04-29 Fernando Perez <fperez@colorado.edu>
3806
3810
3807 * IPython/genutils.py (timings_out): Modified to use the resource
3811 * IPython/genutils.py (timings_out): Modified to use the resource
3808 module, which avoids the wraparound problems of time.clock().
3812 module, which avoids the wraparound problems of time.clock().
3809
3813
3810 2003-04-17 *** Released version 0.2.15pre4
3814 2003-04-17 *** Released version 0.2.15pre4
3811
3815
3812 2003-04-17 Fernando Perez <fperez@colorado.edu>
3816 2003-04-17 Fernando Perez <fperez@colorado.edu>
3813
3817
3814 * setup.py (scriptfiles): Split windows-specific stuff over to a
3818 * setup.py (scriptfiles): Split windows-specific stuff over to a
3815 separate file, in an attempt to have a Windows GUI installer.
3819 separate file, in an attempt to have a Windows GUI installer.
3816 That didn't work, but part of the groundwork is done.
3820 That didn't work, but part of the groundwork is done.
3817
3821
3818 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3822 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3819 indent/unindent with 4 spaces. Particularly useful in combination
3823 indent/unindent with 4 spaces. Particularly useful in combination
3820 with the new auto-indent option.
3824 with the new auto-indent option.
3821
3825
3822 2003-04-16 Fernando Perez <fperez@colorado.edu>
3826 2003-04-16 Fernando Perez <fperez@colorado.edu>
3823
3827
3824 * IPython/Magic.py: various replacements of self.rc for
3828 * IPython/Magic.py: various replacements of self.rc for
3825 self.shell.rc. A lot more remains to be done to fully disentangle
3829 self.shell.rc. A lot more remains to be done to fully disentangle
3826 this class from the main Shell class.
3830 this class from the main Shell class.
3827
3831
3828 * IPython/GnuplotRuntime.py: added checks for mouse support so
3832 * IPython/GnuplotRuntime.py: added checks for mouse support so
3829 that we don't try to enable it if the current gnuplot doesn't
3833 that we don't try to enable it if the current gnuplot doesn't
3830 really support it. Also added checks so that we don't try to
3834 really support it. Also added checks so that we don't try to
3831 enable persist under Windows (where Gnuplot doesn't recognize the
3835 enable persist under Windows (where Gnuplot doesn't recognize the
3832 option).
3836 option).
3833
3837
3834 * IPython/iplib.py (InteractiveShell.interact): Added optional
3838 * IPython/iplib.py (InteractiveShell.interact): Added optional
3835 auto-indenting code, after a patch by King C. Shu
3839 auto-indenting code, after a patch by King C. Shu
3836 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3840 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3837 get along well with pasting indented code. If I ever figure out
3841 get along well with pasting indented code. If I ever figure out
3838 how to make that part go well, it will become on by default.
3842 how to make that part go well, it will become on by default.
3839
3843
3840 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3844 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3841 crash ipython if there was an unmatched '%' in the user's prompt
3845 crash ipython if there was an unmatched '%' in the user's prompt
3842 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3846 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3843
3847
3844 * IPython/iplib.py (InteractiveShell.interact): removed the
3848 * IPython/iplib.py (InteractiveShell.interact): removed the
3845 ability to ask the user whether he wants to crash or not at the
3849 ability to ask the user whether he wants to crash or not at the
3846 'last line' exception handler. Calling functions at that point
3850 'last line' exception handler. Calling functions at that point
3847 changes the stack, and the error reports would have incorrect
3851 changes the stack, and the error reports would have incorrect
3848 tracebacks.
3852 tracebacks.
3849
3853
3850 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3854 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3851 pass through a peger a pretty-printed form of any object. After a
3855 pass through a peger a pretty-printed form of any object. After a
3852 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3856 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3853
3857
3854 2003-04-14 Fernando Perez <fperez@colorado.edu>
3858 2003-04-14 Fernando Perez <fperez@colorado.edu>
3855
3859
3856 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3860 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3857 all files in ~ would be modified at first install (instead of
3861 all files in ~ would be modified at first install (instead of
3858 ~/.ipython). This could be potentially disastrous, as the
3862 ~/.ipython). This could be potentially disastrous, as the
3859 modification (make line-endings native) could damage binary files.
3863 modification (make line-endings native) could damage binary files.
3860
3864
3861 2003-04-10 Fernando Perez <fperez@colorado.edu>
3865 2003-04-10 Fernando Perez <fperez@colorado.edu>
3862
3866
3863 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3867 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3864 handle only lines which are invalid python. This now means that
3868 handle only lines which are invalid python. This now means that
3865 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3869 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3866 for the bug report.
3870 for the bug report.
3867
3871
3868 2003-04-01 Fernando Perez <fperez@colorado.edu>
3872 2003-04-01 Fernando Perez <fperez@colorado.edu>
3869
3873
3870 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3874 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3871 where failing to set sys.last_traceback would crash pdb.pm().
3875 where failing to set sys.last_traceback would crash pdb.pm().
3872 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3876 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3873 report.
3877 report.
3874
3878
3875 2003-03-25 Fernando Perez <fperez@colorado.edu>
3879 2003-03-25 Fernando Perez <fperez@colorado.edu>
3876
3880
3877 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3881 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3878 before printing it (it had a lot of spurious blank lines at the
3882 before printing it (it had a lot of spurious blank lines at the
3879 end).
3883 end).
3880
3884
3881 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3885 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3882 output would be sent 21 times! Obviously people don't use this
3886 output would be sent 21 times! Obviously people don't use this
3883 too often, or I would have heard about it.
3887 too often, or I would have heard about it.
3884
3888
3885 2003-03-24 Fernando Perez <fperez@colorado.edu>
3889 2003-03-24 Fernando Perez <fperez@colorado.edu>
3886
3890
3887 * setup.py (scriptfiles): renamed the data_files parameter from
3891 * setup.py (scriptfiles): renamed the data_files parameter from
3888 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3892 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3889 for the patch.
3893 for the patch.
3890
3894
3891 2003-03-20 Fernando Perez <fperez@colorado.edu>
3895 2003-03-20 Fernando Perez <fperez@colorado.edu>
3892
3896
3893 * IPython/genutils.py (error): added error() and fatal()
3897 * IPython/genutils.py (error): added error() and fatal()
3894 functions.
3898 functions.
3895
3899
3896 2003-03-18 *** Released version 0.2.15pre3
3900 2003-03-18 *** Released version 0.2.15pre3
3897
3901
3898 2003-03-18 Fernando Perez <fperez@colorado.edu>
3902 2003-03-18 Fernando Perez <fperez@colorado.edu>
3899
3903
3900 * setupext/install_data_ext.py
3904 * setupext/install_data_ext.py
3901 (install_data_ext.initialize_options): Class contributed by Jack
3905 (install_data_ext.initialize_options): Class contributed by Jack
3902 Moffit for fixing the old distutils hack. He is sending this to
3906 Moffit for fixing the old distutils hack. He is sending this to
3903 the distutils folks so in the future we may not need it as a
3907 the distutils folks so in the future we may not need it as a
3904 private fix.
3908 private fix.
3905
3909
3906 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3910 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3907 changes for Debian packaging. See his patch for full details.
3911 changes for Debian packaging. See his patch for full details.
3908 The old distutils hack of making the ipythonrc* files carry a
3912 The old distutils hack of making the ipythonrc* files carry a
3909 bogus .py extension is gone, at last. Examples were moved to a
3913 bogus .py extension is gone, at last. Examples were moved to a
3910 separate subdir under doc/, and the separate executable scripts
3914 separate subdir under doc/, and the separate executable scripts
3911 now live in their own directory. Overall a great cleanup. The
3915 now live in their own directory. Overall a great cleanup. The
3912 manual was updated to use the new files, and setup.py has been
3916 manual was updated to use the new files, and setup.py has been
3913 fixed for this setup.
3917 fixed for this setup.
3914
3918
3915 * IPython/PyColorize.py (Parser.usage): made non-executable and
3919 * IPython/PyColorize.py (Parser.usage): made non-executable and
3916 created a pycolor wrapper around it to be included as a script.
3920 created a pycolor wrapper around it to be included as a script.
3917
3921
3918 2003-03-12 *** Released version 0.2.15pre2
3922 2003-03-12 *** Released version 0.2.15pre2
3919
3923
3920 2003-03-12 Fernando Perez <fperez@colorado.edu>
3924 2003-03-12 Fernando Perez <fperez@colorado.edu>
3921
3925
3922 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3926 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3923 long-standing problem with garbage characters in some terminals.
3927 long-standing problem with garbage characters in some terminals.
3924 The issue was really that the \001 and \002 escapes must _only_ be
3928 The issue was really that the \001 and \002 escapes must _only_ be
3925 passed to input prompts (which call readline), but _never_ to
3929 passed to input prompts (which call readline), but _never_ to
3926 normal text to be printed on screen. I changed ColorANSI to have
3930 normal text to be printed on screen. I changed ColorANSI to have
3927 two classes: TermColors and InputTermColors, each with the
3931 two classes: TermColors and InputTermColors, each with the
3928 appropriate escapes for input prompts or normal text. The code in
3932 appropriate escapes for input prompts or normal text. The code in
3929 Prompts.py got slightly more complicated, but this very old and
3933 Prompts.py got slightly more complicated, but this very old and
3930 annoying bug is finally fixed.
3934 annoying bug is finally fixed.
3931
3935
3932 All the credit for nailing down the real origin of this problem
3936 All the credit for nailing down the real origin of this problem
3933 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3937 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3934 *Many* thanks to him for spending quite a bit of effort on this.
3938 *Many* thanks to him for spending quite a bit of effort on this.
3935
3939
3936 2003-03-05 *** Released version 0.2.15pre1
3940 2003-03-05 *** Released version 0.2.15pre1
3937
3941
3938 2003-03-03 Fernando Perez <fperez@colorado.edu>
3942 2003-03-03 Fernando Perez <fperez@colorado.edu>
3939
3943
3940 * IPython/FakeModule.py: Moved the former _FakeModule to a
3944 * IPython/FakeModule.py: Moved the former _FakeModule to a
3941 separate file, because it's also needed by Magic (to fix a similar
3945 separate file, because it's also needed by Magic (to fix a similar
3942 pickle-related issue in @run).
3946 pickle-related issue in @run).
3943
3947
3944 2003-03-02 Fernando Perez <fperez@colorado.edu>
3948 2003-03-02 Fernando Perez <fperez@colorado.edu>
3945
3949
3946 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3950 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3947 the autocall option at runtime.
3951 the autocall option at runtime.
3948 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3952 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3949 across Magic.py to start separating Magic from InteractiveShell.
3953 across Magic.py to start separating Magic from InteractiveShell.
3950 (Magic._ofind): Fixed to return proper namespace for dotted
3954 (Magic._ofind): Fixed to return proper namespace for dotted
3951 names. Before, a dotted name would always return 'not currently
3955 names. Before, a dotted name would always return 'not currently
3952 defined', because it would find the 'parent'. s.x would be found,
3956 defined', because it would find the 'parent'. s.x would be found,
3953 but since 'x' isn't defined by itself, it would get confused.
3957 but since 'x' isn't defined by itself, it would get confused.
3954 (Magic.magic_run): Fixed pickling problems reported by Ralf
3958 (Magic.magic_run): Fixed pickling problems reported by Ralf
3955 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3959 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3956 that I'd used when Mike Heeter reported similar issues at the
3960 that I'd used when Mike Heeter reported similar issues at the
3957 top-level, but now for @run. It boils down to injecting the
3961 top-level, but now for @run. It boils down to injecting the
3958 namespace where code is being executed with something that looks
3962 namespace where code is being executed with something that looks
3959 enough like a module to fool pickle.dump(). Since a pickle stores
3963 enough like a module to fool pickle.dump(). Since a pickle stores
3960 a named reference to the importing module, we need this for
3964 a named reference to the importing module, we need this for
3961 pickles to save something sensible.
3965 pickles to save something sensible.
3962
3966
3963 * IPython/ipmaker.py (make_IPython): added an autocall option.
3967 * IPython/ipmaker.py (make_IPython): added an autocall option.
3964
3968
3965 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3969 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3966 the auto-eval code. Now autocalling is an option, and the code is
3970 the auto-eval code. Now autocalling is an option, and the code is
3967 also vastly safer. There is no more eval() involved at all.
3971 also vastly safer. There is no more eval() involved at all.
3968
3972
3969 2003-03-01 Fernando Perez <fperez@colorado.edu>
3973 2003-03-01 Fernando Perez <fperez@colorado.edu>
3970
3974
3971 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3975 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3972 dict with named keys instead of a tuple.
3976 dict with named keys instead of a tuple.
3973
3977
3974 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3978 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3975
3979
3976 * setup.py (make_shortcut): Fixed message about directories
3980 * setup.py (make_shortcut): Fixed message about directories
3977 created during Windows installation (the directories were ok, just
3981 created during Windows installation (the directories were ok, just
3978 the printed message was misleading). Thanks to Chris Liechti
3982 the printed message was misleading). Thanks to Chris Liechti
3979 <cliechti-AT-gmx.net> for the heads up.
3983 <cliechti-AT-gmx.net> for the heads up.
3980
3984
3981 2003-02-21 Fernando Perez <fperez@colorado.edu>
3985 2003-02-21 Fernando Perez <fperez@colorado.edu>
3982
3986
3983 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3987 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3984 of ValueError exception when checking for auto-execution. This
3988 of ValueError exception when checking for auto-execution. This
3985 one is raised by things like Numeric arrays arr.flat when the
3989 one is raised by things like Numeric arrays arr.flat when the
3986 array is non-contiguous.
3990 array is non-contiguous.
3987
3991
3988 2003-01-31 Fernando Perez <fperez@colorado.edu>
3992 2003-01-31 Fernando Perez <fperez@colorado.edu>
3989
3993
3990 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3994 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3991 not return any value at all (even though the command would get
3995 not return any value at all (even though the command would get
3992 executed).
3996 executed).
3993 (xsys): Flush stdout right after printing the command to ensure
3997 (xsys): Flush stdout right after printing the command to ensure
3994 proper ordering of commands and command output in the total
3998 proper ordering of commands and command output in the total
3995 output.
3999 output.
3996 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4000 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3997 system/getoutput as defaults. The old ones are kept for
4001 system/getoutput as defaults. The old ones are kept for
3998 compatibility reasons, so no code which uses this library needs
4002 compatibility reasons, so no code which uses this library needs
3999 changing.
4003 changing.
4000
4004
4001 2003-01-27 *** Released version 0.2.14
4005 2003-01-27 *** Released version 0.2.14
4002
4006
4003 2003-01-25 Fernando Perez <fperez@colorado.edu>
4007 2003-01-25 Fernando Perez <fperez@colorado.edu>
4004
4008
4005 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4009 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4006 functions defined in previous edit sessions could not be re-edited
4010 functions defined in previous edit sessions could not be re-edited
4007 (because the temp files were immediately removed). Now temp files
4011 (because the temp files were immediately removed). Now temp files
4008 are removed only at IPython's exit.
4012 are removed only at IPython's exit.
4009 (Magic.magic_run): Improved @run to perform shell-like expansions
4013 (Magic.magic_run): Improved @run to perform shell-like expansions
4010 on its arguments (~users and $VARS). With this, @run becomes more
4014 on its arguments (~users and $VARS). With this, @run becomes more
4011 like a normal command-line.
4015 like a normal command-line.
4012
4016
4013 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4017 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4014 bugs related to embedding and cleaned up that code. A fairly
4018 bugs related to embedding and cleaned up that code. A fairly
4015 important one was the impossibility to access the global namespace
4019 important one was the impossibility to access the global namespace
4016 through the embedded IPython (only local variables were visible).
4020 through the embedded IPython (only local variables were visible).
4017
4021
4018 2003-01-14 Fernando Perez <fperez@colorado.edu>
4022 2003-01-14 Fernando Perez <fperez@colorado.edu>
4019
4023
4020 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4024 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4021 auto-calling to be a bit more conservative. Now it doesn't get
4025 auto-calling to be a bit more conservative. Now it doesn't get
4022 triggered if any of '!=()<>' are in the rest of the input line, to
4026 triggered if any of '!=()<>' are in the rest of the input line, to
4023 allow comparing callables. Thanks to Alex for the heads up.
4027 allow comparing callables. Thanks to Alex for the heads up.
4024
4028
4025 2003-01-07 Fernando Perez <fperez@colorado.edu>
4029 2003-01-07 Fernando Perez <fperez@colorado.edu>
4026
4030
4027 * IPython/genutils.py (page): fixed estimation of the number of
4031 * IPython/genutils.py (page): fixed estimation of the number of
4028 lines in a string to be paged to simply count newlines. This
4032 lines in a string to be paged to simply count newlines. This
4029 prevents over-guessing due to embedded escape sequences. A better
4033 prevents over-guessing due to embedded escape sequences. A better
4030 long-term solution would involve stripping out the control chars
4034 long-term solution would involve stripping out the control chars
4031 for the count, but it's potentially so expensive I just don't
4035 for the count, but it's potentially so expensive I just don't
4032 think it's worth doing.
4036 think it's worth doing.
4033
4037
4034 2002-12-19 *** Released version 0.2.14pre50
4038 2002-12-19 *** Released version 0.2.14pre50
4035
4039
4036 2002-12-19 Fernando Perez <fperez@colorado.edu>
4040 2002-12-19 Fernando Perez <fperez@colorado.edu>
4037
4041
4038 * tools/release (version): Changed release scripts to inform
4042 * tools/release (version): Changed release scripts to inform
4039 Andrea and build a NEWS file with a list of recent changes.
4043 Andrea and build a NEWS file with a list of recent changes.
4040
4044
4041 * IPython/ColorANSI.py (__all__): changed terminal detection
4045 * IPython/ColorANSI.py (__all__): changed terminal detection
4042 code. Seems to work better for xterms without breaking
4046 code. Seems to work better for xterms without breaking
4043 konsole. Will need more testing to determine if WinXP and Mac OSX
4047 konsole. Will need more testing to determine if WinXP and Mac OSX
4044 also work ok.
4048 also work ok.
4045
4049
4046 2002-12-18 *** Released version 0.2.14pre49
4050 2002-12-18 *** Released version 0.2.14pre49
4047
4051
4048 2002-12-18 Fernando Perez <fperez@colorado.edu>
4052 2002-12-18 Fernando Perez <fperez@colorado.edu>
4049
4053
4050 * Docs: added new info about Mac OSX, from Andrea.
4054 * Docs: added new info about Mac OSX, from Andrea.
4051
4055
4052 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4056 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4053 allow direct plotting of python strings whose format is the same
4057 allow direct plotting of python strings whose format is the same
4054 of gnuplot data files.
4058 of gnuplot data files.
4055
4059
4056 2002-12-16 Fernando Perez <fperez@colorado.edu>
4060 2002-12-16 Fernando Perez <fperez@colorado.edu>
4057
4061
4058 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4062 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4059 value of exit question to be acknowledged.
4063 value of exit question to be acknowledged.
4060
4064
4061 2002-12-03 Fernando Perez <fperez@colorado.edu>
4065 2002-12-03 Fernando Perez <fperez@colorado.edu>
4062
4066
4063 * IPython/ipmaker.py: removed generators, which had been added
4067 * IPython/ipmaker.py: removed generators, which had been added
4064 by mistake in an earlier debugging run. This was causing trouble
4068 by mistake in an earlier debugging run. This was causing trouble
4065 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4069 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4066 for pointing this out.
4070 for pointing this out.
4067
4071
4068 2002-11-17 Fernando Perez <fperez@colorado.edu>
4072 2002-11-17 Fernando Perez <fperez@colorado.edu>
4069
4073
4070 * Manual: updated the Gnuplot section.
4074 * Manual: updated the Gnuplot section.
4071
4075
4072 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4076 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4073 a much better split of what goes in Runtime and what goes in
4077 a much better split of what goes in Runtime and what goes in
4074 Interactive.
4078 Interactive.
4075
4079
4076 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4080 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4077 being imported from iplib.
4081 being imported from iplib.
4078
4082
4079 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4083 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4080 for command-passing. Now the global Gnuplot instance is called
4084 for command-passing. Now the global Gnuplot instance is called
4081 'gp' instead of 'g', which was really a far too fragile and
4085 'gp' instead of 'g', which was really a far too fragile and
4082 common name.
4086 common name.
4083
4087
4084 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4088 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4085 bounding boxes generated by Gnuplot for square plots.
4089 bounding boxes generated by Gnuplot for square plots.
4086
4090
4087 * IPython/genutils.py (popkey): new function added. I should
4091 * IPython/genutils.py (popkey): new function added. I should
4088 suggest this on c.l.py as a dict method, it seems useful.
4092 suggest this on c.l.py as a dict method, it seems useful.
4089
4093
4090 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4094 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4091 to transparently handle PostScript generation. MUCH better than
4095 to transparently handle PostScript generation. MUCH better than
4092 the previous plot_eps/replot_eps (which I removed now). The code
4096 the previous plot_eps/replot_eps (which I removed now). The code
4093 is also fairly clean and well documented now (including
4097 is also fairly clean and well documented now (including
4094 docstrings).
4098 docstrings).
4095
4099
4096 2002-11-13 Fernando Perez <fperez@colorado.edu>
4100 2002-11-13 Fernando Perez <fperez@colorado.edu>
4097
4101
4098 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4102 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4099 (inconsistent with options).
4103 (inconsistent with options).
4100
4104
4101 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4105 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4102 manually disabled, I don't know why. Fixed it.
4106 manually disabled, I don't know why. Fixed it.
4103 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4107 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4104 eps output.
4108 eps output.
4105
4109
4106 2002-11-12 Fernando Perez <fperez@colorado.edu>
4110 2002-11-12 Fernando Perez <fperez@colorado.edu>
4107
4111
4108 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4112 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4109 don't propagate up to caller. Fixes crash reported by François
4113 don't propagate up to caller. Fixes crash reported by François
4110 Pinard.
4114 Pinard.
4111
4115
4112 2002-11-09 Fernando Perez <fperez@colorado.edu>
4116 2002-11-09 Fernando Perez <fperez@colorado.edu>
4113
4117
4114 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4118 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4115 history file for new users.
4119 history file for new users.
4116 (make_IPython): fixed bug where initial install would leave the
4120 (make_IPython): fixed bug where initial install would leave the
4117 user running in the .ipython dir.
4121 user running in the .ipython dir.
4118 (make_IPython): fixed bug where config dir .ipython would be
4122 (make_IPython): fixed bug where config dir .ipython would be
4119 created regardless of the given -ipythondir option. Thanks to Cory
4123 created regardless of the given -ipythondir option. Thanks to Cory
4120 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4124 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4121
4125
4122 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4126 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4123 type confirmations. Will need to use it in all of IPython's code
4127 type confirmations. Will need to use it in all of IPython's code
4124 consistently.
4128 consistently.
4125
4129
4126 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4130 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4127 context to print 31 lines instead of the default 5. This will make
4131 context to print 31 lines instead of the default 5. This will make
4128 the crash reports extremely detailed in case the problem is in
4132 the crash reports extremely detailed in case the problem is in
4129 libraries I don't have access to.
4133 libraries I don't have access to.
4130
4134
4131 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4135 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4132 line of defense' code to still crash, but giving users fair
4136 line of defense' code to still crash, but giving users fair
4133 warning. I don't want internal errors to go unreported: if there's
4137 warning. I don't want internal errors to go unreported: if there's
4134 an internal problem, IPython should crash and generate a full
4138 an internal problem, IPython should crash and generate a full
4135 report.
4139 report.
4136
4140
4137 2002-11-08 Fernando Perez <fperez@colorado.edu>
4141 2002-11-08 Fernando Perez <fperez@colorado.edu>
4138
4142
4139 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4143 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4140 otherwise uncaught exceptions which can appear if people set
4144 otherwise uncaught exceptions which can appear if people set
4141 sys.stdout to something badly broken. Thanks to a crash report
4145 sys.stdout to something badly broken. Thanks to a crash report
4142 from henni-AT-mail.brainbot.com.
4146 from henni-AT-mail.brainbot.com.
4143
4147
4144 2002-11-04 Fernando Perez <fperez@colorado.edu>
4148 2002-11-04 Fernando Perez <fperez@colorado.edu>
4145
4149
4146 * IPython/iplib.py (InteractiveShell.interact): added
4150 * IPython/iplib.py (InteractiveShell.interact): added
4147 __IPYTHON__active to the builtins. It's a flag which goes on when
4151 __IPYTHON__active to the builtins. It's a flag which goes on when
4148 the interaction starts and goes off again when it stops. This
4152 the interaction starts and goes off again when it stops. This
4149 allows embedding code to detect being inside IPython. Before this
4153 allows embedding code to detect being inside IPython. Before this
4150 was done via __IPYTHON__, but that only shows that an IPython
4154 was done via __IPYTHON__, but that only shows that an IPython
4151 instance has been created.
4155 instance has been created.
4152
4156
4153 * IPython/Magic.py (Magic.magic_env): I realized that in a
4157 * IPython/Magic.py (Magic.magic_env): I realized that in a
4154 UserDict, instance.data holds the data as a normal dict. So I
4158 UserDict, instance.data holds the data as a normal dict. So I
4155 modified @env to return os.environ.data instead of rebuilding a
4159 modified @env to return os.environ.data instead of rebuilding a
4156 dict by hand.
4160 dict by hand.
4157
4161
4158 2002-11-02 Fernando Perez <fperez@colorado.edu>
4162 2002-11-02 Fernando Perez <fperez@colorado.edu>
4159
4163
4160 * IPython/genutils.py (warn): changed so that level 1 prints no
4164 * IPython/genutils.py (warn): changed so that level 1 prints no
4161 header. Level 2 is now the default (with 'WARNING' header, as
4165 header. Level 2 is now the default (with 'WARNING' header, as
4162 before). I think I tracked all places where changes were needed in
4166 before). I think I tracked all places where changes were needed in
4163 IPython, but outside code using the old level numbering may have
4167 IPython, but outside code using the old level numbering may have
4164 broken.
4168 broken.
4165
4169
4166 * IPython/iplib.py (InteractiveShell.runcode): added this to
4170 * IPython/iplib.py (InteractiveShell.runcode): added this to
4167 handle the tracebacks in SystemExit traps correctly. The previous
4171 handle the tracebacks in SystemExit traps correctly. The previous
4168 code (through interact) was printing more of the stack than
4172 code (through interact) was printing more of the stack than
4169 necessary, showing IPython internal code to the user.
4173 necessary, showing IPython internal code to the user.
4170
4174
4171 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4175 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4172 default. Now that the default at the confirmation prompt is yes,
4176 default. Now that the default at the confirmation prompt is yes,
4173 it's not so intrusive. François' argument that ipython sessions
4177 it's not so intrusive. François' argument that ipython sessions
4174 tend to be complex enough not to lose them from an accidental C-d,
4178 tend to be complex enough not to lose them from an accidental C-d,
4175 is a valid one.
4179 is a valid one.
4176
4180
4177 * IPython/iplib.py (InteractiveShell.interact): added a
4181 * IPython/iplib.py (InteractiveShell.interact): added a
4178 showtraceback() call to the SystemExit trap, and modified the exit
4182 showtraceback() call to the SystemExit trap, and modified the exit
4179 confirmation to have yes as the default.
4183 confirmation to have yes as the default.
4180
4184
4181 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4185 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4182 this file. It's been gone from the code for a long time, this was
4186 this file. It's been gone from the code for a long time, this was
4183 simply leftover junk.
4187 simply leftover junk.
4184
4188
4185 2002-11-01 Fernando Perez <fperez@colorado.edu>
4189 2002-11-01 Fernando Perez <fperez@colorado.edu>
4186
4190
4187 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4191 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4188 added. If set, IPython now traps EOF and asks for
4192 added. If set, IPython now traps EOF and asks for
4189 confirmation. After a request by François Pinard.
4193 confirmation. After a request by François Pinard.
4190
4194
4191 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4195 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4192 of @abort, and with a new (better) mechanism for handling the
4196 of @abort, and with a new (better) mechanism for handling the
4193 exceptions.
4197 exceptions.
4194
4198
4195 2002-10-27 Fernando Perez <fperez@colorado.edu>
4199 2002-10-27 Fernando Perez <fperez@colorado.edu>
4196
4200
4197 * IPython/usage.py (__doc__): updated the --help information and
4201 * IPython/usage.py (__doc__): updated the --help information and
4198 the ipythonrc file to indicate that -log generates
4202 the ipythonrc file to indicate that -log generates
4199 ./ipython.log. Also fixed the corresponding info in @logstart.
4203 ./ipython.log. Also fixed the corresponding info in @logstart.
4200 This and several other fixes in the manuals thanks to reports by
4204 This and several other fixes in the manuals thanks to reports by
4201 François Pinard <pinard-AT-iro.umontreal.ca>.
4205 François Pinard <pinard-AT-iro.umontreal.ca>.
4202
4206
4203 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4207 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4204 refer to @logstart (instead of @log, which doesn't exist).
4208 refer to @logstart (instead of @log, which doesn't exist).
4205
4209
4206 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4210 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4207 AttributeError crash. Thanks to Christopher Armstrong
4211 AttributeError crash. Thanks to Christopher Armstrong
4208 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4212 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4209 introduced recently (in 0.2.14pre37) with the fix to the eval
4213 introduced recently (in 0.2.14pre37) with the fix to the eval
4210 problem mentioned below.
4214 problem mentioned below.
4211
4215
4212 2002-10-17 Fernando Perez <fperez@colorado.edu>
4216 2002-10-17 Fernando Perez <fperez@colorado.edu>
4213
4217
4214 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4218 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4215 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4219 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4216
4220
4217 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4221 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4218 this function to fix a problem reported by Alex Schmolck. He saw
4222 this function to fix a problem reported by Alex Schmolck. He saw
4219 it with list comprehensions and generators, which were getting
4223 it with list comprehensions and generators, which were getting
4220 called twice. The real problem was an 'eval' call in testing for
4224 called twice. The real problem was an 'eval' call in testing for
4221 automagic which was evaluating the input line silently.
4225 automagic which was evaluating the input line silently.
4222
4226
4223 This is a potentially very nasty bug, if the input has side
4227 This is a potentially very nasty bug, if the input has side
4224 effects which must not be repeated. The code is much cleaner now,
4228 effects which must not be repeated. The code is much cleaner now,
4225 without any blanket 'except' left and with a regexp test for
4229 without any blanket 'except' left and with a regexp test for
4226 actual function names.
4230 actual function names.
4227
4231
4228 But an eval remains, which I'm not fully comfortable with. I just
4232 But an eval remains, which I'm not fully comfortable with. I just
4229 don't know how to find out if an expression could be a callable in
4233 don't know how to find out if an expression could be a callable in
4230 the user's namespace without doing an eval on the string. However
4234 the user's namespace without doing an eval on the string. However
4231 that string is now much more strictly checked so that no code
4235 that string is now much more strictly checked so that no code
4232 slips by, so the eval should only happen for things that can
4236 slips by, so the eval should only happen for things that can
4233 really be only function/method names.
4237 really be only function/method names.
4234
4238
4235 2002-10-15 Fernando Perez <fperez@colorado.edu>
4239 2002-10-15 Fernando Perez <fperez@colorado.edu>
4236
4240
4237 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4241 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4238 OSX information to main manual, removed README_Mac_OSX file from
4242 OSX information to main manual, removed README_Mac_OSX file from
4239 distribution. Also updated credits for recent additions.
4243 distribution. Also updated credits for recent additions.
4240
4244
4241 2002-10-10 Fernando Perez <fperez@colorado.edu>
4245 2002-10-10 Fernando Perez <fperez@colorado.edu>
4242
4246
4243 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4247 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4244 terminal-related issues. Many thanks to Andrea Riciputi
4248 terminal-related issues. Many thanks to Andrea Riciputi
4245 <andrea.riciputi-AT-libero.it> for writing it.
4249 <andrea.riciputi-AT-libero.it> for writing it.
4246
4250
4247 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4251 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4248 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4252 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4249
4253
4250 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4254 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4251 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4255 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4252 <syver-en-AT-online.no> who both submitted patches for this problem.
4256 <syver-en-AT-online.no> who both submitted patches for this problem.
4253
4257
4254 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4258 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4255 global embedding to make sure that things don't overwrite user
4259 global embedding to make sure that things don't overwrite user
4256 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4260 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4257
4261
4258 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4262 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4259 compatibility. Thanks to Hayden Callow
4263 compatibility. Thanks to Hayden Callow
4260 <h.callow-AT-elec.canterbury.ac.nz>
4264 <h.callow-AT-elec.canterbury.ac.nz>
4261
4265
4262 2002-10-04 Fernando Perez <fperez@colorado.edu>
4266 2002-10-04 Fernando Perez <fperez@colorado.edu>
4263
4267
4264 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4268 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4265 Gnuplot.File objects.
4269 Gnuplot.File objects.
4266
4270
4267 2002-07-23 Fernando Perez <fperez@colorado.edu>
4271 2002-07-23 Fernando Perez <fperez@colorado.edu>
4268
4272
4269 * IPython/genutils.py (timing): Added timings() and timing() for
4273 * IPython/genutils.py (timing): Added timings() and timing() for
4270 quick access to the most commonly needed data, the execution
4274 quick access to the most commonly needed data, the execution
4271 times. Old timing() renamed to timings_out().
4275 times. Old timing() renamed to timings_out().
4272
4276
4273 2002-07-18 Fernando Perez <fperez@colorado.edu>
4277 2002-07-18 Fernando Perez <fperez@colorado.edu>
4274
4278
4275 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4279 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4276 bug with nested instances disrupting the parent's tab completion.
4280 bug with nested instances disrupting the parent's tab completion.
4277
4281
4278 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4282 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4279 all_completions code to begin the emacs integration.
4283 all_completions code to begin the emacs integration.
4280
4284
4281 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4285 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4282 argument to allow titling individual arrays when plotting.
4286 argument to allow titling individual arrays when plotting.
4283
4287
4284 2002-07-15 Fernando Perez <fperez@colorado.edu>
4288 2002-07-15 Fernando Perez <fperez@colorado.edu>
4285
4289
4286 * setup.py (make_shortcut): changed to retrieve the value of
4290 * setup.py (make_shortcut): changed to retrieve the value of
4287 'Program Files' directory from the registry (this value changes in
4291 'Program Files' directory from the registry (this value changes in
4288 non-english versions of Windows). Thanks to Thomas Fanslau
4292 non-english versions of Windows). Thanks to Thomas Fanslau
4289 <tfanslau-AT-gmx.de> for the report.
4293 <tfanslau-AT-gmx.de> for the report.
4290
4294
4291 2002-07-10 Fernando Perez <fperez@colorado.edu>
4295 2002-07-10 Fernando Perez <fperez@colorado.edu>
4292
4296
4293 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4297 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4294 a bug in pdb, which crashes if a line with only whitespace is
4298 a bug in pdb, which crashes if a line with only whitespace is
4295 entered. Bug report submitted to sourceforge.
4299 entered. Bug report submitted to sourceforge.
4296
4300
4297 2002-07-09 Fernando Perez <fperez@colorado.edu>
4301 2002-07-09 Fernando Perez <fperez@colorado.edu>
4298
4302
4299 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4303 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4300 reporting exceptions (it's a bug in inspect.py, I just set a
4304 reporting exceptions (it's a bug in inspect.py, I just set a
4301 workaround).
4305 workaround).
4302
4306
4303 2002-07-08 Fernando Perez <fperez@colorado.edu>
4307 2002-07-08 Fernando Perez <fperez@colorado.edu>
4304
4308
4305 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4309 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4306 __IPYTHON__ in __builtins__ to show up in user_ns.
4310 __IPYTHON__ in __builtins__ to show up in user_ns.
4307
4311
4308 2002-07-03 Fernando Perez <fperez@colorado.edu>
4312 2002-07-03 Fernando Perez <fperez@colorado.edu>
4309
4313
4310 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4314 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4311 name from @gp_set_instance to @gp_set_default.
4315 name from @gp_set_instance to @gp_set_default.
4312
4316
4313 * IPython/ipmaker.py (make_IPython): default editor value set to
4317 * IPython/ipmaker.py (make_IPython): default editor value set to
4314 '0' (a string), to match the rc file. Otherwise will crash when
4318 '0' (a string), to match the rc file. Otherwise will crash when
4315 .strip() is called on it.
4319 .strip() is called on it.
4316
4320
4317
4321
4318 2002-06-28 Fernando Perez <fperez@colorado.edu>
4322 2002-06-28 Fernando Perez <fperez@colorado.edu>
4319
4323
4320 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4324 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4321 of files in current directory when a file is executed via
4325 of files in current directory when a file is executed via
4322 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4326 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4323
4327
4324 * setup.py (manfiles): fix for rpm builds, submitted by RA
4328 * setup.py (manfiles): fix for rpm builds, submitted by RA
4325 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4329 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4326
4330
4327 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4331 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4328 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4332 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4329 string!). A. Schmolck caught this one.
4333 string!). A. Schmolck caught this one.
4330
4334
4331 2002-06-27 Fernando Perez <fperez@colorado.edu>
4335 2002-06-27 Fernando Perez <fperez@colorado.edu>
4332
4336
4333 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4337 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4334 defined files at the cmd line. __name__ wasn't being set to
4338 defined files at the cmd line. __name__ wasn't being set to
4335 __main__.
4339 __main__.
4336
4340
4337 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4341 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4338 regular lists and tuples besides Numeric arrays.
4342 regular lists and tuples besides Numeric arrays.
4339
4343
4340 * IPython/Prompts.py (CachedOutput.__call__): Added output
4344 * IPython/Prompts.py (CachedOutput.__call__): Added output
4341 supression for input ending with ';'. Similar to Mathematica and
4345 supression for input ending with ';'. Similar to Mathematica and
4342 Matlab. The _* vars and Out[] list are still updated, just like
4346 Matlab. The _* vars and Out[] list are still updated, just like
4343 Mathematica behaves.
4347 Mathematica behaves.
4344
4348
4345 2002-06-25 Fernando Perez <fperez@colorado.edu>
4349 2002-06-25 Fernando Perez <fperez@colorado.edu>
4346
4350
4347 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4351 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4348 .ini extensions for profiels under Windows.
4352 .ini extensions for profiels under Windows.
4349
4353
4350 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4354 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4351 string form. Fix contributed by Alexander Schmolck
4355 string form. Fix contributed by Alexander Schmolck
4352 <a.schmolck-AT-gmx.net>
4356 <a.schmolck-AT-gmx.net>
4353
4357
4354 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4358 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4355 pre-configured Gnuplot instance.
4359 pre-configured Gnuplot instance.
4356
4360
4357 2002-06-21 Fernando Perez <fperez@colorado.edu>
4361 2002-06-21 Fernando Perez <fperez@colorado.edu>
4358
4362
4359 * IPython/numutils.py (exp_safe): new function, works around the
4363 * IPython/numutils.py (exp_safe): new function, works around the
4360 underflow problems in Numeric.
4364 underflow problems in Numeric.
4361 (log2): New fn. Safe log in base 2: returns exact integer answer
4365 (log2): New fn. Safe log in base 2: returns exact integer answer
4362 for exact integer powers of 2.
4366 for exact integer powers of 2.
4363
4367
4364 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4368 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4365 properly.
4369 properly.
4366
4370
4367 2002-06-20 Fernando Perez <fperez@colorado.edu>
4371 2002-06-20 Fernando Perez <fperez@colorado.edu>
4368
4372
4369 * IPython/genutils.py (timing): new function like
4373 * IPython/genutils.py (timing): new function like
4370 Mathematica's. Similar to time_test, but returns more info.
4374 Mathematica's. Similar to time_test, but returns more info.
4371
4375
4372 2002-06-18 Fernando Perez <fperez@colorado.edu>
4376 2002-06-18 Fernando Perez <fperez@colorado.edu>
4373
4377
4374 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4378 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4375 according to Mike Heeter's suggestions.
4379 according to Mike Heeter's suggestions.
4376
4380
4377 2002-06-16 Fernando Perez <fperez@colorado.edu>
4381 2002-06-16 Fernando Perez <fperez@colorado.edu>
4378
4382
4379 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4383 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4380 system. GnuplotMagic is gone as a user-directory option. New files
4384 system. GnuplotMagic is gone as a user-directory option. New files
4381 make it easier to use all the gnuplot stuff both from external
4385 make it easier to use all the gnuplot stuff both from external
4382 programs as well as from IPython. Had to rewrite part of
4386 programs as well as from IPython. Had to rewrite part of
4383 hardcopy() b/c of a strange bug: often the ps files simply don't
4387 hardcopy() b/c of a strange bug: often the ps files simply don't
4384 get created, and require a repeat of the command (often several
4388 get created, and require a repeat of the command (often several
4385 times).
4389 times).
4386
4390
4387 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4391 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4388 resolve output channel at call time, so that if sys.stderr has
4392 resolve output channel at call time, so that if sys.stderr has
4389 been redirected by user this gets honored.
4393 been redirected by user this gets honored.
4390
4394
4391 2002-06-13 Fernando Perez <fperez@colorado.edu>
4395 2002-06-13 Fernando Perez <fperez@colorado.edu>
4392
4396
4393 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4397 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4394 IPShell. Kept a copy with the old names to avoid breaking people's
4398 IPShell. Kept a copy with the old names to avoid breaking people's
4395 embedded code.
4399 embedded code.
4396
4400
4397 * IPython/ipython: simplified it to the bare minimum after
4401 * IPython/ipython: simplified it to the bare minimum after
4398 Holger's suggestions. Added info about how to use it in
4402 Holger's suggestions. Added info about how to use it in
4399 PYTHONSTARTUP.
4403 PYTHONSTARTUP.
4400
4404
4401 * IPython/Shell.py (IPythonShell): changed the options passing
4405 * IPython/Shell.py (IPythonShell): changed the options passing
4402 from a string with funky %s replacements to a straight list. Maybe
4406 from a string with funky %s replacements to a straight list. Maybe
4403 a bit more typing, but it follows sys.argv conventions, so there's
4407 a bit more typing, but it follows sys.argv conventions, so there's
4404 less special-casing to remember.
4408 less special-casing to remember.
4405
4409
4406 2002-06-12 Fernando Perez <fperez@colorado.edu>
4410 2002-06-12 Fernando Perez <fperez@colorado.edu>
4407
4411
4408 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4412 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4409 command. Thanks to a suggestion by Mike Heeter.
4413 command. Thanks to a suggestion by Mike Heeter.
4410 (Magic.magic_pfile): added behavior to look at filenames if given
4414 (Magic.magic_pfile): added behavior to look at filenames if given
4411 arg is not a defined object.
4415 arg is not a defined object.
4412 (Magic.magic_save): New @save function to save code snippets. Also
4416 (Magic.magic_save): New @save function to save code snippets. Also
4413 a Mike Heeter idea.
4417 a Mike Heeter idea.
4414
4418
4415 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4419 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4416 plot() and replot(). Much more convenient now, especially for
4420 plot() and replot(). Much more convenient now, especially for
4417 interactive use.
4421 interactive use.
4418
4422
4419 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4423 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4420 filenames.
4424 filenames.
4421
4425
4422 2002-06-02 Fernando Perez <fperez@colorado.edu>
4426 2002-06-02 Fernando Perez <fperez@colorado.edu>
4423
4427
4424 * IPython/Struct.py (Struct.__init__): modified to admit
4428 * IPython/Struct.py (Struct.__init__): modified to admit
4425 initialization via another struct.
4429 initialization via another struct.
4426
4430
4427 * IPython/genutils.py (SystemExec.__init__): New stateful
4431 * IPython/genutils.py (SystemExec.__init__): New stateful
4428 interface to xsys and bq. Useful for writing system scripts.
4432 interface to xsys and bq. Useful for writing system scripts.
4429
4433
4430 2002-05-30 Fernando Perez <fperez@colorado.edu>
4434 2002-05-30 Fernando Perez <fperez@colorado.edu>
4431
4435
4432 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4436 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4433 documents. This will make the user download smaller (it's getting
4437 documents. This will make the user download smaller (it's getting
4434 too big).
4438 too big).
4435
4439
4436 2002-05-29 Fernando Perez <fperez@colorado.edu>
4440 2002-05-29 Fernando Perez <fperez@colorado.edu>
4437
4441
4438 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4442 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4439 fix problems with shelve and pickle. Seems to work, but I don't
4443 fix problems with shelve and pickle. Seems to work, but I don't
4440 know if corner cases break it. Thanks to Mike Heeter
4444 know if corner cases break it. Thanks to Mike Heeter
4441 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4445 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4442
4446
4443 2002-05-24 Fernando Perez <fperez@colorado.edu>
4447 2002-05-24 Fernando Perez <fperez@colorado.edu>
4444
4448
4445 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4449 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4446 macros having broken.
4450 macros having broken.
4447
4451
4448 2002-05-21 Fernando Perez <fperez@colorado.edu>
4452 2002-05-21 Fernando Perez <fperez@colorado.edu>
4449
4453
4450 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4454 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4451 introduced logging bug: all history before logging started was
4455 introduced logging bug: all history before logging started was
4452 being written one character per line! This came from the redesign
4456 being written one character per line! This came from the redesign
4453 of the input history as a special list which slices to strings,
4457 of the input history as a special list which slices to strings,
4454 not to lists.
4458 not to lists.
4455
4459
4456 2002-05-20 Fernando Perez <fperez@colorado.edu>
4460 2002-05-20 Fernando Perez <fperez@colorado.edu>
4457
4461
4458 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4462 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4459 be an attribute of all classes in this module. The design of these
4463 be an attribute of all classes in this module. The design of these
4460 classes needs some serious overhauling.
4464 classes needs some serious overhauling.
4461
4465
4462 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4466 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4463 which was ignoring '_' in option names.
4467 which was ignoring '_' in option names.
4464
4468
4465 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4469 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4466 'Verbose_novars' to 'Context' and made it the new default. It's a
4470 'Verbose_novars' to 'Context' and made it the new default. It's a
4467 bit more readable and also safer than verbose.
4471 bit more readable and also safer than verbose.
4468
4472
4469 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4473 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4470 triple-quoted strings.
4474 triple-quoted strings.
4471
4475
4472 * IPython/OInspect.py (__all__): new module exposing the object
4476 * IPython/OInspect.py (__all__): new module exposing the object
4473 introspection facilities. Now the corresponding magics are dummy
4477 introspection facilities. Now the corresponding magics are dummy
4474 wrappers around this. Having this module will make it much easier
4478 wrappers around this. Having this module will make it much easier
4475 to put these functions into our modified pdb.
4479 to put these functions into our modified pdb.
4476 This new object inspector system uses the new colorizing module,
4480 This new object inspector system uses the new colorizing module,
4477 so source code and other things are nicely syntax highlighted.
4481 so source code and other things are nicely syntax highlighted.
4478
4482
4479 2002-05-18 Fernando Perez <fperez@colorado.edu>
4483 2002-05-18 Fernando Perez <fperez@colorado.edu>
4480
4484
4481 * IPython/ColorANSI.py: Split the coloring tools into a separate
4485 * IPython/ColorANSI.py: Split the coloring tools into a separate
4482 module so I can use them in other code easier (they were part of
4486 module so I can use them in other code easier (they were part of
4483 ultraTB).
4487 ultraTB).
4484
4488
4485 2002-05-17 Fernando Perez <fperez@colorado.edu>
4489 2002-05-17 Fernando Perez <fperez@colorado.edu>
4486
4490
4487 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4491 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4488 fixed it to set the global 'g' also to the called instance, as
4492 fixed it to set the global 'g' also to the called instance, as
4489 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4493 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4490 user's 'g' variables).
4494 user's 'g' variables).
4491
4495
4492 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4496 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4493 global variables (aliases to _ih,_oh) so that users which expect
4497 global variables (aliases to _ih,_oh) so that users which expect
4494 In[5] or Out[7] to work aren't unpleasantly surprised.
4498 In[5] or Out[7] to work aren't unpleasantly surprised.
4495 (InputList.__getslice__): new class to allow executing slices of
4499 (InputList.__getslice__): new class to allow executing slices of
4496 input history directly. Very simple class, complements the use of
4500 input history directly. Very simple class, complements the use of
4497 macros.
4501 macros.
4498
4502
4499 2002-05-16 Fernando Perez <fperez@colorado.edu>
4503 2002-05-16 Fernando Perez <fperez@colorado.edu>
4500
4504
4501 * setup.py (docdirbase): make doc directory be just doc/IPython
4505 * setup.py (docdirbase): make doc directory be just doc/IPython
4502 without version numbers, it will reduce clutter for users.
4506 without version numbers, it will reduce clutter for users.
4503
4507
4504 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4508 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4505 execfile call to prevent possible memory leak. See for details:
4509 execfile call to prevent possible memory leak. See for details:
4506 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4510 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4507
4511
4508 2002-05-15 Fernando Perez <fperez@colorado.edu>
4512 2002-05-15 Fernando Perez <fperez@colorado.edu>
4509
4513
4510 * IPython/Magic.py (Magic.magic_psource): made the object
4514 * IPython/Magic.py (Magic.magic_psource): made the object
4511 introspection names be more standard: pdoc, pdef, pfile and
4515 introspection names be more standard: pdoc, pdef, pfile and
4512 psource. They all print/page their output, and it makes
4516 psource. They all print/page their output, and it makes
4513 remembering them easier. Kept old names for compatibility as
4517 remembering them easier. Kept old names for compatibility as
4514 aliases.
4518 aliases.
4515
4519
4516 2002-05-14 Fernando Perez <fperez@colorado.edu>
4520 2002-05-14 Fernando Perez <fperez@colorado.edu>
4517
4521
4518 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4522 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4519 what the mouse problem was. The trick is to use gnuplot with temp
4523 what the mouse problem was. The trick is to use gnuplot with temp
4520 files and NOT with pipes (for data communication), because having
4524 files and NOT with pipes (for data communication), because having
4521 both pipes and the mouse on is bad news.
4525 both pipes and the mouse on is bad news.
4522
4526
4523 2002-05-13 Fernando Perez <fperez@colorado.edu>
4527 2002-05-13 Fernando Perez <fperez@colorado.edu>
4524
4528
4525 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4529 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4526 bug. Information would be reported about builtins even when
4530 bug. Information would be reported about builtins even when
4527 user-defined functions overrode them.
4531 user-defined functions overrode them.
4528
4532
4529 2002-05-11 Fernando Perez <fperez@colorado.edu>
4533 2002-05-11 Fernando Perez <fperez@colorado.edu>
4530
4534
4531 * IPython/__init__.py (__all__): removed FlexCompleter from
4535 * IPython/__init__.py (__all__): removed FlexCompleter from
4532 __all__ so that things don't fail in platforms without readline.
4536 __all__ so that things don't fail in platforms without readline.
4533
4537
4534 2002-05-10 Fernando Perez <fperez@colorado.edu>
4538 2002-05-10 Fernando Perez <fperez@colorado.edu>
4535
4539
4536 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4540 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4537 it requires Numeric, effectively making Numeric a dependency for
4541 it requires Numeric, effectively making Numeric a dependency for
4538 IPython.
4542 IPython.
4539
4543
4540 * Released 0.2.13
4544 * Released 0.2.13
4541
4545
4542 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4546 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4543 profiler interface. Now all the major options from the profiler
4547 profiler interface. Now all the major options from the profiler
4544 module are directly supported in IPython, both for single
4548 module are directly supported in IPython, both for single
4545 expressions (@prun) and for full programs (@run -p).
4549 expressions (@prun) and for full programs (@run -p).
4546
4550
4547 2002-05-09 Fernando Perez <fperez@colorado.edu>
4551 2002-05-09 Fernando Perez <fperez@colorado.edu>
4548
4552
4549 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4553 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4550 magic properly formatted for screen.
4554 magic properly formatted for screen.
4551
4555
4552 * setup.py (make_shortcut): Changed things to put pdf version in
4556 * setup.py (make_shortcut): Changed things to put pdf version in
4553 doc/ instead of doc/manual (had to change lyxport a bit).
4557 doc/ instead of doc/manual (had to change lyxport a bit).
4554
4558
4555 * IPython/Magic.py (Profile.string_stats): made profile runs go
4559 * IPython/Magic.py (Profile.string_stats): made profile runs go
4556 through pager (they are long and a pager allows searching, saving,
4560 through pager (they are long and a pager allows searching, saving,
4557 etc.)
4561 etc.)
4558
4562
4559 2002-05-08 Fernando Perez <fperez@colorado.edu>
4563 2002-05-08 Fernando Perez <fperez@colorado.edu>
4560
4564
4561 * Released 0.2.12
4565 * Released 0.2.12
4562
4566
4563 2002-05-06 Fernando Perez <fperez@colorado.edu>
4567 2002-05-06 Fernando Perez <fperez@colorado.edu>
4564
4568
4565 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4569 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4566 introduced); 'hist n1 n2' was broken.
4570 introduced); 'hist n1 n2' was broken.
4567 (Magic.magic_pdb): added optional on/off arguments to @pdb
4571 (Magic.magic_pdb): added optional on/off arguments to @pdb
4568 (Magic.magic_run): added option -i to @run, which executes code in
4572 (Magic.magic_run): added option -i to @run, which executes code in
4569 the IPython namespace instead of a clean one. Also added @irun as
4573 the IPython namespace instead of a clean one. Also added @irun as
4570 an alias to @run -i.
4574 an alias to @run -i.
4571
4575
4572 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4576 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4573 fixed (it didn't really do anything, the namespaces were wrong).
4577 fixed (it didn't really do anything, the namespaces were wrong).
4574
4578
4575 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4579 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4576
4580
4577 * IPython/__init__.py (__all__): Fixed package namespace, now
4581 * IPython/__init__.py (__all__): Fixed package namespace, now
4578 'import IPython' does give access to IPython.<all> as
4582 'import IPython' does give access to IPython.<all> as
4579 expected. Also renamed __release__ to Release.
4583 expected. Also renamed __release__ to Release.
4580
4584
4581 * IPython/Debugger.py (__license__): created new Pdb class which
4585 * IPython/Debugger.py (__license__): created new Pdb class which
4582 functions like a drop-in for the normal pdb.Pdb but does NOT
4586 functions like a drop-in for the normal pdb.Pdb but does NOT
4583 import readline by default. This way it doesn't muck up IPython's
4587 import readline by default. This way it doesn't muck up IPython's
4584 readline handling, and now tab-completion finally works in the
4588 readline handling, and now tab-completion finally works in the
4585 debugger -- sort of. It completes things globally visible, but the
4589 debugger -- sort of. It completes things globally visible, but the
4586 completer doesn't track the stack as pdb walks it. That's a bit
4590 completer doesn't track the stack as pdb walks it. That's a bit
4587 tricky, and I'll have to implement it later.
4591 tricky, and I'll have to implement it later.
4588
4592
4589 2002-05-05 Fernando Perez <fperez@colorado.edu>
4593 2002-05-05 Fernando Perez <fperez@colorado.edu>
4590
4594
4591 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4595 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4592 magic docstrings when printed via ? (explicit \'s were being
4596 magic docstrings when printed via ? (explicit \'s were being
4593 printed).
4597 printed).
4594
4598
4595 * IPython/ipmaker.py (make_IPython): fixed namespace
4599 * IPython/ipmaker.py (make_IPython): fixed namespace
4596 identification bug. Now variables loaded via logs or command-line
4600 identification bug. Now variables loaded via logs or command-line
4597 files are recognized in the interactive namespace by @who.
4601 files are recognized in the interactive namespace by @who.
4598
4602
4599 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4603 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4600 log replay system stemming from the string form of Structs.
4604 log replay system stemming from the string form of Structs.
4601
4605
4602 * IPython/Magic.py (Macro.__init__): improved macros to properly
4606 * IPython/Magic.py (Macro.__init__): improved macros to properly
4603 handle magic commands in them.
4607 handle magic commands in them.
4604 (Magic.magic_logstart): usernames are now expanded so 'logstart
4608 (Magic.magic_logstart): usernames are now expanded so 'logstart
4605 ~/mylog' now works.
4609 ~/mylog' now works.
4606
4610
4607 * IPython/iplib.py (complete): fixed bug where paths starting with
4611 * IPython/iplib.py (complete): fixed bug where paths starting with
4608 '/' would be completed as magic names.
4612 '/' would be completed as magic names.
4609
4613
4610 2002-05-04 Fernando Perez <fperez@colorado.edu>
4614 2002-05-04 Fernando Perez <fperez@colorado.edu>
4611
4615
4612 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4616 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4613 allow running full programs under the profiler's control.
4617 allow running full programs under the profiler's control.
4614
4618
4615 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4619 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4616 mode to report exceptions verbosely but without formatting
4620 mode to report exceptions verbosely but without formatting
4617 variables. This addresses the issue of ipython 'freezing' (it's
4621 variables. This addresses the issue of ipython 'freezing' (it's
4618 not frozen, but caught in an expensive formatting loop) when huge
4622 not frozen, but caught in an expensive formatting loop) when huge
4619 variables are in the context of an exception.
4623 variables are in the context of an exception.
4620 (VerboseTB.text): Added '--->' markers at line where exception was
4624 (VerboseTB.text): Added '--->' markers at line where exception was
4621 triggered. Much clearer to read, especially in NoColor modes.
4625 triggered. Much clearer to read, especially in NoColor modes.
4622
4626
4623 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4627 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4624 implemented in reverse when changing to the new parse_options().
4628 implemented in reverse when changing to the new parse_options().
4625
4629
4626 2002-05-03 Fernando Perez <fperez@colorado.edu>
4630 2002-05-03 Fernando Perez <fperez@colorado.edu>
4627
4631
4628 * IPython/Magic.py (Magic.parse_options): new function so that
4632 * IPython/Magic.py (Magic.parse_options): new function so that
4629 magics can parse options easier.
4633 magics can parse options easier.
4630 (Magic.magic_prun): new function similar to profile.run(),
4634 (Magic.magic_prun): new function similar to profile.run(),
4631 suggested by Chris Hart.
4635 suggested by Chris Hart.
4632 (Magic.magic_cd): fixed behavior so that it only changes if
4636 (Magic.magic_cd): fixed behavior so that it only changes if
4633 directory actually is in history.
4637 directory actually is in history.
4634
4638
4635 * IPython/usage.py (__doc__): added information about potential
4639 * IPython/usage.py (__doc__): added information about potential
4636 slowness of Verbose exception mode when there are huge data
4640 slowness of Verbose exception mode when there are huge data
4637 structures to be formatted (thanks to Archie Paulson).
4641 structures to be formatted (thanks to Archie Paulson).
4638
4642
4639 * IPython/ipmaker.py (make_IPython): Changed default logging
4643 * IPython/ipmaker.py (make_IPython): Changed default logging
4640 (when simply called with -log) to use curr_dir/ipython.log in
4644 (when simply called with -log) to use curr_dir/ipython.log in
4641 rotate mode. Fixed crash which was occuring with -log before
4645 rotate mode. Fixed crash which was occuring with -log before
4642 (thanks to Jim Boyle).
4646 (thanks to Jim Boyle).
4643
4647
4644 2002-05-01 Fernando Perez <fperez@colorado.edu>
4648 2002-05-01 Fernando Perez <fperez@colorado.edu>
4645
4649
4646 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4650 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4647 was nasty -- though somewhat of a corner case).
4651 was nasty -- though somewhat of a corner case).
4648
4652
4649 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4653 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4650 text (was a bug).
4654 text (was a bug).
4651
4655
4652 2002-04-30 Fernando Perez <fperez@colorado.edu>
4656 2002-04-30 Fernando Perez <fperez@colorado.edu>
4653
4657
4654 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4658 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4655 a print after ^D or ^C from the user so that the In[] prompt
4659 a print after ^D or ^C from the user so that the In[] prompt
4656 doesn't over-run the gnuplot one.
4660 doesn't over-run the gnuplot one.
4657
4661
4658 2002-04-29 Fernando Perez <fperez@colorado.edu>
4662 2002-04-29 Fernando Perez <fperez@colorado.edu>
4659
4663
4660 * Released 0.2.10
4664 * Released 0.2.10
4661
4665
4662 * IPython/__release__.py (version): get date dynamically.
4666 * IPython/__release__.py (version): get date dynamically.
4663
4667
4664 * Misc. documentation updates thanks to Arnd's comments. Also ran
4668 * Misc. documentation updates thanks to Arnd's comments. Also ran
4665 a full spellcheck on the manual (hadn't been done in a while).
4669 a full spellcheck on the manual (hadn't been done in a while).
4666
4670
4667 2002-04-27 Fernando Perez <fperez@colorado.edu>
4671 2002-04-27 Fernando Perez <fperez@colorado.edu>
4668
4672
4669 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4673 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4670 starting a log in mid-session would reset the input history list.
4674 starting a log in mid-session would reset the input history list.
4671
4675
4672 2002-04-26 Fernando Perez <fperez@colorado.edu>
4676 2002-04-26 Fernando Perez <fperez@colorado.edu>
4673
4677
4674 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4678 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4675 all files were being included in an update. Now anything in
4679 all files were being included in an update. Now anything in
4676 UserConfig that matches [A-Za-z]*.py will go (this excludes
4680 UserConfig that matches [A-Za-z]*.py will go (this excludes
4677 __init__.py)
4681 __init__.py)
4678
4682
4679 2002-04-25 Fernando Perez <fperez@colorado.edu>
4683 2002-04-25 Fernando Perez <fperez@colorado.edu>
4680
4684
4681 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4685 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4682 to __builtins__ so that any form of embedded or imported code can
4686 to __builtins__ so that any form of embedded or imported code can
4683 test for being inside IPython.
4687 test for being inside IPython.
4684
4688
4685 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4689 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4686 changed to GnuplotMagic because it's now an importable module,
4690 changed to GnuplotMagic because it's now an importable module,
4687 this makes the name follow that of the standard Gnuplot module.
4691 this makes the name follow that of the standard Gnuplot module.
4688 GnuplotMagic can now be loaded at any time in mid-session.
4692 GnuplotMagic can now be loaded at any time in mid-session.
4689
4693
4690 2002-04-24 Fernando Perez <fperez@colorado.edu>
4694 2002-04-24 Fernando Perez <fperez@colorado.edu>
4691
4695
4692 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4696 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4693 the globals (IPython has its own namespace) and the
4697 the globals (IPython has its own namespace) and the
4694 PhysicalQuantity stuff is much better anyway.
4698 PhysicalQuantity stuff is much better anyway.
4695
4699
4696 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4700 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4697 embedding example to standard user directory for
4701 embedding example to standard user directory for
4698 distribution. Also put it in the manual.
4702 distribution. Also put it in the manual.
4699
4703
4700 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4704 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4701 instance as first argument (so it doesn't rely on some obscure
4705 instance as first argument (so it doesn't rely on some obscure
4702 hidden global).
4706 hidden global).
4703
4707
4704 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4708 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4705 delimiters. While it prevents ().TAB from working, it allows
4709 delimiters. While it prevents ().TAB from working, it allows
4706 completions in open (... expressions. This is by far a more common
4710 completions in open (... expressions. This is by far a more common
4707 case.
4711 case.
4708
4712
4709 2002-04-23 Fernando Perez <fperez@colorado.edu>
4713 2002-04-23 Fernando Perez <fperez@colorado.edu>
4710
4714
4711 * IPython/Extensions/InterpreterPasteInput.py: new
4715 * IPython/Extensions/InterpreterPasteInput.py: new
4712 syntax-processing module for pasting lines with >>> or ... at the
4716 syntax-processing module for pasting lines with >>> or ... at the
4713 start.
4717 start.
4714
4718
4715 * IPython/Extensions/PhysicalQ_Interactive.py
4719 * IPython/Extensions/PhysicalQ_Interactive.py
4716 (PhysicalQuantityInteractive.__int__): fixed to work with either
4720 (PhysicalQuantityInteractive.__int__): fixed to work with either
4717 Numeric or math.
4721 Numeric or math.
4718
4722
4719 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4723 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4720 provided profiles. Now we have:
4724 provided profiles. Now we have:
4721 -math -> math module as * and cmath with its own namespace.
4725 -math -> math module as * and cmath with its own namespace.
4722 -numeric -> Numeric as *, plus gnuplot & grace
4726 -numeric -> Numeric as *, plus gnuplot & grace
4723 -physics -> same as before
4727 -physics -> same as before
4724
4728
4725 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4729 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4726 user-defined magics wouldn't be found by @magic if they were
4730 user-defined magics wouldn't be found by @magic if they were
4727 defined as class methods. Also cleaned up the namespace search
4731 defined as class methods. Also cleaned up the namespace search
4728 logic and the string building (to use %s instead of many repeated
4732 logic and the string building (to use %s instead of many repeated
4729 string adds).
4733 string adds).
4730
4734
4731 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4735 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4732 of user-defined magics to operate with class methods (cleaner, in
4736 of user-defined magics to operate with class methods (cleaner, in
4733 line with the gnuplot code).
4737 line with the gnuplot code).
4734
4738
4735 2002-04-22 Fernando Perez <fperez@colorado.edu>
4739 2002-04-22 Fernando Perez <fperez@colorado.edu>
4736
4740
4737 * setup.py: updated dependency list so that manual is updated when
4741 * setup.py: updated dependency list so that manual is updated when
4738 all included files change.
4742 all included files change.
4739
4743
4740 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4744 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4741 the delimiter removal option (the fix is ugly right now).
4745 the delimiter removal option (the fix is ugly right now).
4742
4746
4743 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4747 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4744 all of the math profile (quicker loading, no conflict between
4748 all of the math profile (quicker loading, no conflict between
4745 g-9.8 and g-gnuplot).
4749 g-9.8 and g-gnuplot).
4746
4750
4747 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4751 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4748 name of post-mortem files to IPython_crash_report.txt.
4752 name of post-mortem files to IPython_crash_report.txt.
4749
4753
4750 * Cleanup/update of the docs. Added all the new readline info and
4754 * Cleanup/update of the docs. Added all the new readline info and
4751 formatted all lists as 'real lists'.
4755 formatted all lists as 'real lists'.
4752
4756
4753 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4757 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4754 tab-completion options, since the full readline parse_and_bind is
4758 tab-completion options, since the full readline parse_and_bind is
4755 now accessible.
4759 now accessible.
4756
4760
4757 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4761 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4758 handling of readline options. Now users can specify any string to
4762 handling of readline options. Now users can specify any string to
4759 be passed to parse_and_bind(), as well as the delimiters to be
4763 be passed to parse_and_bind(), as well as the delimiters to be
4760 removed.
4764 removed.
4761 (InteractiveShell.__init__): Added __name__ to the global
4765 (InteractiveShell.__init__): Added __name__ to the global
4762 namespace so that things like Itpl which rely on its existence
4766 namespace so that things like Itpl which rely on its existence
4763 don't crash.
4767 don't crash.
4764 (InteractiveShell._prefilter): Defined the default with a _ so
4768 (InteractiveShell._prefilter): Defined the default with a _ so
4765 that prefilter() is easier to override, while the default one
4769 that prefilter() is easier to override, while the default one
4766 remains available.
4770 remains available.
4767
4771
4768 2002-04-18 Fernando Perez <fperez@colorado.edu>
4772 2002-04-18 Fernando Perez <fperez@colorado.edu>
4769
4773
4770 * Added information about pdb in the docs.
4774 * Added information about pdb in the docs.
4771
4775
4772 2002-04-17 Fernando Perez <fperez@colorado.edu>
4776 2002-04-17 Fernando Perez <fperez@colorado.edu>
4773
4777
4774 * IPython/ipmaker.py (make_IPython): added rc_override option to
4778 * IPython/ipmaker.py (make_IPython): added rc_override option to
4775 allow passing config options at creation time which may override
4779 allow passing config options at creation time which may override
4776 anything set in the config files or command line. This is
4780 anything set in the config files or command line. This is
4777 particularly useful for configuring embedded instances.
4781 particularly useful for configuring embedded instances.
4778
4782
4779 2002-04-15 Fernando Perez <fperez@colorado.edu>
4783 2002-04-15 Fernando Perez <fperez@colorado.edu>
4780
4784
4781 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4785 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4782 crash embedded instances because of the input cache falling out of
4786 crash embedded instances because of the input cache falling out of
4783 sync with the output counter.
4787 sync with the output counter.
4784
4788
4785 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4789 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4786 mode which calls pdb after an uncaught exception in IPython itself.
4790 mode which calls pdb after an uncaught exception in IPython itself.
4787
4791
4788 2002-04-14 Fernando Perez <fperez@colorado.edu>
4792 2002-04-14 Fernando Perez <fperez@colorado.edu>
4789
4793
4790 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4794 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4791 readline, fix it back after each call.
4795 readline, fix it back after each call.
4792
4796
4793 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4797 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4794 method to force all access via __call__(), which guarantees that
4798 method to force all access via __call__(), which guarantees that
4795 traceback references are properly deleted.
4799 traceback references are properly deleted.
4796
4800
4797 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4801 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4798 improve printing when pprint is in use.
4802 improve printing when pprint is in use.
4799
4803
4800 2002-04-13 Fernando Perez <fperez@colorado.edu>
4804 2002-04-13 Fernando Perez <fperez@colorado.edu>
4801
4805
4802 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4806 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4803 exceptions aren't caught anymore. If the user triggers one, he
4807 exceptions aren't caught anymore. If the user triggers one, he
4804 should know why he's doing it and it should go all the way up,
4808 should know why he's doing it and it should go all the way up,
4805 just like any other exception. So now @abort will fully kill the
4809 just like any other exception. So now @abort will fully kill the
4806 embedded interpreter and the embedding code (unless that happens
4810 embedded interpreter and the embedding code (unless that happens
4807 to catch SystemExit).
4811 to catch SystemExit).
4808
4812
4809 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4813 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4810 and a debugger() method to invoke the interactive pdb debugger
4814 and a debugger() method to invoke the interactive pdb debugger
4811 after printing exception information. Also added the corresponding
4815 after printing exception information. Also added the corresponding
4812 -pdb option and @pdb magic to control this feature, and updated
4816 -pdb option and @pdb magic to control this feature, and updated
4813 the docs. After a suggestion from Christopher Hart
4817 the docs. After a suggestion from Christopher Hart
4814 (hart-AT-caltech.edu).
4818 (hart-AT-caltech.edu).
4815
4819
4816 2002-04-12 Fernando Perez <fperez@colorado.edu>
4820 2002-04-12 Fernando Perez <fperez@colorado.edu>
4817
4821
4818 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4822 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4819 the exception handlers defined by the user (not the CrashHandler)
4823 the exception handlers defined by the user (not the CrashHandler)
4820 so that user exceptions don't trigger an ipython bug report.
4824 so that user exceptions don't trigger an ipython bug report.
4821
4825
4822 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4826 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4823 configurable (it should have always been so).
4827 configurable (it should have always been so).
4824
4828
4825 2002-03-26 Fernando Perez <fperez@colorado.edu>
4829 2002-03-26 Fernando Perez <fperez@colorado.edu>
4826
4830
4827 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4831 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4828 and there to fix embedding namespace issues. This should all be
4832 and there to fix embedding namespace issues. This should all be
4829 done in a more elegant way.
4833 done in a more elegant way.
4830
4834
4831 2002-03-25 Fernando Perez <fperez@colorado.edu>
4835 2002-03-25 Fernando Perez <fperez@colorado.edu>
4832
4836
4833 * IPython/genutils.py (get_home_dir): Try to make it work under
4837 * IPython/genutils.py (get_home_dir): Try to make it work under
4834 win9x also.
4838 win9x also.
4835
4839
4836 2002-03-20 Fernando Perez <fperez@colorado.edu>
4840 2002-03-20 Fernando Perez <fperez@colorado.edu>
4837
4841
4838 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4842 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4839 sys.displayhook untouched upon __init__.
4843 sys.displayhook untouched upon __init__.
4840
4844
4841 2002-03-19 Fernando Perez <fperez@colorado.edu>
4845 2002-03-19 Fernando Perez <fperez@colorado.edu>
4842
4846
4843 * Released 0.2.9 (for embedding bug, basically).
4847 * Released 0.2.9 (for embedding bug, basically).
4844
4848
4845 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4849 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4846 exceptions so that enclosing shell's state can be restored.
4850 exceptions so that enclosing shell's state can be restored.
4847
4851
4848 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4852 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4849 naming conventions in the .ipython/ dir.
4853 naming conventions in the .ipython/ dir.
4850
4854
4851 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4855 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4852 from delimiters list so filenames with - in them get expanded.
4856 from delimiters list so filenames with - in them get expanded.
4853
4857
4854 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4858 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4855 sys.displayhook not being properly restored after an embedded call.
4859 sys.displayhook not being properly restored after an embedded call.
4856
4860
4857 2002-03-18 Fernando Perez <fperez@colorado.edu>
4861 2002-03-18 Fernando Perez <fperez@colorado.edu>
4858
4862
4859 * Released 0.2.8
4863 * Released 0.2.8
4860
4864
4861 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4865 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4862 some files weren't being included in a -upgrade.
4866 some files weren't being included in a -upgrade.
4863 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4867 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4864 on' so that the first tab completes.
4868 on' so that the first tab completes.
4865 (InteractiveShell.handle_magic): fixed bug with spaces around
4869 (InteractiveShell.handle_magic): fixed bug with spaces around
4866 quotes breaking many magic commands.
4870 quotes breaking many magic commands.
4867
4871
4868 * setup.py: added note about ignoring the syntax error messages at
4872 * setup.py: added note about ignoring the syntax error messages at
4869 installation.
4873 installation.
4870
4874
4871 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4875 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4872 streamlining the gnuplot interface, now there's only one magic @gp.
4876 streamlining the gnuplot interface, now there's only one magic @gp.
4873
4877
4874 2002-03-17 Fernando Perez <fperez@colorado.edu>
4878 2002-03-17 Fernando Perez <fperez@colorado.edu>
4875
4879
4876 * IPython/UserConfig/magic_gnuplot.py: new name for the
4880 * IPython/UserConfig/magic_gnuplot.py: new name for the
4877 example-magic_pm.py file. Much enhanced system, now with a shell
4881 example-magic_pm.py file. Much enhanced system, now with a shell
4878 for communicating directly with gnuplot, one command at a time.
4882 for communicating directly with gnuplot, one command at a time.
4879
4883
4880 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4884 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4881 setting __name__=='__main__'.
4885 setting __name__=='__main__'.
4882
4886
4883 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4887 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4884 mini-shell for accessing gnuplot from inside ipython. Should
4888 mini-shell for accessing gnuplot from inside ipython. Should
4885 extend it later for grace access too. Inspired by Arnd's
4889 extend it later for grace access too. Inspired by Arnd's
4886 suggestion.
4890 suggestion.
4887
4891
4888 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4892 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4889 calling magic functions with () in their arguments. Thanks to Arnd
4893 calling magic functions with () in their arguments. Thanks to Arnd
4890 Baecker for pointing this to me.
4894 Baecker for pointing this to me.
4891
4895
4892 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4896 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4893 infinitely for integer or complex arrays (only worked with floats).
4897 infinitely for integer or complex arrays (only worked with floats).
4894
4898
4895 2002-03-16 Fernando Perez <fperez@colorado.edu>
4899 2002-03-16 Fernando Perez <fperez@colorado.edu>
4896
4900
4897 * setup.py: Merged setup and setup_windows into a single script
4901 * setup.py: Merged setup and setup_windows into a single script
4898 which properly handles things for windows users.
4902 which properly handles things for windows users.
4899
4903
4900 2002-03-15 Fernando Perez <fperez@colorado.edu>
4904 2002-03-15 Fernando Perez <fperez@colorado.edu>
4901
4905
4902 * Big change to the manual: now the magics are all automatically
4906 * Big change to the manual: now the magics are all automatically
4903 documented. This information is generated from their docstrings
4907 documented. This information is generated from their docstrings
4904 and put in a latex file included by the manual lyx file. This way
4908 and put in a latex file included by the manual lyx file. This way
4905 we get always up to date information for the magics. The manual
4909 we get always up to date information for the magics. The manual
4906 now also has proper version information, also auto-synced.
4910 now also has proper version information, also auto-synced.
4907
4911
4908 For this to work, an undocumented --magic_docstrings option was added.
4912 For this to work, an undocumented --magic_docstrings option was added.
4909
4913
4910 2002-03-13 Fernando Perez <fperez@colorado.edu>
4914 2002-03-13 Fernando Perez <fperez@colorado.edu>
4911
4915
4912 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4916 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4913 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4917 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4914
4918
4915 2002-03-12 Fernando Perez <fperez@colorado.edu>
4919 2002-03-12 Fernando Perez <fperez@colorado.edu>
4916
4920
4917 * IPython/ultraTB.py (TermColors): changed color escapes again to
4921 * IPython/ultraTB.py (TermColors): changed color escapes again to
4918 fix the (old, reintroduced) line-wrapping bug. Basically, if
4922 fix the (old, reintroduced) line-wrapping bug. Basically, if
4919 \001..\002 aren't given in the color escapes, lines get wrapped
4923 \001..\002 aren't given in the color escapes, lines get wrapped
4920 weirdly. But giving those screws up old xterms and emacs terms. So
4924 weirdly. But giving those screws up old xterms and emacs terms. So
4921 I added some logic for emacs terms to be ok, but I can't identify old
4925 I added some logic for emacs terms to be ok, but I can't identify old
4922 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4926 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4923
4927
4924 2002-03-10 Fernando Perez <fperez@colorado.edu>
4928 2002-03-10 Fernando Perez <fperez@colorado.edu>
4925
4929
4926 * IPython/usage.py (__doc__): Various documentation cleanups and
4930 * IPython/usage.py (__doc__): Various documentation cleanups and
4927 updates, both in usage docstrings and in the manual.
4931 updates, both in usage docstrings and in the manual.
4928
4932
4929 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4933 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4930 handling of caching. Set minimum acceptabe value for having a
4934 handling of caching. Set minimum acceptabe value for having a
4931 cache at 20 values.
4935 cache at 20 values.
4932
4936
4933 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4937 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4934 install_first_time function to a method, renamed it and added an
4938 install_first_time function to a method, renamed it and added an
4935 'upgrade' mode. Now people can update their config directory with
4939 'upgrade' mode. Now people can update their config directory with
4936 a simple command line switch (-upgrade, also new).
4940 a simple command line switch (-upgrade, also new).
4937
4941
4938 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4942 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4939 @file (convenient for automagic users under Python >= 2.2).
4943 @file (convenient for automagic users under Python >= 2.2).
4940 Removed @files (it seemed more like a plural than an abbrev. of
4944 Removed @files (it seemed more like a plural than an abbrev. of
4941 'file show').
4945 'file show').
4942
4946
4943 * IPython/iplib.py (install_first_time): Fixed crash if there were
4947 * IPython/iplib.py (install_first_time): Fixed crash if there were
4944 backup files ('~') in .ipython/ install directory.
4948 backup files ('~') in .ipython/ install directory.
4945
4949
4946 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4950 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4947 system. Things look fine, but these changes are fairly
4951 system. Things look fine, but these changes are fairly
4948 intrusive. Test them for a few days.
4952 intrusive. Test them for a few days.
4949
4953
4950 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4954 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4951 the prompts system. Now all in/out prompt strings are user
4955 the prompts system. Now all in/out prompt strings are user
4952 controllable. This is particularly useful for embedding, as one
4956 controllable. This is particularly useful for embedding, as one
4953 can tag embedded instances with particular prompts.
4957 can tag embedded instances with particular prompts.
4954
4958
4955 Also removed global use of sys.ps1/2, which now allows nested
4959 Also removed global use of sys.ps1/2, which now allows nested
4956 embeddings without any problems. Added command-line options for
4960 embeddings without any problems. Added command-line options for
4957 the prompt strings.
4961 the prompt strings.
4958
4962
4959 2002-03-08 Fernando Perez <fperez@colorado.edu>
4963 2002-03-08 Fernando Perez <fperez@colorado.edu>
4960
4964
4961 * IPython/UserConfig/example-embed-short.py (ipshell): added
4965 * IPython/UserConfig/example-embed-short.py (ipshell): added
4962 example file with the bare minimum code for embedding.
4966 example file with the bare minimum code for embedding.
4963
4967
4964 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4968 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4965 functionality for the embeddable shell to be activated/deactivated
4969 functionality for the embeddable shell to be activated/deactivated
4966 either globally or at each call.
4970 either globally or at each call.
4967
4971
4968 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4972 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4969 rewriting the prompt with '--->' for auto-inputs with proper
4973 rewriting the prompt with '--->' for auto-inputs with proper
4970 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4974 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4971 this is handled by the prompts class itself, as it should.
4975 this is handled by the prompts class itself, as it should.
4972
4976
4973 2002-03-05 Fernando Perez <fperez@colorado.edu>
4977 2002-03-05 Fernando Perez <fperez@colorado.edu>
4974
4978
4975 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4979 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4976 @logstart to avoid name clashes with the math log function.
4980 @logstart to avoid name clashes with the math log function.
4977
4981
4978 * Big updates to X/Emacs section of the manual.
4982 * Big updates to X/Emacs section of the manual.
4979
4983
4980 * Removed ipython_emacs. Milan explained to me how to pass
4984 * Removed ipython_emacs. Milan explained to me how to pass
4981 arguments to ipython through Emacs. Some day I'm going to end up
4985 arguments to ipython through Emacs. Some day I'm going to end up
4982 learning some lisp...
4986 learning some lisp...
4983
4987
4984 2002-03-04 Fernando Perez <fperez@colorado.edu>
4988 2002-03-04 Fernando Perez <fperez@colorado.edu>
4985
4989
4986 * IPython/ipython_emacs: Created script to be used as the
4990 * IPython/ipython_emacs: Created script to be used as the
4987 py-python-command Emacs variable so we can pass IPython
4991 py-python-command Emacs variable so we can pass IPython
4988 parameters. I can't figure out how to tell Emacs directly to pass
4992 parameters. I can't figure out how to tell Emacs directly to pass
4989 parameters to IPython, so a dummy shell script will do it.
4993 parameters to IPython, so a dummy shell script will do it.
4990
4994
4991 Other enhancements made for things to work better under Emacs'
4995 Other enhancements made for things to work better under Emacs'
4992 various types of terminals. Many thanks to Milan Zamazal
4996 various types of terminals. Many thanks to Milan Zamazal
4993 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4997 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4994
4998
4995 2002-03-01 Fernando Perez <fperez@colorado.edu>
4999 2002-03-01 Fernando Perez <fperez@colorado.edu>
4996
5000
4997 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5001 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4998 that loading of readline is now optional. This gives better
5002 that loading of readline is now optional. This gives better
4999 control to emacs users.
5003 control to emacs users.
5000
5004
5001 * IPython/ultraTB.py (__date__): Modified color escape sequences
5005 * IPython/ultraTB.py (__date__): Modified color escape sequences
5002 and now things work fine under xterm and in Emacs' term buffers
5006 and now things work fine under xterm and in Emacs' term buffers
5003 (though not shell ones). Well, in emacs you get colors, but all
5007 (though not shell ones). Well, in emacs you get colors, but all
5004 seem to be 'light' colors (no difference between dark and light
5008 seem to be 'light' colors (no difference between dark and light
5005 ones). But the garbage chars are gone, and also in xterms. It
5009 ones). But the garbage chars are gone, and also in xterms. It
5006 seems that now I'm using 'cleaner' ansi sequences.
5010 seems that now I'm using 'cleaner' ansi sequences.
5007
5011
5008 2002-02-21 Fernando Perez <fperez@colorado.edu>
5012 2002-02-21 Fernando Perez <fperez@colorado.edu>
5009
5013
5010 * Released 0.2.7 (mainly to publish the scoping fix).
5014 * Released 0.2.7 (mainly to publish the scoping fix).
5011
5015
5012 * IPython/Logger.py (Logger.logstate): added. A corresponding
5016 * IPython/Logger.py (Logger.logstate): added. A corresponding
5013 @logstate magic was created.
5017 @logstate magic was created.
5014
5018
5015 * IPython/Magic.py: fixed nested scoping problem under Python
5019 * IPython/Magic.py: fixed nested scoping problem under Python
5016 2.1.x (automagic wasn't working).
5020 2.1.x (automagic wasn't working).
5017
5021
5018 2002-02-20 Fernando Perez <fperez@colorado.edu>
5022 2002-02-20 Fernando Perez <fperez@colorado.edu>
5019
5023
5020 * Released 0.2.6.
5024 * Released 0.2.6.
5021
5025
5022 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5026 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5023 option so that logs can come out without any headers at all.
5027 option so that logs can come out without any headers at all.
5024
5028
5025 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5029 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5026 SciPy.
5030 SciPy.
5027
5031
5028 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5032 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5029 that embedded IPython calls don't require vars() to be explicitly
5033 that embedded IPython calls don't require vars() to be explicitly
5030 passed. Now they are extracted from the caller's frame (code
5034 passed. Now they are extracted from the caller's frame (code
5031 snatched from Eric Jones' weave). Added better documentation to
5035 snatched from Eric Jones' weave). Added better documentation to
5032 the section on embedding and the example file.
5036 the section on embedding and the example file.
5033
5037
5034 * IPython/genutils.py (page): Changed so that under emacs, it just
5038 * IPython/genutils.py (page): Changed so that under emacs, it just
5035 prints the string. You can then page up and down in the emacs
5039 prints the string. You can then page up and down in the emacs
5036 buffer itself. This is how the builtin help() works.
5040 buffer itself. This is how the builtin help() works.
5037
5041
5038 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5042 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5039 macro scoping: macros need to be executed in the user's namespace
5043 macro scoping: macros need to be executed in the user's namespace
5040 to work as if they had been typed by the user.
5044 to work as if they had been typed by the user.
5041
5045
5042 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5046 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5043 execute automatically (no need to type 'exec...'). They then
5047 execute automatically (no need to type 'exec...'). They then
5044 behave like 'true macros'. The printing system was also modified
5048 behave like 'true macros'. The printing system was also modified
5045 for this to work.
5049 for this to work.
5046
5050
5047 2002-02-19 Fernando Perez <fperez@colorado.edu>
5051 2002-02-19 Fernando Perez <fperez@colorado.edu>
5048
5052
5049 * IPython/genutils.py (page_file): new function for paging files
5053 * IPython/genutils.py (page_file): new function for paging files
5050 in an OS-independent way. Also necessary for file viewing to work
5054 in an OS-independent way. Also necessary for file viewing to work
5051 well inside Emacs buffers.
5055 well inside Emacs buffers.
5052 (page): Added checks for being in an emacs buffer.
5056 (page): Added checks for being in an emacs buffer.
5053 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5057 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5054 same bug in iplib.
5058 same bug in iplib.
5055
5059
5056 2002-02-18 Fernando Perez <fperez@colorado.edu>
5060 2002-02-18 Fernando Perez <fperez@colorado.edu>
5057
5061
5058 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5062 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5059 of readline so that IPython can work inside an Emacs buffer.
5063 of readline so that IPython can work inside an Emacs buffer.
5060
5064
5061 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5065 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5062 method signatures (they weren't really bugs, but it looks cleaner
5066 method signatures (they weren't really bugs, but it looks cleaner
5063 and keeps PyChecker happy).
5067 and keeps PyChecker happy).
5064
5068
5065 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5069 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5066 for implementing various user-defined hooks. Currently only
5070 for implementing various user-defined hooks. Currently only
5067 display is done.
5071 display is done.
5068
5072
5069 * IPython/Prompts.py (CachedOutput._display): changed display
5073 * IPython/Prompts.py (CachedOutput._display): changed display
5070 functions so that they can be dynamically changed by users easily.
5074 functions so that they can be dynamically changed by users easily.
5071
5075
5072 * IPython/Extensions/numeric_formats.py (num_display): added an
5076 * IPython/Extensions/numeric_formats.py (num_display): added an
5073 extension for printing NumPy arrays in flexible manners. It
5077 extension for printing NumPy arrays in flexible manners. It
5074 doesn't do anything yet, but all the structure is in
5078 doesn't do anything yet, but all the structure is in
5075 place. Ultimately the plan is to implement output format control
5079 place. Ultimately the plan is to implement output format control
5076 like in Octave.
5080 like in Octave.
5077
5081
5078 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5082 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5079 methods are found at run-time by all the automatic machinery.
5083 methods are found at run-time by all the automatic machinery.
5080
5084
5081 2002-02-17 Fernando Perez <fperez@colorado.edu>
5085 2002-02-17 Fernando Perez <fperez@colorado.edu>
5082
5086
5083 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5087 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5084 whole file a little.
5088 whole file a little.
5085
5089
5086 * ToDo: closed this document. Now there's a new_design.lyx
5090 * ToDo: closed this document. Now there's a new_design.lyx
5087 document for all new ideas. Added making a pdf of it for the
5091 document for all new ideas. Added making a pdf of it for the
5088 end-user distro.
5092 end-user distro.
5089
5093
5090 * IPython/Logger.py (Logger.switch_log): Created this to replace
5094 * IPython/Logger.py (Logger.switch_log): Created this to replace
5091 logon() and logoff(). It also fixes a nasty crash reported by
5095 logon() and logoff(). It also fixes a nasty crash reported by
5092 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5096 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5093
5097
5094 * IPython/iplib.py (complete): got auto-completion to work with
5098 * IPython/iplib.py (complete): got auto-completion to work with
5095 automagic (I had wanted this for a long time).
5099 automagic (I had wanted this for a long time).
5096
5100
5097 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5101 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5098 to @file, since file() is now a builtin and clashes with automagic
5102 to @file, since file() is now a builtin and clashes with automagic
5099 for @file.
5103 for @file.
5100
5104
5101 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5105 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5102 of this was previously in iplib, which had grown to more than 2000
5106 of this was previously in iplib, which had grown to more than 2000
5103 lines, way too long. No new functionality, but it makes managing
5107 lines, way too long. No new functionality, but it makes managing
5104 the code a bit easier.
5108 the code a bit easier.
5105
5109
5106 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5110 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5107 information to crash reports.
5111 information to crash reports.
5108
5112
5109 2002-02-12 Fernando Perez <fperez@colorado.edu>
5113 2002-02-12 Fernando Perez <fperez@colorado.edu>
5110
5114
5111 * Released 0.2.5.
5115 * Released 0.2.5.
5112
5116
5113 2002-02-11 Fernando Perez <fperez@colorado.edu>
5117 2002-02-11 Fernando Perez <fperez@colorado.edu>
5114
5118
5115 * Wrote a relatively complete Windows installer. It puts
5119 * Wrote a relatively complete Windows installer. It puts
5116 everything in place, creates Start Menu entries and fixes the
5120 everything in place, creates Start Menu entries and fixes the
5117 color issues. Nothing fancy, but it works.
5121 color issues. Nothing fancy, but it works.
5118
5122
5119 2002-02-10 Fernando Perez <fperez@colorado.edu>
5123 2002-02-10 Fernando Perez <fperez@colorado.edu>
5120
5124
5121 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5125 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5122 os.path.expanduser() call so that we can type @run ~/myfile.py and
5126 os.path.expanduser() call so that we can type @run ~/myfile.py and
5123 have thigs work as expected.
5127 have thigs work as expected.
5124
5128
5125 * IPython/genutils.py (page): fixed exception handling so things
5129 * IPython/genutils.py (page): fixed exception handling so things
5126 work both in Unix and Windows correctly. Quitting a pager triggers
5130 work both in Unix and Windows correctly. Quitting a pager triggers
5127 an IOError/broken pipe in Unix, and in windows not finding a pager
5131 an IOError/broken pipe in Unix, and in windows not finding a pager
5128 is also an IOError, so I had to actually look at the return value
5132 is also an IOError, so I had to actually look at the return value
5129 of the exception, not just the exception itself. Should be ok now.
5133 of the exception, not just the exception itself. Should be ok now.
5130
5134
5131 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5135 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5132 modified to allow case-insensitive color scheme changes.
5136 modified to allow case-insensitive color scheme changes.
5133
5137
5134 2002-02-09 Fernando Perez <fperez@colorado.edu>
5138 2002-02-09 Fernando Perez <fperez@colorado.edu>
5135
5139
5136 * IPython/genutils.py (native_line_ends): new function to leave
5140 * IPython/genutils.py (native_line_ends): new function to leave
5137 user config files with os-native line-endings.
5141 user config files with os-native line-endings.
5138
5142
5139 * README and manual updates.
5143 * README and manual updates.
5140
5144
5141 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5145 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5142 instead of StringType to catch Unicode strings.
5146 instead of StringType to catch Unicode strings.
5143
5147
5144 * IPython/genutils.py (filefind): fixed bug for paths with
5148 * IPython/genutils.py (filefind): fixed bug for paths with
5145 embedded spaces (very common in Windows).
5149 embedded spaces (very common in Windows).
5146
5150
5147 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5151 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5148 files under Windows, so that they get automatically associated
5152 files under Windows, so that they get automatically associated
5149 with a text editor. Windows makes it a pain to handle
5153 with a text editor. Windows makes it a pain to handle
5150 extension-less files.
5154 extension-less files.
5151
5155
5152 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5156 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5153 warning about readline only occur for Posix. In Windows there's no
5157 warning about readline only occur for Posix. In Windows there's no
5154 way to get readline, so why bother with the warning.
5158 way to get readline, so why bother with the warning.
5155
5159
5156 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5160 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5157 for __str__ instead of dir(self), since dir() changed in 2.2.
5161 for __str__ instead of dir(self), since dir() changed in 2.2.
5158
5162
5159 * Ported to Windows! Tested on XP, I suspect it should work fine
5163 * Ported to Windows! Tested on XP, I suspect it should work fine
5160 on NT/2000, but I don't think it will work on 98 et al. That
5164 on NT/2000, but I don't think it will work on 98 et al. That
5161 series of Windows is such a piece of junk anyway that I won't try
5165 series of Windows is such a piece of junk anyway that I won't try
5162 porting it there. The XP port was straightforward, showed a few
5166 porting it there. The XP port was straightforward, showed a few
5163 bugs here and there (fixed all), in particular some string
5167 bugs here and there (fixed all), in particular some string
5164 handling stuff which required considering Unicode strings (which
5168 handling stuff which required considering Unicode strings (which
5165 Windows uses). This is good, but hasn't been too tested :) No
5169 Windows uses). This is good, but hasn't been too tested :) No
5166 fancy installer yet, I'll put a note in the manual so people at
5170 fancy installer yet, I'll put a note in the manual so people at
5167 least make manually a shortcut.
5171 least make manually a shortcut.
5168
5172
5169 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5173 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5170 into a single one, "colors". This now controls both prompt and
5174 into a single one, "colors". This now controls both prompt and
5171 exception color schemes, and can be changed both at startup
5175 exception color schemes, and can be changed both at startup
5172 (either via command-line switches or via ipythonrc files) and at
5176 (either via command-line switches or via ipythonrc files) and at
5173 runtime, with @colors.
5177 runtime, with @colors.
5174 (Magic.magic_run): renamed @prun to @run and removed the old
5178 (Magic.magic_run): renamed @prun to @run and removed the old
5175 @run. The two were too similar to warrant keeping both.
5179 @run. The two were too similar to warrant keeping both.
5176
5180
5177 2002-02-03 Fernando Perez <fperez@colorado.edu>
5181 2002-02-03 Fernando Perez <fperez@colorado.edu>
5178
5182
5179 * IPython/iplib.py (install_first_time): Added comment on how to
5183 * IPython/iplib.py (install_first_time): Added comment on how to
5180 configure the color options for first-time users. Put a <return>
5184 configure the color options for first-time users. Put a <return>
5181 request at the end so that small-terminal users get a chance to
5185 request at the end so that small-terminal users get a chance to
5182 read the startup info.
5186 read the startup info.
5183
5187
5184 2002-01-23 Fernando Perez <fperez@colorado.edu>
5188 2002-01-23 Fernando Perez <fperez@colorado.edu>
5185
5189
5186 * IPython/iplib.py (CachedOutput.update): Changed output memory
5190 * IPython/iplib.py (CachedOutput.update): Changed output memory
5187 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5191 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5188 input history we still use _i. Did this b/c these variable are
5192 input history we still use _i. Did this b/c these variable are
5189 very commonly used in interactive work, so the less we need to
5193 very commonly used in interactive work, so the less we need to
5190 type the better off we are.
5194 type the better off we are.
5191 (Magic.magic_prun): updated @prun to better handle the namespaces
5195 (Magic.magic_prun): updated @prun to better handle the namespaces
5192 the file will run in, including a fix for __name__ not being set
5196 the file will run in, including a fix for __name__ not being set
5193 before.
5197 before.
5194
5198
5195 2002-01-20 Fernando Perez <fperez@colorado.edu>
5199 2002-01-20 Fernando Perez <fperez@colorado.edu>
5196
5200
5197 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5201 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5198 extra garbage for Python 2.2. Need to look more carefully into
5202 extra garbage for Python 2.2. Need to look more carefully into
5199 this later.
5203 this later.
5200
5204
5201 2002-01-19 Fernando Perez <fperez@colorado.edu>
5205 2002-01-19 Fernando Perez <fperez@colorado.edu>
5202
5206
5203 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5207 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5204 display SyntaxError exceptions properly formatted when they occur
5208 display SyntaxError exceptions properly formatted when they occur
5205 (they can be triggered by imported code).
5209 (they can be triggered by imported code).
5206
5210
5207 2002-01-18 Fernando Perez <fperez@colorado.edu>
5211 2002-01-18 Fernando Perez <fperez@colorado.edu>
5208
5212
5209 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5213 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5210 SyntaxError exceptions are reported nicely formatted, instead of
5214 SyntaxError exceptions are reported nicely formatted, instead of
5211 spitting out only offset information as before.
5215 spitting out only offset information as before.
5212 (Magic.magic_prun): Added the @prun function for executing
5216 (Magic.magic_prun): Added the @prun function for executing
5213 programs with command line args inside IPython.
5217 programs with command line args inside IPython.
5214
5218
5215 2002-01-16 Fernando Perez <fperez@colorado.edu>
5219 2002-01-16 Fernando Perez <fperez@colorado.edu>
5216
5220
5217 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5221 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5218 to *not* include the last item given in a range. This brings their
5222 to *not* include the last item given in a range. This brings their
5219 behavior in line with Python's slicing:
5223 behavior in line with Python's slicing:
5220 a[n1:n2] -> a[n1]...a[n2-1]
5224 a[n1:n2] -> a[n1]...a[n2-1]
5221 It may be a bit less convenient, but I prefer to stick to Python's
5225 It may be a bit less convenient, but I prefer to stick to Python's
5222 conventions *everywhere*, so users never have to wonder.
5226 conventions *everywhere*, so users never have to wonder.
5223 (Magic.magic_macro): Added @macro function to ease the creation of
5227 (Magic.magic_macro): Added @macro function to ease the creation of
5224 macros.
5228 macros.
5225
5229
5226 2002-01-05 Fernando Perez <fperez@colorado.edu>
5230 2002-01-05 Fernando Perez <fperez@colorado.edu>
5227
5231
5228 * Released 0.2.4.
5232 * Released 0.2.4.
5229
5233
5230 * IPython/iplib.py (Magic.magic_pdef):
5234 * IPython/iplib.py (Magic.magic_pdef):
5231 (InteractiveShell.safe_execfile): report magic lines and error
5235 (InteractiveShell.safe_execfile): report magic lines and error
5232 lines without line numbers so one can easily copy/paste them for
5236 lines without line numbers so one can easily copy/paste them for
5233 re-execution.
5237 re-execution.
5234
5238
5235 * Updated manual with recent changes.
5239 * Updated manual with recent changes.
5236
5240
5237 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5241 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5238 docstring printing when class? is called. Very handy for knowing
5242 docstring printing when class? is called. Very handy for knowing
5239 how to create class instances (as long as __init__ is well
5243 how to create class instances (as long as __init__ is well
5240 documented, of course :)
5244 documented, of course :)
5241 (Magic.magic_doc): print both class and constructor docstrings.
5245 (Magic.magic_doc): print both class and constructor docstrings.
5242 (Magic.magic_pdef): give constructor info if passed a class and
5246 (Magic.magic_pdef): give constructor info if passed a class and
5243 __call__ info for callable object instances.
5247 __call__ info for callable object instances.
5244
5248
5245 2002-01-04 Fernando Perez <fperez@colorado.edu>
5249 2002-01-04 Fernando Perez <fperez@colorado.edu>
5246
5250
5247 * Made deep_reload() off by default. It doesn't always work
5251 * Made deep_reload() off by default. It doesn't always work
5248 exactly as intended, so it's probably safer to have it off. It's
5252 exactly as intended, so it's probably safer to have it off. It's
5249 still available as dreload() anyway, so nothing is lost.
5253 still available as dreload() anyway, so nothing is lost.
5250
5254
5251 2002-01-02 Fernando Perez <fperez@colorado.edu>
5255 2002-01-02 Fernando Perez <fperez@colorado.edu>
5252
5256
5253 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5257 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5254 so I wanted an updated release).
5258 so I wanted an updated release).
5255
5259
5256 2001-12-27 Fernando Perez <fperez@colorado.edu>
5260 2001-12-27 Fernando Perez <fperez@colorado.edu>
5257
5261
5258 * IPython/iplib.py (InteractiveShell.interact): Added the original
5262 * IPython/iplib.py (InteractiveShell.interact): Added the original
5259 code from 'code.py' for this module in order to change the
5263 code from 'code.py' for this module in order to change the
5260 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5264 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5261 the history cache would break when the user hit Ctrl-C, and
5265 the history cache would break when the user hit Ctrl-C, and
5262 interact() offers no way to add any hooks to it.
5266 interact() offers no way to add any hooks to it.
5263
5267
5264 2001-12-23 Fernando Perez <fperez@colorado.edu>
5268 2001-12-23 Fernando Perez <fperez@colorado.edu>
5265
5269
5266 * setup.py: added check for 'MANIFEST' before trying to remove
5270 * setup.py: added check for 'MANIFEST' before trying to remove
5267 it. Thanks to Sean Reifschneider.
5271 it. Thanks to Sean Reifschneider.
5268
5272
5269 2001-12-22 Fernando Perez <fperez@colorado.edu>
5273 2001-12-22 Fernando Perez <fperez@colorado.edu>
5270
5274
5271 * Released 0.2.2.
5275 * Released 0.2.2.
5272
5276
5273 * Finished (reasonably) writing the manual. Later will add the
5277 * Finished (reasonably) writing the manual. Later will add the
5274 python-standard navigation stylesheets, but for the time being
5278 python-standard navigation stylesheets, but for the time being
5275 it's fairly complete. Distribution will include html and pdf
5279 it's fairly complete. Distribution will include html and pdf
5276 versions.
5280 versions.
5277
5281
5278 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5282 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5279 (MayaVi author).
5283 (MayaVi author).
5280
5284
5281 2001-12-21 Fernando Perez <fperez@colorado.edu>
5285 2001-12-21 Fernando Perez <fperez@colorado.edu>
5282
5286
5283 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5287 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5284 good public release, I think (with the manual and the distutils
5288 good public release, I think (with the manual and the distutils
5285 installer). The manual can use some work, but that can go
5289 installer). The manual can use some work, but that can go
5286 slowly. Otherwise I think it's quite nice for end users. Next
5290 slowly. Otherwise I think it's quite nice for end users. Next
5287 summer, rewrite the guts of it...
5291 summer, rewrite the guts of it...
5288
5292
5289 * Changed format of ipythonrc files to use whitespace as the
5293 * Changed format of ipythonrc files to use whitespace as the
5290 separator instead of an explicit '='. Cleaner.
5294 separator instead of an explicit '='. Cleaner.
5291
5295
5292 2001-12-20 Fernando Perez <fperez@colorado.edu>
5296 2001-12-20 Fernando Perez <fperez@colorado.edu>
5293
5297
5294 * Started a manual in LyX. For now it's just a quick merge of the
5298 * Started a manual in LyX. For now it's just a quick merge of the
5295 various internal docstrings and READMEs. Later it may grow into a
5299 various internal docstrings and READMEs. Later it may grow into a
5296 nice, full-blown manual.
5300 nice, full-blown manual.
5297
5301
5298 * Set up a distutils based installer. Installation should now be
5302 * Set up a distutils based installer. Installation should now be
5299 trivially simple for end-users.
5303 trivially simple for end-users.
5300
5304
5301 2001-12-11 Fernando Perez <fperez@colorado.edu>
5305 2001-12-11 Fernando Perez <fperez@colorado.edu>
5302
5306
5303 * Released 0.2.0. First public release, announced it at
5307 * Released 0.2.0. First public release, announced it at
5304 comp.lang.python. From now on, just bugfixes...
5308 comp.lang.python. From now on, just bugfixes...
5305
5309
5306 * Went through all the files, set copyright/license notices and
5310 * Went through all the files, set copyright/license notices and
5307 cleaned up things. Ready for release.
5311 cleaned up things. Ready for release.
5308
5312
5309 2001-12-10 Fernando Perez <fperez@colorado.edu>
5313 2001-12-10 Fernando Perez <fperez@colorado.edu>
5310
5314
5311 * Changed the first-time installer not to use tarfiles. It's more
5315 * Changed the first-time installer not to use tarfiles. It's more
5312 robust now and less unix-dependent. Also makes it easier for
5316 robust now and less unix-dependent. Also makes it easier for
5313 people to later upgrade versions.
5317 people to later upgrade versions.
5314
5318
5315 * Changed @exit to @abort to reflect the fact that it's pretty
5319 * Changed @exit to @abort to reflect the fact that it's pretty
5316 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5320 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5317 becomes significant only when IPyhton is embedded: in that case,
5321 becomes significant only when IPyhton is embedded: in that case,
5318 C-D closes IPython only, but @abort kills the enclosing program
5322 C-D closes IPython only, but @abort kills the enclosing program
5319 too (unless it had called IPython inside a try catching
5323 too (unless it had called IPython inside a try catching
5320 SystemExit).
5324 SystemExit).
5321
5325
5322 * Created Shell module which exposes the actuall IPython Shell
5326 * Created Shell module which exposes the actuall IPython Shell
5323 classes, currently the normal and the embeddable one. This at
5327 classes, currently the normal and the embeddable one. This at
5324 least offers a stable interface we won't need to change when
5328 least offers a stable interface we won't need to change when
5325 (later) the internals are rewritten. That rewrite will be confined
5329 (later) the internals are rewritten. That rewrite will be confined
5326 to iplib and ipmaker, but the Shell interface should remain as is.
5330 to iplib and ipmaker, but the Shell interface should remain as is.
5327
5331
5328 * Added embed module which offers an embeddable IPShell object,
5332 * Added embed module which offers an embeddable IPShell object,
5329 useful to fire up IPython *inside* a running program. Great for
5333 useful to fire up IPython *inside* a running program. Great for
5330 debugging or dynamical data analysis.
5334 debugging or dynamical data analysis.
5331
5335
5332 2001-12-08 Fernando Perez <fperez@colorado.edu>
5336 2001-12-08 Fernando Perez <fperez@colorado.edu>
5333
5337
5334 * Fixed small bug preventing seeing info from methods of defined
5338 * Fixed small bug preventing seeing info from methods of defined
5335 objects (incorrect namespace in _ofind()).
5339 objects (incorrect namespace in _ofind()).
5336
5340
5337 * Documentation cleanup. Moved the main usage docstrings to a
5341 * Documentation cleanup. Moved the main usage docstrings to a
5338 separate file, usage.py (cleaner to maintain, and hopefully in the
5342 separate file, usage.py (cleaner to maintain, and hopefully in the
5339 future some perlpod-like way of producing interactive, man and
5343 future some perlpod-like way of producing interactive, man and
5340 html docs out of it will be found).
5344 html docs out of it will be found).
5341
5345
5342 * Added @profile to see your profile at any time.
5346 * Added @profile to see your profile at any time.
5343
5347
5344 * Added @p as an alias for 'print'. It's especially convenient if
5348 * Added @p as an alias for 'print'. It's especially convenient if
5345 using automagic ('p x' prints x).
5349 using automagic ('p x' prints x).
5346
5350
5347 * Small cleanups and fixes after a pychecker run.
5351 * Small cleanups and fixes after a pychecker run.
5348
5352
5349 * Changed the @cd command to handle @cd - and @cd -<n> for
5353 * Changed the @cd command to handle @cd - and @cd -<n> for
5350 visiting any directory in _dh.
5354 visiting any directory in _dh.
5351
5355
5352 * Introduced _dh, a history of visited directories. @dhist prints
5356 * Introduced _dh, a history of visited directories. @dhist prints
5353 it out with numbers.
5357 it out with numbers.
5354
5358
5355 2001-12-07 Fernando Perez <fperez@colorado.edu>
5359 2001-12-07 Fernando Perez <fperez@colorado.edu>
5356
5360
5357 * Released 0.1.22
5361 * Released 0.1.22
5358
5362
5359 * Made initialization a bit more robust against invalid color
5363 * Made initialization a bit more robust against invalid color
5360 options in user input (exit, not traceback-crash).
5364 options in user input (exit, not traceback-crash).
5361
5365
5362 * Changed the bug crash reporter to write the report only in the
5366 * Changed the bug crash reporter to write the report only in the
5363 user's .ipython directory. That way IPython won't litter people's
5367 user's .ipython directory. That way IPython won't litter people's
5364 hard disks with crash files all over the place. Also print on
5368 hard disks with crash files all over the place. Also print on
5365 screen the necessary mail command.
5369 screen the necessary mail command.
5366
5370
5367 * With the new ultraTB, implemented LightBG color scheme for light
5371 * With the new ultraTB, implemented LightBG color scheme for light
5368 background terminals. A lot of people like white backgrounds, so I
5372 background terminals. A lot of people like white backgrounds, so I
5369 guess we should at least give them something readable.
5373 guess we should at least give them something readable.
5370
5374
5371 2001-12-06 Fernando Perez <fperez@colorado.edu>
5375 2001-12-06 Fernando Perez <fperez@colorado.edu>
5372
5376
5373 * Modified the structure of ultraTB. Now there's a proper class
5377 * Modified the structure of ultraTB. Now there's a proper class
5374 for tables of color schemes which allow adding schemes easily and
5378 for tables of color schemes which allow adding schemes easily and
5375 switching the active scheme without creating a new instance every
5379 switching the active scheme without creating a new instance every
5376 time (which was ridiculous). The syntax for creating new schemes
5380 time (which was ridiculous). The syntax for creating new schemes
5377 is also cleaner. I think ultraTB is finally done, with a clean
5381 is also cleaner. I think ultraTB is finally done, with a clean
5378 class structure. Names are also much cleaner (now there's proper
5382 class structure. Names are also much cleaner (now there's proper
5379 color tables, no need for every variable to also have 'color' in
5383 color tables, no need for every variable to also have 'color' in
5380 its name).
5384 its name).
5381
5385
5382 * Broke down genutils into separate files. Now genutils only
5386 * Broke down genutils into separate files. Now genutils only
5383 contains utility functions, and classes have been moved to their
5387 contains utility functions, and classes have been moved to their
5384 own files (they had enough independent functionality to warrant
5388 own files (they had enough independent functionality to warrant
5385 it): ConfigLoader, OutputTrap, Struct.
5389 it): ConfigLoader, OutputTrap, Struct.
5386
5390
5387 2001-12-05 Fernando Perez <fperez@colorado.edu>
5391 2001-12-05 Fernando Perez <fperez@colorado.edu>
5388
5392
5389 * IPython turns 21! Released version 0.1.21, as a candidate for
5393 * IPython turns 21! Released version 0.1.21, as a candidate for
5390 public consumption. If all goes well, release in a few days.
5394 public consumption. If all goes well, release in a few days.
5391
5395
5392 * Fixed path bug (files in Extensions/ directory wouldn't be found
5396 * Fixed path bug (files in Extensions/ directory wouldn't be found
5393 unless IPython/ was explicitly in sys.path).
5397 unless IPython/ was explicitly in sys.path).
5394
5398
5395 * Extended the FlexCompleter class as MagicCompleter to allow
5399 * Extended the FlexCompleter class as MagicCompleter to allow
5396 completion of @-starting lines.
5400 completion of @-starting lines.
5397
5401
5398 * Created __release__.py file as a central repository for release
5402 * Created __release__.py file as a central repository for release
5399 info that other files can read from.
5403 info that other files can read from.
5400
5404
5401 * Fixed small bug in logging: when logging was turned on in
5405 * Fixed small bug in logging: when logging was turned on in
5402 mid-session, old lines with special meanings (!@?) were being
5406 mid-session, old lines with special meanings (!@?) were being
5403 logged without the prepended comment, which is necessary since
5407 logged without the prepended comment, which is necessary since
5404 they are not truly valid python syntax. This should make session
5408 they are not truly valid python syntax. This should make session
5405 restores produce less errors.
5409 restores produce less errors.
5406
5410
5407 * The namespace cleanup forced me to make a FlexCompleter class
5411 * The namespace cleanup forced me to make a FlexCompleter class
5408 which is nothing but a ripoff of rlcompleter, but with selectable
5412 which is nothing but a ripoff of rlcompleter, but with selectable
5409 namespace (rlcompleter only works in __main__.__dict__). I'll try
5413 namespace (rlcompleter only works in __main__.__dict__). I'll try
5410 to submit a note to the authors to see if this change can be
5414 to submit a note to the authors to see if this change can be
5411 incorporated in future rlcompleter releases (Dec.6: done)
5415 incorporated in future rlcompleter releases (Dec.6: done)
5412
5416
5413 * More fixes to namespace handling. It was a mess! Now all
5417 * More fixes to namespace handling. It was a mess! Now all
5414 explicit references to __main__.__dict__ are gone (except when
5418 explicit references to __main__.__dict__ are gone (except when
5415 really needed) and everything is handled through the namespace
5419 really needed) and everything is handled through the namespace
5416 dicts in the IPython instance. We seem to be getting somewhere
5420 dicts in the IPython instance. We seem to be getting somewhere
5417 with this, finally...
5421 with this, finally...
5418
5422
5419 * Small documentation updates.
5423 * Small documentation updates.
5420
5424
5421 * Created the Extensions directory under IPython (with an
5425 * Created the Extensions directory under IPython (with an
5422 __init__.py). Put the PhysicalQ stuff there. This directory should
5426 __init__.py). Put the PhysicalQ stuff there. This directory should
5423 be used for all special-purpose extensions.
5427 be used for all special-purpose extensions.
5424
5428
5425 * File renaming:
5429 * File renaming:
5426 ipythonlib --> ipmaker
5430 ipythonlib --> ipmaker
5427 ipplib --> iplib
5431 ipplib --> iplib
5428 This makes a bit more sense in terms of what these files actually do.
5432 This makes a bit more sense in terms of what these files actually do.
5429
5433
5430 * Moved all the classes and functions in ipythonlib to ipplib, so
5434 * Moved all the classes and functions in ipythonlib to ipplib, so
5431 now ipythonlib only has make_IPython(). This will ease up its
5435 now ipythonlib only has make_IPython(). This will ease up its
5432 splitting in smaller functional chunks later.
5436 splitting in smaller functional chunks later.
5433
5437
5434 * Cleaned up (done, I think) output of @whos. Better column
5438 * Cleaned up (done, I think) output of @whos. Better column
5435 formatting, and now shows str(var) for as much as it can, which is
5439 formatting, and now shows str(var) for as much as it can, which is
5436 typically what one gets with a 'print var'.
5440 typically what one gets with a 'print var'.
5437
5441
5438 2001-12-04 Fernando Perez <fperez@colorado.edu>
5442 2001-12-04 Fernando Perez <fperez@colorado.edu>
5439
5443
5440 * Fixed namespace problems. Now builtin/IPyhton/user names get
5444 * Fixed namespace problems. Now builtin/IPyhton/user names get
5441 properly reported in their namespace. Internal namespace handling
5445 properly reported in their namespace. Internal namespace handling
5442 is finally getting decent (not perfect yet, but much better than
5446 is finally getting decent (not perfect yet, but much better than
5443 the ad-hoc mess we had).
5447 the ad-hoc mess we had).
5444
5448
5445 * Removed -exit option. If people just want to run a python
5449 * Removed -exit option. If people just want to run a python
5446 script, that's what the normal interpreter is for. Less
5450 script, that's what the normal interpreter is for. Less
5447 unnecessary options, less chances for bugs.
5451 unnecessary options, less chances for bugs.
5448
5452
5449 * Added a crash handler which generates a complete post-mortem if
5453 * Added a crash handler which generates a complete post-mortem if
5450 IPython crashes. This will help a lot in tracking bugs down the
5454 IPython crashes. This will help a lot in tracking bugs down the
5451 road.
5455 road.
5452
5456
5453 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5457 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5454 which were boud to functions being reassigned would bypass the
5458 which were boud to functions being reassigned would bypass the
5455 logger, breaking the sync of _il with the prompt counter. This
5459 logger, breaking the sync of _il with the prompt counter. This
5456 would then crash IPython later when a new line was logged.
5460 would then crash IPython later when a new line was logged.
5457
5461
5458 2001-12-02 Fernando Perez <fperez@colorado.edu>
5462 2001-12-02 Fernando Perez <fperez@colorado.edu>
5459
5463
5460 * Made IPython a package. This means people don't have to clutter
5464 * Made IPython a package. This means people don't have to clutter
5461 their sys.path with yet another directory. Changed the INSTALL
5465 their sys.path with yet another directory. Changed the INSTALL
5462 file accordingly.
5466 file accordingly.
5463
5467
5464 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5468 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5465 sorts its output (so @who shows it sorted) and @whos formats the
5469 sorts its output (so @who shows it sorted) and @whos formats the
5466 table according to the width of the first column. Nicer, easier to
5470 table according to the width of the first column. Nicer, easier to
5467 read. Todo: write a generic table_format() which takes a list of
5471 read. Todo: write a generic table_format() which takes a list of
5468 lists and prints it nicely formatted, with optional row/column
5472 lists and prints it nicely formatted, with optional row/column
5469 separators and proper padding and justification.
5473 separators and proper padding and justification.
5470
5474
5471 * Released 0.1.20
5475 * Released 0.1.20
5472
5476
5473 * Fixed bug in @log which would reverse the inputcache list (a
5477 * Fixed bug in @log which would reverse the inputcache list (a
5474 copy operation was missing).
5478 copy operation was missing).
5475
5479
5476 * Code cleanup. @config was changed to use page(). Better, since
5480 * Code cleanup. @config was changed to use page(). Better, since
5477 its output is always quite long.
5481 its output is always quite long.
5478
5482
5479 * Itpl is back as a dependency. I was having too many problems
5483 * Itpl is back as a dependency. I was having too many problems
5480 getting the parametric aliases to work reliably, and it's just
5484 getting the parametric aliases to work reliably, and it's just
5481 easier to code weird string operations with it than playing %()s
5485 easier to code weird string operations with it than playing %()s
5482 games. It's only ~6k, so I don't think it's too big a deal.
5486 games. It's only ~6k, so I don't think it's too big a deal.
5483
5487
5484 * Found (and fixed) a very nasty bug with history. !lines weren't
5488 * Found (and fixed) a very nasty bug with history. !lines weren't
5485 getting cached, and the out of sync caches would crash
5489 getting cached, and the out of sync caches would crash
5486 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5490 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5487 division of labor a bit better. Bug fixed, cleaner structure.
5491 division of labor a bit better. Bug fixed, cleaner structure.
5488
5492
5489 2001-12-01 Fernando Perez <fperez@colorado.edu>
5493 2001-12-01 Fernando Perez <fperez@colorado.edu>
5490
5494
5491 * Released 0.1.19
5495 * Released 0.1.19
5492
5496
5493 * Added option -n to @hist to prevent line number printing. Much
5497 * Added option -n to @hist to prevent line number printing. Much
5494 easier to copy/paste code this way.
5498 easier to copy/paste code this way.
5495
5499
5496 * Created global _il to hold the input list. Allows easy
5500 * Created global _il to hold the input list. Allows easy
5497 re-execution of blocks of code by slicing it (inspired by Janko's
5501 re-execution of blocks of code by slicing it (inspired by Janko's
5498 comment on 'macros').
5502 comment on 'macros').
5499
5503
5500 * Small fixes and doc updates.
5504 * Small fixes and doc updates.
5501
5505
5502 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5506 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5503 much too fragile with automagic. Handles properly multi-line
5507 much too fragile with automagic. Handles properly multi-line
5504 statements and takes parameters.
5508 statements and takes parameters.
5505
5509
5506 2001-11-30 Fernando Perez <fperez@colorado.edu>
5510 2001-11-30 Fernando Perez <fperez@colorado.edu>
5507
5511
5508 * Version 0.1.18 released.
5512 * Version 0.1.18 released.
5509
5513
5510 * Fixed nasty namespace bug in initial module imports.
5514 * Fixed nasty namespace bug in initial module imports.
5511
5515
5512 * Added copyright/license notes to all code files (except
5516 * Added copyright/license notes to all code files (except
5513 DPyGetOpt). For the time being, LGPL. That could change.
5517 DPyGetOpt). For the time being, LGPL. That could change.
5514
5518
5515 * Rewrote a much nicer README, updated INSTALL, cleaned up
5519 * Rewrote a much nicer README, updated INSTALL, cleaned up
5516 ipythonrc-* samples.
5520 ipythonrc-* samples.
5517
5521
5518 * Overall code/documentation cleanup. Basically ready for
5522 * Overall code/documentation cleanup. Basically ready for
5519 release. Only remaining thing: licence decision (LGPL?).
5523 release. Only remaining thing: licence decision (LGPL?).
5520
5524
5521 * Converted load_config to a class, ConfigLoader. Now recursion
5525 * Converted load_config to a class, ConfigLoader. Now recursion
5522 control is better organized. Doesn't include the same file twice.
5526 control is better organized. Doesn't include the same file twice.
5523
5527
5524 2001-11-29 Fernando Perez <fperez@colorado.edu>
5528 2001-11-29 Fernando Perez <fperez@colorado.edu>
5525
5529
5526 * Got input history working. Changed output history variables from
5530 * Got input history working. Changed output history variables from
5527 _p to _o so that _i is for input and _o for output. Just cleaner
5531 _p to _o so that _i is for input and _o for output. Just cleaner
5528 convention.
5532 convention.
5529
5533
5530 * Implemented parametric aliases. This pretty much allows the
5534 * Implemented parametric aliases. This pretty much allows the
5531 alias system to offer full-blown shell convenience, I think.
5535 alias system to offer full-blown shell convenience, I think.
5532
5536
5533 * Version 0.1.17 released, 0.1.18 opened.
5537 * Version 0.1.17 released, 0.1.18 opened.
5534
5538
5535 * dot_ipython/ipythonrc (alias): added documentation.
5539 * dot_ipython/ipythonrc (alias): added documentation.
5536 (xcolor): Fixed small bug (xcolors -> xcolor)
5540 (xcolor): Fixed small bug (xcolors -> xcolor)
5537
5541
5538 * Changed the alias system. Now alias is a magic command to define
5542 * Changed the alias system. Now alias is a magic command to define
5539 aliases just like the shell. Rationale: the builtin magics should
5543 aliases just like the shell. Rationale: the builtin magics should
5540 be there for things deeply connected to IPython's
5544 be there for things deeply connected to IPython's
5541 architecture. And this is a much lighter system for what I think
5545 architecture. And this is a much lighter system for what I think
5542 is the really important feature: allowing users to define quickly
5546 is the really important feature: allowing users to define quickly
5543 magics that will do shell things for them, so they can customize
5547 magics that will do shell things for them, so they can customize
5544 IPython easily to match their work habits. If someone is really
5548 IPython easily to match their work habits. If someone is really
5545 desperate to have another name for a builtin alias, they can
5549 desperate to have another name for a builtin alias, they can
5546 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5550 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5547 works.
5551 works.
5548
5552
5549 2001-11-28 Fernando Perez <fperez@colorado.edu>
5553 2001-11-28 Fernando Perez <fperez@colorado.edu>
5550
5554
5551 * Changed @file so that it opens the source file at the proper
5555 * Changed @file so that it opens the source file at the proper
5552 line. Since it uses less, if your EDITOR environment is
5556 line. Since it uses less, if your EDITOR environment is
5553 configured, typing v will immediately open your editor of choice
5557 configured, typing v will immediately open your editor of choice
5554 right at the line where the object is defined. Not as quick as
5558 right at the line where the object is defined. Not as quick as
5555 having a direct @edit command, but for all intents and purposes it
5559 having a direct @edit command, but for all intents and purposes it
5556 works. And I don't have to worry about writing @edit to deal with
5560 works. And I don't have to worry about writing @edit to deal with
5557 all the editors, less does that.
5561 all the editors, less does that.
5558
5562
5559 * Version 0.1.16 released, 0.1.17 opened.
5563 * Version 0.1.16 released, 0.1.17 opened.
5560
5564
5561 * Fixed some nasty bugs in the page/page_dumb combo that could
5565 * Fixed some nasty bugs in the page/page_dumb combo that could
5562 crash IPython.
5566 crash IPython.
5563
5567
5564 2001-11-27 Fernando Perez <fperez@colorado.edu>
5568 2001-11-27 Fernando Perez <fperez@colorado.edu>
5565
5569
5566 * Version 0.1.15 released, 0.1.16 opened.
5570 * Version 0.1.15 released, 0.1.16 opened.
5567
5571
5568 * Finally got ? and ?? to work for undefined things: now it's
5572 * Finally got ? and ?? to work for undefined things: now it's
5569 possible to type {}.get? and get information about the get method
5573 possible to type {}.get? and get information about the get method
5570 of dicts, or os.path? even if only os is defined (so technically
5574 of dicts, or os.path? even if only os is defined (so technically
5571 os.path isn't). Works at any level. For example, after import os,
5575 os.path isn't). Works at any level. For example, after import os,
5572 os?, os.path?, os.path.abspath? all work. This is great, took some
5576 os?, os.path?, os.path.abspath? all work. This is great, took some
5573 work in _ofind.
5577 work in _ofind.
5574
5578
5575 * Fixed more bugs with logging. The sanest way to do it was to add
5579 * Fixed more bugs with logging. The sanest way to do it was to add
5576 to @log a 'mode' parameter. Killed two in one shot (this mode
5580 to @log a 'mode' parameter. Killed two in one shot (this mode
5577 option was a request of Janko's). I think it's finally clean
5581 option was a request of Janko's). I think it's finally clean
5578 (famous last words).
5582 (famous last words).
5579
5583
5580 * Added a page_dumb() pager which does a decent job of paging on
5584 * Added a page_dumb() pager which does a decent job of paging on
5581 screen, if better things (like less) aren't available. One less
5585 screen, if better things (like less) aren't available. One less
5582 unix dependency (someday maybe somebody will port this to
5586 unix dependency (someday maybe somebody will port this to
5583 windows).
5587 windows).
5584
5588
5585 * Fixed problem in magic_log: would lock of logging out if log
5589 * Fixed problem in magic_log: would lock of logging out if log
5586 creation failed (because it would still think it had succeeded).
5590 creation failed (because it would still think it had succeeded).
5587
5591
5588 * Improved the page() function using curses to auto-detect screen
5592 * Improved the page() function using curses to auto-detect screen
5589 size. Now it can make a much better decision on whether to print
5593 size. Now it can make a much better decision on whether to print
5590 or page a string. Option screen_length was modified: a value 0
5594 or page a string. Option screen_length was modified: a value 0
5591 means auto-detect, and that's the default now.
5595 means auto-detect, and that's the default now.
5592
5596
5593 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5597 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5594 go out. I'll test it for a few days, then talk to Janko about
5598 go out. I'll test it for a few days, then talk to Janko about
5595 licences and announce it.
5599 licences and announce it.
5596
5600
5597 * Fixed the length of the auto-generated ---> prompt which appears
5601 * Fixed the length of the auto-generated ---> prompt which appears
5598 for auto-parens and auto-quotes. Getting this right isn't trivial,
5602 for auto-parens and auto-quotes. Getting this right isn't trivial,
5599 with all the color escapes, different prompt types and optional
5603 with all the color escapes, different prompt types and optional
5600 separators. But it seems to be working in all the combinations.
5604 separators. But it seems to be working in all the combinations.
5601
5605
5602 2001-11-26 Fernando Perez <fperez@colorado.edu>
5606 2001-11-26 Fernando Perez <fperez@colorado.edu>
5603
5607
5604 * Wrote a regexp filter to get option types from the option names
5608 * Wrote a regexp filter to get option types from the option names
5605 string. This eliminates the need to manually keep two duplicate
5609 string. This eliminates the need to manually keep two duplicate
5606 lists.
5610 lists.
5607
5611
5608 * Removed the unneeded check_option_names. Now options are handled
5612 * Removed the unneeded check_option_names. Now options are handled
5609 in a much saner manner and it's easy to visually check that things
5613 in a much saner manner and it's easy to visually check that things
5610 are ok.
5614 are ok.
5611
5615
5612 * Updated version numbers on all files I modified to carry a
5616 * Updated version numbers on all files I modified to carry a
5613 notice so Janko and Nathan have clear version markers.
5617 notice so Janko and Nathan have clear version markers.
5614
5618
5615 * Updated docstring for ultraTB with my changes. I should send
5619 * Updated docstring for ultraTB with my changes. I should send
5616 this to Nathan.
5620 this to Nathan.
5617
5621
5618 * Lots of small fixes. Ran everything through pychecker again.
5622 * Lots of small fixes. Ran everything through pychecker again.
5619
5623
5620 * Made loading of deep_reload an cmd line option. If it's not too
5624 * Made loading of deep_reload an cmd line option. If it's not too
5621 kosher, now people can just disable it. With -nodeep_reload it's
5625 kosher, now people can just disable it. With -nodeep_reload it's
5622 still available as dreload(), it just won't overwrite reload().
5626 still available as dreload(), it just won't overwrite reload().
5623
5627
5624 * Moved many options to the no| form (-opt and -noopt
5628 * Moved many options to the no| form (-opt and -noopt
5625 accepted). Cleaner.
5629 accepted). Cleaner.
5626
5630
5627 * Changed magic_log so that if called with no parameters, it uses
5631 * Changed magic_log so that if called with no parameters, it uses
5628 'rotate' mode. That way auto-generated logs aren't automatically
5632 'rotate' mode. That way auto-generated logs aren't automatically
5629 over-written. For normal logs, now a backup is made if it exists
5633 over-written. For normal logs, now a backup is made if it exists
5630 (only 1 level of backups). A new 'backup' mode was added to the
5634 (only 1 level of backups). A new 'backup' mode was added to the
5631 Logger class to support this. This was a request by Janko.
5635 Logger class to support this. This was a request by Janko.
5632
5636
5633 * Added @logoff/@logon to stop/restart an active log.
5637 * Added @logoff/@logon to stop/restart an active log.
5634
5638
5635 * Fixed a lot of bugs in log saving/replay. It was pretty
5639 * Fixed a lot of bugs in log saving/replay. It was pretty
5636 broken. Now special lines (!@,/) appear properly in the command
5640 broken. Now special lines (!@,/) appear properly in the command
5637 history after a log replay.
5641 history after a log replay.
5638
5642
5639 * Tried and failed to implement full session saving via pickle. My
5643 * Tried and failed to implement full session saving via pickle. My
5640 idea was to pickle __main__.__dict__, but modules can't be
5644 idea was to pickle __main__.__dict__, but modules can't be
5641 pickled. This would be a better alternative to replaying logs, but
5645 pickled. This would be a better alternative to replaying logs, but
5642 seems quite tricky to get to work. Changed -session to be called
5646 seems quite tricky to get to work. Changed -session to be called
5643 -logplay, which more accurately reflects what it does. And if we
5647 -logplay, which more accurately reflects what it does. And if we
5644 ever get real session saving working, -session is now available.
5648 ever get real session saving working, -session is now available.
5645
5649
5646 * Implemented color schemes for prompts also. As for tracebacks,
5650 * Implemented color schemes for prompts also. As for tracebacks,
5647 currently only NoColor and Linux are supported. But now the
5651 currently only NoColor and Linux are supported. But now the
5648 infrastructure is in place, based on a generic ColorScheme
5652 infrastructure is in place, based on a generic ColorScheme
5649 class. So writing and activating new schemes both for the prompts
5653 class. So writing and activating new schemes both for the prompts
5650 and the tracebacks should be straightforward.
5654 and the tracebacks should be straightforward.
5651
5655
5652 * Version 0.1.13 released, 0.1.14 opened.
5656 * Version 0.1.13 released, 0.1.14 opened.
5653
5657
5654 * Changed handling of options for output cache. Now counter is
5658 * Changed handling of options for output cache. Now counter is
5655 hardwired starting at 1 and one specifies the maximum number of
5659 hardwired starting at 1 and one specifies the maximum number of
5656 entries *in the outcache* (not the max prompt counter). This is
5660 entries *in the outcache* (not the max prompt counter). This is
5657 much better, since many statements won't increase the cache
5661 much better, since many statements won't increase the cache
5658 count. It also eliminated some confusing options, now there's only
5662 count. It also eliminated some confusing options, now there's only
5659 one: cache_size.
5663 one: cache_size.
5660
5664
5661 * Added 'alias' magic function and magic_alias option in the
5665 * Added 'alias' magic function and magic_alias option in the
5662 ipythonrc file. Now the user can easily define whatever names he
5666 ipythonrc file. Now the user can easily define whatever names he
5663 wants for the magic functions without having to play weird
5667 wants for the magic functions without having to play weird
5664 namespace games. This gives IPython a real shell-like feel.
5668 namespace games. This gives IPython a real shell-like feel.
5665
5669
5666 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5670 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5667 @ or not).
5671 @ or not).
5668
5672
5669 This was one of the last remaining 'visible' bugs (that I know
5673 This was one of the last remaining 'visible' bugs (that I know
5670 of). I think if I can clean up the session loading so it works
5674 of). I think if I can clean up the session loading so it works
5671 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5675 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5672 about licensing).
5676 about licensing).
5673
5677
5674 2001-11-25 Fernando Perez <fperez@colorado.edu>
5678 2001-11-25 Fernando Perez <fperez@colorado.edu>
5675
5679
5676 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5680 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5677 there's a cleaner distinction between what ? and ?? show.
5681 there's a cleaner distinction between what ? and ?? show.
5678
5682
5679 * Added screen_length option. Now the user can define his own
5683 * Added screen_length option. Now the user can define his own
5680 screen size for page() operations.
5684 screen size for page() operations.
5681
5685
5682 * Implemented magic shell-like functions with automatic code
5686 * Implemented magic shell-like functions with automatic code
5683 generation. Now adding another function is just a matter of adding
5687 generation. Now adding another function is just a matter of adding
5684 an entry to a dict, and the function is dynamically generated at
5688 an entry to a dict, and the function is dynamically generated at
5685 run-time. Python has some really cool features!
5689 run-time. Python has some really cool features!
5686
5690
5687 * Renamed many options to cleanup conventions a little. Now all
5691 * Renamed many options to cleanup conventions a little. Now all
5688 are lowercase, and only underscores where needed. Also in the code
5692 are lowercase, and only underscores where needed. Also in the code
5689 option name tables are clearer.
5693 option name tables are clearer.
5690
5694
5691 * Changed prompts a little. Now input is 'In [n]:' instead of
5695 * Changed prompts a little. Now input is 'In [n]:' instead of
5692 'In[n]:='. This allows it the numbers to be aligned with the
5696 'In[n]:='. This allows it the numbers to be aligned with the
5693 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5697 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5694 Python (it was a Mathematica thing). The '...' continuation prompt
5698 Python (it was a Mathematica thing). The '...' continuation prompt
5695 was also changed a little to align better.
5699 was also changed a little to align better.
5696
5700
5697 * Fixed bug when flushing output cache. Not all _p<n> variables
5701 * Fixed bug when flushing output cache. Not all _p<n> variables
5698 exist, so their deletion needs to be wrapped in a try:
5702 exist, so their deletion needs to be wrapped in a try:
5699
5703
5700 * Figured out how to properly use inspect.formatargspec() (it
5704 * Figured out how to properly use inspect.formatargspec() (it
5701 requires the args preceded by *). So I removed all the code from
5705 requires the args preceded by *). So I removed all the code from
5702 _get_pdef in Magic, which was just replicating that.
5706 _get_pdef in Magic, which was just replicating that.
5703
5707
5704 * Added test to prefilter to allow redefining magic function names
5708 * Added test to prefilter to allow redefining magic function names
5705 as variables. This is ok, since the @ form is always available,
5709 as variables. This is ok, since the @ form is always available,
5706 but whe should allow the user to define a variable called 'ls' if
5710 but whe should allow the user to define a variable called 'ls' if
5707 he needs it.
5711 he needs it.
5708
5712
5709 * Moved the ToDo information from README into a separate ToDo.
5713 * Moved the ToDo information from README into a separate ToDo.
5710
5714
5711 * General code cleanup and small bugfixes. I think it's close to a
5715 * General code cleanup and small bugfixes. I think it's close to a
5712 state where it can be released, obviously with a big 'beta'
5716 state where it can be released, obviously with a big 'beta'
5713 warning on it.
5717 warning on it.
5714
5718
5715 * Got the magic function split to work. Now all magics are defined
5719 * Got the magic function split to work. Now all magics are defined
5716 in a separate class. It just organizes things a bit, and now
5720 in a separate class. It just organizes things a bit, and now
5717 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5721 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5718 was too long).
5722 was too long).
5719
5723
5720 * Changed @clear to @reset to avoid potential confusions with
5724 * Changed @clear to @reset to avoid potential confusions with
5721 the shell command clear. Also renamed @cl to @clear, which does
5725 the shell command clear. Also renamed @cl to @clear, which does
5722 exactly what people expect it to from their shell experience.
5726 exactly what people expect it to from their shell experience.
5723
5727
5724 Added a check to the @reset command (since it's so
5728 Added a check to the @reset command (since it's so
5725 destructive, it's probably a good idea to ask for confirmation).
5729 destructive, it's probably a good idea to ask for confirmation).
5726 But now reset only works for full namespace resetting. Since the
5730 But now reset only works for full namespace resetting. Since the
5727 del keyword is already there for deleting a few specific
5731 del keyword is already there for deleting a few specific
5728 variables, I don't see the point of having a redundant magic
5732 variables, I don't see the point of having a redundant magic
5729 function for the same task.
5733 function for the same task.
5730
5734
5731 2001-11-24 Fernando Perez <fperez@colorado.edu>
5735 2001-11-24 Fernando Perez <fperez@colorado.edu>
5732
5736
5733 * Updated the builtin docs (esp. the ? ones).
5737 * Updated the builtin docs (esp. the ? ones).
5734
5738
5735 * Ran all the code through pychecker. Not terribly impressed with
5739 * Ran all the code through pychecker. Not terribly impressed with
5736 it: lots of spurious warnings and didn't really find anything of
5740 it: lots of spurious warnings and didn't really find anything of
5737 substance (just a few modules being imported and not used).
5741 substance (just a few modules being imported and not used).
5738
5742
5739 * Implemented the new ultraTB functionality into IPython. New
5743 * Implemented the new ultraTB functionality into IPython. New
5740 option: xcolors. This chooses color scheme. xmode now only selects
5744 option: xcolors. This chooses color scheme. xmode now only selects
5741 between Plain and Verbose. Better orthogonality.
5745 between Plain and Verbose. Better orthogonality.
5742
5746
5743 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5747 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5744 mode and color scheme for the exception handlers. Now it's
5748 mode and color scheme for the exception handlers. Now it's
5745 possible to have the verbose traceback with no coloring.
5749 possible to have the verbose traceback with no coloring.
5746
5750
5747 2001-11-23 Fernando Perez <fperez@colorado.edu>
5751 2001-11-23 Fernando Perez <fperez@colorado.edu>
5748
5752
5749 * Version 0.1.12 released, 0.1.13 opened.
5753 * Version 0.1.12 released, 0.1.13 opened.
5750
5754
5751 * Removed option to set auto-quote and auto-paren escapes by
5755 * Removed option to set auto-quote and auto-paren escapes by
5752 user. The chances of breaking valid syntax are just too high. If
5756 user. The chances of breaking valid syntax are just too high. If
5753 someone *really* wants, they can always dig into the code.
5757 someone *really* wants, they can always dig into the code.
5754
5758
5755 * Made prompt separators configurable.
5759 * Made prompt separators configurable.
5756
5760
5757 2001-11-22 Fernando Perez <fperez@colorado.edu>
5761 2001-11-22 Fernando Perez <fperez@colorado.edu>
5758
5762
5759 * Small bugfixes in many places.
5763 * Small bugfixes in many places.
5760
5764
5761 * Removed the MyCompleter class from ipplib. It seemed redundant
5765 * Removed the MyCompleter class from ipplib. It seemed redundant
5762 with the C-p,C-n history search functionality. Less code to
5766 with the C-p,C-n history search functionality. Less code to
5763 maintain.
5767 maintain.
5764
5768
5765 * Moved all the original ipython.py code into ipythonlib.py. Right
5769 * Moved all the original ipython.py code into ipythonlib.py. Right
5766 now it's just one big dump into a function called make_IPython, so
5770 now it's just one big dump into a function called make_IPython, so
5767 no real modularity has been gained. But at least it makes the
5771 no real modularity has been gained. But at least it makes the
5768 wrapper script tiny, and since ipythonlib is a module, it gets
5772 wrapper script tiny, and since ipythonlib is a module, it gets
5769 compiled and startup is much faster.
5773 compiled and startup is much faster.
5770
5774
5771 This is a reasobably 'deep' change, so we should test it for a
5775 This is a reasobably 'deep' change, so we should test it for a
5772 while without messing too much more with the code.
5776 while without messing too much more with the code.
5773
5777
5774 2001-11-21 Fernando Perez <fperez@colorado.edu>
5778 2001-11-21 Fernando Perez <fperez@colorado.edu>
5775
5779
5776 * Version 0.1.11 released, 0.1.12 opened for further work.
5780 * Version 0.1.11 released, 0.1.12 opened for further work.
5777
5781
5778 * Removed dependency on Itpl. It was only needed in one place. It
5782 * Removed dependency on Itpl. It was only needed in one place. It
5779 would be nice if this became part of python, though. It makes life
5783 would be nice if this became part of python, though. It makes life
5780 *a lot* easier in some cases.
5784 *a lot* easier in some cases.
5781
5785
5782 * Simplified the prefilter code a bit. Now all handlers are
5786 * Simplified the prefilter code a bit. Now all handlers are
5783 expected to explicitly return a value (at least a blank string).
5787 expected to explicitly return a value (at least a blank string).
5784
5788
5785 * Heavy edits in ipplib. Removed the help system altogether. Now
5789 * Heavy edits in ipplib. Removed the help system altogether. Now
5786 obj?/?? is used for inspecting objects, a magic @doc prints
5790 obj?/?? is used for inspecting objects, a magic @doc prints
5787 docstrings, and full-blown Python help is accessed via the 'help'
5791 docstrings, and full-blown Python help is accessed via the 'help'
5788 keyword. This cleans up a lot of code (less to maintain) and does
5792 keyword. This cleans up a lot of code (less to maintain) and does
5789 the job. Since 'help' is now a standard Python component, might as
5793 the job. Since 'help' is now a standard Python component, might as
5790 well use it and remove duplicate functionality.
5794 well use it and remove duplicate functionality.
5791
5795
5792 Also removed the option to use ipplib as a standalone program. By
5796 Also removed the option to use ipplib as a standalone program. By
5793 now it's too dependent on other parts of IPython to function alone.
5797 now it's too dependent on other parts of IPython to function alone.
5794
5798
5795 * Fixed bug in genutils.pager. It would crash if the pager was
5799 * Fixed bug in genutils.pager. It would crash if the pager was
5796 exited immediately after opening (broken pipe).
5800 exited immediately after opening (broken pipe).
5797
5801
5798 * Trimmed down the VerboseTB reporting a little. The header is
5802 * Trimmed down the VerboseTB reporting a little. The header is
5799 much shorter now and the repeated exception arguments at the end
5803 much shorter now and the repeated exception arguments at the end
5800 have been removed. For interactive use the old header seemed a bit
5804 have been removed. For interactive use the old header seemed a bit
5801 excessive.
5805 excessive.
5802
5806
5803 * Fixed small bug in output of @whos for variables with multi-word
5807 * Fixed small bug in output of @whos for variables with multi-word
5804 types (only first word was displayed).
5808 types (only first word was displayed).
5805
5809
5806 2001-11-17 Fernando Perez <fperez@colorado.edu>
5810 2001-11-17 Fernando Perez <fperez@colorado.edu>
5807
5811
5808 * Version 0.1.10 released, 0.1.11 opened for further work.
5812 * Version 0.1.10 released, 0.1.11 opened for further work.
5809
5813
5810 * Modified dirs and friends. dirs now *returns* the stack (not
5814 * Modified dirs and friends. dirs now *returns* the stack (not
5811 prints), so one can manipulate it as a variable. Convenient to
5815 prints), so one can manipulate it as a variable. Convenient to
5812 travel along many directories.
5816 travel along many directories.
5813
5817
5814 * Fixed bug in magic_pdef: would only work with functions with
5818 * Fixed bug in magic_pdef: would only work with functions with
5815 arguments with default values.
5819 arguments with default values.
5816
5820
5817 2001-11-14 Fernando Perez <fperez@colorado.edu>
5821 2001-11-14 Fernando Perez <fperez@colorado.edu>
5818
5822
5819 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5823 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5820 example with IPython. Various other minor fixes and cleanups.
5824 example with IPython. Various other minor fixes and cleanups.
5821
5825
5822 * Version 0.1.9 released, 0.1.10 opened for further work.
5826 * Version 0.1.9 released, 0.1.10 opened for further work.
5823
5827
5824 * Added sys.path to the list of directories searched in the
5828 * Added sys.path to the list of directories searched in the
5825 execfile= option. It used to be the current directory and the
5829 execfile= option. It used to be the current directory and the
5826 user's IPYTHONDIR only.
5830 user's IPYTHONDIR only.
5827
5831
5828 2001-11-13 Fernando Perez <fperez@colorado.edu>
5832 2001-11-13 Fernando Perez <fperez@colorado.edu>
5829
5833
5830 * Reinstated the raw_input/prefilter separation that Janko had
5834 * Reinstated the raw_input/prefilter separation that Janko had
5831 initially. This gives a more convenient setup for extending the
5835 initially. This gives a more convenient setup for extending the
5832 pre-processor from the outside: raw_input always gets a string,
5836 pre-processor from the outside: raw_input always gets a string,
5833 and prefilter has to process it. We can then redefine prefilter
5837 and prefilter has to process it. We can then redefine prefilter
5834 from the outside and implement extensions for special
5838 from the outside and implement extensions for special
5835 purposes.
5839 purposes.
5836
5840
5837 Today I got one for inputting PhysicalQuantity objects
5841 Today I got one for inputting PhysicalQuantity objects
5838 (from Scientific) without needing any function calls at
5842 (from Scientific) without needing any function calls at
5839 all. Extremely convenient, and it's all done as a user-level
5843 all. Extremely convenient, and it's all done as a user-level
5840 extension (no IPython code was touched). Now instead of:
5844 extension (no IPython code was touched). Now instead of:
5841 a = PhysicalQuantity(4.2,'m/s**2')
5845 a = PhysicalQuantity(4.2,'m/s**2')
5842 one can simply say
5846 one can simply say
5843 a = 4.2 m/s**2
5847 a = 4.2 m/s**2
5844 or even
5848 or even
5845 a = 4.2 m/s^2
5849 a = 4.2 m/s^2
5846
5850
5847 I use this, but it's also a proof of concept: IPython really is
5851 I use this, but it's also a proof of concept: IPython really is
5848 fully user-extensible, even at the level of the parsing of the
5852 fully user-extensible, even at the level of the parsing of the
5849 command line. It's not trivial, but it's perfectly doable.
5853 command line. It's not trivial, but it's perfectly doable.
5850
5854
5851 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5855 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5852 the problem of modules being loaded in the inverse order in which
5856 the problem of modules being loaded in the inverse order in which
5853 they were defined in
5857 they were defined in
5854
5858
5855 * Version 0.1.8 released, 0.1.9 opened for further work.
5859 * Version 0.1.8 released, 0.1.9 opened for further work.
5856
5860
5857 * Added magics pdef, source and file. They respectively show the
5861 * Added magics pdef, source and file. They respectively show the
5858 definition line ('prototype' in C), source code and full python
5862 definition line ('prototype' in C), source code and full python
5859 file for any callable object. The object inspector oinfo uses
5863 file for any callable object. The object inspector oinfo uses
5860 these to show the same information.
5864 these to show the same information.
5861
5865
5862 * Version 0.1.7 released, 0.1.8 opened for further work.
5866 * Version 0.1.7 released, 0.1.8 opened for further work.
5863
5867
5864 * Separated all the magic functions into a class called Magic. The
5868 * Separated all the magic functions into a class called Magic. The
5865 InteractiveShell class was becoming too big for Xemacs to handle
5869 InteractiveShell class was becoming too big for Xemacs to handle
5866 (de-indenting a line would lock it up for 10 seconds while it
5870 (de-indenting a line would lock it up for 10 seconds while it
5867 backtracked on the whole class!)
5871 backtracked on the whole class!)
5868
5872
5869 FIXME: didn't work. It can be done, but right now namespaces are
5873 FIXME: didn't work. It can be done, but right now namespaces are
5870 all messed up. Do it later (reverted it for now, so at least
5874 all messed up. Do it later (reverted it for now, so at least
5871 everything works as before).
5875 everything works as before).
5872
5876
5873 * Got the object introspection system (magic_oinfo) working! I
5877 * Got the object introspection system (magic_oinfo) working! I
5874 think this is pretty much ready for release to Janko, so he can
5878 think this is pretty much ready for release to Janko, so he can
5875 test it for a while and then announce it. Pretty much 100% of what
5879 test it for a while and then announce it. Pretty much 100% of what
5876 I wanted for the 'phase 1' release is ready. Happy, tired.
5880 I wanted for the 'phase 1' release is ready. Happy, tired.
5877
5881
5878 2001-11-12 Fernando Perez <fperez@colorado.edu>
5882 2001-11-12 Fernando Perez <fperez@colorado.edu>
5879
5883
5880 * Version 0.1.6 released, 0.1.7 opened for further work.
5884 * Version 0.1.6 released, 0.1.7 opened for further work.
5881
5885
5882 * Fixed bug in printing: it used to test for truth before
5886 * Fixed bug in printing: it used to test for truth before
5883 printing, so 0 wouldn't print. Now checks for None.
5887 printing, so 0 wouldn't print. Now checks for None.
5884
5888
5885 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5889 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5886 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5890 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5887 reaches by hand into the outputcache. Think of a better way to do
5891 reaches by hand into the outputcache. Think of a better way to do
5888 this later.
5892 this later.
5889
5893
5890 * Various small fixes thanks to Nathan's comments.
5894 * Various small fixes thanks to Nathan's comments.
5891
5895
5892 * Changed magic_pprint to magic_Pprint. This way it doesn't
5896 * Changed magic_pprint to magic_Pprint. This way it doesn't
5893 collide with pprint() and the name is consistent with the command
5897 collide with pprint() and the name is consistent with the command
5894 line option.
5898 line option.
5895
5899
5896 * Changed prompt counter behavior to be fully like
5900 * Changed prompt counter behavior to be fully like
5897 Mathematica's. That is, even input that doesn't return a result
5901 Mathematica's. That is, even input that doesn't return a result
5898 raises the prompt counter. The old behavior was kind of confusing
5902 raises the prompt counter. The old behavior was kind of confusing
5899 (getting the same prompt number several times if the operation
5903 (getting the same prompt number several times if the operation
5900 didn't return a result).
5904 didn't return a result).
5901
5905
5902 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5906 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5903
5907
5904 * Fixed -Classic mode (wasn't working anymore).
5908 * Fixed -Classic mode (wasn't working anymore).
5905
5909
5906 * Added colored prompts using Nathan's new code. Colors are
5910 * Added colored prompts using Nathan's new code. Colors are
5907 currently hardwired, they can be user-configurable. For
5911 currently hardwired, they can be user-configurable. For
5908 developers, they can be chosen in file ipythonlib.py, at the
5912 developers, they can be chosen in file ipythonlib.py, at the
5909 beginning of the CachedOutput class def.
5913 beginning of the CachedOutput class def.
5910
5914
5911 2001-11-11 Fernando Perez <fperez@colorado.edu>
5915 2001-11-11 Fernando Perez <fperez@colorado.edu>
5912
5916
5913 * Version 0.1.5 released, 0.1.6 opened for further work.
5917 * Version 0.1.5 released, 0.1.6 opened for further work.
5914
5918
5915 * Changed magic_env to *return* the environment as a dict (not to
5919 * Changed magic_env to *return* the environment as a dict (not to
5916 print it). This way it prints, but it can also be processed.
5920 print it). This way it prints, but it can also be processed.
5917
5921
5918 * Added Verbose exception reporting to interactive
5922 * Added Verbose exception reporting to interactive
5919 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5923 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5920 traceback. Had to make some changes to the ultraTB file. This is
5924 traceback. Had to make some changes to the ultraTB file. This is
5921 probably the last 'big' thing in my mental todo list. This ties
5925 probably the last 'big' thing in my mental todo list. This ties
5922 in with the next entry:
5926 in with the next entry:
5923
5927
5924 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5928 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5925 has to specify is Plain, Color or Verbose for all exception
5929 has to specify is Plain, Color or Verbose for all exception
5926 handling.
5930 handling.
5927
5931
5928 * Removed ShellServices option. All this can really be done via
5932 * Removed ShellServices option. All this can really be done via
5929 the magic system. It's easier to extend, cleaner and has automatic
5933 the magic system. It's easier to extend, cleaner and has automatic
5930 namespace protection and documentation.
5934 namespace protection and documentation.
5931
5935
5932 2001-11-09 Fernando Perez <fperez@colorado.edu>
5936 2001-11-09 Fernando Perez <fperez@colorado.edu>
5933
5937
5934 * Fixed bug in output cache flushing (missing parameter to
5938 * Fixed bug in output cache flushing (missing parameter to
5935 __init__). Other small bugs fixed (found using pychecker).
5939 __init__). Other small bugs fixed (found using pychecker).
5936
5940
5937 * Version 0.1.4 opened for bugfixing.
5941 * Version 0.1.4 opened for bugfixing.
5938
5942
5939 2001-11-07 Fernando Perez <fperez@colorado.edu>
5943 2001-11-07 Fernando Perez <fperez@colorado.edu>
5940
5944
5941 * Version 0.1.3 released, mainly because of the raw_input bug.
5945 * Version 0.1.3 released, mainly because of the raw_input bug.
5942
5946
5943 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5947 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5944 and when testing for whether things were callable, a call could
5948 and when testing for whether things were callable, a call could
5945 actually be made to certain functions. They would get called again
5949 actually be made to certain functions. They would get called again
5946 once 'really' executed, with a resulting double call. A disaster
5950 once 'really' executed, with a resulting double call. A disaster
5947 in many cases (list.reverse() would never work!).
5951 in many cases (list.reverse() would never work!).
5948
5952
5949 * Removed prefilter() function, moved its code to raw_input (which
5953 * Removed prefilter() function, moved its code to raw_input (which
5950 after all was just a near-empty caller for prefilter). This saves
5954 after all was just a near-empty caller for prefilter). This saves
5951 a function call on every prompt, and simplifies the class a tiny bit.
5955 a function call on every prompt, and simplifies the class a tiny bit.
5952
5956
5953 * Fix _ip to __ip name in magic example file.
5957 * Fix _ip to __ip name in magic example file.
5954
5958
5955 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5959 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5956 work with non-gnu versions of tar.
5960 work with non-gnu versions of tar.
5957
5961
5958 2001-11-06 Fernando Perez <fperez@colorado.edu>
5962 2001-11-06 Fernando Perez <fperez@colorado.edu>
5959
5963
5960 * Version 0.1.2. Just to keep track of the recent changes.
5964 * Version 0.1.2. Just to keep track of the recent changes.
5961
5965
5962 * Fixed nasty bug in output prompt routine. It used to check 'if
5966 * Fixed nasty bug in output prompt routine. It used to check 'if
5963 arg != None...'. Problem is, this fails if arg implements a
5967 arg != None...'. Problem is, this fails if arg implements a
5964 special comparison (__cmp__) which disallows comparing to
5968 special comparison (__cmp__) which disallows comparing to
5965 None. Found it when trying to use the PhysicalQuantity module from
5969 None. Found it when trying to use the PhysicalQuantity module from
5966 ScientificPython.
5970 ScientificPython.
5967
5971
5968 2001-11-05 Fernando Perez <fperez@colorado.edu>
5972 2001-11-05 Fernando Perez <fperez@colorado.edu>
5969
5973
5970 * Also added dirs. Now the pushd/popd/dirs family functions
5974 * Also added dirs. Now the pushd/popd/dirs family functions
5971 basically like the shell, with the added convenience of going home
5975 basically like the shell, with the added convenience of going home
5972 when called with no args.
5976 when called with no args.
5973
5977
5974 * pushd/popd slightly modified to mimic shell behavior more
5978 * pushd/popd slightly modified to mimic shell behavior more
5975 closely.
5979 closely.
5976
5980
5977 * Added env,pushd,popd from ShellServices as magic functions. I
5981 * Added env,pushd,popd from ShellServices as magic functions. I
5978 think the cleanest will be to port all desired functions from
5982 think the cleanest will be to port all desired functions from
5979 ShellServices as magics and remove ShellServices altogether. This
5983 ShellServices as magics and remove ShellServices altogether. This
5980 will provide a single, clean way of adding functionality
5984 will provide a single, clean way of adding functionality
5981 (shell-type or otherwise) to IP.
5985 (shell-type or otherwise) to IP.
5982
5986
5983 2001-11-04 Fernando Perez <fperez@colorado.edu>
5987 2001-11-04 Fernando Perez <fperez@colorado.edu>
5984
5988
5985 * Added .ipython/ directory to sys.path. This way users can keep
5989 * Added .ipython/ directory to sys.path. This way users can keep
5986 customizations there and access them via import.
5990 customizations there and access them via import.
5987
5991
5988 2001-11-03 Fernando Perez <fperez@colorado.edu>
5992 2001-11-03 Fernando Perez <fperez@colorado.edu>
5989
5993
5990 * Opened version 0.1.1 for new changes.
5994 * Opened version 0.1.1 for new changes.
5991
5995
5992 * Changed version number to 0.1.0: first 'public' release, sent to
5996 * Changed version number to 0.1.0: first 'public' release, sent to
5993 Nathan and Janko.
5997 Nathan and Janko.
5994
5998
5995 * Lots of small fixes and tweaks.
5999 * Lots of small fixes and tweaks.
5996
6000
5997 * Minor changes to whos format. Now strings are shown, snipped if
6001 * Minor changes to whos format. Now strings are shown, snipped if
5998 too long.
6002 too long.
5999
6003
6000 * Changed ShellServices to work on __main__ so they show up in @who
6004 * Changed ShellServices to work on __main__ so they show up in @who
6001
6005
6002 * Help also works with ? at the end of a line:
6006 * Help also works with ? at the end of a line:
6003 ?sin and sin?
6007 ?sin and sin?
6004 both produce the same effect. This is nice, as often I use the
6008 both produce the same effect. This is nice, as often I use the
6005 tab-complete to find the name of a method, but I used to then have
6009 tab-complete to find the name of a method, but I used to then have
6006 to go to the beginning of the line to put a ? if I wanted more
6010 to go to the beginning of the line to put a ? if I wanted more
6007 info. Now I can just add the ? and hit return. Convenient.
6011 info. Now I can just add the ? and hit return. Convenient.
6008
6012
6009 2001-11-02 Fernando Perez <fperez@colorado.edu>
6013 2001-11-02 Fernando Perez <fperez@colorado.edu>
6010
6014
6011 * Python version check (>=2.1) added.
6015 * Python version check (>=2.1) added.
6012
6016
6013 * Added LazyPython documentation. At this point the docs are quite
6017 * Added LazyPython documentation. At this point the docs are quite
6014 a mess. A cleanup is in order.
6018 a mess. A cleanup is in order.
6015
6019
6016 * Auto-installer created. For some bizarre reason, the zipfiles
6020 * Auto-installer created. For some bizarre reason, the zipfiles
6017 module isn't working on my system. So I made a tar version
6021 module isn't working on my system. So I made a tar version
6018 (hopefully the command line options in various systems won't kill
6022 (hopefully the command line options in various systems won't kill
6019 me).
6023 me).
6020
6024
6021 * Fixes to Struct in genutils. Now all dictionary-like methods are
6025 * Fixes to Struct in genutils. Now all dictionary-like methods are
6022 protected (reasonably).
6026 protected (reasonably).
6023
6027
6024 * Added pager function to genutils and changed ? to print usage
6028 * Added pager function to genutils and changed ? to print usage
6025 note through it (it was too long).
6029 note through it (it was too long).
6026
6030
6027 * Added the LazyPython functionality. Works great! I changed the
6031 * Added the LazyPython functionality. Works great! I changed the
6028 auto-quote escape to ';', it's on home row and next to '. But
6032 auto-quote escape to ';', it's on home row and next to '. But
6029 both auto-quote and auto-paren (still /) escapes are command-line
6033 both auto-quote and auto-paren (still /) escapes are command-line
6030 parameters.
6034 parameters.
6031
6035
6032
6036
6033 2001-11-01 Fernando Perez <fperez@colorado.edu>
6037 2001-11-01 Fernando Perez <fperez@colorado.edu>
6034
6038
6035 * Version changed to 0.0.7. Fairly large change: configuration now
6039 * Version changed to 0.0.7. Fairly large change: configuration now
6036 is all stored in a directory, by default .ipython. There, all
6040 is all stored in a directory, by default .ipython. There, all
6037 config files have normal looking names (not .names)
6041 config files have normal looking names (not .names)
6038
6042
6039 * Version 0.0.6 Released first to Lucas and Archie as a test
6043 * Version 0.0.6 Released first to Lucas and Archie as a test
6040 run. Since it's the first 'semi-public' release, change version to
6044 run. Since it's the first 'semi-public' release, change version to
6041 > 0.0.6 for any changes now.
6045 > 0.0.6 for any changes now.
6042
6046
6043 * Stuff I had put in the ipplib.py changelog:
6047 * Stuff I had put in the ipplib.py changelog:
6044
6048
6045 Changes to InteractiveShell:
6049 Changes to InteractiveShell:
6046
6050
6047 - Made the usage message a parameter.
6051 - Made the usage message a parameter.
6048
6052
6049 - Require the name of the shell variable to be given. It's a bit
6053 - Require the name of the shell variable to be given. It's a bit
6050 of a hack, but allows the name 'shell' not to be hardwired in the
6054 of a hack, but allows the name 'shell' not to be hardwired in the
6051 magic (@) handler, which is problematic b/c it requires
6055 magic (@) handler, which is problematic b/c it requires
6052 polluting the global namespace with 'shell'. This in turn is
6056 polluting the global namespace with 'shell'. This in turn is
6053 fragile: if a user redefines a variable called shell, things
6057 fragile: if a user redefines a variable called shell, things
6054 break.
6058 break.
6055
6059
6056 - magic @: all functions available through @ need to be defined
6060 - magic @: all functions available through @ need to be defined
6057 as magic_<name>, even though they can be called simply as
6061 as magic_<name>, even though they can be called simply as
6058 @<name>. This allows the special command @magic to gather
6062 @<name>. This allows the special command @magic to gather
6059 information automatically about all existing magic functions,
6063 information automatically about all existing magic functions,
6060 even if they are run-time user extensions, by parsing the shell
6064 even if they are run-time user extensions, by parsing the shell
6061 instance __dict__ looking for special magic_ names.
6065 instance __dict__ looking for special magic_ names.
6062
6066
6063 - mainloop: added *two* local namespace parameters. This allows
6067 - mainloop: added *two* local namespace parameters. This allows
6064 the class to differentiate between parameters which were there
6068 the class to differentiate between parameters which were there
6065 before and after command line initialization was processed. This
6069 before and after command line initialization was processed. This
6066 way, later @who can show things loaded at startup by the
6070 way, later @who can show things loaded at startup by the
6067 user. This trick was necessary to make session saving/reloading
6071 user. This trick was necessary to make session saving/reloading
6068 really work: ideally after saving/exiting/reloading a session,
6072 really work: ideally after saving/exiting/reloading a session,
6069 *everything* should look the same, including the output of @who. I
6073 *everything* should look the same, including the output of @who. I
6070 was only able to make this work with this double namespace
6074 was only able to make this work with this double namespace
6071 trick.
6075 trick.
6072
6076
6073 - added a header to the logfile which allows (almost) full
6077 - added a header to the logfile which allows (almost) full
6074 session restoring.
6078 session restoring.
6075
6079
6076 - prepend lines beginning with @ or !, with a and log
6080 - prepend lines beginning with @ or !, with a and log
6077 them. Why? !lines: may be useful to know what you did @lines:
6081 them. Why? !lines: may be useful to know what you did @lines:
6078 they may affect session state. So when restoring a session, at
6082 they may affect session state. So when restoring a session, at
6079 least inform the user of their presence. I couldn't quite get
6083 least inform the user of their presence. I couldn't quite get
6080 them to properly re-execute, but at least the user is warned.
6084 them to properly re-execute, but at least the user is warned.
6081
6085
6082 * Started ChangeLog.
6086 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now