##// END OF EJS Templates
Add -r option to %logstart, to log 'raw' input instead of the processed one....
fperez -
Show More
@@ -1,234 +1,257 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 Logger class for IPython's logging facilities.
4 4
5 $Id: Logger.py 1077 2006-01-24 18:15:27Z vivainio $
5 $Id: Logger.py 1335 2006-05-30 06:02:44Z fperez $
6 6 """
7 7
8 8 #*****************************************************************************
9 9 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
10 10 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
11 11 #
12 12 # Distributed under the terms of the BSD License. The full license is in
13 13 # the file COPYING, distributed as part of this software.
14 14 #*****************************************************************************
15 15
16 16 #****************************************************************************
17 17 # Modules and globals
18 18
19 19 from IPython import Release
20 20 __author__ = '%s <%s>\n%s <%s>' % \
21 21 ( Release.authors['Janko'] + Release.authors['Fernando'] )
22 22 __license__ = Release.license
23 23
24 24 # Python standard modules
25 25 import glob
26 26 import os
27 27 import time
28 28
29 29 #****************************************************************************
30 30 # FIXME: This class isn't a mixin anymore, but it still needs attributes from
31 31 # ipython and does input cache management. Finish cleanup later...
32 32
33 33 class Logger(object):
34 34 """A Logfile class with different policies for file creation"""
35 35
36 36 def __init__(self,shell,logfname='Logger.log',loghead='',logmode='over'):
37 37
38 38 self._i00,self._i,self._ii,self._iii = '','','',''
39 39
40 40 # this is the full ipython instance, we need some attributes from it
41 41 # which won't exist until later. What a mess, clean up later...
42 42 self.shell = shell
43 43
44 44 self.logfname = logfname
45 45 self.loghead = loghead
46 46 self.logmode = logmode
47 47 self.logfile = None
48 48
49 # Whether to log raw or processed input
50 self.log_raw_input = False
51
49 52 # whether to also log output
50 53 self.log_output = False
51 54
52 55 # whether to put timestamps before each log entry
53 56 self.timestamp = False
54 57
55 58 # activity control flags
56 59 self.log_active = False
57 60
58 61 # logmode is a validated property
59 62 def _set_mode(self,mode):
60 63 if mode not in ['append','backup','global','over','rotate']:
61 64 raise ValueError,'invalid log mode %s given' % mode
62 65 self._logmode = mode
63 66
64 67 def _get_mode(self):
65 68 return self._logmode
66 69
67 70 logmode = property(_get_mode,_set_mode)
68 71
69 72 def logstart(self,logfname=None,loghead=None,logmode=None,
70 log_output=False,timestamp=False):
73 log_output=False,timestamp=False,log_raw_input=False):
71 74 """Generate a new log-file with a default header.
72 75
73 76 Raises RuntimeError if the log has already been started"""
74 77
75 78 if self.logfile is not None:
76 79 raise RuntimeError('Log file is already active: %s' %
77 80 self.logfname)
78 81
79 82 self.log_active = True
80 83
81 # The three parameters can override constructor defaults
82 if logfname: self.logfname = logfname
83 if loghead: self.loghead = loghead
84 if logmode: self.logmode = logmode
84 # The parameters can override constructor defaults
85 if logfname is not None: self.logfname = logfname
86 if loghead is not None: self.loghead = loghead
87 if logmode is not None: self.logmode = logmode
88
89 # Parameters not part of the constructor
85 90 self.timestamp = timestamp
86 91 self.log_output = log_output
92 self.log_raw_input = log_raw_input
87 93
88 94 # init depending on the log mode requested
89 95 isfile = os.path.isfile
90 96 logmode = self.logmode
91 97
92 98 if logmode == 'append':
93 99 self.logfile = open(self.logfname,'a')
94 100
95 101 elif logmode == 'backup':
96 102 if isfile(self.logfname):
97 103 backup_logname = self.logfname+'~'
98 104 # Manually remove any old backup, since os.rename may fail
99 105 # under Windows.
100 106 if isfile(backup_logname):
101 107 os.remove(backup_logname)
102 108 os.rename(self.logfname,backup_logname)
103 109 self.logfile = open(self.logfname,'w')
104 110
105 111 elif logmode == 'global':
106 112 self.logfname = os.path.join(self.shell.home_dir,self.logfname)
107 113 self.logfile = open(self.logfname, 'a')
108 114
109 115 elif logmode == 'over':
110 116 if isfile(self.logfname):
111 117 os.remove(self.logfname)
112 118 self.logfile = open(self.logfname,'w')
113 119
114 120 elif logmode == 'rotate':
115 121 if isfile(self.logfname):
116 122 if isfile(self.logfname+'.001~'):
117 123 old = glob.glob(self.logfname+'.*~')
118 124 old.sort()
119 125 old.reverse()
120 126 for f in old:
121 127 root, ext = os.path.splitext(f)
122 128 num = int(ext[1:-1])+1
123 129 os.rename(f, root+'.'+`num`.zfill(3)+'~')
124 130 os.rename(self.logfname, self.logfname+'.001~')
125 131 self.logfile = open(self.logfname,'w')
126 132
127 133 if logmode != 'append':
128 134 self.logfile.write(self.loghead)
129 135
130 136 self.logfile.flush()
131 137
132 138 def switch_log(self,val):
133 139 """Switch logging on/off. val should be ONLY a boolean."""
134 140
135 141 if val not in [False,True,0,1]:
136 142 raise ValueError, \
137 143 'Call switch_log ONLY with a boolean argument, not with:',val
138 144
139 145 label = {0:'OFF',1:'ON',False:'OFF',True:'ON'}
140 146
141 147 if self.logfile is None:
142 148 print """
143 149 Logging hasn't been started yet (use logstart for that).
144 150
145 151 %logon/%logoff are for temporarily starting and stopping logging for a logfile
146 152 which already exists. But you must first start the logging process with
147 153 %logstart (optionally giving a logfile name)."""
148 154
149 155 else:
150 156 if self.log_active == val:
151 157 print 'Logging is already',label[val]
152 158 else:
153 159 print 'Switching logging',label[val]
154 160 self.log_active = not self.log_active
155 161 self.log_active_out = self.log_active
156 162
157 163 def logstate(self):
158 164 """Print a status message about the logger."""
159 165 if self.logfile is None:
160 166 print 'Logging has not been activated.'
161 167 else:
162 168 state = self.log_active and 'active' or 'temporarily suspended'
163 169 print 'Filename :',self.logfname
164 170 print 'Mode :',self.logmode
165 171 print 'Output logging :',self.log_output
166 172 print 'Timestamping :',self.timestamp
167 173 print 'State :',state
168 174
169 def log(self, line,continuation=None):
170 """Write the line to a log and create input cache variables _i*."""
175 def log(self,line_ori,line_mod,continuation=None):
176 """Write the line to a log and create input cache variables _i*.
177
178 Inputs:
179
180 - line_ori: unmodified input line from the user. This is not
181 necessarily valid Python.
182
183 - line_mod: possibly modified input, such as the transformations made
184 by input prefilters or input handlers of various kinds. This should
185 always be valid Python.
186
187 - continuation: if True, indicates this is part of multi-line input."""
171 188
172 189 # update the auto _i tables
173 #print '***logging line',line # dbg
190 #print '***logging line',line_mod # dbg
174 191 #print '***cache_count', self.shell.outputcache.prompt_count # dbg
175 192 try:
176 193 input_hist = self.shell.user_ns['_ih']
177 194 except:
178 195 print 'userns:',self.shell.user_ns.keys()
179 196 return
180 197
181 if not continuation and line:
198 if not continuation and line_mod:
182 199 self._iii = self._ii
183 200 self._ii = self._i
184 201 self._i = self._i00
185 202 # put back the final \n of every input line
186 self._i00 = line+'\n'
187 #print 'Logging input:<%s>' % line # dbg
203 self._i00 = line_mod+'\n'
204 #print 'Logging input:<%s>' % line_mod # dbg
188 205 input_hist.append(self._i00)
189 206 #print '---[%s]' % (len(input_hist)-1,) # dbg
190 207
191 208 # hackish access to top-level namespace to create _i1,_i2... dynamically
192 209 to_main = {'_i':self._i,'_ii':self._ii,'_iii':self._iii}
193 210 if self.shell.outputcache.do_full_cache:
194 211 in_num = self.shell.outputcache.prompt_count
195 212 # add blank lines if the input cache fell out of sync. This can
196 213 # happen for embedded instances which get killed via C-D and then
197 214 # get resumed.
198 215 while in_num >= len(input_hist):
199 216 input_hist.append('\n')
200 217 # but if the opposite is true (a macro can produce multiple inputs
201 218 # with no output display called), then bring the output counter in
202 219 # sync:
203 220 last_num = len(input_hist)-1
204 221 if in_num != last_num:
205 222 in_num = self.shell.outputcache.prompt_count = last_num
206 223 new_i = '_i%s' % in_num
207 224 if continuation:
208 self._i00 = '%s%s\n' % (self.shell.user_ns[new_i],line)
225 self._i00 = '%s%s\n' % (self.shell.user_ns[new_i],line_mod)
209 226 input_hist[in_num] = self._i00
210 227 to_main[new_i] = self._i00
211 228 self.shell.user_ns.update(to_main)
212 self.log_write(line)
229
230 # Write the log line, but decide which one according to the
231 # log_raw_input flag, set when the log is started.
232 if self.log_raw_input:
233 self.log_write(line_ori)
234 else:
235 self.log_write(line_mod)
213 236
214 237 def log_write(self,data,kind='input'):
215 238 """Write data to the log file, if active"""
216 239
217 240 #print 'data: %r' % data # dbg
218 241 if self.log_active and data:
219 242 write = self.logfile.write
220 243 if kind=='input':
221 244 if self.timestamp:
222 245 write(time.strftime('# %a, %d %b %Y %H:%M:%S\n',
223 246 time.localtime()))
224 247 write('%s\n' % data)
225 248 elif kind=='output' and self.log_output:
226 249 odata = '\n'.join(['#[Out]# %s' % s
227 250 for s in data.split('\n')])
228 251 write('%s\n' % odata)
229 252 self.logfile.flush()
230 253
231 254 def close_log(self):
232 255 self.logfile.close()
233 256 self.logfile = None
234 257 self.logfname = ''
@@ -1,2958 +1,2970 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 $Id: Magic.py 1322 2006-05-24 07:51:39Z fperez $"""
4 $Id: Magic.py 1335 2006-05-30 06:02:44Z fperez $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 #****************************************************************************
15 15 # Modules and globals
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>\n%s <%s>' % \
19 19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 20 __license__ = Release.license
21 21
22 22 # Python standard modules
23 23 import __builtin__
24 24 import bdb
25 25 import inspect
26 26 import os
27 27 import pdb
28 28 import pydoc
29 29 import shlex
30 30 import sys
31 31 import re
32 32 import tempfile
33 33 import time
34 34 import cPickle as pickle
35 35 import textwrap
36 36 from cStringIO import StringIO
37 37 from getopt import getopt,GetoptError
38 38 from pprint import pprint, pformat
39 39
40 40 # profile isn't bundled by default in Debian for license reasons
41 41 try:
42 42 import profile,pstats
43 43 except ImportError:
44 44 profile = pstats = None
45 45
46 46 # Homebrewed
47 47 import IPython
48 48 from IPython import Debugger, OInspect, wildcard
49 49 from IPython.FakeModule import FakeModule
50 50 from IPython.Itpl import Itpl, itpl, printpl,itplns
51 51 from IPython.PyColorize import Parser
52 52 from IPython.ipstruct import Struct
53 53 from IPython.macro import Macro
54 54 from IPython.genutils import *
55 55 from IPython import platutils
56 56
57 57 #***************************************************************************
58 58 # Utility functions
59 59 def on_off(tag):
60 60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
61 61 return ['OFF','ON'][tag]
62 62
63 63 class Bunch: pass
64 64
65 65 #***************************************************************************
66 66 # Main class implementing Magic functionality
67 67 class Magic:
68 68 """Magic functions for InteractiveShell.
69 69
70 70 Shell functions which can be reached as %function_name. All magic
71 71 functions should accept a string, which they can parse for their own
72 72 needs. This can make some functions easier to type, eg `%cd ../`
73 73 vs. `%cd("../")`
74 74
75 75 ALL definitions MUST begin with the prefix magic_. The user won't need it
76 76 at the command line, but it is is needed in the definition. """
77 77
78 78 # class globals
79 79 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
80 80 'Automagic is ON, % prefix NOT needed for magic functions.']
81 81
82 82 #......................................................................
83 83 # some utility functions
84 84
85 85 def __init__(self,shell):
86 86
87 87 self.options_table = {}
88 88 if profile is None:
89 89 self.magic_prun = self.profile_missing_notice
90 90 self.shell = shell
91 91
92 92 # namespace for holding state we may need
93 93 self._magic_state = Bunch()
94 94
95 95 def profile_missing_notice(self, *args, **kwargs):
96 96 error("""\
97 97 The profile module could not be found. If you are a Debian user,
98 98 it has been removed from the standard Debian package because of its non-free
99 99 license. To use profiling, please install"python2.3-profiler" from non-free.""")
100 100
101 101 def default_option(self,fn,optstr):
102 102 """Make an entry in the options_table for fn, with value optstr"""
103 103
104 104 if fn not in self.lsmagic():
105 105 error("%s is not a magic function" % fn)
106 106 self.options_table[fn] = optstr
107 107
108 108 def lsmagic(self):
109 109 """Return a list of currently available magic functions.
110 110
111 111 Gives a list of the bare names after mangling (['ls','cd', ...], not
112 112 ['magic_ls','magic_cd',...]"""
113 113
114 114 # FIXME. This needs a cleanup, in the way the magics list is built.
115 115
116 116 # magics in class definition
117 117 class_magic = lambda fn: fn.startswith('magic_') and \
118 118 callable(Magic.__dict__[fn])
119 119 # in instance namespace (run-time user additions)
120 120 inst_magic = lambda fn: fn.startswith('magic_') and \
121 121 callable(self.__dict__[fn])
122 122 # and bound magics by user (so they can access self):
123 123 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
124 124 callable(self.__class__.__dict__[fn])
125 125 magics = filter(class_magic,Magic.__dict__.keys()) + \
126 126 filter(inst_magic,self.__dict__.keys()) + \
127 127 filter(inst_bound_magic,self.__class__.__dict__.keys())
128 128 out = []
129 129 for fn in magics:
130 130 out.append(fn.replace('magic_','',1))
131 131 out.sort()
132 132 return out
133 133
134 134 def extract_input_slices(self,slices,raw=False):
135 135 """Return as a string a set of input history slices.
136 136
137 137 Inputs:
138 138
139 139 - slices: the set of slices is given as a list of strings (like
140 140 ['1','4:8','9'], since this function is for use by magic functions
141 141 which get their arguments as strings.
142 142
143 143 Optional inputs:
144 144
145 145 - raw(False): by default, the processed input is used. If this is
146 146 true, the raw input history is used instead.
147 147
148 148 Note that slices can be called with two notations:
149 149
150 150 N:M -> standard python form, means including items N...(M-1).
151 151
152 152 N-M -> include items N..M (closed endpoint)."""
153 153
154 154 if raw:
155 155 hist = self.shell.input_hist_raw
156 156 else:
157 157 hist = self.shell.input_hist
158 158
159 159 cmds = []
160 160 for chunk in slices:
161 161 if ':' in chunk:
162 162 ini,fin = map(int,chunk.split(':'))
163 163 elif '-' in chunk:
164 164 ini,fin = map(int,chunk.split('-'))
165 165 fin += 1
166 166 else:
167 167 ini = int(chunk)
168 168 fin = ini+1
169 169 cmds.append(hist[ini:fin])
170 170 return cmds
171 171
172 172 def _ofind(self,oname):
173 173 """Find an object in the available namespaces.
174 174
175 175 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
176 176
177 177 Has special code to detect magic functions.
178 178 """
179 179
180 180 oname = oname.strip()
181 181
182 182 # Namespaces to search in:
183 183 user_ns = self.shell.user_ns
184 184 internal_ns = self.shell.internal_ns
185 185 builtin_ns = __builtin__.__dict__
186 186 alias_ns = self.shell.alias_table
187 187
188 188 # Put them in a list. The order is important so that we find things in
189 189 # the same order that Python finds them.
190 190 namespaces = [ ('Interactive',user_ns),
191 191 ('IPython internal',internal_ns),
192 192 ('Python builtin',builtin_ns),
193 193 ('Alias',alias_ns),
194 194 ]
195 195
196 196 # initialize results to 'null'
197 197 found = 0; obj = None; ospace = None; ds = None;
198 198 ismagic = 0; isalias = 0
199 199
200 200 # Look for the given name by splitting it in parts. If the head is
201 201 # found, then we look for all the remaining parts as members, and only
202 202 # declare success if we can find them all.
203 203 oname_parts = oname.split('.')
204 204 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
205 205 for nsname,ns in namespaces:
206 206 try:
207 207 obj = ns[oname_head]
208 208 except KeyError:
209 209 continue
210 210 else:
211 211 for part in oname_rest:
212 212 try:
213 213 obj = getattr(obj,part)
214 214 except:
215 215 # Blanket except b/c some badly implemented objects
216 216 # allow __getattr__ to raise exceptions other than
217 217 # AttributeError, which then crashes IPython.
218 218 break
219 219 else:
220 220 # If we finish the for loop (no break), we got all members
221 221 found = 1
222 222 ospace = nsname
223 223 if ns == alias_ns:
224 224 isalias = 1
225 225 break # namespace loop
226 226
227 227 # Try to see if it's magic
228 228 if not found:
229 229 if oname.startswith(self.shell.ESC_MAGIC):
230 230 oname = oname[1:]
231 231 obj = getattr(self,'magic_'+oname,None)
232 232 if obj is not None:
233 233 found = 1
234 234 ospace = 'IPython internal'
235 235 ismagic = 1
236 236
237 237 # Last try: special-case some literals like '', [], {}, etc:
238 238 if not found and oname_head in ["''",'""','[]','{}','()']:
239 239 obj = eval(oname_head)
240 240 found = 1
241 241 ospace = 'Interactive'
242 242
243 243 return {'found':found, 'obj':obj, 'namespace':ospace,
244 244 'ismagic':ismagic, 'isalias':isalias}
245 245
246 246 def arg_err(self,func):
247 247 """Print docstring if incorrect arguments were passed"""
248 248 print 'Error in arguments:'
249 249 print OInspect.getdoc(func)
250 250
251 251 def format_latex(self,strng):
252 252 """Format a string for latex inclusion."""
253 253
254 254 # Characters that need to be escaped for latex:
255 255 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
256 256 # Magic command names as headers:
257 257 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
258 258 re.MULTILINE)
259 259 # Magic commands
260 260 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
261 261 re.MULTILINE)
262 262 # Paragraph continue
263 263 par_re = re.compile(r'\\$',re.MULTILINE)
264 264
265 265 # The "\n" symbol
266 266 newline_re = re.compile(r'\\n')
267 267
268 268 # Now build the string for output:
269 269 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
270 270 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
271 271 strng)
272 272 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
273 273 strng = par_re.sub(r'\\\\',strng)
274 274 strng = escape_re.sub(r'\\\1',strng)
275 275 strng = newline_re.sub(r'\\textbackslash{}n',strng)
276 276 return strng
277 277
278 278 def format_screen(self,strng):
279 279 """Format a string for screen printing.
280 280
281 281 This removes some latex-type format codes."""
282 282 # Paragraph continue
283 283 par_re = re.compile(r'\\$',re.MULTILINE)
284 284 strng = par_re.sub('',strng)
285 285 return strng
286 286
287 287 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
288 288 """Parse options passed to an argument string.
289 289
290 290 The interface is similar to that of getopt(), but it returns back a
291 291 Struct with the options as keys and the stripped argument string still
292 292 as a string.
293 293
294 294 arg_str is quoted as a true sys.argv vector by using shlex.split.
295 295 This allows us to easily expand variables, glob files, quote
296 296 arguments, etc.
297 297
298 298 Options:
299 299 -mode: default 'string'. If given as 'list', the argument string is
300 300 returned as a list (split on whitespace) instead of a string.
301 301
302 302 -list_all: put all option values in lists. Normally only options
303 303 appearing more than once are put in a list."""
304 304
305 305 # inject default options at the beginning of the input line
306 306 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
307 307 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
308 308
309 309 mode = kw.get('mode','string')
310 310 if mode not in ['string','list']:
311 311 raise ValueError,'incorrect mode given: %s' % mode
312 312 # Get options
313 313 list_all = kw.get('list_all',0)
314 314
315 315 # Check if we have more than one argument to warrant extra processing:
316 316 odict = {} # Dictionary with options
317 317 args = arg_str.split()
318 318 if len(args) >= 1:
319 319 # If the list of inputs only has 0 or 1 thing in it, there's no
320 320 # need to look for options
321 321 argv = shlex.split(arg_str)
322 322 # Do regular option processing
323 323 try:
324 324 opts,args = getopt(argv,opt_str,*long_opts)
325 325 except GetoptError,e:
326 326 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
327 327 " ".join(long_opts)))
328 328 for o,a in opts:
329 329 if o.startswith('--'):
330 330 o = o[2:]
331 331 else:
332 332 o = o[1:]
333 333 try:
334 334 odict[o].append(a)
335 335 except AttributeError:
336 336 odict[o] = [odict[o],a]
337 337 except KeyError:
338 338 if list_all:
339 339 odict[o] = [a]
340 340 else:
341 341 odict[o] = a
342 342
343 343 # Prepare opts,args for return
344 344 opts = Struct(odict)
345 345 if mode == 'string':
346 346 args = ' '.join(args)
347 347
348 348 return opts,args
349 349
350 350 #......................................................................
351 351 # And now the actual magic functions
352 352
353 353 # Functions for IPython shell work (vars,funcs, config, etc)
354 354 def magic_lsmagic(self, parameter_s = ''):
355 355 """List currently available magic functions."""
356 356 mesc = self.shell.ESC_MAGIC
357 357 print 'Available magic functions:\n'+mesc+\
358 358 (' '+mesc).join(self.lsmagic())
359 359 print '\n' + Magic.auto_status[self.shell.rc.automagic]
360 360 return None
361 361
362 362 def magic_magic(self, parameter_s = ''):
363 363 """Print information about the magic function system."""
364 364
365 365 mode = ''
366 366 try:
367 367 if parameter_s.split()[0] == '-latex':
368 368 mode = 'latex'
369 369 if parameter_s.split()[0] == '-brief':
370 370 mode = 'brief'
371 371 except:
372 372 pass
373 373
374 374 magic_docs = []
375 375 for fname in self.lsmagic():
376 376 mname = 'magic_' + fname
377 377 for space in (Magic,self,self.__class__):
378 378 try:
379 379 fn = space.__dict__[mname]
380 380 except KeyError:
381 381 pass
382 382 else:
383 383 break
384 384 if mode == 'brief':
385 385 # only first line
386 386 fndoc = fn.__doc__.split('\n',1)[0]
387 387 else:
388 388 fndoc = fn.__doc__
389 389
390 390 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
391 391 fname,fndoc))
392 392 magic_docs = ''.join(magic_docs)
393 393
394 394 if mode == 'latex':
395 395 print self.format_latex(magic_docs)
396 396 return
397 397 else:
398 398 magic_docs = self.format_screen(magic_docs)
399 399 if mode == 'brief':
400 400 return magic_docs
401 401
402 402 outmsg = """
403 403 IPython's 'magic' functions
404 404 ===========================
405 405
406 406 The magic function system provides a series of functions which allow you to
407 407 control the behavior of IPython itself, plus a lot of system-type
408 408 features. All these functions are prefixed with a % character, but parameters
409 409 are given without parentheses or quotes.
410 410
411 411 NOTE: If you have 'automagic' enabled (via the command line option or with the
412 412 %automagic function), you don't need to type in the % explicitly. By default,
413 413 IPython ships with automagic on, so you should only rarely need the % escape.
414 414
415 415 Example: typing '%cd mydir' (without the quotes) changes you working directory
416 416 to 'mydir', if it exists.
417 417
418 418 You can define your own magic functions to extend the system. See the supplied
419 419 ipythonrc and example-magic.py files for details (in your ipython
420 420 configuration directory, typically $HOME/.ipython/).
421 421
422 422 You can also define your own aliased names for magic functions. In your
423 423 ipythonrc file, placing a line like:
424 424
425 425 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
426 426
427 427 will define %pf as a new name for %profile.
428 428
429 429 You can also call magics in code using the ipmagic() function, which IPython
430 430 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
431 431
432 432 For a list of the available magic functions, use %lsmagic. For a description
433 433 of any of them, type %magic_name?, e.g. '%cd?'.
434 434
435 435 Currently the magic system has the following functions:\n"""
436 436
437 437 mesc = self.shell.ESC_MAGIC
438 438 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
439 439 "\n\n%s%s\n\n%s" % (outmsg,
440 440 magic_docs,mesc,mesc,
441 441 (' '+mesc).join(self.lsmagic()),
442 442 Magic.auto_status[self.shell.rc.automagic] ) )
443 443
444 444 page(outmsg,screen_lines=self.shell.rc.screen_length)
445 445
446 446 def magic_automagic(self, parameter_s = ''):
447 447 """Make magic functions callable without having to type the initial %.
448 448
449 449 Toggles on/off (when off, you must call it as %automagic, of
450 450 course). Note that magic functions have lowest priority, so if there's
451 451 a variable whose name collides with that of a magic fn, automagic
452 452 won't work for that function (you get the variable instead). However,
453 453 if you delete the variable (del var), the previously shadowed magic
454 454 function becomes visible to automagic again."""
455 455
456 456 rc = self.shell.rc
457 457 rc.automagic = not rc.automagic
458 458 print '\n' + Magic.auto_status[rc.automagic]
459 459
460 460 def magic_autocall(self, parameter_s = ''):
461 461 """Make functions callable without having to type parentheses.
462 462
463 463 Usage:
464 464
465 465 %autocall [mode]
466 466
467 467 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
468 468 value is toggled on and off (remembering the previous state)."""
469 469
470 470 rc = self.shell.rc
471 471
472 472 if parameter_s:
473 473 arg = int(parameter_s)
474 474 else:
475 475 arg = 'toggle'
476 476
477 477 if not arg in (0,1,2,'toggle'):
478 478 error('Valid modes: (0->Off, 1->Smart, 2->Full')
479 479 return
480 480
481 481 if arg in (0,1,2):
482 482 rc.autocall = arg
483 483 else: # toggle
484 484 if rc.autocall:
485 485 self._magic_state.autocall_save = rc.autocall
486 486 rc.autocall = 0
487 487 else:
488 488 try:
489 489 rc.autocall = self._magic_state.autocall_save
490 490 except AttributeError:
491 491 rc.autocall = self._magic_state.autocall_save = 1
492 492
493 493 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
494 494
495 495 def magic_autoindent(self, parameter_s = ''):
496 496 """Toggle autoindent on/off (if available)."""
497 497
498 498 self.shell.set_autoindent()
499 499 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
500 500
501 501 def magic_system_verbose(self, parameter_s = ''):
502 502 """Toggle verbose printing of system calls on/off."""
503 503
504 504 self.shell.rc_set_toggle('system_verbose')
505 505 print "System verbose printing is:",\
506 506 ['OFF','ON'][self.shell.rc.system_verbose]
507 507
508 508 def magic_history(self, parameter_s = ''):
509 509 """Print input history (_i<n> variables), with most recent last.
510 510
511 511 %history -> print at most 40 inputs (some may be multi-line)\\
512 512 %history n -> print at most n inputs\\
513 513 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
514 514
515 515 Each input's number <n> is shown, and is accessible as the
516 516 automatically generated variable _i<n>. Multi-line statements are
517 517 printed starting at a new line for easy copy/paste.
518 518
519 519
520 520 Options:
521 521
522 522 -n: do NOT print line numbers. This is useful if you want to get a
523 523 printout of many lines which can be directly pasted into a text
524 524 editor.
525 525
526 526 This feature is only available if numbered prompts are in use.
527 527
528 528 -r: print the 'raw' history. IPython filters your input and
529 529 converts it all into valid Python source before executing it (things
530 530 like magics or aliases are turned into function calls, for
531 531 example). With this option, you'll see the unfiltered history
532 532 instead of the filtered version: '%cd /' will be seen as '%cd /'
533 533 instead of '_ip.magic("%cd /")'.
534 534 """
535 535
536 536 shell = self.shell
537 537 if not shell.outputcache.do_full_cache:
538 538 print 'This feature is only available if numbered prompts are in use.'
539 539 return
540 540 opts,args = self.parse_options(parameter_s,'nr',mode='list')
541 541
542 542 if opts.has_key('r'):
543 543 input_hist = shell.input_hist_raw
544 544 else:
545 545 input_hist = shell.input_hist
546 546
547 547 default_length = 40
548 548 if len(args) == 0:
549 549 final = len(input_hist)
550 550 init = max(1,final-default_length)
551 551 elif len(args) == 1:
552 552 final = len(input_hist)
553 553 init = max(1,final-int(args[0]))
554 554 elif len(args) == 2:
555 555 init,final = map(int,args)
556 556 else:
557 557 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
558 558 print self.magic_hist.__doc__
559 559 return
560 560 width = len(str(final))
561 561 line_sep = ['','\n']
562 562 print_nums = not opts.has_key('n')
563 563 for in_num in range(init,final):
564 564 inline = input_hist[in_num]
565 565 multiline = int(inline.count('\n') > 1)
566 566 if print_nums:
567 567 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
568 568 print inline,
569 569
570 570 def magic_hist(self, parameter_s=''):
571 571 """Alternate name for %history."""
572 572 return self.magic_history(parameter_s)
573 573
574 574 def magic_p(self, parameter_s=''):
575 575 """Just a short alias for Python's 'print'."""
576 576 exec 'print ' + parameter_s in self.shell.user_ns
577 577
578 578 def magic_r(self, parameter_s=''):
579 579 """Repeat previous input.
580 580
581 581 If given an argument, repeats the previous command which starts with
582 582 the same string, otherwise it just repeats the previous input.
583 583
584 584 Shell escaped commands (with ! as first character) are not recognized
585 585 by this system, only pure python code and magic commands.
586 586 """
587 587
588 588 start = parameter_s.strip()
589 589 esc_magic = self.shell.ESC_MAGIC
590 590 # Identify magic commands even if automagic is on (which means
591 591 # the in-memory version is different from that typed by the user).
592 592 if self.shell.rc.automagic:
593 593 start_magic = esc_magic+start
594 594 else:
595 595 start_magic = start
596 596 # Look through the input history in reverse
597 597 for n in range(len(self.shell.input_hist)-2,0,-1):
598 598 input = self.shell.input_hist[n]
599 599 # skip plain 'r' lines so we don't recurse to infinity
600 600 if input != '_ip.magic("r")\n' and \
601 601 (input.startswith(start) or input.startswith(start_magic)):
602 602 #print 'match',`input` # dbg
603 603 print 'Executing:',input,
604 604 self.shell.runlines(input)
605 605 return
606 606 print 'No previous input matching `%s` found.' % start
607 607
608 608 def magic_page(self, parameter_s=''):
609 609 """Pretty print the object and display it through a pager.
610 610
611 611 If no parameter is given, use _ (last output)."""
612 612 # After a function contributed by Olivier Aubert, slightly modified.
613 613
614 614 oname = parameter_s and parameter_s or '_'
615 615 info = self._ofind(oname)
616 616 if info['found']:
617 617 page(pformat(info['obj']))
618 618 else:
619 619 print 'Object `%s` not found' % oname
620 620
621 621 def magic_profile(self, parameter_s=''):
622 622 """Print your currently active IPyhton profile."""
623 623 if self.shell.rc.profile:
624 624 printpl('Current IPython profile: $self.shell.rc.profile.')
625 625 else:
626 626 print 'No profile active.'
627 627
628 628 def _inspect(self,meth,oname,**kw):
629 629 """Generic interface to the inspector system.
630 630
631 631 This function is meant to be called by pdef, pdoc & friends."""
632 632
633 633 oname = oname.strip()
634 634 info = Struct(self._ofind(oname))
635 635 if info.found:
636 636 pmethod = getattr(self.shell.inspector,meth)
637 637 formatter = info.ismagic and self.format_screen or None
638 638 if meth == 'pdoc':
639 639 pmethod(info.obj,oname,formatter)
640 640 elif meth == 'pinfo':
641 641 pmethod(info.obj,oname,formatter,info,**kw)
642 642 else:
643 643 pmethod(info.obj,oname)
644 644 else:
645 645 print 'Object `%s` not found.' % oname
646 646 return 'not found' # so callers can take other action
647 647
648 648 def magic_pdef(self, parameter_s=''):
649 649 """Print the definition header for any callable object.
650 650
651 651 If the object is a class, print the constructor information."""
652 652 self._inspect('pdef',parameter_s)
653 653
654 654 def magic_pdoc(self, parameter_s=''):
655 655 """Print the docstring for an object.
656 656
657 657 If the given object is a class, it will print both the class and the
658 658 constructor docstrings."""
659 659 self._inspect('pdoc',parameter_s)
660 660
661 661 def magic_psource(self, parameter_s=''):
662 662 """Print (or run through pager) the source code for an object."""
663 663 self._inspect('psource',parameter_s)
664 664
665 665 def magic_pfile(self, parameter_s=''):
666 666 """Print (or run through pager) the file where an object is defined.
667 667
668 668 The file opens at the line where the object definition begins. IPython
669 669 will honor the environment variable PAGER if set, and otherwise will
670 670 do its best to print the file in a convenient form.
671 671
672 672 If the given argument is not an object currently defined, IPython will
673 673 try to interpret it as a filename (automatically adding a .py extension
674 674 if needed). You can thus use %pfile as a syntax highlighting code
675 675 viewer."""
676 676
677 677 # first interpret argument as an object name
678 678 out = self._inspect('pfile',parameter_s)
679 679 # if not, try the input as a filename
680 680 if out == 'not found':
681 681 try:
682 682 filename = get_py_filename(parameter_s)
683 683 except IOError,msg:
684 684 print msg
685 685 return
686 686 page(self.shell.inspector.format(file(filename).read()))
687 687
688 688 def magic_pinfo(self, parameter_s=''):
689 689 """Provide detailed information about an object.
690 690
691 691 '%pinfo object' is just a synonym for object? or ?object."""
692 692
693 693 #print 'pinfo par: <%s>' % parameter_s # dbg
694 694
695 695 # detail_level: 0 -> obj? , 1 -> obj??
696 696 detail_level = 0
697 697 # We need to detect if we got called as 'pinfo pinfo foo', which can
698 698 # happen if the user types 'pinfo foo?' at the cmd line.
699 699 pinfo,qmark1,oname,qmark2 = \
700 700 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
701 701 if pinfo or qmark1 or qmark2:
702 702 detail_level = 1
703 703 if "*" in oname:
704 704 self.magic_psearch(oname)
705 705 else:
706 706 self._inspect('pinfo',oname,detail_level=detail_level)
707 707
708 708 def magic_psearch(self, parameter_s=''):
709 709 """Search for object in namespaces by wildcard.
710 710
711 711 %psearch [options] PATTERN [OBJECT TYPE]
712 712
713 713 Note: ? can be used as a synonym for %psearch, at the beginning or at
714 714 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
715 715 rest of the command line must be unchanged (options come first), so
716 716 for example the following forms are equivalent
717 717
718 718 %psearch -i a* function
719 719 -i a* function?
720 720 ?-i a* function
721 721
722 722 Arguments:
723 723
724 724 PATTERN
725 725
726 726 where PATTERN is a string containing * as a wildcard similar to its
727 727 use in a shell. The pattern is matched in all namespaces on the
728 728 search path. By default objects starting with a single _ are not
729 729 matched, many IPython generated objects have a single
730 730 underscore. The default is case insensitive matching. Matching is
731 731 also done on the attributes of objects and not only on the objects
732 732 in a module.
733 733
734 734 [OBJECT TYPE]
735 735
736 736 Is the name of a python type from the types module. The name is
737 737 given in lowercase without the ending type, ex. StringType is
738 738 written string. By adding a type here only objects matching the
739 739 given type are matched. Using all here makes the pattern match all
740 740 types (this is the default).
741 741
742 742 Options:
743 743
744 744 -a: makes the pattern match even objects whose names start with a
745 745 single underscore. These names are normally ommitted from the
746 746 search.
747 747
748 748 -i/-c: make the pattern case insensitive/sensitive. If neither of
749 749 these options is given, the default is read from your ipythonrc
750 750 file. The option name which sets this value is
751 751 'wildcards_case_sensitive'. If this option is not specified in your
752 752 ipythonrc file, IPython's internal default is to do a case sensitive
753 753 search.
754 754
755 755 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
756 756 specifiy can be searched in any of the following namespaces:
757 757 'builtin', 'user', 'user_global','internal', 'alias', where
758 758 'builtin' and 'user' are the search defaults. Note that you should
759 759 not use quotes when specifying namespaces.
760 760
761 761 'Builtin' contains the python module builtin, 'user' contains all
762 762 user data, 'alias' only contain the shell aliases and no python
763 763 objects, 'internal' contains objects used by IPython. The
764 764 'user_global' namespace is only used by embedded IPython instances,
765 765 and it contains module-level globals. You can add namespaces to the
766 766 search with -s or exclude them with -e (these options can be given
767 767 more than once).
768 768
769 769 Examples:
770 770
771 771 %psearch a* -> objects beginning with an a
772 772 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
773 773 %psearch a* function -> all functions beginning with an a
774 774 %psearch re.e* -> objects beginning with an e in module re
775 775 %psearch r*.e* -> objects that start with e in modules starting in r
776 776 %psearch r*.* string -> all strings in modules beginning with r
777 777
778 778 Case sensitve search:
779 779
780 780 %psearch -c a* list all object beginning with lower case a
781 781
782 782 Show objects beginning with a single _:
783 783
784 784 %psearch -a _* list objects beginning with a single underscore"""
785 785
786 786 # default namespaces to be searched
787 787 def_search = ['user','builtin']
788 788
789 789 # Process options/args
790 790 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
791 791 opt = opts.get
792 792 shell = self.shell
793 793 psearch = shell.inspector.psearch
794 794
795 795 # select case options
796 796 if opts.has_key('i'):
797 797 ignore_case = True
798 798 elif opts.has_key('c'):
799 799 ignore_case = False
800 800 else:
801 801 ignore_case = not shell.rc.wildcards_case_sensitive
802 802
803 803 # Build list of namespaces to search from user options
804 804 def_search.extend(opt('s',[]))
805 805 ns_exclude = ns_exclude=opt('e',[])
806 806 ns_search = [nm for nm in def_search if nm not in ns_exclude]
807 807
808 808 # Call the actual search
809 809 try:
810 810 psearch(args,shell.ns_table,ns_search,
811 811 show_all=opt('a'),ignore_case=ignore_case)
812 812 except:
813 813 shell.showtraceback()
814 814
815 815 def magic_who_ls(self, parameter_s=''):
816 816 """Return a sorted list of all interactive variables.
817 817
818 818 If arguments are given, only variables of types matching these
819 819 arguments are returned."""
820 820
821 821 user_ns = self.shell.user_ns
822 822 internal_ns = self.shell.internal_ns
823 823 user_config_ns = self.shell.user_config_ns
824 824 out = []
825 825 typelist = parameter_s.split()
826 826
827 827 for i in user_ns:
828 828 if not (i.startswith('_') or i.startswith('_i')) \
829 829 and not (i in internal_ns or i in user_config_ns):
830 830 if typelist:
831 831 if type(user_ns[i]).__name__ in typelist:
832 832 out.append(i)
833 833 else:
834 834 out.append(i)
835 835 out.sort()
836 836 return out
837 837
838 838 def magic_who(self, parameter_s=''):
839 839 """Print all interactive variables, with some minimal formatting.
840 840
841 841 If any arguments are given, only variables whose type matches one of
842 842 these are printed. For example:
843 843
844 844 %who function str
845 845
846 846 will only list functions and strings, excluding all other types of
847 847 variables. To find the proper type names, simply use type(var) at a
848 848 command line to see how python prints type names. For example:
849 849
850 850 In [1]: type('hello')\\
851 851 Out[1]: <type 'str'>
852 852
853 853 indicates that the type name for strings is 'str'.
854 854
855 855 %who always excludes executed names loaded through your configuration
856 856 file and things which are internal to IPython.
857 857
858 858 This is deliberate, as typically you may load many modules and the
859 859 purpose of %who is to show you only what you've manually defined."""
860 860
861 861 varlist = self.magic_who_ls(parameter_s)
862 862 if not varlist:
863 863 print 'Interactive namespace is empty.'
864 864 return
865 865
866 866 # if we have variables, move on...
867 867
868 868 # stupid flushing problem: when prompts have no separators, stdout is
869 869 # getting lost. I'm starting to think this is a python bug. I'm having
870 870 # to force a flush with a print because even a sys.stdout.flush
871 871 # doesn't seem to do anything!
872 872
873 873 count = 0
874 874 for i in varlist:
875 875 print i+'\t',
876 876 count += 1
877 877 if count > 8:
878 878 count = 0
879 879 print
880 880 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
881 881
882 882 print # well, this does force a flush at the expense of an extra \n
883 883
884 884 def magic_whos(self, parameter_s=''):
885 885 """Like %who, but gives some extra information about each variable.
886 886
887 887 The same type filtering of %who can be applied here.
888 888
889 889 For all variables, the type is printed. Additionally it prints:
890 890
891 891 - For {},[],(): their length.
892 892
893 893 - For Numeric arrays, a summary with shape, number of elements,
894 894 typecode and size in memory.
895 895
896 896 - Everything else: a string representation, snipping their middle if
897 897 too long."""
898 898
899 899 varnames = self.magic_who_ls(parameter_s)
900 900 if not varnames:
901 901 print 'Interactive namespace is empty.'
902 902 return
903 903
904 904 # if we have variables, move on...
905 905
906 906 # for these types, show len() instead of data:
907 907 seq_types = [types.DictType,types.ListType,types.TupleType]
908 908
909 909 # for Numeric arrays, display summary info
910 910 try:
911 911 import Numeric
912 912 except ImportError:
913 913 array_type = None
914 914 else:
915 915 array_type = Numeric.ArrayType.__name__
916 916
917 917 # Find all variable names and types so we can figure out column sizes
918 918 get_vars = lambda i: self.shell.user_ns[i]
919 919 type_name = lambda v: type(v).__name__
920 920 varlist = map(get_vars,varnames)
921 921
922 922 typelist = []
923 923 for vv in varlist:
924 924 tt = type_name(vv)
925 925 if tt=='instance':
926 926 typelist.append(str(vv.__class__))
927 927 else:
928 928 typelist.append(tt)
929 929
930 930 # column labels and # of spaces as separator
931 931 varlabel = 'Variable'
932 932 typelabel = 'Type'
933 933 datalabel = 'Data/Info'
934 934 colsep = 3
935 935 # variable format strings
936 936 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
937 937 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
938 938 aformat = "%s: %s elems, type `%s`, %s bytes"
939 939 # find the size of the columns to format the output nicely
940 940 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
941 941 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
942 942 # table header
943 943 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
944 944 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
945 945 # and the table itself
946 946 kb = 1024
947 947 Mb = 1048576 # kb**2
948 948 for vname,var,vtype in zip(varnames,varlist,typelist):
949 949 print itpl(vformat),
950 950 if vtype in seq_types:
951 951 print len(var)
952 952 elif vtype==array_type:
953 953 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
954 954 vsize = Numeric.size(var)
955 955 vbytes = vsize*var.itemsize()
956 956 if vbytes < 100000:
957 957 print aformat % (vshape,vsize,var.typecode(),vbytes)
958 958 else:
959 959 print aformat % (vshape,vsize,var.typecode(),vbytes),
960 960 if vbytes < Mb:
961 961 print '(%s kb)' % (vbytes/kb,)
962 962 else:
963 963 print '(%s Mb)' % (vbytes/Mb,)
964 964 else:
965 965 vstr = str(var).replace('\n','\\n')
966 966 if len(vstr) < 50:
967 967 print vstr
968 968 else:
969 969 printpl(vfmt_short)
970 970
971 971 def magic_reset(self, parameter_s=''):
972 972 """Resets the namespace by removing all names defined by the user.
973 973
974 974 Input/Output history are left around in case you need them."""
975 975
976 976 ans = raw_input(
977 977 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
978 978 if not ans.lower() == 'y':
979 979 print 'Nothing done.'
980 980 return
981 981 user_ns = self.shell.user_ns
982 982 for i in self.magic_who_ls():
983 983 del(user_ns[i])
984 984
985 985 def magic_config(self,parameter_s=''):
986 986 """Show IPython's internal configuration."""
987 987
988 988 page('Current configuration structure:\n'+
989 989 pformat(self.shell.rc.dict()))
990 990
991 991 def magic_logstart(self,parameter_s=''):
992 992 """Start logging anywhere in a session.
993 993
994 %logstart [-o|-t] [log_name [log_mode]]
994 %logstart [-o|-r|-t] [log_name [log_mode]]
995 995
996 996 If no name is given, it defaults to a file named 'ipython_log.py' in your
997 997 current directory, in 'rotate' mode (see below).
998 998
999 999 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1000 1000 history up to that point and then continues logging.
1001 1001
1002 1002 %logstart takes a second optional parameter: logging mode. This can be one
1003 1003 of (note that the modes are given unquoted):\\
1004 1004 append: well, that says it.\\
1005 1005 backup: rename (if exists) to name~ and start name.\\
1006 1006 global: single logfile in your home dir, appended to.\\
1007 1007 over : overwrite existing log.\\
1008 1008 rotate: create rotating logs name.1~, name.2~, etc.
1009 1009
1010 1010 Options:
1011 1011
1012 1012 -o: log also IPython's output. In this mode, all commands which
1013 1013 generate an Out[NN] prompt are recorded to the logfile, right after
1014 1014 their corresponding input line. The output lines are always
1015 1015 prepended with a '#[Out]# ' marker, so that the log remains valid
1016 1016 Python code.
1017 1017
1018 1018 Since this marker is always the same, filtering only the output from
1019 1019 a log is very easy, using for example a simple awk call:
1020 1020
1021 1021 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1022 1022
1023 -r: log 'raw' input. Normally, IPython's logs contain the processed
1024 input, so that user lines are logged in their final form, converted
1025 into valid Python. For example, %Exit is logged as
1026 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1027 exactly as typed, with no transformations applied.
1028
1023 1029 -t: put timestamps before each input line logged (these are put in
1024 1030 comments)."""
1025 1031
1026 opts,par = self.parse_options(parameter_s,'ot')
1032 opts,par = self.parse_options(parameter_s,'ort')
1027 1033 log_output = 'o' in opts
1034 log_raw_input = 'r' in opts
1028 1035 timestamp = 't' in opts
1029 1036
1030 1037 rc = self.shell.rc
1031 1038 logger = self.shell.logger
1032 1039
1033 1040 # if no args are given, the defaults set in the logger constructor by
1034 1041 # ipytohn remain valid
1035 1042 if par:
1036 1043 try:
1037 1044 logfname,logmode = par.split()
1038 1045 except:
1039 1046 logfname = par
1040 1047 logmode = 'backup'
1041 1048 else:
1042 1049 logfname = logger.logfname
1043 1050 logmode = logger.logmode
1044 1051 # put logfname into rc struct as if it had been called on the command
1045 1052 # line, so it ends up saved in the log header Save it in case we need
1046 1053 # to restore it...
1047 1054 old_logfile = rc.opts.get('logfile','')
1048 1055 if logfname:
1049 1056 logfname = os.path.expanduser(logfname)
1050 1057 rc.opts.logfile = logfname
1051 1058 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1052 1059 try:
1053 1060 started = logger.logstart(logfname,loghead,logmode,
1054 log_output,timestamp)
1061 log_output,timestamp,log_raw_input)
1055 1062 except:
1056 1063 rc.opts.logfile = old_logfile
1057 1064 warn("Couldn't start log: %s" % sys.exc_info()[1])
1058 1065 else:
1059 1066 # log input history up to this point, optionally interleaving
1060 1067 # output if requested
1061 1068
1062 1069 if timestamp:
1063 1070 # disable timestamping for the previous history, since we've
1064 1071 # lost those already (no time machine here).
1065 1072 logger.timestamp = False
1073
1074 if log_raw_input:
1075 input_hist = self.shell.input_hist_raw
1076 else:
1077 input_hist = self.shell.input_hist
1078
1066 1079 if log_output:
1067 1080 log_write = logger.log_write
1068 input_hist = self.shell.input_hist
1069 1081 output_hist = self.shell.output_hist
1070 1082 for n in range(1,len(input_hist)-1):
1071 1083 log_write(input_hist[n].rstrip())
1072 1084 if n in output_hist:
1073 1085 log_write(repr(output_hist[n]),'output')
1074 1086 else:
1075 logger.log_write(self.shell.input_hist[1:])
1087 logger.log_write(input_hist[1:])
1076 1088 if timestamp:
1077 1089 # re-enable timestamping
1078 1090 logger.timestamp = True
1079 1091
1080 1092 print ('Activating auto-logging. '
1081 1093 'Current session state plus future input saved.')
1082 1094 logger.logstate()
1083 1095
1084 1096 def magic_logoff(self,parameter_s=''):
1085 1097 """Temporarily stop logging.
1086 1098
1087 1099 You must have previously started logging."""
1088 1100 self.shell.logger.switch_log(0)
1089 1101
1090 1102 def magic_logon(self,parameter_s=''):
1091 1103 """Restart logging.
1092 1104
1093 1105 This function is for restarting logging which you've temporarily
1094 1106 stopped with %logoff. For starting logging for the first time, you
1095 1107 must use the %logstart function, which allows you to specify an
1096 1108 optional log filename."""
1097 1109
1098 1110 self.shell.logger.switch_log(1)
1099 1111
1100 1112 def magic_logstate(self,parameter_s=''):
1101 1113 """Print the status of the logging system."""
1102 1114
1103 1115 self.shell.logger.logstate()
1104 1116
1105 1117 def magic_pdb(self, parameter_s=''):
1106 1118 """Control the calling of the pdb interactive debugger.
1107 1119
1108 1120 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1109 1121 argument it works as a toggle.
1110 1122
1111 1123 When an exception is triggered, IPython can optionally call the
1112 1124 interactive pdb debugger after the traceback printout. %pdb toggles
1113 1125 this feature on and off."""
1114 1126
1115 1127 par = parameter_s.strip().lower()
1116 1128
1117 1129 if par:
1118 1130 try:
1119 1131 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1120 1132 except KeyError:
1121 1133 print ('Incorrect argument. Use on/1, off/0, '
1122 1134 'or nothing for a toggle.')
1123 1135 return
1124 1136 else:
1125 1137 # toggle
1126 1138 new_pdb = not self.shell.InteractiveTB.call_pdb
1127 1139
1128 1140 # set on the shell
1129 1141 self.shell.call_pdb = new_pdb
1130 1142 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1131 1143
1132 1144 def magic_prun(self, parameter_s ='',user_mode=1,
1133 1145 opts=None,arg_lst=None,prog_ns=None):
1134 1146
1135 1147 """Run a statement through the python code profiler.
1136 1148
1137 1149 Usage:\\
1138 1150 %prun [options] statement
1139 1151
1140 1152 The given statement (which doesn't require quote marks) is run via the
1141 1153 python profiler in a manner similar to the profile.run() function.
1142 1154 Namespaces are internally managed to work correctly; profile.run
1143 1155 cannot be used in IPython because it makes certain assumptions about
1144 1156 namespaces which do not hold under IPython.
1145 1157
1146 1158 Options:
1147 1159
1148 1160 -l <limit>: you can place restrictions on what or how much of the
1149 1161 profile gets printed. The limit value can be:
1150 1162
1151 1163 * A string: only information for function names containing this string
1152 1164 is printed.
1153 1165
1154 1166 * An integer: only these many lines are printed.
1155 1167
1156 1168 * A float (between 0 and 1): this fraction of the report is printed
1157 1169 (for example, use a limit of 0.4 to see the topmost 40% only).
1158 1170
1159 1171 You can combine several limits with repeated use of the option. For
1160 1172 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1161 1173 information about class constructors.
1162 1174
1163 1175 -r: return the pstats.Stats object generated by the profiling. This
1164 1176 object has all the information about the profile in it, and you can
1165 1177 later use it for further analysis or in other functions.
1166 1178
1167 1179 Since magic functions have a particular form of calling which prevents
1168 1180 you from writing something like:\\
1169 1181 In [1]: p = %prun -r print 4 # invalid!\\
1170 1182 you must instead use IPython's automatic variables to assign this:\\
1171 1183 In [1]: %prun -r print 4 \\
1172 1184 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1173 1185 In [2]: stats = _
1174 1186
1175 1187 If you really need to assign this value via an explicit function call,
1176 1188 you can always tap directly into the true name of the magic function
1177 1189 by using the _ip.magic function:\\
1178 1190 In [3]: stats = _ip.magic('prun','-r print 4')
1179 1191
1180 1192 You can type _ip.magic? for more details.
1181 1193
1182 1194 -s <key>: sort profile by given key. You can provide more than one key
1183 1195 by using the option several times: '-s key1 -s key2 -s key3...'. The
1184 1196 default sorting key is 'time'.
1185 1197
1186 1198 The following is copied verbatim from the profile documentation
1187 1199 referenced below:
1188 1200
1189 1201 When more than one key is provided, additional keys are used as
1190 1202 secondary criteria when the there is equality in all keys selected
1191 1203 before them.
1192 1204
1193 1205 Abbreviations can be used for any key names, as long as the
1194 1206 abbreviation is unambiguous. The following are the keys currently
1195 1207 defined:
1196 1208
1197 1209 Valid Arg Meaning\\
1198 1210 "calls" call count\\
1199 1211 "cumulative" cumulative time\\
1200 1212 "file" file name\\
1201 1213 "module" file name\\
1202 1214 "pcalls" primitive call count\\
1203 1215 "line" line number\\
1204 1216 "name" function name\\
1205 1217 "nfl" name/file/line\\
1206 1218 "stdname" standard name\\
1207 1219 "time" internal time
1208 1220
1209 1221 Note that all sorts on statistics are in descending order (placing
1210 1222 most time consuming items first), where as name, file, and line number
1211 1223 searches are in ascending order (i.e., alphabetical). The subtle
1212 1224 distinction between "nfl" and "stdname" is that the standard name is a
1213 1225 sort of the name as printed, which means that the embedded line
1214 1226 numbers get compared in an odd way. For example, lines 3, 20, and 40
1215 1227 would (if the file names were the same) appear in the string order
1216 1228 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1217 1229 line numbers. In fact, sort_stats("nfl") is the same as
1218 1230 sort_stats("name", "file", "line").
1219 1231
1220 1232 -T <filename>: save profile results as shown on screen to a text
1221 1233 file. The profile is still shown on screen.
1222 1234
1223 1235 -D <filename>: save (via dump_stats) profile statistics to given
1224 1236 filename. This data is in a format understod by the pstats module, and
1225 1237 is generated by a call to the dump_stats() method of profile
1226 1238 objects. The profile is still shown on screen.
1227 1239
1228 1240 If you want to run complete programs under the profiler's control, use
1229 1241 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1230 1242 contains profiler specific options as described here.
1231 1243
1232 1244 You can read the complete documentation for the profile module with:\\
1233 1245 In [1]: import profile; profile.help() """
1234 1246
1235 1247 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1236 1248 # protect user quote marks
1237 1249 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1238 1250
1239 1251 if user_mode: # regular user call
1240 1252 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1241 1253 list_all=1)
1242 1254 namespace = self.shell.user_ns
1243 1255 else: # called to run a program by %run -p
1244 1256 try:
1245 1257 filename = get_py_filename(arg_lst[0])
1246 1258 except IOError,msg:
1247 1259 error(msg)
1248 1260 return
1249 1261
1250 1262 arg_str = 'execfile(filename,prog_ns)'
1251 1263 namespace = locals()
1252 1264
1253 1265 opts.merge(opts_def)
1254 1266
1255 1267 prof = profile.Profile()
1256 1268 try:
1257 1269 prof = prof.runctx(arg_str,namespace,namespace)
1258 1270 sys_exit = ''
1259 1271 except SystemExit:
1260 1272 sys_exit = """*** SystemExit exception caught in code being profiled."""
1261 1273
1262 1274 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1263 1275
1264 1276 lims = opts.l
1265 1277 if lims:
1266 1278 lims = [] # rebuild lims with ints/floats/strings
1267 1279 for lim in opts.l:
1268 1280 try:
1269 1281 lims.append(int(lim))
1270 1282 except ValueError:
1271 1283 try:
1272 1284 lims.append(float(lim))
1273 1285 except ValueError:
1274 1286 lims.append(lim)
1275 1287
1276 1288 # trap output
1277 1289 sys_stdout = sys.stdout
1278 1290 stdout_trap = StringIO()
1279 1291 try:
1280 1292 sys.stdout = stdout_trap
1281 1293 stats.print_stats(*lims)
1282 1294 finally:
1283 1295 sys.stdout = sys_stdout
1284 1296 output = stdout_trap.getvalue()
1285 1297 output = output.rstrip()
1286 1298
1287 1299 page(output,screen_lines=self.shell.rc.screen_length)
1288 1300 print sys_exit,
1289 1301
1290 1302 dump_file = opts.D[0]
1291 1303 text_file = opts.T[0]
1292 1304 if dump_file:
1293 1305 prof.dump_stats(dump_file)
1294 1306 print '\n*** Profile stats marshalled to file',\
1295 1307 `dump_file`+'.',sys_exit
1296 1308 if text_file:
1297 1309 file(text_file,'w').write(output)
1298 1310 print '\n*** Profile printout saved to text file',\
1299 1311 `text_file`+'.',sys_exit
1300 1312
1301 1313 if opts.has_key('r'):
1302 1314 return stats
1303 1315 else:
1304 1316 return None
1305 1317
1306 1318 def magic_run(self, parameter_s ='',runner=None):
1307 1319 """Run the named file inside IPython as a program.
1308 1320
1309 1321 Usage:\\
1310 1322 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1311 1323
1312 1324 Parameters after the filename are passed as command-line arguments to
1313 1325 the program (put in sys.argv). Then, control returns to IPython's
1314 1326 prompt.
1315 1327
1316 1328 This is similar to running at a system prompt:\\
1317 1329 $ python file args\\
1318 1330 but with the advantage of giving you IPython's tracebacks, and of
1319 1331 loading all variables into your interactive namespace for further use
1320 1332 (unless -p is used, see below).
1321 1333
1322 1334 The file is executed in a namespace initially consisting only of
1323 1335 __name__=='__main__' and sys.argv constructed as indicated. It thus
1324 1336 sees its environment as if it were being run as a stand-alone
1325 1337 program. But after execution, the IPython interactive namespace gets
1326 1338 updated with all variables defined in the program (except for __name__
1327 1339 and sys.argv). This allows for very convenient loading of code for
1328 1340 interactive work, while giving each program a 'clean sheet' to run in.
1329 1341
1330 1342 Options:
1331 1343
1332 1344 -n: __name__ is NOT set to '__main__', but to the running file's name
1333 1345 without extension (as python does under import). This allows running
1334 1346 scripts and reloading the definitions in them without calling code
1335 1347 protected by an ' if __name__ == "__main__" ' clause.
1336 1348
1337 1349 -i: run the file in IPython's namespace instead of an empty one. This
1338 1350 is useful if you are experimenting with code written in a text editor
1339 1351 which depends on variables defined interactively.
1340 1352
1341 1353 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1342 1354 being run. This is particularly useful if IPython is being used to
1343 1355 run unittests, which always exit with a sys.exit() call. In such
1344 1356 cases you are interested in the output of the test results, not in
1345 1357 seeing a traceback of the unittest module.
1346 1358
1347 1359 -t: print timing information at the end of the run. IPython will give
1348 1360 you an estimated CPU time consumption for your script, which under
1349 1361 Unix uses the resource module to avoid the wraparound problems of
1350 1362 time.clock(). Under Unix, an estimate of time spent on system tasks
1351 1363 is also given (for Windows platforms this is reported as 0.0).
1352 1364
1353 1365 If -t is given, an additional -N<N> option can be given, where <N>
1354 1366 must be an integer indicating how many times you want the script to
1355 1367 run. The final timing report will include total and per run results.
1356 1368
1357 1369 For example (testing the script uniq_stable.py):
1358 1370
1359 1371 In [1]: run -t uniq_stable
1360 1372
1361 1373 IPython CPU timings (estimated):\\
1362 1374 User : 0.19597 s.\\
1363 1375 System: 0.0 s.\\
1364 1376
1365 1377 In [2]: run -t -N5 uniq_stable
1366 1378
1367 1379 IPython CPU timings (estimated):\\
1368 1380 Total runs performed: 5\\
1369 1381 Times : Total Per run\\
1370 1382 User : 0.910862 s, 0.1821724 s.\\
1371 1383 System: 0.0 s, 0.0 s.
1372 1384
1373 1385 -d: run your program under the control of pdb, the Python debugger.
1374 1386 This allows you to execute your program step by step, watch variables,
1375 1387 etc. Internally, what IPython does is similar to calling:
1376 1388
1377 1389 pdb.run('execfile("YOURFILENAME")')
1378 1390
1379 1391 with a breakpoint set on line 1 of your file. You can change the line
1380 1392 number for this automatic breakpoint to be <N> by using the -bN option
1381 1393 (where N must be an integer). For example:
1382 1394
1383 1395 %run -d -b40 myscript
1384 1396
1385 1397 will set the first breakpoint at line 40 in myscript.py. Note that
1386 1398 the first breakpoint must be set on a line which actually does
1387 1399 something (not a comment or docstring) for it to stop execution.
1388 1400
1389 1401 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1390 1402 first enter 'c' (without qoutes) to start execution up to the first
1391 1403 breakpoint.
1392 1404
1393 1405 Entering 'help' gives information about the use of the debugger. You
1394 1406 can easily see pdb's full documentation with "import pdb;pdb.help()"
1395 1407 at a prompt.
1396 1408
1397 1409 -p: run program under the control of the Python profiler module (which
1398 1410 prints a detailed report of execution times, function calls, etc).
1399 1411
1400 1412 You can pass other options after -p which affect the behavior of the
1401 1413 profiler itself. See the docs for %prun for details.
1402 1414
1403 1415 In this mode, the program's variables do NOT propagate back to the
1404 1416 IPython interactive namespace (because they remain in the namespace
1405 1417 where the profiler executes them).
1406 1418
1407 1419 Internally this triggers a call to %prun, see its documentation for
1408 1420 details on the options available specifically for profiling."""
1409 1421
1410 1422 # get arguments and set sys.argv for program to be run.
1411 1423 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1412 1424 mode='list',list_all=1)
1413 1425
1414 1426 try:
1415 1427 filename = get_py_filename(arg_lst[0])
1416 1428 except IndexError:
1417 1429 warn('you must provide at least a filename.')
1418 1430 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1419 1431 return
1420 1432 except IOError,msg:
1421 1433 error(msg)
1422 1434 return
1423 1435
1424 1436 # Control the response to exit() calls made by the script being run
1425 1437 exit_ignore = opts.has_key('e')
1426 1438
1427 1439 # Make sure that the running script gets a proper sys.argv as if it
1428 1440 # were run from a system shell.
1429 1441 save_argv = sys.argv # save it for later restoring
1430 1442 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1431 1443
1432 1444 if opts.has_key('i'):
1433 1445 prog_ns = self.shell.user_ns
1434 1446 __name__save = self.shell.user_ns['__name__']
1435 1447 prog_ns['__name__'] = '__main__'
1436 1448 else:
1437 1449 if opts.has_key('n'):
1438 1450 name = os.path.splitext(os.path.basename(filename))[0]
1439 1451 else:
1440 1452 name = '__main__'
1441 1453 prog_ns = {'__name__':name}
1442 1454
1443 1455 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1444 1456 # set the __file__ global in the script's namespace
1445 1457 prog_ns['__file__'] = filename
1446 1458
1447 1459 # pickle fix. See iplib for an explanation. But we need to make sure
1448 1460 # that, if we overwrite __main__, we replace it at the end
1449 1461 if prog_ns['__name__'] == '__main__':
1450 1462 restore_main = sys.modules['__main__']
1451 1463 else:
1452 1464 restore_main = False
1453 1465
1454 1466 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1455 1467
1456 1468 stats = None
1457 1469 try:
1458 1470 if opts.has_key('p'):
1459 1471 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1460 1472 else:
1461 1473 if opts.has_key('d'):
1462 1474 deb = Debugger.Pdb(self.shell.rc.colors)
1463 1475 # reset Breakpoint state, which is moronically kept
1464 1476 # in a class
1465 1477 bdb.Breakpoint.next = 1
1466 1478 bdb.Breakpoint.bplist = {}
1467 1479 bdb.Breakpoint.bpbynumber = [None]
1468 1480 # Set an initial breakpoint to stop execution
1469 1481 maxtries = 10
1470 1482 bp = int(opts.get('b',[1])[0])
1471 1483 checkline = deb.checkline(filename,bp)
1472 1484 if not checkline:
1473 1485 for bp in range(bp+1,bp+maxtries+1):
1474 1486 if deb.checkline(filename,bp):
1475 1487 break
1476 1488 else:
1477 1489 msg = ("\nI failed to find a valid line to set "
1478 1490 "a breakpoint\n"
1479 1491 "after trying up to line: %s.\n"
1480 1492 "Please set a valid breakpoint manually "
1481 1493 "with the -b option." % bp)
1482 1494 error(msg)
1483 1495 return
1484 1496 # if we find a good linenumber, set the breakpoint
1485 1497 deb.do_break('%s:%s' % (filename,bp))
1486 1498 # Start file run
1487 1499 print "NOTE: Enter 'c' at the",
1488 1500 print "ipdb> prompt to start your script."
1489 1501 try:
1490 1502 deb.run('execfile("%s")' % filename,prog_ns)
1491 1503 except:
1492 1504 etype, value, tb = sys.exc_info()
1493 1505 # Skip three frames in the traceback: the %run one,
1494 1506 # one inside bdb.py, and the command-line typed by the
1495 1507 # user (run by exec in pdb itself).
1496 1508 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1497 1509 else:
1498 1510 if runner is None:
1499 1511 runner = self.shell.safe_execfile
1500 1512 if opts.has_key('t'):
1501 1513 try:
1502 1514 nruns = int(opts['N'][0])
1503 1515 if nruns < 1:
1504 1516 error('Number of runs must be >=1')
1505 1517 return
1506 1518 except (KeyError):
1507 1519 nruns = 1
1508 1520 if nruns == 1:
1509 1521 t0 = clock2()
1510 1522 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1511 1523 t1 = clock2()
1512 1524 t_usr = t1[0]-t0[0]
1513 1525 t_sys = t1[1]-t1[1]
1514 1526 print "\nIPython CPU timings (estimated):"
1515 1527 print " User : %10s s." % t_usr
1516 1528 print " System: %10s s." % t_sys
1517 1529 else:
1518 1530 runs = range(nruns)
1519 1531 t0 = clock2()
1520 1532 for nr in runs:
1521 1533 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1522 1534 t1 = clock2()
1523 1535 t_usr = t1[0]-t0[0]
1524 1536 t_sys = t1[1]-t1[1]
1525 1537 print "\nIPython CPU timings (estimated):"
1526 1538 print "Total runs performed:",nruns
1527 1539 print " Times : %10s %10s" % ('Total','Per run')
1528 1540 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1529 1541 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1530 1542
1531 1543 else:
1532 1544 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1533 1545 if opts.has_key('i'):
1534 1546 self.shell.user_ns['__name__'] = __name__save
1535 1547 else:
1536 1548 # update IPython interactive namespace
1537 1549 del prog_ns['__name__']
1538 1550 self.shell.user_ns.update(prog_ns)
1539 1551 finally:
1540 1552 sys.argv = save_argv
1541 1553 if restore_main:
1542 1554 sys.modules['__main__'] = restore_main
1543 1555 return stats
1544 1556
1545 1557 def magic_runlog(self, parameter_s =''):
1546 1558 """Run files as logs.
1547 1559
1548 1560 Usage:\\
1549 1561 %runlog file1 file2 ...
1550 1562
1551 1563 Run the named files (treating them as log files) in sequence inside
1552 1564 the interpreter, and return to the prompt. This is much slower than
1553 1565 %run because each line is executed in a try/except block, but it
1554 1566 allows running files with syntax errors in them.
1555 1567
1556 1568 Normally IPython will guess when a file is one of its own logfiles, so
1557 1569 you can typically use %run even for logs. This shorthand allows you to
1558 1570 force any file to be treated as a log file."""
1559 1571
1560 1572 for f in parameter_s.split():
1561 1573 self.shell.safe_execfile(f,self.shell.user_ns,
1562 1574 self.shell.user_ns,islog=1)
1563 1575
1564 1576 def magic_timeit(self, parameter_s =''):
1565 1577 """Time execution of a Python statement or expression
1566 1578
1567 1579 Usage:\\
1568 1580 %timeit [-n<N> -r<R> [-t|-c]] statement
1569 1581
1570 1582 Time execution of a Python statement or expression using the timeit
1571 1583 module.
1572 1584
1573 1585 Options:
1574 1586 -n<N>: execute the given statement <N> times in a loop. If this value
1575 1587 is not given, a fitting value is chosen.
1576 1588
1577 1589 -r<R>: repeat the loop iteration <R> times and take the best result.
1578 1590 Default: 3
1579 1591
1580 1592 -t: use time.time to measure the time, which is the default on Unix.
1581 1593 This function measures wall time.
1582 1594
1583 1595 -c: use time.clock to measure the time, which is the default on
1584 1596 Windows and measures wall time. On Unix, resource.getrusage is used
1585 1597 instead and returns the CPU user time.
1586 1598
1587 1599 -p<P>: use a precision of <P> digits to display the timing result.
1588 1600 Default: 3
1589 1601
1590 1602
1591 1603 Examples:\\
1592 1604 In [1]: %timeit pass
1593 1605 10000000 loops, best of 3: 53.3 ns per loop
1594 1606
1595 1607 In [2]: u = None
1596 1608
1597 1609 In [3]: %timeit u is None
1598 1610 10000000 loops, best of 3: 184 ns per loop
1599 1611
1600 1612 In [4]: %timeit -r 4 u == None
1601 1613 1000000 loops, best of 4: 242 ns per loop
1602 1614
1603 1615 In [5]: import time
1604 1616
1605 1617 In [6]: %timeit -n1 time.sleep(2)
1606 1618 1 loops, best of 3: 2 s per loop
1607 1619
1608 1620
1609 1621 The times reported by %timeit will be slightly higher than those reported
1610 1622 by the timeit.py script when variables are accessed. This is due to the
1611 1623 fact that %timeit executes the statement in the namespace of the shell,
1612 1624 compared with timeit.py, which uses a single setup statement to import
1613 1625 function or create variables. Generally, the bias does not matter as long
1614 1626 as results from timeit.py are not mixed with those from %timeit."""
1615 1627 import timeit
1616 1628 import math
1617 1629
1618 1630 units = ["s", "ms", "\xc2\xb5s", "ns"]
1619 1631 scaling = [1, 1e3, 1e6, 1e9]
1620 1632
1621 1633 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:')
1622 1634 if stmt == "":
1623 1635 return
1624 1636 timefunc = timeit.default_timer
1625 1637 number = int(getattr(opts, "n", 0))
1626 1638 repeat = int(getattr(opts, "r", timeit.default_repeat))
1627 1639 precision = int(getattr(opts, "p", 3))
1628 1640 if hasattr(opts, "t"):
1629 1641 timefunc = time.time
1630 1642 if hasattr(opts, "c"):
1631 1643 timefunc = clock
1632 1644
1633 1645 timer = timeit.Timer(timer=timefunc)
1634 1646 # this code has tight coupling to the inner workings of timeit.Timer,
1635 1647 # but is there a better way to achieve that the code stmt has access
1636 1648 # to the shell namespace?
1637 1649
1638 1650 src = timeit.template % {'stmt': timeit.reindent(stmt, 8), 'setup': "pass"}
1639 1651 code = compile(src, "<magic-timeit>", "exec")
1640 1652 ns = {}
1641 1653 exec code in self.shell.user_ns, ns
1642 1654 timer.inner = ns["inner"]
1643 1655
1644 1656 if number == 0:
1645 1657 # determine number so that 0.2 <= total time < 2.0
1646 1658 number = 1
1647 1659 for i in range(1, 10):
1648 1660 number *= 10
1649 1661 if timer.timeit(number) >= 0.2:
1650 1662 break
1651 1663
1652 1664 best = min(timer.repeat(repeat, number)) / number
1653 1665
1654 1666 if best > 0.0:
1655 1667 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1656 1668 else:
1657 1669 order = 3
1658 1670 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1659 1671 precision,
1660 1672 best * scaling[order],
1661 1673 units[order])
1662 1674
1663 1675 def magic_time(self,parameter_s = ''):
1664 1676 """Time execution of a Python statement or expression.
1665 1677
1666 1678 The CPU and wall clock times are printed, and the value of the
1667 1679 expression (if any) is returned. Note that under Win32, system time
1668 1680 is always reported as 0, since it can not be measured.
1669 1681
1670 1682 This function provides very basic timing functionality. In Python
1671 1683 2.3, the timeit module offers more control and sophistication, so this
1672 1684 could be rewritten to use it (patches welcome).
1673 1685
1674 1686 Some examples:
1675 1687
1676 1688 In [1]: time 2**128
1677 1689 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1678 1690 Wall time: 0.00
1679 1691 Out[1]: 340282366920938463463374607431768211456L
1680 1692
1681 1693 In [2]: n = 1000000
1682 1694
1683 1695 In [3]: time sum(range(n))
1684 1696 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1685 1697 Wall time: 1.37
1686 1698 Out[3]: 499999500000L
1687 1699
1688 1700 In [4]: time print 'hello world'
1689 1701 hello world
1690 1702 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1691 1703 Wall time: 0.00
1692 1704 """
1693 1705
1694 1706 # fail immediately if the given expression can't be compiled
1695 1707 try:
1696 1708 mode = 'eval'
1697 1709 code = compile(parameter_s,'<timed eval>',mode)
1698 1710 except SyntaxError:
1699 1711 mode = 'exec'
1700 1712 code = compile(parameter_s,'<timed exec>',mode)
1701 1713 # skew measurement as little as possible
1702 1714 glob = self.shell.user_ns
1703 1715 clk = clock2
1704 1716 wtime = time.time
1705 1717 # time execution
1706 1718 wall_st = wtime()
1707 1719 if mode=='eval':
1708 1720 st = clk()
1709 1721 out = eval(code,glob)
1710 1722 end = clk()
1711 1723 else:
1712 1724 st = clk()
1713 1725 exec code in glob
1714 1726 end = clk()
1715 1727 out = None
1716 1728 wall_end = wtime()
1717 1729 # Compute actual times and report
1718 1730 wall_time = wall_end-wall_st
1719 1731 cpu_user = end[0]-st[0]
1720 1732 cpu_sys = end[1]-st[1]
1721 1733 cpu_tot = cpu_user+cpu_sys
1722 1734 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1723 1735 (cpu_user,cpu_sys,cpu_tot)
1724 1736 print "Wall time: %.2f" % wall_time
1725 1737 return out
1726 1738
1727 1739 def magic_macro(self,parameter_s = ''):
1728 1740 """Define a set of input lines as a macro for future re-execution.
1729 1741
1730 1742 Usage:\\
1731 1743 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1732 1744
1733 1745 Options:
1734 1746
1735 1747 -r: use 'raw' input. By default, the 'processed' history is used,
1736 1748 so that magics are loaded in their transformed version to valid
1737 1749 Python. If this option is given, the raw input as typed as the
1738 1750 command line is used instead.
1739 1751
1740 1752 This will define a global variable called `name` which is a string
1741 1753 made of joining the slices and lines you specify (n1,n2,... numbers
1742 1754 above) from your input history into a single string. This variable
1743 1755 acts like an automatic function which re-executes those lines as if
1744 1756 you had typed them. You just type 'name' at the prompt and the code
1745 1757 executes.
1746 1758
1747 1759 The notation for indicating number ranges is: n1-n2 means 'use line
1748 1760 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1749 1761 using the lines numbered 5,6 and 7.
1750 1762
1751 1763 Note: as a 'hidden' feature, you can also use traditional python slice
1752 1764 notation, where N:M means numbers N through M-1.
1753 1765
1754 1766 For example, if your history contains (%hist prints it):
1755 1767
1756 1768 44: x=1\\
1757 1769 45: y=3\\
1758 1770 46: z=x+y\\
1759 1771 47: print x\\
1760 1772 48: a=5\\
1761 1773 49: print 'x',x,'y',y\\
1762 1774
1763 1775 you can create a macro with lines 44 through 47 (included) and line 49
1764 1776 called my_macro with:
1765 1777
1766 1778 In [51]: %macro my_macro 44-47 49
1767 1779
1768 1780 Now, typing `my_macro` (without quotes) will re-execute all this code
1769 1781 in one pass.
1770 1782
1771 1783 You don't need to give the line-numbers in order, and any given line
1772 1784 number can appear multiple times. You can assemble macros with any
1773 1785 lines from your input history in any order.
1774 1786
1775 1787 The macro is a simple object which holds its value in an attribute,
1776 1788 but IPython's display system checks for macros and executes them as
1777 1789 code instead of printing them when you type their name.
1778 1790
1779 1791 You can view a macro's contents by explicitly printing it with:
1780 1792
1781 1793 'print macro_name'.
1782 1794
1783 1795 For one-off cases which DON'T contain magic function calls in them you
1784 1796 can obtain similar results by explicitly executing slices from your
1785 1797 input history with:
1786 1798
1787 1799 In [60]: exec In[44:48]+In[49]"""
1788 1800
1789 1801 opts,args = self.parse_options(parameter_s,'r',mode='list')
1790 1802 name,ranges = args[0], args[1:]
1791 1803 #print 'rng',ranges # dbg
1792 1804 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1793 1805 macro = Macro(lines)
1794 1806 self.shell.user_ns.update({name:macro})
1795 1807 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1796 1808 print 'Macro contents:'
1797 1809 print macro,
1798 1810
1799 1811 def magic_save(self,parameter_s = ''):
1800 1812 """Save a set of lines to a given filename.
1801 1813
1802 1814 Usage:\\
1803 1815 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1804 1816
1805 1817 Options:
1806 1818
1807 1819 -r: use 'raw' input. By default, the 'processed' history is used,
1808 1820 so that magics are loaded in their transformed version to valid
1809 1821 Python. If this option is given, the raw input as typed as the
1810 1822 command line is used instead.
1811 1823
1812 1824 This function uses the same syntax as %macro for line extraction, but
1813 1825 instead of creating a macro it saves the resulting string to the
1814 1826 filename you specify.
1815 1827
1816 1828 It adds a '.py' extension to the file if you don't do so yourself, and
1817 1829 it asks for confirmation before overwriting existing files."""
1818 1830
1819 1831 opts,args = self.parse_options(parameter_s,'r',mode='list')
1820 1832 fname,ranges = args[0], args[1:]
1821 1833 if not fname.endswith('.py'):
1822 1834 fname += '.py'
1823 1835 if os.path.isfile(fname):
1824 1836 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1825 1837 if ans.lower() not in ['y','yes']:
1826 1838 print 'Operation cancelled.'
1827 1839 return
1828 1840 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1829 1841 f = file(fname,'w')
1830 1842 f.write(cmds)
1831 1843 f.close()
1832 1844 print 'The following commands were written to file `%s`:' % fname
1833 1845 print cmds
1834 1846
1835 1847 def _edit_macro(self,mname,macro):
1836 1848 """open an editor with the macro data in a file"""
1837 1849 filename = self.shell.mktempfile(macro.value)
1838 1850 self.shell.hooks.editor(filename)
1839 1851
1840 1852 # and make a new macro object, to replace the old one
1841 1853 mfile = open(filename)
1842 1854 mvalue = mfile.read()
1843 1855 mfile.close()
1844 1856 self.shell.user_ns[mname] = Macro(mvalue)
1845 1857
1846 1858 def magic_ed(self,parameter_s=''):
1847 1859 """Alias to %edit."""
1848 1860 return self.magic_edit(parameter_s)
1849 1861
1850 1862 def magic_edit(self,parameter_s='',last_call=['','']):
1851 1863 """Bring up an editor and execute the resulting code.
1852 1864
1853 1865 Usage:
1854 1866 %edit [options] [args]
1855 1867
1856 1868 %edit runs IPython's editor hook. The default version of this hook is
1857 1869 set to call the __IPYTHON__.rc.editor command. This is read from your
1858 1870 environment variable $EDITOR. If this isn't found, it will default to
1859 1871 vi under Linux/Unix and to notepad under Windows. See the end of this
1860 1872 docstring for how to change the editor hook.
1861 1873
1862 1874 You can also set the value of this editor via the command line option
1863 1875 '-editor' or in your ipythonrc file. This is useful if you wish to use
1864 1876 specifically for IPython an editor different from your typical default
1865 1877 (and for Windows users who typically don't set environment variables).
1866 1878
1867 1879 This command allows you to conveniently edit multi-line code right in
1868 1880 your IPython session.
1869 1881
1870 1882 If called without arguments, %edit opens up an empty editor with a
1871 1883 temporary file and will execute the contents of this file when you
1872 1884 close it (don't forget to save it!).
1873 1885
1874 1886
1875 1887 Options:
1876 1888
1877 1889 -n <number>: open the editor at a specified line number. By default,
1878 1890 the IPython editor hook uses the unix syntax 'editor +N filename', but
1879 1891 you can configure this by providing your own modified hook if your
1880 1892 favorite editor supports line-number specifications with a different
1881 1893 syntax.
1882 1894
1883 1895 -p: this will call the editor with the same data as the previous time
1884 1896 it was used, regardless of how long ago (in your current session) it
1885 1897 was.
1886 1898
1887 1899 -r: use 'raw' input. This option only applies to input taken from the
1888 1900 user's history. By default, the 'processed' history is used, so that
1889 1901 magics are loaded in their transformed version to valid Python. If
1890 1902 this option is given, the raw input as typed as the command line is
1891 1903 used instead. When you exit the editor, it will be executed by
1892 1904 IPython's own processor.
1893 1905
1894 1906 -x: do not execute the edited code immediately upon exit. This is
1895 1907 mainly useful if you are editing programs which need to be called with
1896 1908 command line arguments, which you can then do using %run.
1897 1909
1898 1910
1899 1911 Arguments:
1900 1912
1901 1913 If arguments are given, the following possibilites exist:
1902 1914
1903 1915 - The arguments are numbers or pairs of colon-separated numbers (like
1904 1916 1 4:8 9). These are interpreted as lines of previous input to be
1905 1917 loaded into the editor. The syntax is the same of the %macro command.
1906 1918
1907 1919 - If the argument doesn't start with a number, it is evaluated as a
1908 1920 variable and its contents loaded into the editor. You can thus edit
1909 1921 any string which contains python code (including the result of
1910 1922 previous edits).
1911 1923
1912 1924 - If the argument is the name of an object (other than a string),
1913 1925 IPython will try to locate the file where it was defined and open the
1914 1926 editor at the point where it is defined. You can use `%edit function`
1915 1927 to load an editor exactly at the point where 'function' is defined,
1916 1928 edit it and have the file be executed automatically.
1917 1929
1918 1930 If the object is a macro (see %macro for details), this opens up your
1919 1931 specified editor with a temporary file containing the macro's data.
1920 1932 Upon exit, the macro is reloaded with the contents of the file.
1921 1933
1922 1934 Note: opening at an exact line is only supported under Unix, and some
1923 1935 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1924 1936 '+NUMBER' parameter necessary for this feature. Good editors like
1925 1937 (X)Emacs, vi, jed, pico and joe all do.
1926 1938
1927 1939 - If the argument is not found as a variable, IPython will look for a
1928 1940 file with that name (adding .py if necessary) and load it into the
1929 1941 editor. It will execute its contents with execfile() when you exit,
1930 1942 loading any code in the file into your interactive namespace.
1931 1943
1932 1944 After executing your code, %edit will return as output the code you
1933 1945 typed in the editor (except when it was an existing file). This way
1934 1946 you can reload the code in further invocations of %edit as a variable,
1935 1947 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1936 1948 the output.
1937 1949
1938 1950 Note that %edit is also available through the alias %ed.
1939 1951
1940 1952 This is an example of creating a simple function inside the editor and
1941 1953 then modifying it. First, start up the editor:
1942 1954
1943 1955 In [1]: ed\\
1944 1956 Editing... done. Executing edited code...\\
1945 1957 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1946 1958
1947 1959 We can then call the function foo():
1948 1960
1949 1961 In [2]: foo()\\
1950 1962 foo() was defined in an editing session
1951 1963
1952 1964 Now we edit foo. IPython automatically loads the editor with the
1953 1965 (temporary) file where foo() was previously defined:
1954 1966
1955 1967 In [3]: ed foo\\
1956 1968 Editing... done. Executing edited code...
1957 1969
1958 1970 And if we call foo() again we get the modified version:
1959 1971
1960 1972 In [4]: foo()\\
1961 1973 foo() has now been changed!
1962 1974
1963 1975 Here is an example of how to edit a code snippet successive
1964 1976 times. First we call the editor:
1965 1977
1966 1978 In [8]: ed\\
1967 1979 Editing... done. Executing edited code...\\
1968 1980 hello\\
1969 1981 Out[8]: "print 'hello'\\n"
1970 1982
1971 1983 Now we call it again with the previous output (stored in _):
1972 1984
1973 1985 In [9]: ed _\\
1974 1986 Editing... done. Executing edited code...\\
1975 1987 hello world\\
1976 1988 Out[9]: "print 'hello world'\\n"
1977 1989
1978 1990 Now we call it with the output #8 (stored in _8, also as Out[8]):
1979 1991
1980 1992 In [10]: ed _8\\
1981 1993 Editing... done. Executing edited code...\\
1982 1994 hello again\\
1983 1995 Out[10]: "print 'hello again'\\n"
1984 1996
1985 1997
1986 1998 Changing the default editor hook:
1987 1999
1988 2000 If you wish to write your own editor hook, you can put it in a
1989 2001 configuration file which you load at startup time. The default hook
1990 2002 is defined in the IPython.hooks module, and you can use that as a
1991 2003 starting example for further modifications. That file also has
1992 2004 general instructions on how to set a new hook for use once you've
1993 2005 defined it."""
1994 2006
1995 2007 # FIXME: This function has become a convoluted mess. It needs a
1996 2008 # ground-up rewrite with clean, simple logic.
1997 2009
1998 2010 def make_filename(arg):
1999 2011 "Make a filename from the given args"
2000 2012 try:
2001 2013 filename = get_py_filename(arg)
2002 2014 except IOError:
2003 2015 if args.endswith('.py'):
2004 2016 filename = arg
2005 2017 else:
2006 2018 filename = None
2007 2019 return filename
2008 2020
2009 2021 # custom exceptions
2010 2022 class DataIsObject(Exception): pass
2011 2023
2012 2024 opts,args = self.parse_options(parameter_s,'prxn:')
2013 2025 # Set a few locals from the options for convenience:
2014 2026 opts_p = opts.has_key('p')
2015 2027 opts_r = opts.has_key('r')
2016 2028
2017 2029 # Default line number value
2018 2030 lineno = opts.get('n',None)
2019 2031
2020 2032 if opts_p:
2021 2033 args = '_%s' % last_call[0]
2022 2034 if not self.shell.user_ns.has_key(args):
2023 2035 args = last_call[1]
2024 2036
2025 2037 # use last_call to remember the state of the previous call, but don't
2026 2038 # let it be clobbered by successive '-p' calls.
2027 2039 try:
2028 2040 last_call[0] = self.shell.outputcache.prompt_count
2029 2041 if not opts_p:
2030 2042 last_call[1] = parameter_s
2031 2043 except:
2032 2044 pass
2033 2045
2034 2046 # by default this is done with temp files, except when the given
2035 2047 # arg is a filename
2036 2048 use_temp = 1
2037 2049
2038 2050 if re.match(r'\d',args):
2039 2051 # Mode where user specifies ranges of lines, like in %macro.
2040 2052 # This means that you can't edit files whose names begin with
2041 2053 # numbers this way. Tough.
2042 2054 ranges = args.split()
2043 2055 data = ''.join(self.extract_input_slices(ranges,opts_r))
2044 2056 elif args.endswith('.py'):
2045 2057 filename = make_filename(args)
2046 2058 data = ''
2047 2059 use_temp = 0
2048 2060 elif args:
2049 2061 try:
2050 2062 # Load the parameter given as a variable. If not a string,
2051 2063 # process it as an object instead (below)
2052 2064
2053 2065 #print '*** args',args,'type',type(args) # dbg
2054 2066 data = eval(args,self.shell.user_ns)
2055 2067 if not type(data) in StringTypes:
2056 2068 raise DataIsObject
2057 2069
2058 2070 except (NameError,SyntaxError):
2059 2071 # given argument is not a variable, try as a filename
2060 2072 filename = make_filename(args)
2061 2073 if filename is None:
2062 2074 warn("Argument given (%s) can't be found as a variable "
2063 2075 "or as a filename." % args)
2064 2076 return
2065 2077
2066 2078 data = ''
2067 2079 use_temp = 0
2068 2080 except DataIsObject:
2069 2081
2070 2082 # macros have a special edit function
2071 2083 if isinstance(data,Macro):
2072 2084 self._edit_macro(args,data)
2073 2085 return
2074 2086
2075 2087 # For objects, try to edit the file where they are defined
2076 2088 try:
2077 2089 filename = inspect.getabsfile(data)
2078 2090 datafile = 1
2079 2091 except TypeError:
2080 2092 filename = make_filename(args)
2081 2093 datafile = 1
2082 2094 warn('Could not find file where `%s` is defined.\n'
2083 2095 'Opening a file named `%s`' % (args,filename))
2084 2096 # Now, make sure we can actually read the source (if it was in
2085 2097 # a temp file it's gone by now).
2086 2098 if datafile:
2087 2099 try:
2088 2100 if lineno is None:
2089 2101 lineno = inspect.getsourcelines(data)[1]
2090 2102 except IOError:
2091 2103 filename = make_filename(args)
2092 2104 if filename is None:
2093 2105 warn('The file `%s` where `%s` was defined cannot '
2094 2106 'be read.' % (filename,data))
2095 2107 return
2096 2108 use_temp = 0
2097 2109 else:
2098 2110 data = ''
2099 2111
2100 2112 if use_temp:
2101 2113 filename = self.shell.mktempfile(data)
2102 2114 print 'IPython will make a temporary file named:',filename
2103 2115
2104 2116 # do actual editing here
2105 2117 print 'Editing...',
2106 2118 sys.stdout.flush()
2107 2119 self.shell.hooks.editor(filename,lineno)
2108 2120 if opts.has_key('x'): # -x prevents actual execution
2109 2121 print
2110 2122 else:
2111 2123 print 'done. Executing edited code...'
2112 2124 if opts_r:
2113 2125 self.shell.runlines(file_read(filename))
2114 2126 else:
2115 2127 self.shell.safe_execfile(filename,self.shell.user_ns)
2116 2128 if use_temp:
2117 2129 try:
2118 2130 return open(filename).read()
2119 2131 except IOError,msg:
2120 2132 if msg.filename == filename:
2121 2133 warn('File not found. Did you forget to save?')
2122 2134 return
2123 2135 else:
2124 2136 self.shell.showtraceback()
2125 2137
2126 2138 def magic_xmode(self,parameter_s = ''):
2127 2139 """Switch modes for the exception handlers.
2128 2140
2129 2141 Valid modes: Plain, Context and Verbose.
2130 2142
2131 2143 If called without arguments, acts as a toggle."""
2132 2144
2133 2145 def xmode_switch_err(name):
2134 2146 warn('Error changing %s exception modes.\n%s' %
2135 2147 (name,sys.exc_info()[1]))
2136 2148
2137 2149 shell = self.shell
2138 2150 new_mode = parameter_s.strip().capitalize()
2139 2151 try:
2140 2152 shell.InteractiveTB.set_mode(mode=new_mode)
2141 2153 print 'Exception reporting mode:',shell.InteractiveTB.mode
2142 2154 except:
2143 2155 xmode_switch_err('user')
2144 2156
2145 2157 # threaded shells use a special handler in sys.excepthook
2146 2158 if shell.isthreaded:
2147 2159 try:
2148 2160 shell.sys_excepthook.set_mode(mode=new_mode)
2149 2161 except:
2150 2162 xmode_switch_err('threaded')
2151 2163
2152 2164 def magic_colors(self,parameter_s = ''):
2153 2165 """Switch color scheme for prompts, info system and exception handlers.
2154 2166
2155 2167 Currently implemented schemes: NoColor, Linux, LightBG.
2156 2168
2157 2169 Color scheme names are not case-sensitive."""
2158 2170
2159 2171 def color_switch_err(name):
2160 2172 warn('Error changing %s color schemes.\n%s' %
2161 2173 (name,sys.exc_info()[1]))
2162 2174
2163 2175
2164 2176 new_scheme = parameter_s.strip()
2165 2177 if not new_scheme:
2166 2178 print 'You must specify a color scheme.'
2167 2179 return
2168 2180 import IPython.rlineimpl as readline
2169 2181 if not readline.have_readline:
2170 2182 msg = """\
2171 2183 Proper color support under MS Windows requires Gary Bishop's readline library.
2172 2184 You can find it at:
2173 2185 http://sourceforge.net/projects/uncpythontools
2174 2186 Gary's readline needs the ctypes module, from:
2175 2187 http://starship.python.net/crew/theller/ctypes
2176 2188
2177 2189 Defaulting color scheme to 'NoColor'"""
2178 2190 new_scheme = 'NoColor'
2179 2191 warn(msg)
2180 2192 # local shortcut
2181 2193 shell = self.shell
2182 2194
2183 2195 # Set prompt colors
2184 2196 try:
2185 2197 shell.outputcache.set_colors(new_scheme)
2186 2198 except:
2187 2199 color_switch_err('prompt')
2188 2200 else:
2189 2201 shell.rc.colors = \
2190 2202 shell.outputcache.color_table.active_scheme_name
2191 2203 # Set exception colors
2192 2204 try:
2193 2205 shell.InteractiveTB.set_colors(scheme = new_scheme)
2194 2206 shell.SyntaxTB.set_colors(scheme = new_scheme)
2195 2207 except:
2196 2208 color_switch_err('exception')
2197 2209
2198 2210 # threaded shells use a verbose traceback in sys.excepthook
2199 2211 if shell.isthreaded:
2200 2212 try:
2201 2213 shell.sys_excepthook.set_colors(scheme=new_scheme)
2202 2214 except:
2203 2215 color_switch_err('system exception handler')
2204 2216
2205 2217 # Set info (for 'object?') colors
2206 2218 if shell.rc.color_info:
2207 2219 try:
2208 2220 shell.inspector.set_active_scheme(new_scheme)
2209 2221 except:
2210 2222 color_switch_err('object inspector')
2211 2223 else:
2212 2224 shell.inspector.set_active_scheme('NoColor')
2213 2225
2214 2226 def magic_color_info(self,parameter_s = ''):
2215 2227 """Toggle color_info.
2216 2228
2217 2229 The color_info configuration parameter controls whether colors are
2218 2230 used for displaying object details (by things like %psource, %pfile or
2219 2231 the '?' system). This function toggles this value with each call.
2220 2232
2221 2233 Note that unless you have a fairly recent pager (less works better
2222 2234 than more) in your system, using colored object information displays
2223 2235 will not work properly. Test it and see."""
2224 2236
2225 2237 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2226 2238 self.magic_colors(self.shell.rc.colors)
2227 2239 print 'Object introspection functions have now coloring:',
2228 2240 print ['OFF','ON'][self.shell.rc.color_info]
2229 2241
2230 2242 def magic_Pprint(self, parameter_s=''):
2231 2243 """Toggle pretty printing on/off."""
2232 2244
2233 2245 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2234 2246 print 'Pretty printing has been turned', \
2235 2247 ['OFF','ON'][self.shell.rc.pprint]
2236 2248
2237 2249 def magic_exit(self, parameter_s=''):
2238 2250 """Exit IPython, confirming if configured to do so.
2239 2251
2240 2252 You can configure whether IPython asks for confirmation upon exit by
2241 2253 setting the confirm_exit flag in the ipythonrc file."""
2242 2254
2243 2255 self.shell.exit()
2244 2256
2245 2257 def magic_quit(self, parameter_s=''):
2246 2258 """Exit IPython, confirming if configured to do so (like %exit)"""
2247 2259
2248 2260 self.shell.exit()
2249 2261
2250 2262 def magic_Exit(self, parameter_s=''):
2251 2263 """Exit IPython without confirmation."""
2252 2264
2253 2265 self.shell.exit_now = True
2254 2266
2255 2267 def magic_Quit(self, parameter_s=''):
2256 2268 """Exit IPython without confirmation (like %Exit)."""
2257 2269
2258 2270 self.shell.exit_now = True
2259 2271
2260 2272 #......................................................................
2261 2273 # Functions to implement unix shell-type things
2262 2274
2263 2275 def magic_alias(self, parameter_s = ''):
2264 2276 """Define an alias for a system command.
2265 2277
2266 2278 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2267 2279
2268 2280 Then, typing 'alias_name params' will execute the system command 'cmd
2269 2281 params' (from your underlying operating system).
2270 2282
2271 2283 Aliases have lower precedence than magic functions and Python normal
2272 2284 variables, so if 'foo' is both a Python variable and an alias, the
2273 2285 alias can not be executed until 'del foo' removes the Python variable.
2274 2286
2275 2287 You can use the %l specifier in an alias definition to represent the
2276 2288 whole line when the alias is called. For example:
2277 2289
2278 2290 In [2]: alias all echo "Input in brackets: <%l>"\\
2279 2291 In [3]: all hello world\\
2280 2292 Input in brackets: <hello world>
2281 2293
2282 2294 You can also define aliases with parameters using %s specifiers (one
2283 2295 per parameter):
2284 2296
2285 2297 In [1]: alias parts echo first %s second %s\\
2286 2298 In [2]: %parts A B\\
2287 2299 first A second B\\
2288 2300 In [3]: %parts A\\
2289 2301 Incorrect number of arguments: 2 expected.\\
2290 2302 parts is an alias to: 'echo first %s second %s'
2291 2303
2292 2304 Note that %l and %s are mutually exclusive. You can only use one or
2293 2305 the other in your aliases.
2294 2306
2295 2307 Aliases expand Python variables just like system calls using ! or !!
2296 2308 do: all expressions prefixed with '$' get expanded. For details of
2297 2309 the semantic rules, see PEP-215:
2298 2310 http://www.python.org/peps/pep-0215.html. This is the library used by
2299 2311 IPython for variable expansion. If you want to access a true shell
2300 2312 variable, an extra $ is necessary to prevent its expansion by IPython:
2301 2313
2302 2314 In [6]: alias show echo\\
2303 2315 In [7]: PATH='A Python string'\\
2304 2316 In [8]: show $PATH\\
2305 2317 A Python string\\
2306 2318 In [9]: show $$PATH\\
2307 2319 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2308 2320
2309 2321 You can use the alias facility to acess all of $PATH. See the %rehash
2310 2322 and %rehashx functions, which automatically create aliases for the
2311 2323 contents of your $PATH.
2312 2324
2313 2325 If called with no parameters, %alias prints the current alias table."""
2314 2326
2315 2327 par = parameter_s.strip()
2316 2328 if not par:
2317 2329 if self.shell.rc.automagic:
2318 2330 prechar = ''
2319 2331 else:
2320 2332 prechar = self.shell.ESC_MAGIC
2321 2333 #print 'Alias\t\tSystem Command\n'+'-'*30
2322 2334 atab = self.shell.alias_table
2323 2335 aliases = atab.keys()
2324 2336 aliases.sort()
2325 2337 res = []
2326 2338 for alias in aliases:
2327 2339 res.append((alias, atab[alias][1]))
2328 2340 print "Total number of aliases:",len(aliases)
2329 2341 return res
2330 2342 try:
2331 2343 alias,cmd = par.split(None,1)
2332 2344 except:
2333 2345 print OInspect.getdoc(self.magic_alias)
2334 2346 else:
2335 2347 nargs = cmd.count('%s')
2336 2348 if nargs>0 and cmd.find('%l')>=0:
2337 2349 error('The %s and %l specifiers are mutually exclusive '
2338 2350 'in alias definitions.')
2339 2351 else: # all looks OK
2340 2352 self.shell.alias_table[alias] = (nargs,cmd)
2341 2353 self.shell.alias_table_validate(verbose=0)
2342 2354 # end magic_alias
2343 2355
2344 2356 def magic_unalias(self, parameter_s = ''):
2345 2357 """Remove an alias"""
2346 2358
2347 2359 aname = parameter_s.strip()
2348 2360 if aname in self.shell.alias_table:
2349 2361 del self.shell.alias_table[aname]
2350 2362
2351 2363 def magic_rehash(self, parameter_s = ''):
2352 2364 """Update the alias table with all entries in $PATH.
2353 2365
2354 2366 This version does no checks on execute permissions or whether the
2355 2367 contents of $PATH are truly files (instead of directories or something
2356 2368 else). For such a safer (but slower) version, use %rehashx."""
2357 2369
2358 2370 # This function (and rehashx) manipulate the alias_table directly
2359 2371 # rather than calling magic_alias, for speed reasons. A rehash on a
2360 2372 # typical Linux box involves several thousand entries, so efficiency
2361 2373 # here is a top concern.
2362 2374
2363 2375 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2364 2376 alias_table = self.shell.alias_table
2365 2377 for pdir in path:
2366 2378 for ff in os.listdir(pdir):
2367 2379 # each entry in the alias table must be (N,name), where
2368 2380 # N is the number of positional arguments of the alias.
2369 2381 alias_table[ff] = (0,ff)
2370 2382 # Make sure the alias table doesn't contain keywords or builtins
2371 2383 self.shell.alias_table_validate()
2372 2384 # Call again init_auto_alias() so we get 'rm -i' and other modified
2373 2385 # aliases since %rehash will probably clobber them
2374 2386 self.shell.init_auto_alias()
2375 2387
2376 2388 def magic_rehashx(self, parameter_s = ''):
2377 2389 """Update the alias table with all executable files in $PATH.
2378 2390
2379 2391 This version explicitly checks that every entry in $PATH is a file
2380 2392 with execute access (os.X_OK), so it is much slower than %rehash.
2381 2393
2382 2394 Under Windows, it checks executability as a match agains a
2383 2395 '|'-separated string of extensions, stored in the IPython config
2384 2396 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2385 2397
2386 2398 path = [os.path.abspath(os.path.expanduser(p)) for p in
2387 2399 os.environ['PATH'].split(os.pathsep)]
2388 2400 path = filter(os.path.isdir,path)
2389 2401
2390 2402 alias_table = self.shell.alias_table
2391 2403 syscmdlist = []
2392 2404 if os.name == 'posix':
2393 2405 isexec = lambda fname:os.path.isfile(fname) and \
2394 2406 os.access(fname,os.X_OK)
2395 2407 else:
2396 2408
2397 2409 try:
2398 2410 winext = os.environ['pathext'].replace(';','|').replace('.','')
2399 2411 except KeyError:
2400 2412 winext = 'exe|com|bat'
2401 2413
2402 2414 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2403 2415 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2404 2416 savedir = os.getcwd()
2405 2417 try:
2406 2418 # write the whole loop for posix/Windows so we don't have an if in
2407 2419 # the innermost part
2408 2420 if os.name == 'posix':
2409 2421 for pdir in path:
2410 2422 os.chdir(pdir)
2411 2423 for ff in os.listdir(pdir):
2412 2424 if isexec(ff):
2413 2425 # each entry in the alias table must be (N,name),
2414 2426 # where N is the number of positional arguments of the
2415 2427 # alias.
2416 2428 alias_table[ff] = (0,ff)
2417 2429 syscmdlist.append(ff)
2418 2430 else:
2419 2431 for pdir in path:
2420 2432 os.chdir(pdir)
2421 2433 for ff in os.listdir(pdir):
2422 2434 if isexec(ff):
2423 2435 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2424 2436 syscmdlist.append(ff)
2425 2437 # Make sure the alias table doesn't contain keywords or builtins
2426 2438 self.shell.alias_table_validate()
2427 2439 # Call again init_auto_alias() so we get 'rm -i' and other
2428 2440 # modified aliases since %rehashx will probably clobber them
2429 2441 self.shell.init_auto_alias()
2430 2442 db = self.getapi().db
2431 2443 db['syscmdlist'] = syscmdlist
2432 2444 finally:
2433 2445 os.chdir(savedir)
2434 2446
2435 2447 def magic_pwd(self, parameter_s = ''):
2436 2448 """Return the current working directory path."""
2437 2449 return os.getcwd()
2438 2450
2439 2451 def magic_cd(self, parameter_s=''):
2440 2452 """Change the current working directory.
2441 2453
2442 2454 This command automatically maintains an internal list of directories
2443 2455 you visit during your IPython session, in the variable _dh. The
2444 2456 command %dhist shows this history nicely formatted.
2445 2457
2446 2458 Usage:
2447 2459
2448 2460 cd 'dir': changes to directory 'dir'.
2449 2461
2450 2462 cd -: changes to the last visited directory.
2451 2463
2452 2464 cd -<n>: changes to the n-th directory in the directory history.
2453 2465
2454 2466 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2455 2467 (note: cd <bookmark_name> is enough if there is no
2456 2468 directory <bookmark_name>, but a bookmark with the name exists.)
2457 2469
2458 2470 Options:
2459 2471
2460 2472 -q: quiet. Do not print the working directory after the cd command is
2461 2473 executed. By default IPython's cd command does print this directory,
2462 2474 since the default prompts do not display path information.
2463 2475
2464 2476 Note that !cd doesn't work for this purpose because the shell where
2465 2477 !command runs is immediately discarded after executing 'command'."""
2466 2478
2467 2479 parameter_s = parameter_s.strip()
2468 2480 #bkms = self.shell.persist.get("bookmarks",{})
2469 2481
2470 2482 numcd = re.match(r'(-)(\d+)$',parameter_s)
2471 2483 # jump in directory history by number
2472 2484 if numcd:
2473 2485 nn = int(numcd.group(2))
2474 2486 try:
2475 2487 ps = self.shell.user_ns['_dh'][nn]
2476 2488 except IndexError:
2477 2489 print 'The requested directory does not exist in history.'
2478 2490 return
2479 2491 else:
2480 2492 opts = {}
2481 2493 else:
2482 2494 #turn all non-space-escaping backslashes to slashes,
2483 2495 # for c:\windows\directory\names\
2484 2496 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2485 2497 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2486 2498 # jump to previous
2487 2499 if ps == '-':
2488 2500 try:
2489 2501 ps = self.shell.user_ns['_dh'][-2]
2490 2502 except IndexError:
2491 2503 print 'No previous directory to change to.'
2492 2504 return
2493 2505 # jump to bookmark if needed
2494 2506 else:
2495 2507 if not os.path.isdir(ps) or opts.has_key('b'):
2496 2508 bkms = self.db.get('bookmarks', {})
2497 2509
2498 2510 if bkms.has_key(ps):
2499 2511 target = bkms[ps]
2500 2512 print '(bookmark:%s) -> %s' % (ps,target)
2501 2513 ps = target
2502 2514 else:
2503 2515 if opts.has_key('b'):
2504 2516 error("Bookmark '%s' not found. "
2505 2517 "Use '%%bookmark -l' to see your bookmarks." % ps)
2506 2518 return
2507 2519
2508 2520 # at this point ps should point to the target dir
2509 2521 if ps:
2510 2522 try:
2511 2523 os.chdir(os.path.expanduser(ps))
2512 2524 ttitle = ("IPy:" + (
2513 2525 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2514 2526 platutils.set_term_title(ttitle)
2515 2527 except OSError:
2516 2528 print sys.exc_info()[1]
2517 2529 else:
2518 2530 self.shell.user_ns['_dh'].append(os.getcwd())
2519 2531 else:
2520 2532 os.chdir(self.shell.home_dir)
2521 2533 platutils.set_term_title("IPy:~")
2522 2534 self.shell.user_ns['_dh'].append(os.getcwd())
2523 2535 if not 'q' in opts:
2524 2536 print self.shell.user_ns['_dh'][-1]
2525 2537
2526 2538 def magic_dhist(self, parameter_s=''):
2527 2539 """Print your history of visited directories.
2528 2540
2529 2541 %dhist -> print full history\\
2530 2542 %dhist n -> print last n entries only\\
2531 2543 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2532 2544
2533 2545 This history is automatically maintained by the %cd command, and
2534 2546 always available as the global list variable _dh. You can use %cd -<n>
2535 2547 to go to directory number <n>."""
2536 2548
2537 2549 dh = self.shell.user_ns['_dh']
2538 2550 if parameter_s:
2539 2551 try:
2540 2552 args = map(int,parameter_s.split())
2541 2553 except:
2542 2554 self.arg_err(Magic.magic_dhist)
2543 2555 return
2544 2556 if len(args) == 1:
2545 2557 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2546 2558 elif len(args) == 2:
2547 2559 ini,fin = args
2548 2560 else:
2549 2561 self.arg_err(Magic.magic_dhist)
2550 2562 return
2551 2563 else:
2552 2564 ini,fin = 0,len(dh)
2553 2565 nlprint(dh,
2554 2566 header = 'Directory history (kept in _dh)',
2555 2567 start=ini,stop=fin)
2556 2568
2557 2569 def magic_env(self, parameter_s=''):
2558 2570 """List environment variables."""
2559 2571
2560 2572 return os.environ.data
2561 2573
2562 2574 def magic_pushd(self, parameter_s=''):
2563 2575 """Place the current dir on stack and change directory.
2564 2576
2565 2577 Usage:\\
2566 2578 %pushd ['dirname']
2567 2579
2568 2580 %pushd with no arguments does a %pushd to your home directory.
2569 2581 """
2570 2582 if parameter_s == '': parameter_s = '~'
2571 2583 dir_s = self.shell.dir_stack
2572 2584 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2573 2585 os.path.expanduser(self.shell.dir_stack[0]):
2574 2586 try:
2575 2587 self.magic_cd(parameter_s)
2576 2588 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2577 2589 self.magic_dirs()
2578 2590 except:
2579 2591 print 'Invalid directory'
2580 2592 else:
2581 2593 print 'You are already there!'
2582 2594
2583 2595 def magic_popd(self, parameter_s=''):
2584 2596 """Change to directory popped off the top of the stack.
2585 2597 """
2586 2598 if len (self.shell.dir_stack) > 1:
2587 2599 self.shell.dir_stack.pop(0)
2588 2600 self.magic_cd(self.shell.dir_stack[0])
2589 2601 print self.shell.dir_stack[0]
2590 2602 else:
2591 2603 print "You can't remove the starting directory from the stack:",\
2592 2604 self.shell.dir_stack
2593 2605
2594 2606 def magic_dirs(self, parameter_s=''):
2595 2607 """Return the current directory stack."""
2596 2608
2597 2609 return self.shell.dir_stack[:]
2598 2610
2599 2611 def magic_sc(self, parameter_s=''):
2600 2612 """Shell capture - execute a shell command and capture its output.
2601 2613
2602 2614 DEPRECATED. Suboptimal, retained for backwards compatibility.
2603 2615
2604 2616 You should use the form 'var = !command' instead. Example:
2605 2617
2606 2618 "%sc -l myfiles = ls ~" should now be written as
2607 2619
2608 2620 "myfiles = !ls ~"
2609 2621
2610 2622 myfiles.s, myfiles.l and myfiles.n still apply as documented
2611 2623 below.
2612 2624
2613 2625 --
2614 2626 %sc [options] varname=command
2615 2627
2616 2628 IPython will run the given command using commands.getoutput(), and
2617 2629 will then update the user's interactive namespace with a variable
2618 2630 called varname, containing the value of the call. Your command can
2619 2631 contain shell wildcards, pipes, etc.
2620 2632
2621 2633 The '=' sign in the syntax is mandatory, and the variable name you
2622 2634 supply must follow Python's standard conventions for valid names.
2623 2635
2624 2636 (A special format without variable name exists for internal use)
2625 2637
2626 2638 Options:
2627 2639
2628 2640 -l: list output. Split the output on newlines into a list before
2629 2641 assigning it to the given variable. By default the output is stored
2630 2642 as a single string.
2631 2643
2632 2644 -v: verbose. Print the contents of the variable.
2633 2645
2634 2646 In most cases you should not need to split as a list, because the
2635 2647 returned value is a special type of string which can automatically
2636 2648 provide its contents either as a list (split on newlines) or as a
2637 2649 space-separated string. These are convenient, respectively, either
2638 2650 for sequential processing or to be passed to a shell command.
2639 2651
2640 2652 For example:
2641 2653
2642 2654 # Capture into variable a
2643 2655 In [9]: sc a=ls *py
2644 2656
2645 2657 # a is a string with embedded newlines
2646 2658 In [10]: a
2647 2659 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2648 2660
2649 2661 # which can be seen as a list:
2650 2662 In [11]: a.l
2651 2663 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2652 2664
2653 2665 # or as a whitespace-separated string:
2654 2666 In [12]: a.s
2655 2667 Out[12]: 'setup.py win32_manual_post_install.py'
2656 2668
2657 2669 # a.s is useful to pass as a single command line:
2658 2670 In [13]: !wc -l $a.s
2659 2671 146 setup.py
2660 2672 130 win32_manual_post_install.py
2661 2673 276 total
2662 2674
2663 2675 # while the list form is useful to loop over:
2664 2676 In [14]: for f in a.l:
2665 2677 ....: !wc -l $f
2666 2678 ....:
2667 2679 146 setup.py
2668 2680 130 win32_manual_post_install.py
2669 2681
2670 2682 Similiarly, the lists returned by the -l option are also special, in
2671 2683 the sense that you can equally invoke the .s attribute on them to
2672 2684 automatically get a whitespace-separated string from their contents:
2673 2685
2674 2686 In [1]: sc -l b=ls *py
2675 2687
2676 2688 In [2]: b
2677 2689 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2678 2690
2679 2691 In [3]: b.s
2680 2692 Out[3]: 'setup.py win32_manual_post_install.py'
2681 2693
2682 2694 In summary, both the lists and strings used for ouptut capture have
2683 2695 the following special attributes:
2684 2696
2685 2697 .l (or .list) : value as list.
2686 2698 .n (or .nlstr): value as newline-separated string.
2687 2699 .s (or .spstr): value as space-separated string.
2688 2700 """
2689 2701
2690 2702 opts,args = self.parse_options(parameter_s,'lv')
2691 2703 # Try to get a variable name and command to run
2692 2704 try:
2693 2705 # the variable name must be obtained from the parse_options
2694 2706 # output, which uses shlex.split to strip options out.
2695 2707 var,_ = args.split('=',1)
2696 2708 var = var.strip()
2697 2709 # But the the command has to be extracted from the original input
2698 2710 # parameter_s, not on what parse_options returns, to avoid the
2699 2711 # quote stripping which shlex.split performs on it.
2700 2712 _,cmd = parameter_s.split('=',1)
2701 2713 except ValueError:
2702 2714 var,cmd = '',''
2703 2715 # If all looks ok, proceed
2704 2716 out,err = self.shell.getoutputerror(cmd)
2705 2717 if err:
2706 2718 print >> Term.cerr,err
2707 2719 if opts.has_key('l'):
2708 2720 out = SList(out.split('\n'))
2709 2721 else:
2710 2722 out = LSString(out)
2711 2723 if opts.has_key('v'):
2712 2724 print '%s ==\n%s' % (var,pformat(out))
2713 2725 if var:
2714 2726 self.shell.user_ns.update({var:out})
2715 2727 else:
2716 2728 return out
2717 2729
2718 2730 def magic_sx(self, parameter_s=''):
2719 2731 """Shell execute - run a shell command and capture its output.
2720 2732
2721 2733 %sx command
2722 2734
2723 2735 IPython will run the given command using commands.getoutput(), and
2724 2736 return the result formatted as a list (split on '\\n'). Since the
2725 2737 output is _returned_, it will be stored in ipython's regular output
2726 2738 cache Out[N] and in the '_N' automatic variables.
2727 2739
2728 2740 Notes:
2729 2741
2730 2742 1) If an input line begins with '!!', then %sx is automatically
2731 2743 invoked. That is, while:
2732 2744 !ls
2733 2745 causes ipython to simply issue system('ls'), typing
2734 2746 !!ls
2735 2747 is a shorthand equivalent to:
2736 2748 %sx ls
2737 2749
2738 2750 2) %sx differs from %sc in that %sx automatically splits into a list,
2739 2751 like '%sc -l'. The reason for this is to make it as easy as possible
2740 2752 to process line-oriented shell output via further python commands.
2741 2753 %sc is meant to provide much finer control, but requires more
2742 2754 typing.
2743 2755
2744 2756 3) Just like %sc -l, this is a list with special attributes:
2745 2757
2746 2758 .l (or .list) : value as list.
2747 2759 .n (or .nlstr): value as newline-separated string.
2748 2760 .s (or .spstr): value as whitespace-separated string.
2749 2761
2750 2762 This is very useful when trying to use such lists as arguments to
2751 2763 system commands."""
2752 2764
2753 2765 if parameter_s:
2754 2766 out,err = self.shell.getoutputerror(parameter_s)
2755 2767 if err:
2756 2768 print >> Term.cerr,err
2757 2769 return SList(out.split('\n'))
2758 2770
2759 2771 def magic_bg(self, parameter_s=''):
2760 2772 """Run a job in the background, in a separate thread.
2761 2773
2762 2774 For example,
2763 2775
2764 2776 %bg myfunc(x,y,z=1)
2765 2777
2766 2778 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2767 2779 execution starts, a message will be printed indicating the job
2768 2780 number. If your job number is 5, you can use
2769 2781
2770 2782 myvar = jobs.result(5) or myvar = jobs[5].result
2771 2783
2772 2784 to assign this result to variable 'myvar'.
2773 2785
2774 2786 IPython has a job manager, accessible via the 'jobs' object. You can
2775 2787 type jobs? to get more information about it, and use jobs.<TAB> to see
2776 2788 its attributes. All attributes not starting with an underscore are
2777 2789 meant for public use.
2778 2790
2779 2791 In particular, look at the jobs.new() method, which is used to create
2780 2792 new jobs. This magic %bg function is just a convenience wrapper
2781 2793 around jobs.new(), for expression-based jobs. If you want to create a
2782 2794 new job with an explicit function object and arguments, you must call
2783 2795 jobs.new() directly.
2784 2796
2785 2797 The jobs.new docstring also describes in detail several important
2786 2798 caveats associated with a thread-based model for background job
2787 2799 execution. Type jobs.new? for details.
2788 2800
2789 2801 You can check the status of all jobs with jobs.status().
2790 2802
2791 2803 The jobs variable is set by IPython into the Python builtin namespace.
2792 2804 If you ever declare a variable named 'jobs', you will shadow this
2793 2805 name. You can either delete your global jobs variable to regain
2794 2806 access to the job manager, or make a new name and assign it manually
2795 2807 to the manager (stored in IPython's namespace). For example, to
2796 2808 assign the job manager to the Jobs name, use:
2797 2809
2798 2810 Jobs = __builtins__.jobs"""
2799 2811
2800 2812 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2801 2813
2802 2814
2803 2815 def magic_bookmark(self, parameter_s=''):
2804 2816 """Manage IPython's bookmark system.
2805 2817
2806 2818 %bookmark <name> - set bookmark to current dir
2807 2819 %bookmark <name> <dir> - set bookmark to <dir>
2808 2820 %bookmark -l - list all bookmarks
2809 2821 %bookmark -d <name> - remove bookmark
2810 2822 %bookmark -r - remove all bookmarks
2811 2823
2812 2824 You can later on access a bookmarked folder with:
2813 2825 %cd -b <name>
2814 2826 or simply '%cd <name>' if there is no directory called <name> AND
2815 2827 there is such a bookmark defined.
2816 2828
2817 2829 Your bookmarks persist through IPython sessions, but they are
2818 2830 associated with each profile."""
2819 2831
2820 2832 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2821 2833 if len(args) > 2:
2822 2834 error('You can only give at most two arguments')
2823 2835 return
2824 2836
2825 2837 bkms = self.db.get('bookmarks',{})
2826 2838
2827 2839 if opts.has_key('d'):
2828 2840 try:
2829 2841 todel = args[0]
2830 2842 except IndexError:
2831 2843 error('You must provide a bookmark to delete')
2832 2844 else:
2833 2845 try:
2834 2846 del bkms[todel]
2835 2847 except:
2836 2848 error("Can't delete bookmark '%s'" % todel)
2837 2849 elif opts.has_key('r'):
2838 2850 bkms = {}
2839 2851 elif opts.has_key('l'):
2840 2852 bks = bkms.keys()
2841 2853 bks.sort()
2842 2854 if bks:
2843 2855 size = max(map(len,bks))
2844 2856 else:
2845 2857 size = 0
2846 2858 fmt = '%-'+str(size)+'s -> %s'
2847 2859 print 'Current bookmarks:'
2848 2860 for bk in bks:
2849 2861 print fmt % (bk,bkms[bk])
2850 2862 else:
2851 2863 if not args:
2852 2864 error("You must specify the bookmark name")
2853 2865 elif len(args)==1:
2854 2866 bkms[args[0]] = os.getcwd()
2855 2867 elif len(args)==2:
2856 2868 bkms[args[0]] = args[1]
2857 2869 self.db['bookmarks'] = bkms
2858 2870
2859 2871 def magic_pycat(self, parameter_s=''):
2860 2872 """Show a syntax-highlighted file through a pager.
2861 2873
2862 2874 This magic is similar to the cat utility, but it will assume the file
2863 2875 to be Python source and will show it with syntax highlighting. """
2864 2876
2865 2877 try:
2866 2878 filename = get_py_filename(parameter_s)
2867 2879 cont = file_read(filename)
2868 2880 except IOError:
2869 2881 try:
2870 2882 cont = eval(parameter_s,self.user_ns)
2871 2883 except NameError:
2872 2884 cont = None
2873 2885 if cont is None:
2874 2886 print "Error: no such file or variable"
2875 2887 return
2876 2888
2877 2889 page(self.shell.pycolorize(cont),
2878 2890 screen_lines=self.shell.rc.screen_length)
2879 2891
2880 2892 def magic_cpaste(self, parameter_s=''):
2881 2893 """Allows you to paste & execute a pre-formatted code block from clipboard
2882 2894
2883 2895 You must terminate the block with '--' (two minus-signs) alone on the
2884 2896 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2885 2897 is the new sentinel for this operation)
2886 2898
2887 2899 The block is dedented prior to execution to enable execution of
2888 2900 method definitions. The executed block is also assigned to variable
2889 2901 named 'pasted_block' for later editing with '%edit pasted_block'.
2890 2902
2891 2903 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2892 2904 This assigns the pasted block to variable 'foo' as string, without
2893 2905 dedenting or executing it.
2894 2906
2895 2907 Do not be alarmed by garbled output on Windows (it's a readline bug).
2896 2908 Just press enter and type -- (and press enter again) and the block
2897 2909 will be what was just pasted.
2898 2910
2899 2911 IPython statements (magics, shell escapes) are not supported (yet).
2900 2912 """
2901 2913 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2902 2914 par = args.strip()
2903 2915 sentinel = opts.get('s','--')
2904 2916
2905 2917 from IPython import iplib
2906 2918 lines = []
2907 2919 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2908 2920 while 1:
2909 2921 l = iplib.raw_input_original(':')
2910 2922 if l ==sentinel:
2911 2923 break
2912 2924 lines.append(l)
2913 2925 block = "\n".join(lines) + '\n'
2914 2926 #print "block:\n",block
2915 2927 if not par:
2916 2928 b = textwrap.dedent(block)
2917 2929 exec b in self.user_ns
2918 2930 self.user_ns['pasted_block'] = b
2919 2931 else:
2920 2932 self.user_ns[par] = block
2921 2933 print "Block assigned to '%s'" % par
2922 2934
2923 2935 def magic_quickref(self,arg):
2924 2936 """ Show a quick reference sheet """
2925 2937 import IPython.usage
2926 2938 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2927 2939
2928 2940 page(qr)
2929 2941
2930 2942 def magic_upgrade(self,arg):
2931 2943 """ Upgrade your IPython installation
2932 2944
2933 2945 This will copy the config files that don't yet exist in your
2934 2946 ipython dir from the system config dir. Use this after upgrading
2935 2947 IPython if you don't wish to delete your .ipython dir.
2936 2948
2937 2949 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2938 2950 new users)
2939 2951
2940 2952 """
2941 2953 ip = self.getapi()
2942 2954 ipinstallation = path(IPython.__file__).dirname()
2943 2955 upgrade_script = sys.executable + " " + ipinstallation / 'upgrade_dir.py'
2944 2956 src_config = ipinstallation / 'UserConfig'
2945 2957 userdir = path(ip.options.ipythondir)
2946 2958 cmd = upgrade_script + " " + src_config + " " + userdir
2947 2959 print ">",cmd
2948 2960 shell(cmd)
2949 2961 if arg == '-nolegacy':
2950 2962 legacy = userdir.files('ipythonrc*')
2951 2963 print "Nuking legacy files:",legacy
2952 2964
2953 2965 [p.remove() for p in legacy]
2954 2966 suffix = (sys.platform == 'win32' and '.ini' or '')
2955 2967 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
2956 2968
2957 2969
2958 2970 # end Magic
@@ -1,2314 +1,2314 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 Requires Python 2.3 or newer.
6 6
7 7 This file contains all the classes and helper functions specific to IPython.
8 8
9 $Id: iplib.py 1334 2006-05-30 03:36:04Z fperez $
9 $Id: iplib.py 1335 2006-05-30 06:02:44Z fperez $
10 10 """
11 11
12 12 #*****************************************************************************
13 13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 15 #
16 16 # Distributed under the terms of the BSD License. The full license is in
17 17 # the file COPYING, distributed as part of this software.
18 18 #
19 19 # Note: this code originally subclassed code.InteractiveConsole from the
20 20 # Python standard library. Over time, all of that class has been copied
21 21 # verbatim here for modifications which could not be accomplished by
22 22 # subclassing. At this point, there are no dependencies at all on the code
23 23 # module anymore (it is not even imported). The Python License (sec. 2)
24 24 # allows for this, but it's always nice to acknowledge credit where credit is
25 25 # due.
26 26 #*****************************************************************************
27 27
28 28 #****************************************************************************
29 29 # Modules and globals
30 30
31 31 from IPython import Release
32 32 __author__ = '%s <%s>\n%s <%s>' % \
33 33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 34 __license__ = Release.license
35 35 __version__ = Release.version
36 36
37 37 # Python standard modules
38 38 import __main__
39 39 import __builtin__
40 40 import StringIO
41 41 import bdb
42 42 import cPickle as pickle
43 43 import codeop
44 44 import exceptions
45 45 import glob
46 46 import inspect
47 47 import keyword
48 48 import new
49 49 import os
50 50 import pdb
51 51 import pydoc
52 52 import re
53 53 import shutil
54 54 import string
55 55 import sys
56 56 import tempfile
57 57 import traceback
58 58 import types
59 59 import pickleshare
60 60
61 61 from pprint import pprint, pformat
62 62
63 63 # IPython's own modules
64 64 import IPython
65 65 from IPython import OInspect,PyColorize,ultraTB
66 66 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 67 from IPython.FakeModule import FakeModule
68 68 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 69 from IPython.Logger import Logger
70 70 from IPython.Magic import Magic
71 71 from IPython.Prompts import CachedOutput
72 72 from IPython.ipstruct import Struct
73 73 from IPython.background_jobs import BackgroundJobManager
74 74 from IPython.usage import cmd_line_usage,interactive_usage
75 75 from IPython.genutils import *
76 76 import IPython.ipapi
77 77
78 78 # Globals
79 79
80 80 # store the builtin raw_input globally, and use this always, in case user code
81 81 # overwrites it (like wx.py.PyShell does)
82 82 raw_input_original = raw_input
83 83
84 84 # compiled regexps for autoindent management
85 85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 86
87 87
88 88 #****************************************************************************
89 89 # Some utility function definitions
90 90
91 91 ini_spaces_re = re.compile(r'^(\s+)')
92 92
93 93 def num_ini_spaces(strng):
94 94 """Return the number of initial spaces in a string"""
95 95
96 96 ini_spaces = ini_spaces_re.match(strng)
97 97 if ini_spaces:
98 98 return ini_spaces.end()
99 99 else:
100 100 return 0
101 101
102 102 def softspace(file, newvalue):
103 103 """Copied from code.py, to remove the dependency"""
104 104
105 105 oldvalue = 0
106 106 try:
107 107 oldvalue = file.softspace
108 108 except AttributeError:
109 109 pass
110 110 try:
111 111 file.softspace = newvalue
112 112 except (AttributeError, TypeError):
113 113 # "attribute-less object" or "read-only attributes"
114 114 pass
115 115 return oldvalue
116 116
117 117
118 118 #****************************************************************************
119 119 # Local use exceptions
120 120 class SpaceInInput(exceptions.Exception): pass
121 121
122 122
123 123 #****************************************************************************
124 124 # Local use classes
125 125 class Bunch: pass
126 126
127 127 class Undefined: pass
128 128
129 129 class InputList(list):
130 130 """Class to store user input.
131 131
132 132 It's basically a list, but slices return a string instead of a list, thus
133 133 allowing things like (assuming 'In' is an instance):
134 134
135 135 exec In[4:7]
136 136
137 137 or
138 138
139 139 exec In[5:9] + In[14] + In[21:25]"""
140 140
141 141 def __getslice__(self,i,j):
142 142 return ''.join(list.__getslice__(self,i,j))
143 143
144 144 class SyntaxTB(ultraTB.ListTB):
145 145 """Extension which holds some state: the last exception value"""
146 146
147 147 def __init__(self,color_scheme = 'NoColor'):
148 148 ultraTB.ListTB.__init__(self,color_scheme)
149 149 self.last_syntax_error = None
150 150
151 151 def __call__(self, etype, value, elist):
152 152 self.last_syntax_error = value
153 153 ultraTB.ListTB.__call__(self,etype,value,elist)
154 154
155 155 def clear_err_state(self):
156 156 """Return the current error state and clear it"""
157 157 e = self.last_syntax_error
158 158 self.last_syntax_error = None
159 159 return e
160 160
161 161 #****************************************************************************
162 162 # Main IPython class
163 163
164 164 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 165 # until a full rewrite is made. I've cleaned all cross-class uses of
166 166 # attributes and methods, but too much user code out there relies on the
167 167 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 168 #
169 169 # But at least now, all the pieces have been separated and we could, in
170 170 # principle, stop using the mixin. This will ease the transition to the
171 171 # chainsaw branch.
172 172
173 173 # For reference, the following is the list of 'self.foo' uses in the Magic
174 174 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 175 # class, to prevent clashes.
176 176
177 177 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 178 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 179 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 180 # 'self.value']
181 181
182 182 class InteractiveShell(object,Magic):
183 183 """An enhanced console for Python."""
184 184
185 185 # class attribute to indicate whether the class supports threads or not.
186 186 # Subclasses with thread support should override this as needed.
187 187 isthreaded = False
188 188
189 189 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 190 user_ns = None,user_global_ns=None,banner2='',
191 191 custom_exceptions=((),None),embedded=False):
192 192
193 193 # log system
194 194 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
195 195
196 196 # some minimal strict typechecks. For some core data structures, I
197 197 # want actual basic python types, not just anything that looks like
198 198 # one. This is especially true for namespaces.
199 199 for ns in (user_ns,user_global_ns):
200 200 if ns is not None and type(ns) != types.DictType:
201 201 raise TypeError,'namespace must be a dictionary'
202 202
203 203 # Job manager (for jobs run as background threads)
204 204 self.jobs = BackgroundJobManager()
205 205
206 206 # Store the actual shell's name
207 207 self.name = name
208 208
209 209 # We need to know whether the instance is meant for embedding, since
210 210 # global/local namespaces need to be handled differently in that case
211 211 self.embedded = embedded
212 212
213 213 # command compiler
214 214 self.compile = codeop.CommandCompiler()
215 215
216 216 # User input buffer
217 217 self.buffer = []
218 218
219 219 # Default name given in compilation of code
220 220 self.filename = '<ipython console>'
221 221
222 222 # Make an empty namespace, which extension writers can rely on both
223 223 # existing and NEVER being used by ipython itself. This gives them a
224 224 # convenient location for storing additional information and state
225 225 # their extensions may require, without fear of collisions with other
226 226 # ipython names that may develop later.
227 227 self.meta = Struct()
228 228
229 229 # Create the namespace where the user will operate. user_ns is
230 230 # normally the only one used, and it is passed to the exec calls as
231 231 # the locals argument. But we do carry a user_global_ns namespace
232 232 # given as the exec 'globals' argument, This is useful in embedding
233 233 # situations where the ipython shell opens in a context where the
234 234 # distinction between locals and globals is meaningful.
235 235
236 236 # FIXME. For some strange reason, __builtins__ is showing up at user
237 237 # level as a dict instead of a module. This is a manual fix, but I
238 238 # should really track down where the problem is coming from. Alex
239 239 # Schmolck reported this problem first.
240 240
241 241 # A useful post by Alex Martelli on this topic:
242 242 # Re: inconsistent value from __builtins__
243 243 # Von: Alex Martelli <aleaxit@yahoo.com>
244 244 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
245 245 # Gruppen: comp.lang.python
246 246
247 247 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
248 248 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
249 249 # > <type 'dict'>
250 250 # > >>> print type(__builtins__)
251 251 # > <type 'module'>
252 252 # > Is this difference in return value intentional?
253 253
254 254 # Well, it's documented that '__builtins__' can be either a dictionary
255 255 # or a module, and it's been that way for a long time. Whether it's
256 256 # intentional (or sensible), I don't know. In any case, the idea is
257 257 # that if you need to access the built-in namespace directly, you
258 258 # should start with "import __builtin__" (note, no 's') which will
259 259 # definitely give you a module. Yeah, it's somewhat confusing:-(.
260 260
261 261 # These routines return properly built dicts as needed by the rest of
262 262 # the code, and can also be used by extension writers to generate
263 263 # properly initialized namespaces.
264 264 user_ns = IPython.ipapi.make_user_ns(user_ns)
265 265 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
266 266
267 267 # Assign namespaces
268 268 # This is the namespace where all normal user variables live
269 269 self.user_ns = user_ns
270 270 # Embedded instances require a separate namespace for globals.
271 271 # Normally this one is unused by non-embedded instances.
272 272 self.user_global_ns = user_global_ns
273 273 # A namespace to keep track of internal data structures to prevent
274 274 # them from cluttering user-visible stuff. Will be updated later
275 275 self.internal_ns = {}
276 276
277 277 # Namespace of system aliases. Each entry in the alias
278 278 # table must be a 2-tuple of the form (N,name), where N is the number
279 279 # of positional arguments of the alias.
280 280 self.alias_table = {}
281 281
282 282 # A table holding all the namespaces IPython deals with, so that
283 283 # introspection facilities can search easily.
284 284 self.ns_table = {'user':user_ns,
285 285 'user_global':user_global_ns,
286 286 'alias':self.alias_table,
287 287 'internal':self.internal_ns,
288 288 'builtin':__builtin__.__dict__
289 289 }
290 290
291 291 # The user namespace MUST have a pointer to the shell itself.
292 292 self.user_ns[name] = self
293 293
294 294 # We need to insert into sys.modules something that looks like a
295 295 # module but which accesses the IPython namespace, for shelve and
296 296 # pickle to work interactively. Normally they rely on getting
297 297 # everything out of __main__, but for embedding purposes each IPython
298 298 # instance has its own private namespace, so we can't go shoving
299 299 # everything into __main__.
300 300
301 301 # note, however, that we should only do this for non-embedded
302 302 # ipythons, which really mimic the __main__.__dict__ with their own
303 303 # namespace. Embedded instances, on the other hand, should not do
304 304 # this because they need to manage the user local/global namespaces
305 305 # only, but they live within a 'normal' __main__ (meaning, they
306 306 # shouldn't overtake the execution environment of the script they're
307 307 # embedded in).
308 308
309 309 if not embedded:
310 310 try:
311 311 main_name = self.user_ns['__name__']
312 312 except KeyError:
313 313 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
314 314 else:
315 315 #print "pickle hack in place" # dbg
316 316 #print 'main_name:',main_name # dbg
317 317 sys.modules[main_name] = FakeModule(self.user_ns)
318 318
319 319 # List of input with multi-line handling.
320 320 # Fill its zero entry, user counter starts at 1
321 321 self.input_hist = InputList(['\n'])
322 322 # This one will hold the 'raw' input history, without any
323 323 # pre-processing. This will allow users to retrieve the input just as
324 324 # it was exactly typed in by the user, with %hist -r.
325 325 self.input_hist_raw = InputList(['\n'])
326 326
327 327 # list of visited directories
328 328 try:
329 329 self.dir_hist = [os.getcwd()]
330 330 except IOError, e:
331 331 self.dir_hist = []
332 332
333 333 # dict of output history
334 334 self.output_hist = {}
335 335
336 336 # dict of things NOT to alias (keywords, builtins and some magics)
337 337 no_alias = {}
338 338 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
339 339 for key in keyword.kwlist + no_alias_magics:
340 340 no_alias[key] = 1
341 341 no_alias.update(__builtin__.__dict__)
342 342 self.no_alias = no_alias
343 343
344 344 # make global variables for user access to these
345 345 self.user_ns['_ih'] = self.input_hist
346 346 self.user_ns['_oh'] = self.output_hist
347 347 self.user_ns['_dh'] = self.dir_hist
348 348
349 349 # user aliases to input and output histories
350 350 self.user_ns['In'] = self.input_hist
351 351 self.user_ns['Out'] = self.output_hist
352 352
353 353 # Object variable to store code object waiting execution. This is
354 354 # used mainly by the multithreaded shells, but it can come in handy in
355 355 # other situations. No need to use a Queue here, since it's a single
356 356 # item which gets cleared once run.
357 357 self.code_to_run = None
358 358
359 359 # escapes for automatic behavior on the command line
360 360 self.ESC_SHELL = '!'
361 361 self.ESC_HELP = '?'
362 362 self.ESC_MAGIC = '%'
363 363 self.ESC_QUOTE = ','
364 364 self.ESC_QUOTE2 = ';'
365 365 self.ESC_PAREN = '/'
366 366
367 367 # And their associated handlers
368 368 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
369 369 self.ESC_QUOTE : self.handle_auto,
370 370 self.ESC_QUOTE2 : self.handle_auto,
371 371 self.ESC_MAGIC : self.handle_magic,
372 372 self.ESC_HELP : self.handle_help,
373 373 self.ESC_SHELL : self.handle_shell_escape,
374 374 }
375 375
376 376 # class initializations
377 377 Magic.__init__(self,self)
378 378
379 379 # Python source parser/formatter for syntax highlighting
380 380 pyformat = PyColorize.Parser().format
381 381 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
382 382
383 383 # hooks holds pointers used for user-side customizations
384 384 self.hooks = Struct()
385 385
386 386 # Set all default hooks, defined in the IPython.hooks module.
387 387 hooks = IPython.hooks
388 388 for hook_name in hooks.__all__:
389 389 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
390 390 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
391 391 #print "bound hook",hook_name
392 392
393 393 # Flag to mark unconditional exit
394 394 self.exit_now = False
395 395
396 396 self.usage_min = """\
397 397 An enhanced console for Python.
398 398 Some of its features are:
399 399 - Readline support if the readline library is present.
400 400 - Tab completion in the local namespace.
401 401 - Logging of input, see command-line options.
402 402 - System shell escape via ! , eg !ls.
403 403 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
404 404 - Keeps track of locally defined variables via %who, %whos.
405 405 - Show object information with a ? eg ?x or x? (use ?? for more info).
406 406 """
407 407 if usage: self.usage = usage
408 408 else: self.usage = self.usage_min
409 409
410 410 # Storage
411 411 self.rc = rc # This will hold all configuration information
412 412 self.pager = 'less'
413 413 # temporary files used for various purposes. Deleted at exit.
414 414 self.tempfiles = []
415 415
416 416 # Keep track of readline usage (later set by init_readline)
417 417 self.has_readline = False
418 418
419 419 # template for logfile headers. It gets resolved at runtime by the
420 420 # logstart method.
421 421 self.loghead_tpl = \
422 422 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
423 423 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
424 424 #log# opts = %s
425 425 #log# args = %s
426 426 #log# It is safe to make manual edits below here.
427 427 #log#-----------------------------------------------------------------------
428 428 """
429 429 # for pushd/popd management
430 430 try:
431 431 self.home_dir = get_home_dir()
432 432 except HomeDirError,msg:
433 433 fatal(msg)
434 434
435 435 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
436 436
437 437 # Functions to call the underlying shell.
438 438
439 439 # utility to expand user variables via Itpl
440 440 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
441 441 self.user_ns))
442 442 # The first is similar to os.system, but it doesn't return a value,
443 443 # and it allows interpolation of variables in the user's namespace.
444 444 self.system = lambda cmd: shell(self.var_expand(cmd),
445 445 header='IPython system call: ',
446 446 verbose=self.rc.system_verbose)
447 447 # These are for getoutput and getoutputerror:
448 448 self.getoutput = lambda cmd: \
449 449 getoutput(self.var_expand(cmd),
450 450 header='IPython system call: ',
451 451 verbose=self.rc.system_verbose)
452 452 self.getoutputerror = lambda cmd: \
453 453 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
454 454 self.user_ns)),
455 455 header='IPython system call: ',
456 456 verbose=self.rc.system_verbose)
457 457
458 458 # RegExp for splitting line contents into pre-char//first
459 459 # word-method//rest. For clarity, each group in on one line.
460 460
461 461 # WARNING: update the regexp if the above escapes are changed, as they
462 462 # are hardwired in.
463 463
464 464 # Don't get carried away with trying to make the autocalling catch too
465 465 # much: it's better to be conservative rather than to trigger hidden
466 466 # evals() somewhere and end up causing side effects.
467 467
468 468 self.line_split = re.compile(r'^([\s*,;/])'
469 469 r'([\?\w\.]+\w*\s*)'
470 470 r'(\(?.*$)')
471 471
472 472 # Original re, keep around for a while in case changes break something
473 473 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
474 474 # r'(\s*[\?\w\.]+\w*\s*)'
475 475 # r'(\(?.*$)')
476 476
477 477 # RegExp to identify potential function names
478 478 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
479 479
480 480 # RegExp to exclude strings with this start from autocalling. In
481 481 # particular, all binary operators should be excluded, so that if foo
482 482 # is callable, foo OP bar doesn't become foo(OP bar), which is
483 483 # invalid. The characters '!=()' don't need to be checked for, as the
484 484 # _prefilter routine explicitely does so, to catch direct calls and
485 485 # rebindings of existing names.
486 486
487 487 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
488 488 # it affects the rest of the group in square brackets.
489 489 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
490 490 '|^is |^not |^in |^and |^or ')
491 491
492 492 # try to catch also methods for stuff in lists/tuples/dicts: off
493 493 # (experimental). For this to work, the line_split regexp would need
494 494 # to be modified so it wouldn't break things at '['. That line is
495 495 # nasty enough that I shouldn't change it until I can test it _well_.
496 496 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
497 497
498 498 # keep track of where we started running (mainly for crash post-mortem)
499 499 self.starting_dir = os.getcwd()
500 500
501 501 # Various switches which can be set
502 502 self.CACHELENGTH = 5000 # this is cheap, it's just text
503 503 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
504 504 self.banner2 = banner2
505 505
506 506 # TraceBack handlers:
507 507
508 508 # Syntax error handler.
509 509 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
510 510
511 511 # The interactive one is initialized with an offset, meaning we always
512 512 # want to remove the topmost item in the traceback, which is our own
513 513 # internal code. Valid modes: ['Plain','Context','Verbose']
514 514 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
515 515 color_scheme='NoColor',
516 516 tb_offset = 1)
517 517
518 518 # IPython itself shouldn't crash. This will produce a detailed
519 519 # post-mortem if it does. But we only install the crash handler for
520 520 # non-threaded shells, the threaded ones use a normal verbose reporter
521 521 # and lose the crash handler. This is because exceptions in the main
522 522 # thread (such as in GUI code) propagate directly to sys.excepthook,
523 523 # and there's no point in printing crash dumps for every user exception.
524 524 if self.isthreaded:
525 525 sys.excepthook = ultraTB.FormattedTB()
526 526 else:
527 527 from IPython import CrashHandler
528 528 sys.excepthook = CrashHandler.CrashHandler(self)
529 529
530 530 # The instance will store a pointer to this, so that runtime code
531 531 # (such as magics) can access it. This is because during the
532 532 # read-eval loop, it gets temporarily overwritten (to deal with GUI
533 533 # frameworks).
534 534 self.sys_excepthook = sys.excepthook
535 535
536 536 # and add any custom exception handlers the user may have specified
537 537 self.set_custom_exc(*custom_exceptions)
538 538
539 539 # indentation management
540 540 self.autoindent = False
541 541 self.indent_current_nsp = 0
542 542
543 543 # Make some aliases automatically
544 544 # Prepare list of shell aliases to auto-define
545 545 if os.name == 'posix':
546 546 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
547 547 'mv mv -i','rm rm -i','cp cp -i',
548 548 'cat cat','less less','clear clear',
549 549 # a better ls
550 550 'ls ls -F',
551 551 # long ls
552 552 'll ls -lF')
553 553 # Extra ls aliases with color, which need special treatment on BSD
554 554 # variants
555 555 ls_extra = ( # color ls
556 556 'lc ls -F -o --color',
557 557 # ls normal files only
558 558 'lf ls -F -o --color %l | grep ^-',
559 559 # ls symbolic links
560 560 'lk ls -F -o --color %l | grep ^l',
561 561 # directories or links to directories,
562 562 'ldir ls -F -o --color %l | grep /$',
563 563 # things which are executable
564 564 'lx ls -F -o --color %l | grep ^-..x',
565 565 )
566 566 # The BSDs don't ship GNU ls, so they don't understand the
567 567 # --color switch out of the box
568 568 if 'bsd' in sys.platform:
569 569 ls_extra = ( # ls normal files only
570 570 'lf ls -F -o %l | grep ^-',
571 571 # ls symbolic links
572 572 'lk ls -F -o %l | grep ^l',
573 573 # directories or links to directories,
574 574 'ldir ls -F -o %l | grep /$',
575 575 # things which are executable
576 576 'lx ls -F -o %l | grep ^-..x',
577 577 )
578 578 auto_alias = auto_alias + ls_extra
579 579 elif os.name in ['nt','dos']:
580 580 auto_alias = ('dir dir /on', 'ls dir /on',
581 581 'ddir dir /ad /on', 'ldir dir /ad /on',
582 582 'mkdir mkdir','rmdir rmdir','echo echo',
583 583 'ren ren','cls cls','copy copy')
584 584 else:
585 585 auto_alias = ()
586 586 self.auto_alias = [s.split(None,1) for s in auto_alias]
587 587 # Call the actual (public) initializer
588 588 self.init_auto_alias()
589 589
590 590 # Produce a public API instance
591 591 self.api = IPython.ipapi.IPApi(self)
592 592
593 593 # track which builtins we add, so we can clean up later
594 594 self.builtins_added = {}
595 595 # This method will add the necessary builtins for operation, but
596 596 # tracking what it did via the builtins_added dict.
597 597 self.add_builtins()
598 598
599 599 # end __init__
600 600
601 601 def pre_config_initialization(self):
602 602 """Pre-configuration init method
603 603
604 604 This is called before the configuration files are processed to
605 605 prepare the services the config files might need.
606 606
607 607 self.rc already has reasonable default values at this point.
608 608 """
609 609 rc = self.rc
610 610
611 611 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
612 612
613 613 def post_config_initialization(self):
614 614 """Post configuration init method
615 615
616 616 This is called after the configuration files have been processed to
617 617 'finalize' the initialization."""
618 618
619 619 rc = self.rc
620 620
621 621 # Object inspector
622 622 self.inspector = OInspect.Inspector(OInspect.InspectColors,
623 623 PyColorize.ANSICodeColors,
624 624 'NoColor',
625 625 rc.object_info_string_level)
626 626
627 627 # Load readline proper
628 628 if rc.readline:
629 629 self.init_readline()
630 630
631 631 # local shortcut, this is used a LOT
632 632 self.log = self.logger.log
633 633
634 634 # Initialize cache, set in/out prompts and printing system
635 635 self.outputcache = CachedOutput(self,
636 636 rc.cache_size,
637 637 rc.pprint,
638 638 input_sep = rc.separate_in,
639 639 output_sep = rc.separate_out,
640 640 output_sep2 = rc.separate_out2,
641 641 ps1 = rc.prompt_in1,
642 642 ps2 = rc.prompt_in2,
643 643 ps_out = rc.prompt_out,
644 644 pad_left = rc.prompts_pad_left)
645 645
646 646 # user may have over-ridden the default print hook:
647 647 try:
648 648 self.outputcache.__class__.display = self.hooks.display
649 649 except AttributeError:
650 650 pass
651 651
652 652 # I don't like assigning globally to sys, because it means when embedding
653 653 # instances, each embedded instance overrides the previous choice. But
654 654 # sys.displayhook seems to be called internally by exec, so I don't see a
655 655 # way around it.
656 656 sys.displayhook = self.outputcache
657 657
658 658 # Set user colors (don't do it in the constructor above so that it
659 659 # doesn't crash if colors option is invalid)
660 660 self.magic_colors(rc.colors)
661 661
662 662 # Set calling of pdb on exceptions
663 663 self.call_pdb = rc.pdb
664 664
665 665 # Load user aliases
666 666 for alias in rc.alias:
667 667 self.magic_alias(alias)
668 668 self.hooks.late_startup_hook()
669 669
670 670 for batchfile in [path(arg) for arg in self.rc.args
671 671 if arg.lower().endswith('.ipy')]:
672 672 if not batchfile.isfile():
673 673 print "No such batch file:", batchfile
674 674 continue
675 675 self.api.runlines(batchfile.text())
676 676
677 677 def add_builtins(self):
678 678 """Store ipython references into the builtin namespace.
679 679
680 680 Some parts of ipython operate via builtins injected here, which hold a
681 681 reference to IPython itself."""
682 682
683 683 # TODO: deprecate all except _ip; 'jobs' should be installed
684 684 # by an extension and the rest are under _ip, ipalias is redundant
685 685 builtins_new = dict(__IPYTHON__ = self,
686 686 ip_set_hook = self.set_hook,
687 687 jobs = self.jobs,
688 688 ipmagic = self.ipmagic,
689 689 ipalias = self.ipalias,
690 690 ipsystem = self.ipsystem,
691 691 _ip = self.api
692 692 )
693 693 for biname,bival in builtins_new.items():
694 694 try:
695 695 # store the orignal value so we can restore it
696 696 self.builtins_added[biname] = __builtin__.__dict__[biname]
697 697 except KeyError:
698 698 # or mark that it wasn't defined, and we'll just delete it at
699 699 # cleanup
700 700 self.builtins_added[biname] = Undefined
701 701 __builtin__.__dict__[biname] = bival
702 702
703 703 # Keep in the builtins a flag for when IPython is active. We set it
704 704 # with setdefault so that multiple nested IPythons don't clobber one
705 705 # another. Each will increase its value by one upon being activated,
706 706 # which also gives us a way to determine the nesting level.
707 707 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
708 708
709 709 def clean_builtins(self):
710 710 """Remove any builtins which might have been added by add_builtins, or
711 711 restore overwritten ones to their previous values."""
712 712 for biname,bival in self.builtins_added.items():
713 713 if bival is Undefined:
714 714 del __builtin__.__dict__[biname]
715 715 else:
716 716 __builtin__.__dict__[biname] = bival
717 717 self.builtins_added.clear()
718 718
719 719 def set_hook(self,name,hook, priority = 50):
720 720 """set_hook(name,hook) -> sets an internal IPython hook.
721 721
722 722 IPython exposes some of its internal API as user-modifiable hooks. By
723 723 adding your function to one of these hooks, you can modify IPython's
724 724 behavior to call at runtime your own routines."""
725 725
726 726 # At some point in the future, this should validate the hook before it
727 727 # accepts it. Probably at least check that the hook takes the number
728 728 # of args it's supposed to.
729 729 dp = getattr(self.hooks, name, None)
730 730 if name not in IPython.hooks.__all__:
731 731 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
732 732 if not dp:
733 733 dp = IPython.hooks.CommandChainDispatcher()
734 734
735 735 f = new.instancemethod(hook,self,self.__class__)
736 736 try:
737 737 dp.add(f,priority)
738 738 except AttributeError:
739 739 # it was not commandchain, plain old func - replace
740 740 dp = f
741 741
742 742 setattr(self.hooks,name, dp)
743 743
744 744
745 745 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
746 746
747 747 def set_custom_exc(self,exc_tuple,handler):
748 748 """set_custom_exc(exc_tuple,handler)
749 749
750 750 Set a custom exception handler, which will be called if any of the
751 751 exceptions in exc_tuple occur in the mainloop (specifically, in the
752 752 runcode() method.
753 753
754 754 Inputs:
755 755
756 756 - exc_tuple: a *tuple* of valid exceptions to call the defined
757 757 handler for. It is very important that you use a tuple, and NOT A
758 758 LIST here, because of the way Python's except statement works. If
759 759 you only want to trap a single exception, use a singleton tuple:
760 760
761 761 exc_tuple == (MyCustomException,)
762 762
763 763 - handler: this must be defined as a function with the following
764 764 basic interface: def my_handler(self,etype,value,tb).
765 765
766 766 This will be made into an instance method (via new.instancemethod)
767 767 of IPython itself, and it will be called if any of the exceptions
768 768 listed in the exc_tuple are caught. If the handler is None, an
769 769 internal basic one is used, which just prints basic info.
770 770
771 771 WARNING: by putting in your own exception handler into IPython's main
772 772 execution loop, you run a very good chance of nasty crashes. This
773 773 facility should only be used if you really know what you are doing."""
774 774
775 775 assert type(exc_tuple)==type(()) , \
776 776 "The custom exceptions must be given AS A TUPLE."
777 777
778 778 def dummy_handler(self,etype,value,tb):
779 779 print '*** Simple custom exception handler ***'
780 780 print 'Exception type :',etype
781 781 print 'Exception value:',value
782 782 print 'Traceback :',tb
783 783 print 'Source code :','\n'.join(self.buffer)
784 784
785 785 if handler is None: handler = dummy_handler
786 786
787 787 self.CustomTB = new.instancemethod(handler,self,self.__class__)
788 788 self.custom_exceptions = exc_tuple
789 789
790 790 def set_custom_completer(self,completer,pos=0):
791 791 """set_custom_completer(completer,pos=0)
792 792
793 793 Adds a new custom completer function.
794 794
795 795 The position argument (defaults to 0) is the index in the completers
796 796 list where you want the completer to be inserted."""
797 797
798 798 newcomp = new.instancemethod(completer,self.Completer,
799 799 self.Completer.__class__)
800 800 self.Completer.matchers.insert(pos,newcomp)
801 801
802 802 def _get_call_pdb(self):
803 803 return self._call_pdb
804 804
805 805 def _set_call_pdb(self,val):
806 806
807 807 if val not in (0,1,False,True):
808 808 raise ValueError,'new call_pdb value must be boolean'
809 809
810 810 # store value in instance
811 811 self._call_pdb = val
812 812
813 813 # notify the actual exception handlers
814 814 self.InteractiveTB.call_pdb = val
815 815 if self.isthreaded:
816 816 try:
817 817 self.sys_excepthook.call_pdb = val
818 818 except:
819 819 warn('Failed to activate pdb for threaded exception handler')
820 820
821 821 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
822 822 'Control auto-activation of pdb at exceptions')
823 823
824 824
825 825 # These special functions get installed in the builtin namespace, to
826 826 # provide programmatic (pure python) access to magics, aliases and system
827 827 # calls. This is important for logging, user scripting, and more.
828 828
829 829 # We are basically exposing, via normal python functions, the three
830 830 # mechanisms in which ipython offers special call modes (magics for
831 831 # internal control, aliases for direct system access via pre-selected
832 832 # names, and !cmd for calling arbitrary system commands).
833 833
834 834 def ipmagic(self,arg_s):
835 835 """Call a magic function by name.
836 836
837 837 Input: a string containing the name of the magic function to call and any
838 838 additional arguments to be passed to the magic.
839 839
840 840 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
841 841 prompt:
842 842
843 843 In[1]: %name -opt foo bar
844 844
845 845 To call a magic without arguments, simply use ipmagic('name').
846 846
847 847 This provides a proper Python function to call IPython's magics in any
848 848 valid Python code you can type at the interpreter, including loops and
849 849 compound statements. It is added by IPython to the Python builtin
850 850 namespace upon initialization."""
851 851
852 852 args = arg_s.split(' ',1)
853 853 magic_name = args[0]
854 854 magic_name = magic_name.lstrip(self.ESC_MAGIC)
855 855
856 856 try:
857 857 magic_args = args[1]
858 858 except IndexError:
859 859 magic_args = ''
860 860 fn = getattr(self,'magic_'+magic_name,None)
861 861 if fn is None:
862 862 error("Magic function `%s` not found." % magic_name)
863 863 else:
864 864 magic_args = self.var_expand(magic_args)
865 865 return fn(magic_args)
866 866
867 867 def ipalias(self,arg_s):
868 868 """Call an alias by name.
869 869
870 870 Input: a string containing the name of the alias to call and any
871 871 additional arguments to be passed to the magic.
872 872
873 873 ipalias('name -opt foo bar') is equivalent to typing at the ipython
874 874 prompt:
875 875
876 876 In[1]: name -opt foo bar
877 877
878 878 To call an alias without arguments, simply use ipalias('name').
879 879
880 880 This provides a proper Python function to call IPython's aliases in any
881 881 valid Python code you can type at the interpreter, including loops and
882 882 compound statements. It is added by IPython to the Python builtin
883 883 namespace upon initialization."""
884 884
885 885 args = arg_s.split(' ',1)
886 886 alias_name = args[0]
887 887 try:
888 888 alias_args = args[1]
889 889 except IndexError:
890 890 alias_args = ''
891 891 if alias_name in self.alias_table:
892 892 self.call_alias(alias_name,alias_args)
893 893 else:
894 894 error("Alias `%s` not found." % alias_name)
895 895
896 896 def ipsystem(self,arg_s):
897 897 """Make a system call, using IPython."""
898 898
899 899 self.system(arg_s)
900 900
901 901 def complete(self,text):
902 902 """Return a sorted list of all possible completions on text.
903 903
904 904 Inputs:
905 905
906 906 - text: a string of text to be completed on.
907 907
908 908 This is a wrapper around the completion mechanism, similar to what
909 909 readline does at the command line when the TAB key is hit. By
910 910 exposing it as a method, it can be used by other non-readline
911 911 environments (such as GUIs) for text completion.
912 912
913 913 Simple usage example:
914 914
915 915 In [1]: x = 'hello'
916 916
917 917 In [2]: __IP.complete('x.l')
918 918 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
919 919
920 920 complete = self.Completer.complete
921 921 state = 0
922 922 # use a dict so we get unique keys, since ipyhton's multiple
923 923 # completers can return duplicates.
924 924 comps = {}
925 925 while True:
926 926 newcomp = complete(text,state)
927 927 if newcomp is None:
928 928 break
929 929 comps[newcomp] = 1
930 930 state += 1
931 931 outcomps = comps.keys()
932 932 outcomps.sort()
933 933 return outcomps
934 934
935 935 def set_completer_frame(self, frame=None):
936 936 if frame:
937 937 self.Completer.namespace = frame.f_locals
938 938 self.Completer.global_namespace = frame.f_globals
939 939 else:
940 940 self.Completer.namespace = self.user_ns
941 941 self.Completer.global_namespace = self.user_global_ns
942 942
943 943 def init_auto_alias(self):
944 944 """Define some aliases automatically.
945 945
946 946 These are ALL parameter-less aliases"""
947 947
948 948 for alias,cmd in self.auto_alias:
949 949 self.alias_table[alias] = (0,cmd)
950 950
951 951 def alias_table_validate(self,verbose=0):
952 952 """Update information about the alias table.
953 953
954 954 In particular, make sure no Python keywords/builtins are in it."""
955 955
956 956 no_alias = self.no_alias
957 957 for k in self.alias_table.keys():
958 958 if k in no_alias:
959 959 del self.alias_table[k]
960 960 if verbose:
961 961 print ("Deleting alias <%s>, it's a Python "
962 962 "keyword or builtin." % k)
963 963
964 964 def set_autoindent(self,value=None):
965 965 """Set the autoindent flag, checking for readline support.
966 966
967 967 If called with no arguments, it acts as a toggle."""
968 968
969 969 if not self.has_readline:
970 970 if os.name == 'posix':
971 971 warn("The auto-indent feature requires the readline library")
972 972 self.autoindent = 0
973 973 return
974 974 if value is None:
975 975 self.autoindent = not self.autoindent
976 976 else:
977 977 self.autoindent = value
978 978
979 979 def rc_set_toggle(self,rc_field,value=None):
980 980 """Set or toggle a field in IPython's rc config. structure.
981 981
982 982 If called with no arguments, it acts as a toggle.
983 983
984 984 If called with a non-existent field, the resulting AttributeError
985 985 exception will propagate out."""
986 986
987 987 rc_val = getattr(self.rc,rc_field)
988 988 if value is None:
989 989 value = not rc_val
990 990 setattr(self.rc,rc_field,value)
991 991
992 992 def user_setup(self,ipythondir,rc_suffix,mode='install'):
993 993 """Install the user configuration directory.
994 994
995 995 Can be called when running for the first time or to upgrade the user's
996 996 .ipython/ directory with the mode parameter. Valid modes are 'install'
997 997 and 'upgrade'."""
998 998
999 999 def wait():
1000 1000 try:
1001 1001 raw_input("Please press <RETURN> to start IPython.")
1002 1002 except EOFError:
1003 1003 print >> Term.cout
1004 1004 print '*'*70
1005 1005
1006 1006 cwd = os.getcwd() # remember where we started
1007 1007 glb = glob.glob
1008 1008 print '*'*70
1009 1009 if mode == 'install':
1010 1010 print \
1011 1011 """Welcome to IPython. I will try to create a personal configuration directory
1012 1012 where you can customize many aspects of IPython's functionality in:\n"""
1013 1013 else:
1014 1014 print 'I am going to upgrade your configuration in:'
1015 1015
1016 1016 print ipythondir
1017 1017
1018 1018 rcdirend = os.path.join('IPython','UserConfig')
1019 1019 cfg = lambda d: os.path.join(d,rcdirend)
1020 1020 try:
1021 1021 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1022 1022 except IOError:
1023 1023 warning = """
1024 1024 Installation error. IPython's directory was not found.
1025 1025
1026 1026 Check the following:
1027 1027
1028 1028 The ipython/IPython directory should be in a directory belonging to your
1029 1029 PYTHONPATH environment variable (that is, it should be in a directory
1030 1030 belonging to sys.path). You can copy it explicitly there or just link to it.
1031 1031
1032 1032 IPython will proceed with builtin defaults.
1033 1033 """
1034 1034 warn(warning)
1035 1035 wait()
1036 1036 return
1037 1037
1038 1038 if mode == 'install':
1039 1039 try:
1040 1040 shutil.copytree(rcdir,ipythondir)
1041 1041 os.chdir(ipythondir)
1042 1042 rc_files = glb("ipythonrc*")
1043 1043 for rc_file in rc_files:
1044 1044 os.rename(rc_file,rc_file+rc_suffix)
1045 1045 except:
1046 1046 warning = """
1047 1047
1048 1048 There was a problem with the installation:
1049 1049 %s
1050 1050 Try to correct it or contact the developers if you think it's a bug.
1051 1051 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1052 1052 warn(warning)
1053 1053 wait()
1054 1054 return
1055 1055
1056 1056 elif mode == 'upgrade':
1057 1057 try:
1058 1058 os.chdir(ipythondir)
1059 1059 except:
1060 1060 print """
1061 1061 Can not upgrade: changing to directory %s failed. Details:
1062 1062 %s
1063 1063 """ % (ipythondir,sys.exc_info()[1])
1064 1064 wait()
1065 1065 return
1066 1066 else:
1067 1067 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1068 1068 for new_full_path in sources:
1069 1069 new_filename = os.path.basename(new_full_path)
1070 1070 if new_filename.startswith('ipythonrc'):
1071 1071 new_filename = new_filename + rc_suffix
1072 1072 # The config directory should only contain files, skip any
1073 1073 # directories which may be there (like CVS)
1074 1074 if os.path.isdir(new_full_path):
1075 1075 continue
1076 1076 if os.path.exists(new_filename):
1077 1077 old_file = new_filename+'.old'
1078 1078 if os.path.exists(old_file):
1079 1079 os.remove(old_file)
1080 1080 os.rename(new_filename,old_file)
1081 1081 shutil.copy(new_full_path,new_filename)
1082 1082 else:
1083 1083 raise ValueError,'unrecognized mode for install:',`mode`
1084 1084
1085 1085 # Fix line-endings to those native to each platform in the config
1086 1086 # directory.
1087 1087 try:
1088 1088 os.chdir(ipythondir)
1089 1089 except:
1090 1090 print """
1091 1091 Problem: changing to directory %s failed.
1092 1092 Details:
1093 1093 %s
1094 1094
1095 1095 Some configuration files may have incorrect line endings. This should not
1096 1096 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1097 1097 wait()
1098 1098 else:
1099 1099 for fname in glb('ipythonrc*'):
1100 1100 try:
1101 1101 native_line_ends(fname,backup=0)
1102 1102 except IOError:
1103 1103 pass
1104 1104
1105 1105 if mode == 'install':
1106 1106 print """
1107 1107 Successful installation!
1108 1108
1109 1109 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1110 1110 IPython manual (there are both HTML and PDF versions supplied with the
1111 1111 distribution) to make sure that your system environment is properly configured
1112 1112 to take advantage of IPython's features.
1113 1113
1114 1114 Important note: the configuration system has changed! The old system is
1115 1115 still in place, but its setting may be partly overridden by the settings in
1116 1116 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1117 1117 if some of the new settings bother you.
1118 1118
1119 1119 """
1120 1120 else:
1121 1121 print """
1122 1122 Successful upgrade!
1123 1123
1124 1124 All files in your directory:
1125 1125 %(ipythondir)s
1126 1126 which would have been overwritten by the upgrade were backed up with a .old
1127 1127 extension. If you had made particular customizations in those files you may
1128 1128 want to merge them back into the new files.""" % locals()
1129 1129 wait()
1130 1130 os.chdir(cwd)
1131 1131 # end user_setup()
1132 1132
1133 1133 def atexit_operations(self):
1134 1134 """This will be executed at the time of exit.
1135 1135
1136 1136 Saving of persistent data should be performed here. """
1137 1137
1138 1138 #print '*** IPython exit cleanup ***' # dbg
1139 1139 # input history
1140 1140 self.savehist()
1141 1141
1142 1142 # Cleanup all tempfiles left around
1143 1143 for tfile in self.tempfiles:
1144 1144 try:
1145 1145 os.unlink(tfile)
1146 1146 except OSError:
1147 1147 pass
1148 1148
1149 1149 # save the "persistent data" catch-all dictionary
1150 1150 self.hooks.shutdown_hook()
1151 1151
1152 1152 def savehist(self):
1153 1153 """Save input history to a file (via readline library)."""
1154 1154 try:
1155 1155 self.readline.write_history_file(self.histfile)
1156 1156 except:
1157 1157 print 'Unable to save IPython command history to file: ' + \
1158 1158 `self.histfile`
1159 1159
1160 1160 def pre_readline(self):
1161 1161 """readline hook to be used at the start of each line.
1162 1162
1163 1163 Currently it handles auto-indent only."""
1164 1164
1165 1165 #debugx('self.indent_current_nsp','pre_readline:')
1166 1166 self.readline.insert_text(self.indent_current_str())
1167 1167
1168 1168 def init_readline(self):
1169 1169 """Command history completion/saving/reloading."""
1170 1170
1171 1171 import IPython.rlineimpl as readline
1172 1172 if not readline.have_readline:
1173 1173 self.has_readline = 0
1174 1174 self.readline = None
1175 1175 # no point in bugging windows users with this every time:
1176 1176 warn('Readline services not available on this platform.')
1177 1177 else:
1178 1178 sys.modules['readline'] = readline
1179 1179 import atexit
1180 1180 from IPython.completer import IPCompleter
1181 1181 self.Completer = IPCompleter(self,
1182 1182 self.user_ns,
1183 1183 self.user_global_ns,
1184 1184 self.rc.readline_omit__names,
1185 1185 self.alias_table)
1186 1186
1187 1187 # Platform-specific configuration
1188 1188 if os.name == 'nt':
1189 1189 self.readline_startup_hook = readline.set_pre_input_hook
1190 1190 else:
1191 1191 self.readline_startup_hook = readline.set_startup_hook
1192 1192
1193 1193 # Load user's initrc file (readline config)
1194 1194 inputrc_name = os.environ.get('INPUTRC')
1195 1195 if inputrc_name is None:
1196 1196 home_dir = get_home_dir()
1197 1197 if home_dir is not None:
1198 1198 inputrc_name = os.path.join(home_dir,'.inputrc')
1199 1199 if os.path.isfile(inputrc_name):
1200 1200 try:
1201 1201 readline.read_init_file(inputrc_name)
1202 1202 except:
1203 1203 warn('Problems reading readline initialization file <%s>'
1204 1204 % inputrc_name)
1205 1205
1206 1206 self.has_readline = 1
1207 1207 self.readline = readline
1208 1208 # save this in sys so embedded copies can restore it properly
1209 1209 sys.ipcompleter = self.Completer.complete
1210 1210 readline.set_completer(self.Completer.complete)
1211 1211
1212 1212 # Configure readline according to user's prefs
1213 1213 for rlcommand in self.rc.readline_parse_and_bind:
1214 1214 readline.parse_and_bind(rlcommand)
1215 1215
1216 1216 # remove some chars from the delimiters list
1217 1217 delims = readline.get_completer_delims()
1218 1218 delims = delims.translate(string._idmap,
1219 1219 self.rc.readline_remove_delims)
1220 1220 readline.set_completer_delims(delims)
1221 1221 # otherwise we end up with a monster history after a while:
1222 1222 readline.set_history_length(1000)
1223 1223 try:
1224 1224 #print '*** Reading readline history' # dbg
1225 1225 readline.read_history_file(self.histfile)
1226 1226 except IOError:
1227 1227 pass # It doesn't exist yet.
1228 1228
1229 1229 atexit.register(self.atexit_operations)
1230 1230 del atexit
1231 1231
1232 1232 # Configure auto-indent for all platforms
1233 1233 self.set_autoindent(self.rc.autoindent)
1234 1234
1235 1235 def _should_recompile(self,e):
1236 1236 """Utility routine for edit_syntax_error"""
1237 1237
1238 1238 if e.filename in ('<ipython console>','<input>','<string>',
1239 1239 '<console>','<BackgroundJob compilation>',
1240 1240 None):
1241 1241
1242 1242 return False
1243 1243 try:
1244 1244 if (self.rc.autoedit_syntax and
1245 1245 not ask_yes_no('Return to editor to correct syntax error? '
1246 1246 '[Y/n] ','y')):
1247 1247 return False
1248 1248 except EOFError:
1249 1249 return False
1250 1250
1251 1251 def int0(x):
1252 1252 try:
1253 1253 return int(x)
1254 1254 except TypeError:
1255 1255 return 0
1256 1256 # always pass integer line and offset values to editor hook
1257 1257 self.hooks.fix_error_editor(e.filename,
1258 1258 int0(e.lineno),int0(e.offset),e.msg)
1259 1259 return True
1260 1260
1261 1261 def edit_syntax_error(self):
1262 1262 """The bottom half of the syntax error handler called in the main loop.
1263 1263
1264 1264 Loop until syntax error is fixed or user cancels.
1265 1265 """
1266 1266
1267 1267 while self.SyntaxTB.last_syntax_error:
1268 1268 # copy and clear last_syntax_error
1269 1269 err = self.SyntaxTB.clear_err_state()
1270 1270 if not self._should_recompile(err):
1271 1271 return
1272 1272 try:
1273 1273 # may set last_syntax_error again if a SyntaxError is raised
1274 1274 self.safe_execfile(err.filename,self.shell.user_ns)
1275 1275 except:
1276 1276 self.showtraceback()
1277 1277 else:
1278 1278 try:
1279 1279 f = file(err.filename)
1280 1280 try:
1281 1281 sys.displayhook(f.read())
1282 1282 finally:
1283 1283 f.close()
1284 1284 except:
1285 1285 self.showtraceback()
1286 1286
1287 1287 def showsyntaxerror(self, filename=None):
1288 1288 """Display the syntax error that just occurred.
1289 1289
1290 1290 This doesn't display a stack trace because there isn't one.
1291 1291
1292 1292 If a filename is given, it is stuffed in the exception instead
1293 1293 of what was there before (because Python's parser always uses
1294 1294 "<string>" when reading from a string).
1295 1295 """
1296 1296 etype, value, last_traceback = sys.exc_info()
1297 1297
1298 1298 # See note about these variables in showtraceback() below
1299 1299 sys.last_type = etype
1300 1300 sys.last_value = value
1301 1301 sys.last_traceback = last_traceback
1302 1302
1303 1303 if filename and etype is SyntaxError:
1304 1304 # Work hard to stuff the correct filename in the exception
1305 1305 try:
1306 1306 msg, (dummy_filename, lineno, offset, line) = value
1307 1307 except:
1308 1308 # Not the format we expect; leave it alone
1309 1309 pass
1310 1310 else:
1311 1311 # Stuff in the right filename
1312 1312 try:
1313 1313 # Assume SyntaxError is a class exception
1314 1314 value = SyntaxError(msg, (filename, lineno, offset, line))
1315 1315 except:
1316 1316 # If that failed, assume SyntaxError is a string
1317 1317 value = msg, (filename, lineno, offset, line)
1318 1318 self.SyntaxTB(etype,value,[])
1319 1319
1320 1320 def debugger(self):
1321 1321 """Call the pdb debugger."""
1322 1322
1323 1323 if not self.rc.pdb:
1324 1324 return
1325 1325 pdb.pm()
1326 1326
1327 1327 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1328 1328 """Display the exception that just occurred.
1329 1329
1330 1330 If nothing is known about the exception, this is the method which
1331 1331 should be used throughout the code for presenting user tracebacks,
1332 1332 rather than directly invoking the InteractiveTB object.
1333 1333
1334 1334 A specific showsyntaxerror() also exists, but this method can take
1335 1335 care of calling it if needed, so unless you are explicitly catching a
1336 1336 SyntaxError exception, don't try to analyze the stack manually and
1337 1337 simply call this method."""
1338 1338
1339 1339 # Though this won't be called by syntax errors in the input line,
1340 1340 # there may be SyntaxError cases whith imported code.
1341 1341 if exc_tuple is None:
1342 1342 etype, value, tb = sys.exc_info()
1343 1343 else:
1344 1344 etype, value, tb = exc_tuple
1345 1345 if etype is SyntaxError:
1346 1346 self.showsyntaxerror(filename)
1347 1347 else:
1348 1348 # WARNING: these variables are somewhat deprecated and not
1349 1349 # necessarily safe to use in a threaded environment, but tools
1350 1350 # like pdb depend on their existence, so let's set them. If we
1351 1351 # find problems in the field, we'll need to revisit their use.
1352 1352 sys.last_type = etype
1353 1353 sys.last_value = value
1354 1354 sys.last_traceback = tb
1355 1355
1356 1356 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1357 1357 if self.InteractiveTB.call_pdb and self.has_readline:
1358 1358 # pdb mucks up readline, fix it back
1359 1359 self.readline.set_completer(self.Completer.complete)
1360 1360
1361 1361 def mainloop(self,banner=None):
1362 1362 """Creates the local namespace and starts the mainloop.
1363 1363
1364 1364 If an optional banner argument is given, it will override the
1365 1365 internally created default banner."""
1366 1366
1367 1367 if self.rc.c: # Emulate Python's -c option
1368 1368 self.exec_init_cmd()
1369 1369 if banner is None:
1370 1370 if not self.rc.banner:
1371 1371 banner = ''
1372 1372 # banner is string? Use it directly!
1373 1373 elif isinstance(self.rc.banner,basestring):
1374 1374 banner = self.rc.banner
1375 1375 else:
1376 1376 banner = self.BANNER+self.banner2
1377 1377
1378 1378 self.interact(banner)
1379 1379
1380 1380 def exec_init_cmd(self):
1381 1381 """Execute a command given at the command line.
1382 1382
1383 1383 This emulates Python's -c option."""
1384 1384
1385 1385 #sys.argv = ['-c']
1386 1386 self.push(self.rc.c)
1387 1387
1388 1388 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1389 1389 """Embeds IPython into a running python program.
1390 1390
1391 1391 Input:
1392 1392
1393 1393 - header: An optional header message can be specified.
1394 1394
1395 1395 - local_ns, global_ns: working namespaces. If given as None, the
1396 1396 IPython-initialized one is updated with __main__.__dict__, so that
1397 1397 program variables become visible but user-specific configuration
1398 1398 remains possible.
1399 1399
1400 1400 - stack_depth: specifies how many levels in the stack to go to
1401 1401 looking for namespaces (when local_ns and global_ns are None). This
1402 1402 allows an intermediate caller to make sure that this function gets
1403 1403 the namespace from the intended level in the stack. By default (0)
1404 1404 it will get its locals and globals from the immediate caller.
1405 1405
1406 1406 Warning: it's possible to use this in a program which is being run by
1407 1407 IPython itself (via %run), but some funny things will happen (a few
1408 1408 globals get overwritten). In the future this will be cleaned up, as
1409 1409 there is no fundamental reason why it can't work perfectly."""
1410 1410
1411 1411 # Get locals and globals from caller
1412 1412 if local_ns is None or global_ns is None:
1413 1413 call_frame = sys._getframe(stack_depth).f_back
1414 1414
1415 1415 if local_ns is None:
1416 1416 local_ns = call_frame.f_locals
1417 1417 if global_ns is None:
1418 1418 global_ns = call_frame.f_globals
1419 1419
1420 1420 # Update namespaces and fire up interpreter
1421 1421
1422 1422 # The global one is easy, we can just throw it in
1423 1423 self.user_global_ns = global_ns
1424 1424
1425 1425 # but the user/local one is tricky: ipython needs it to store internal
1426 1426 # data, but we also need the locals. We'll copy locals in the user
1427 1427 # one, but will track what got copied so we can delete them at exit.
1428 1428 # This is so that a later embedded call doesn't see locals from a
1429 1429 # previous call (which most likely existed in a separate scope).
1430 1430 local_varnames = local_ns.keys()
1431 1431 self.user_ns.update(local_ns)
1432 1432
1433 1433 # Patch for global embedding to make sure that things don't overwrite
1434 1434 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1435 1435 # FIXME. Test this a bit more carefully (the if.. is new)
1436 1436 if local_ns is None and global_ns is None:
1437 1437 self.user_global_ns.update(__main__.__dict__)
1438 1438
1439 1439 # make sure the tab-completer has the correct frame information, so it
1440 1440 # actually completes using the frame's locals/globals
1441 1441 self.set_completer_frame()
1442 1442
1443 1443 # before activating the interactive mode, we need to make sure that
1444 1444 # all names in the builtin namespace needed by ipython point to
1445 1445 # ourselves, and not to other instances.
1446 1446 self.add_builtins()
1447 1447
1448 1448 self.interact(header)
1449 1449
1450 1450 # now, purge out the user namespace from anything we might have added
1451 1451 # from the caller's local namespace
1452 1452 delvar = self.user_ns.pop
1453 1453 for var in local_varnames:
1454 1454 delvar(var,None)
1455 1455 # and clean builtins we may have overridden
1456 1456 self.clean_builtins()
1457 1457
1458 1458 def interact(self, banner=None):
1459 1459 """Closely emulate the interactive Python console.
1460 1460
1461 1461 The optional banner argument specify the banner to print
1462 1462 before the first interaction; by default it prints a banner
1463 1463 similar to the one printed by the real Python interpreter,
1464 1464 followed by the current class name in parentheses (so as not
1465 1465 to confuse this with the real interpreter -- since it's so
1466 1466 close!).
1467 1467
1468 1468 """
1469 1469 cprt = 'Type "copyright", "credits" or "license" for more information.'
1470 1470 if banner is None:
1471 1471 self.write("Python %s on %s\n%s\n(%s)\n" %
1472 1472 (sys.version, sys.platform, cprt,
1473 1473 self.__class__.__name__))
1474 1474 else:
1475 1475 self.write(banner)
1476 1476
1477 1477 more = 0
1478 1478
1479 1479 # Mark activity in the builtins
1480 1480 __builtin__.__dict__['__IPYTHON__active'] += 1
1481 1481
1482 1482 # exit_now is set by a call to %Exit or %Quit
1483 1483 self.exit_now = False
1484 1484 while not self.exit_now:
1485 1485 if more:
1486 1486 prompt = self.outputcache.prompt2
1487 1487 if self.autoindent:
1488 1488 self.readline_startup_hook(self.pre_readline)
1489 1489 else:
1490 1490 prompt = self.outputcache.prompt1
1491 1491 try:
1492 1492 line = self.raw_input(prompt,more)
1493 1493 if self.autoindent:
1494 1494 self.readline_startup_hook(None)
1495 1495 except KeyboardInterrupt:
1496 1496 self.write('\nKeyboardInterrupt\n')
1497 1497 self.resetbuffer()
1498 1498 # keep cache in sync with the prompt counter:
1499 1499 self.outputcache.prompt_count -= 1
1500 1500
1501 1501 if self.autoindent:
1502 1502 self.indent_current_nsp = 0
1503 1503 more = 0
1504 1504 except EOFError:
1505 1505 if self.autoindent:
1506 1506 self.readline_startup_hook(None)
1507 1507 self.write('\n')
1508 1508 self.exit()
1509 1509 except bdb.BdbQuit:
1510 1510 warn('The Python debugger has exited with a BdbQuit exception.\n'
1511 1511 'Because of how pdb handles the stack, it is impossible\n'
1512 1512 'for IPython to properly format this particular exception.\n'
1513 1513 'IPython will resume normal operation.')
1514 1514 except:
1515 1515 # exceptions here are VERY RARE, but they can be triggered
1516 1516 # asynchronously by signal handlers, for example.
1517 1517 self.showtraceback()
1518 1518 else:
1519 1519 more = self.push(line)
1520 1520 if (self.SyntaxTB.last_syntax_error and
1521 1521 self.rc.autoedit_syntax):
1522 1522 self.edit_syntax_error()
1523 1523
1524 1524 # We are off again...
1525 1525 __builtin__.__dict__['__IPYTHON__active'] -= 1
1526 1526
1527 1527 def excepthook(self, etype, value, tb):
1528 1528 """One more defense for GUI apps that call sys.excepthook.
1529 1529
1530 1530 GUI frameworks like wxPython trap exceptions and call
1531 1531 sys.excepthook themselves. I guess this is a feature that
1532 1532 enables them to keep running after exceptions that would
1533 1533 otherwise kill their mainloop. This is a bother for IPython
1534 1534 which excepts to catch all of the program exceptions with a try:
1535 1535 except: statement.
1536 1536
1537 1537 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1538 1538 any app directly invokes sys.excepthook, it will look to the user like
1539 1539 IPython crashed. In order to work around this, we can disable the
1540 1540 CrashHandler and replace it with this excepthook instead, which prints a
1541 1541 regular traceback using our InteractiveTB. In this fashion, apps which
1542 1542 call sys.excepthook will generate a regular-looking exception from
1543 1543 IPython, and the CrashHandler will only be triggered by real IPython
1544 1544 crashes.
1545 1545
1546 1546 This hook should be used sparingly, only in places which are not likely
1547 1547 to be true IPython errors.
1548 1548 """
1549 1549 self.showtraceback((etype,value,tb),tb_offset=0)
1550 1550
1551 1551 def transform_alias(self, alias,rest=''):
1552 1552 """ Transform alias to system command string
1553 1553
1554 1554 """
1555 1555 nargs,cmd = self.alias_table[alias]
1556 1556 if ' ' in cmd and os.path.isfile(cmd):
1557 1557 cmd = '"%s"' % cmd
1558 1558
1559 1559 # Expand the %l special to be the user's input line
1560 1560 if cmd.find('%l') >= 0:
1561 1561 cmd = cmd.replace('%l',rest)
1562 1562 rest = ''
1563 1563 if nargs==0:
1564 1564 # Simple, argument-less aliases
1565 1565 cmd = '%s %s' % (cmd,rest)
1566 1566 else:
1567 1567 # Handle aliases with positional arguments
1568 1568 args = rest.split(None,nargs)
1569 1569 if len(args)< nargs:
1570 1570 error('Alias <%s> requires %s arguments, %s given.' %
1571 1571 (alias,nargs,len(args)))
1572 1572 return None
1573 1573 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1574 1574 # Now call the macro, evaluating in the user's namespace
1575 1575
1576 1576 return cmd
1577 1577
1578 1578 def call_alias(self,alias,rest=''):
1579 1579 """Call an alias given its name and the rest of the line.
1580 1580
1581 1581 This is only used to provide backwards compatibility for users of
1582 1582 ipalias(), use of which is not recommended for anymore."""
1583 1583
1584 1584 # Now call the macro, evaluating in the user's namespace
1585 1585 cmd = self.transform_alias(alias, rest)
1586 1586 try:
1587 1587 self.system(cmd)
1588 1588 except:
1589 1589 self.showtraceback()
1590 1590
1591 1591 def indent_current_str(self):
1592 1592 """return the current level of indentation as a string"""
1593 1593 return self.indent_current_nsp * ' '
1594 1594
1595 1595 def autoindent_update(self,line):
1596 1596 """Keep track of the indent level."""
1597 1597
1598 1598 #debugx('line')
1599 1599 #debugx('self.indent_current_nsp')
1600 1600 if self.autoindent:
1601 1601 if line:
1602 1602 inisp = num_ini_spaces(line)
1603 1603 if inisp < self.indent_current_nsp:
1604 1604 self.indent_current_nsp = inisp
1605 1605
1606 1606 if line[-1] == ':':
1607 1607 self.indent_current_nsp += 4
1608 1608 elif dedent_re.match(line):
1609 1609 self.indent_current_nsp -= 4
1610 1610 else:
1611 1611 self.indent_current_nsp = 0
1612 1612
1613 1613 def runlines(self,lines):
1614 1614 """Run a string of one or more lines of source.
1615 1615
1616 1616 This method is capable of running a string containing multiple source
1617 1617 lines, as if they had been entered at the IPython prompt. Since it
1618 1618 exposes IPython's processing machinery, the given strings can contain
1619 1619 magic calls (%magic), special shell access (!cmd), etc."""
1620 1620
1621 1621 # We must start with a clean buffer, in case this is run from an
1622 1622 # interactive IPython session (via a magic, for example).
1623 1623 self.resetbuffer()
1624 1624 lines = lines.split('\n')
1625 1625 more = 0
1626 1626 for line in lines:
1627 1627 # skip blank lines so we don't mess up the prompt counter, but do
1628 1628 # NOT skip even a blank line if we are in a code block (more is
1629 1629 # true)
1630 1630 if line or more:
1631 1631 more = self.push(self.prefilter(line,more))
1632 1632 # IPython's runsource returns None if there was an error
1633 1633 # compiling the code. This allows us to stop processing right
1634 1634 # away, so the user gets the error message at the right place.
1635 1635 if more is None:
1636 1636 break
1637 1637 # final newline in case the input didn't have it, so that the code
1638 1638 # actually does get executed
1639 1639 if more:
1640 1640 self.push('\n')
1641 1641
1642 1642 def runsource(self, source, filename='<input>', symbol='single'):
1643 1643 """Compile and run some source in the interpreter.
1644 1644
1645 1645 Arguments are as for compile_command().
1646 1646
1647 1647 One several things can happen:
1648 1648
1649 1649 1) The input is incorrect; compile_command() raised an
1650 1650 exception (SyntaxError or OverflowError). A syntax traceback
1651 1651 will be printed by calling the showsyntaxerror() method.
1652 1652
1653 1653 2) The input is incomplete, and more input is required;
1654 1654 compile_command() returned None. Nothing happens.
1655 1655
1656 1656 3) The input is complete; compile_command() returned a code
1657 1657 object. The code is executed by calling self.runcode() (which
1658 1658 also handles run-time exceptions, except for SystemExit).
1659 1659
1660 1660 The return value is:
1661 1661
1662 1662 - True in case 2
1663 1663
1664 1664 - False in the other cases, unless an exception is raised, where
1665 1665 None is returned instead. This can be used by external callers to
1666 1666 know whether to continue feeding input or not.
1667 1667
1668 1668 The return value can be used to decide whether to use sys.ps1 or
1669 1669 sys.ps2 to prompt the next line."""
1670 1670
1671 1671 try:
1672 1672 code = self.compile(source,filename,symbol)
1673 1673 except (OverflowError, SyntaxError, ValueError):
1674 1674 # Case 1
1675 1675 self.showsyntaxerror(filename)
1676 1676 return None
1677 1677
1678 1678 if code is None:
1679 1679 # Case 2
1680 1680 return True
1681 1681
1682 1682 # Case 3
1683 1683 # We store the code object so that threaded shells and
1684 1684 # custom exception handlers can access all this info if needed.
1685 1685 # The source corresponding to this can be obtained from the
1686 1686 # buffer attribute as '\n'.join(self.buffer).
1687 1687 self.code_to_run = code
1688 1688 # now actually execute the code object
1689 1689 if self.runcode(code) == 0:
1690 1690 return False
1691 1691 else:
1692 1692 return None
1693 1693
1694 1694 def runcode(self,code_obj):
1695 1695 """Execute a code object.
1696 1696
1697 1697 When an exception occurs, self.showtraceback() is called to display a
1698 1698 traceback.
1699 1699
1700 1700 Return value: a flag indicating whether the code to be run completed
1701 1701 successfully:
1702 1702
1703 1703 - 0: successful execution.
1704 1704 - 1: an error occurred.
1705 1705 """
1706 1706
1707 1707 # Set our own excepthook in case the user code tries to call it
1708 1708 # directly, so that the IPython crash handler doesn't get triggered
1709 1709 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1710 1710
1711 1711 # we save the original sys.excepthook in the instance, in case config
1712 1712 # code (such as magics) needs access to it.
1713 1713 self.sys_excepthook = old_excepthook
1714 1714 outflag = 1 # happens in more places, so it's easier as default
1715 1715 try:
1716 1716 try:
1717 1717 # Embedded instances require separate global/local namespaces
1718 1718 # so they can see both the surrounding (local) namespace and
1719 1719 # the module-level globals when called inside another function.
1720 1720 if self.embedded:
1721 1721 exec code_obj in self.user_global_ns, self.user_ns
1722 1722 # Normal (non-embedded) instances should only have a single
1723 1723 # namespace for user code execution, otherwise functions won't
1724 1724 # see interactive top-level globals.
1725 1725 else:
1726 1726 exec code_obj in self.user_ns
1727 1727 finally:
1728 1728 # Reset our crash handler in place
1729 1729 sys.excepthook = old_excepthook
1730 1730 except SystemExit:
1731 1731 self.resetbuffer()
1732 1732 self.showtraceback()
1733 1733 warn("Type exit or quit to exit IPython "
1734 1734 "(%Exit or %Quit do so unconditionally).",level=1)
1735 1735 except self.custom_exceptions:
1736 1736 etype,value,tb = sys.exc_info()
1737 1737 self.CustomTB(etype,value,tb)
1738 1738 except:
1739 1739 self.showtraceback()
1740 1740 else:
1741 1741 outflag = 0
1742 1742 if softspace(sys.stdout, 0):
1743 1743 print
1744 1744 # Flush out code object which has been run (and source)
1745 1745 self.code_to_run = None
1746 1746 return outflag
1747 1747
1748 1748 def push(self, line):
1749 1749 """Push a line to the interpreter.
1750 1750
1751 1751 The line should not have a trailing newline; it may have
1752 1752 internal newlines. The line is appended to a buffer and the
1753 1753 interpreter's runsource() method is called with the
1754 1754 concatenated contents of the buffer as source. If this
1755 1755 indicates that the command was executed or invalid, the buffer
1756 1756 is reset; otherwise, the command is incomplete, and the buffer
1757 1757 is left as it was after the line was appended. The return
1758 1758 value is 1 if more input is required, 0 if the line was dealt
1759 1759 with in some way (this is the same as runsource()).
1760 1760 """
1761 1761
1762 1762 # autoindent management should be done here, and not in the
1763 1763 # interactive loop, since that one is only seen by keyboard input. We
1764 1764 # need this done correctly even for code run via runlines (which uses
1765 1765 # push).
1766 1766
1767 1767 #print 'push line: <%s>' % line # dbg
1768 1768 self.autoindent_update(line)
1769 1769
1770 1770 self.buffer.append(line)
1771 1771 more = self.runsource('\n'.join(self.buffer), self.filename)
1772 1772 if not more:
1773 1773 self.resetbuffer()
1774 1774 return more
1775 1775
1776 1776 def resetbuffer(self):
1777 1777 """Reset the input buffer."""
1778 1778 self.buffer[:] = []
1779 1779
1780 1780 def raw_input(self,prompt='',continue_prompt=False):
1781 1781 """Write a prompt and read a line.
1782 1782
1783 1783 The returned line does not include the trailing newline.
1784 1784 When the user enters the EOF key sequence, EOFError is raised.
1785 1785
1786 1786 Optional inputs:
1787 1787
1788 1788 - prompt(''): a string to be printed to prompt the user.
1789 1789
1790 1790 - continue_prompt(False): whether this line is the first one or a
1791 1791 continuation in a sequence of inputs.
1792 1792 """
1793 1793
1794 1794 line = raw_input_original(prompt)
1795 1795
1796 1796 # Try to be reasonably smart about not re-indenting pasted input more
1797 1797 # than necessary. We do this by trimming out the auto-indent initial
1798 1798 # spaces, if the user's actual input started itself with whitespace.
1799 1799 #debugx('self.buffer[-1]')
1800 1800
1801 1801 if self.autoindent:
1802 1802 if num_ini_spaces(line) > self.indent_current_nsp:
1803 1803 line = line[self.indent_current_nsp:]
1804 1804 self.indent_current_nsp = 0
1805 1805
1806 1806 # store the unfiltered input before the user has any chance to modify
1807 1807 # it.
1808 1808 if line.strip():
1809 1809 if continue_prompt:
1810 1810 self.input_hist_raw[-1] += '%s\n' % line
1811 1811 else:
1812 1812 self.input_hist_raw.append('%s\n' % line)
1813 1813
1814 1814 try:
1815 1815 lineout = self.prefilter(line,continue_prompt)
1816 1816 except:
1817 1817 # blanket except, in case a user-defined prefilter crashes, so it
1818 1818 # can't take all of ipython with it.
1819 1819 self.showtraceback()
1820 1820 return lineout
1821 1821
1822 1822 def split_user_input(self,line):
1823 1823 """Split user input into pre-char, function part and rest."""
1824 1824
1825 1825 lsplit = self.line_split.match(line)
1826 1826 if lsplit is None: # no regexp match returns None
1827 1827 try:
1828 1828 iFun,theRest = line.split(None,1)
1829 1829 except ValueError:
1830 1830 iFun,theRest = line,''
1831 1831 pre = re.match('^(\s*)(.*)',line).groups()[0]
1832 1832 else:
1833 1833 pre,iFun,theRest = lsplit.groups()
1834 1834
1835 1835 #print 'line:<%s>' % line # dbg
1836 1836 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1837 1837 return pre,iFun.strip(),theRest
1838 1838
1839 1839 def _prefilter(self, line, continue_prompt):
1840 1840 """Calls different preprocessors, depending on the form of line."""
1841 1841
1842 1842 # All handlers *must* return a value, even if it's blank ('').
1843 1843
1844 1844 # Lines are NOT logged here. Handlers should process the line as
1845 1845 # needed, update the cache AND log it (so that the input cache array
1846 1846 # stays synced).
1847 1847
1848 1848 # This function is _very_ delicate, and since it's also the one which
1849 1849 # determines IPython's response to user input, it must be as efficient
1850 1850 # as possible. For this reason it has _many_ returns in it, trying
1851 1851 # always to exit as quickly as it can figure out what it needs to do.
1852 1852
1853 1853 # This function is the main responsible for maintaining IPython's
1854 1854 # behavior respectful of Python's semantics. So be _very_ careful if
1855 1855 # making changes to anything here.
1856 1856
1857 1857 #.....................................................................
1858 1858 # Code begins
1859 1859
1860 1860 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1861 1861
1862 1862 # save the line away in case we crash, so the post-mortem handler can
1863 1863 # record it
1864 1864 self._last_input_line = line
1865 1865
1866 1866 #print '***line: <%s>' % line # dbg
1867 1867
1868 1868 # the input history needs to track even empty lines
1869 1869 stripped = line.strip()
1870 1870
1871 1871 if not stripped:
1872 1872 if not continue_prompt:
1873 1873 self.outputcache.prompt_count -= 1
1874 1874 return self.handle_normal(line,continue_prompt)
1875 1875 #return self.handle_normal('',continue_prompt)
1876 1876
1877 1877 # print '***cont',continue_prompt # dbg
1878 1878 # special handlers are only allowed for single line statements
1879 1879 if continue_prompt and not self.rc.multi_line_specials:
1880 1880 return self.handle_normal(line,continue_prompt)
1881 1881
1882 1882
1883 1883 # For the rest, we need the structure of the input
1884 1884 pre,iFun,theRest = self.split_user_input(line)
1885 1885
1886 1886 # See whether any pre-existing handler can take care of it
1887 1887
1888 1888 rewritten = self.hooks.input_prefilter(stripped)
1889 1889 if rewritten != stripped: # ok, some prefilter did something
1890 1890 rewritten = pre + rewritten # add indentation
1891 1891 return self.handle_normal(rewritten)
1892 1892
1893 1893 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1894 1894
1895 1895 # First check for explicit escapes in the last/first character
1896 1896 handler = None
1897 1897 if line[-1] == self.ESC_HELP:
1898 1898 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1899 1899 if handler is None:
1900 1900 # look at the first character of iFun, NOT of line, so we skip
1901 1901 # leading whitespace in multiline input
1902 1902 handler = self.esc_handlers.get(iFun[0:1])
1903 1903 if handler is not None:
1904 1904 return handler(line,continue_prompt,pre,iFun,theRest)
1905 1905 # Emacs ipython-mode tags certain input lines
1906 1906 if line.endswith('# PYTHON-MODE'):
1907 1907 return self.handle_emacs(line,continue_prompt)
1908 1908
1909 1909 # Next, check if we can automatically execute this thing
1910 1910
1911 1911 # Allow ! in multi-line statements if multi_line_specials is on:
1912 1912 if continue_prompt and self.rc.multi_line_specials and \
1913 1913 iFun.startswith(self.ESC_SHELL):
1914 1914 return self.handle_shell_escape(line,continue_prompt,
1915 1915 pre=pre,iFun=iFun,
1916 1916 theRest=theRest)
1917 1917
1918 1918 # Let's try to find if the input line is a magic fn
1919 1919 oinfo = None
1920 1920 if hasattr(self,'magic_'+iFun):
1921 1921 # WARNING: _ofind uses getattr(), so it can consume generators and
1922 1922 # cause other side effects.
1923 1923 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1924 1924 if oinfo['ismagic']:
1925 1925 # Be careful not to call magics when a variable assignment is
1926 1926 # being made (ls='hi', for example)
1927 1927 if self.rc.automagic and \
1928 1928 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1929 1929 (self.rc.multi_line_specials or not continue_prompt):
1930 1930 return self.handle_magic(line,continue_prompt,
1931 1931 pre,iFun,theRest)
1932 1932 else:
1933 1933 return self.handle_normal(line,continue_prompt)
1934 1934
1935 1935 # If the rest of the line begins with an (in)equality, assginment or
1936 1936 # function call, we should not call _ofind but simply execute it.
1937 1937 # This avoids spurious geattr() accesses on objects upon assignment.
1938 1938 #
1939 1939 # It also allows users to assign to either alias or magic names true
1940 1940 # python variables (the magic/alias systems always take second seat to
1941 1941 # true python code).
1942 1942 if theRest and theRest[0] in '!=()':
1943 1943 return self.handle_normal(line,continue_prompt)
1944 1944
1945 1945 if oinfo is None:
1946 1946 # let's try to ensure that _oinfo is ONLY called when autocall is
1947 1947 # on. Since it has inevitable potential side effects, at least
1948 1948 # having autocall off should be a guarantee to the user that no
1949 1949 # weird things will happen.
1950 1950
1951 1951 if self.rc.autocall:
1952 1952 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1953 1953 else:
1954 1954 # in this case, all that's left is either an alias or
1955 1955 # processing the line normally.
1956 1956 if iFun in self.alias_table:
1957 1957 # if autocall is off, by not running _ofind we won't know
1958 1958 # whether the given name may also exist in one of the
1959 1959 # user's namespace. At this point, it's best to do a
1960 1960 # quick check just to be sure that we don't let aliases
1961 1961 # shadow variables.
1962 1962 head = iFun.split('.',1)[0]
1963 1963 if head in self.user_ns or head in self.internal_ns \
1964 1964 or head in __builtin__.__dict__:
1965 1965 return self.handle_normal(line,continue_prompt)
1966 1966 else:
1967 1967 return self.handle_alias(line,continue_prompt,
1968 1968 pre,iFun,theRest)
1969 1969
1970 1970 else:
1971 1971 return self.handle_normal(line,continue_prompt)
1972 1972
1973 1973 if not oinfo['found']:
1974 1974 return self.handle_normal(line,continue_prompt)
1975 1975 else:
1976 1976 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1977 1977 if oinfo['isalias']:
1978 1978 return self.handle_alias(line,continue_prompt,
1979 1979 pre,iFun,theRest)
1980 1980
1981 1981 if (self.rc.autocall
1982 1982 and
1983 1983 (
1984 1984 #only consider exclusion re if not "," or ";" autoquoting
1985 1985 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1986 1986 or pre == self.ESC_PAREN) or
1987 1987 (not self.re_exclude_auto.match(theRest)))
1988 1988 and
1989 1989 self.re_fun_name.match(iFun) and
1990 1990 callable(oinfo['obj'])) :
1991 1991 #print 'going auto' # dbg
1992 1992 return self.handle_auto(line,continue_prompt,
1993 1993 pre,iFun,theRest,oinfo['obj'])
1994 1994 else:
1995 1995 #print 'was callable?', callable(oinfo['obj']) # dbg
1996 1996 return self.handle_normal(line,continue_prompt)
1997 1997
1998 1998 # If we get here, we have a normal Python line. Log and return.
1999 1999 return self.handle_normal(line,continue_prompt)
2000 2000
2001 2001 def _prefilter_dumb(self, line, continue_prompt):
2002 2002 """simple prefilter function, for debugging"""
2003 2003 return self.handle_normal(line,continue_prompt)
2004 2004
2005 2005 # Set the default prefilter() function (this can be user-overridden)
2006 2006 prefilter = _prefilter
2007 2007
2008 2008 def handle_normal(self,line,continue_prompt=None,
2009 2009 pre=None,iFun=None,theRest=None):
2010 2010 """Handle normal input lines. Use as a template for handlers."""
2011 2011
2012 2012 # With autoindent on, we need some way to exit the input loop, and I
2013 2013 # don't want to force the user to have to backspace all the way to
2014 2014 # clear the line. The rule will be in this case, that either two
2015 2015 # lines of pure whitespace in a row, or a line of pure whitespace but
2016 2016 # of a size different to the indent level, will exit the input loop.
2017 2017
2018 2018 if (continue_prompt and self.autoindent and line.isspace() and
2019 2019 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2020 2020 (self.buffer[-1]).isspace() )):
2021 2021 line = ''
2022 2022
2023 2023 self.log(line,continue_prompt)
2024 2024 return line
2025 2025
2026 2026 def handle_alias(self,line,continue_prompt=None,
2027 2027 pre=None,iFun=None,theRest=None):
2028 2028 """Handle alias input lines. """
2029 2029
2030 2030 # pre is needed, because it carries the leading whitespace. Otherwise
2031 2031 # aliases won't work in indented sections.
2032 2032 transformed = self.transform_alias(iFun, theRest)
2033 2033 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2034 self.log(line_out,continue_prompt)
2034 self.log(line,line_out,continue_prompt)
2035 2035 return line_out
2036 2036
2037 2037 def handle_shell_escape(self, line, continue_prompt=None,
2038 2038 pre=None,iFun=None,theRest=None):
2039 2039 """Execute the line in a shell, empty return value"""
2040 2040
2041 2041 #print 'line in :', `line` # dbg
2042 2042 # Example of a special handler. Others follow a similar pattern.
2043 2043 if line.lstrip().startswith('!!'):
2044 2044 # rewrite iFun/theRest to properly hold the call to %sx and
2045 2045 # the actual command to be executed, so handle_magic can work
2046 2046 # correctly
2047 2047 theRest = '%s %s' % (iFun[2:],theRest)
2048 2048 iFun = 'sx'
2049 2049 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2050 2050 line.lstrip()[2:]),
2051 2051 continue_prompt,pre,iFun,theRest)
2052 2052 else:
2053 2053 cmd=line.lstrip().lstrip('!')
2054 2054 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2055 2055 # update cache/log and return
2056 self.log(line_out,continue_prompt)
2056 self.log(line,line_out,continue_prompt)
2057 2057 return line_out
2058 2058
2059 2059 def handle_magic(self, line, continue_prompt=None,
2060 2060 pre=None,iFun=None,theRest=None):
2061 2061 """Execute magic functions."""
2062 2062
2063 2063
2064 2064 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2065 self.log(cmd,continue_prompt)
2065 self.log(line,cmd,continue_prompt)
2066 2066 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2067 2067 return cmd
2068 2068
2069 2069 def handle_auto(self, line, continue_prompt=None,
2070 2070 pre=None,iFun=None,theRest=None,obj=None):
2071 2071 """Hande lines which can be auto-executed, quoting if requested."""
2072 2072
2073 2073 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2074 2074
2075 2075 # This should only be active for single-line input!
2076 2076 if continue_prompt:
2077 self.log(line,continue_prompt)
2077 self.log(line,line,continue_prompt)
2078 2078 return line
2079 2079
2080 2080 auto_rewrite = True
2081 2081
2082 2082 if pre == self.ESC_QUOTE:
2083 2083 # Auto-quote splitting on whitespace
2084 2084 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2085 2085 elif pre == self.ESC_QUOTE2:
2086 2086 # Auto-quote whole string
2087 2087 newcmd = '%s("%s")' % (iFun,theRest)
2088 2088 elif pre == self.ESC_PAREN:
2089 2089 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2090 2090 else:
2091 2091 # Auto-paren.
2092 2092 # We only apply it to argument-less calls if the autocall
2093 2093 # parameter is set to 2. We only need to check that autocall is <
2094 2094 # 2, since this function isn't called unless it's at least 1.
2095 2095 if not theRest and (self.rc.autocall < 2):
2096 2096 newcmd = '%s %s' % (iFun,theRest)
2097 2097 auto_rewrite = False
2098 2098 else:
2099 2099 if theRest.startswith('['):
2100 2100 if hasattr(obj,'__getitem__'):
2101 2101 # Don't autocall in this case: item access for an object
2102 2102 # which is BOTH callable and implements __getitem__.
2103 2103 newcmd = '%s %s' % (iFun,theRest)
2104 2104 auto_rewrite = False
2105 2105 else:
2106 2106 # if the object doesn't support [] access, go ahead and
2107 2107 # autocall
2108 2108 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2109 2109 elif theRest.endswith(';'):
2110 2110 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2111 2111 else:
2112 2112 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2113 2113
2114 2114 if auto_rewrite:
2115 2115 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2116 2116 # log what is now valid Python, not the actual user input (without the
2117 2117 # final newline)
2118 self.log(newcmd,continue_prompt)
2118 self.log(line,newcmd,continue_prompt)
2119 2119 return newcmd
2120 2120
2121 2121 def handle_help(self, line, continue_prompt=None,
2122 2122 pre=None,iFun=None,theRest=None):
2123 2123 """Try to get some help for the object.
2124 2124
2125 2125 obj? or ?obj -> basic information.
2126 2126 obj?? or ??obj -> more details.
2127 2127 """
2128 2128
2129 2129 # We need to make sure that we don't process lines which would be
2130 2130 # otherwise valid python, such as "x=1 # what?"
2131 2131 try:
2132 2132 codeop.compile_command(line)
2133 2133 except SyntaxError:
2134 2134 # We should only handle as help stuff which is NOT valid syntax
2135 2135 if line[0]==self.ESC_HELP:
2136 2136 line = line[1:]
2137 2137 elif line[-1]==self.ESC_HELP:
2138 2138 line = line[:-1]
2139 self.log('#?'+line)
2139 self.log(line,'#?'+line,continue_prompt)
2140 2140 if line:
2141 2141 self.magic_pinfo(line)
2142 2142 else:
2143 2143 page(self.usage,screen_lines=self.rc.screen_length)
2144 2144 return '' # Empty string is needed here!
2145 2145 except:
2146 2146 # Pass any other exceptions through to the normal handler
2147 2147 return self.handle_normal(line,continue_prompt)
2148 2148 else:
2149 2149 # If the code compiles ok, we should handle it normally
2150 2150 return self.handle_normal(line,continue_prompt)
2151 2151
2152 2152 def getapi(self):
2153 2153 """ Get an IPApi object for this shell instance
2154 2154
2155 2155 Getting an IPApi object is always preferable to accessing the shell
2156 2156 directly, but this holds true especially for extensions.
2157 2157
2158 2158 It should always be possible to implement an extension with IPApi
2159 2159 alone. If not, contact maintainer to request an addition.
2160 2160
2161 2161 """
2162 2162 return self.api
2163 2163
2164 2164 def handle_emacs(self,line,continue_prompt=None,
2165 2165 pre=None,iFun=None,theRest=None):
2166 2166 """Handle input lines marked by python-mode."""
2167 2167
2168 2168 # Currently, nothing is done. Later more functionality can be added
2169 2169 # here if needed.
2170 2170
2171 2171 # The input cache shouldn't be updated
2172 2172
2173 2173 return line
2174 2174
2175 2175 def mktempfile(self,data=None):
2176 2176 """Make a new tempfile and return its filename.
2177 2177
2178 2178 This makes a call to tempfile.mktemp, but it registers the created
2179 2179 filename internally so ipython cleans it up at exit time.
2180 2180
2181 2181 Optional inputs:
2182 2182
2183 2183 - data(None): if data is given, it gets written out to the temp file
2184 2184 immediately, and the file is closed again."""
2185 2185
2186 2186 filename = tempfile.mktemp('.py','ipython_edit_')
2187 2187 self.tempfiles.append(filename)
2188 2188
2189 2189 if data:
2190 2190 tmp_file = open(filename,'w')
2191 2191 tmp_file.write(data)
2192 2192 tmp_file.close()
2193 2193 return filename
2194 2194
2195 2195 def write(self,data):
2196 2196 """Write a string to the default output"""
2197 2197 Term.cout.write(data)
2198 2198
2199 2199 def write_err(self,data):
2200 2200 """Write a string to the default error output"""
2201 2201 Term.cerr.write(data)
2202 2202
2203 2203 def exit(self):
2204 2204 """Handle interactive exit.
2205 2205
2206 2206 This method sets the exit_now attribute."""
2207 2207
2208 2208 if self.rc.confirm_exit:
2209 2209 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2210 2210 self.exit_now = True
2211 2211 else:
2212 2212 self.exit_now = True
2213 2213 return self.exit_now
2214 2214
2215 2215 def safe_execfile(self,fname,*where,**kw):
2216 2216 fname = os.path.expanduser(fname)
2217 2217
2218 2218 # find things also in current directory
2219 2219 dname = os.path.dirname(fname)
2220 2220 if not sys.path.count(dname):
2221 2221 sys.path.append(dname)
2222 2222
2223 2223 try:
2224 2224 xfile = open(fname)
2225 2225 except:
2226 2226 print >> Term.cerr, \
2227 2227 'Could not open file <%s> for safe execution.' % fname
2228 2228 return None
2229 2229
2230 2230 kw.setdefault('islog',0)
2231 2231 kw.setdefault('quiet',1)
2232 2232 kw.setdefault('exit_ignore',0)
2233 2233 first = xfile.readline()
2234 2234 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2235 2235 xfile.close()
2236 2236 # line by line execution
2237 2237 if first.startswith(loghead) or kw['islog']:
2238 2238 print 'Loading log file <%s> one line at a time...' % fname
2239 2239 if kw['quiet']:
2240 2240 stdout_save = sys.stdout
2241 2241 sys.stdout = StringIO.StringIO()
2242 2242 try:
2243 2243 globs,locs = where[0:2]
2244 2244 except:
2245 2245 try:
2246 2246 globs = locs = where[0]
2247 2247 except:
2248 2248 globs = locs = globals()
2249 2249 badblocks = []
2250 2250
2251 2251 # we also need to identify indented blocks of code when replaying
2252 2252 # logs and put them together before passing them to an exec
2253 2253 # statement. This takes a bit of regexp and look-ahead work in the
2254 2254 # file. It's easiest if we swallow the whole thing in memory
2255 2255 # first, and manually walk through the lines list moving the
2256 2256 # counter ourselves.
2257 2257 indent_re = re.compile('\s+\S')
2258 2258 xfile = open(fname)
2259 2259 filelines = xfile.readlines()
2260 2260 xfile.close()
2261 2261 nlines = len(filelines)
2262 2262 lnum = 0
2263 2263 while lnum < nlines:
2264 2264 line = filelines[lnum]
2265 2265 lnum += 1
2266 2266 # don't re-insert logger status info into cache
2267 2267 if line.startswith('#log#'):
2268 2268 continue
2269 2269 else:
2270 2270 # build a block of code (maybe a single line) for execution
2271 2271 block = line
2272 2272 try:
2273 2273 next = filelines[lnum] # lnum has already incremented
2274 2274 except:
2275 2275 next = None
2276 2276 while next and indent_re.match(next):
2277 2277 block += next
2278 2278 lnum += 1
2279 2279 try:
2280 2280 next = filelines[lnum]
2281 2281 except:
2282 2282 next = None
2283 2283 # now execute the block of one or more lines
2284 2284 try:
2285 2285 exec block in globs,locs
2286 2286 except SystemExit:
2287 2287 pass
2288 2288 except:
2289 2289 badblocks.append(block.rstrip())
2290 2290 if kw['quiet']: # restore stdout
2291 2291 sys.stdout.close()
2292 2292 sys.stdout = stdout_save
2293 2293 print 'Finished replaying log file <%s>' % fname
2294 2294 if badblocks:
2295 2295 print >> sys.stderr, ('\nThe following lines/blocks in file '
2296 2296 '<%s> reported errors:' % fname)
2297 2297
2298 2298 for badline in badblocks:
2299 2299 print >> sys.stderr, badline
2300 2300 else: # regular file execution
2301 2301 try:
2302 2302 execfile(fname,*where)
2303 2303 except SyntaxError:
2304 2304 self.showsyntaxerror()
2305 2305 warn('Failure executing file: <%s>' % fname)
2306 2306 except SystemExit,status:
2307 2307 if not kw['exit_ignore']:
2308 2308 self.showtraceback()
2309 2309 warn('Failure executing file: <%s>' % fname)
2310 2310 except:
2311 2311 self.showtraceback()
2312 2312 warn('Failure executing file: <%s>' % fname)
2313 2313
2314 2314 #************************* end of file <iplib.py> *****************************
@@ -1,5474 +1,5480 b''
1 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
2
3 * IPython/Logger.py (Logger.logstart): add option to log raw input
4 instead of the processed one. A -r flag was added to the
5 %logstart magic used for controlling logging.
6
1 7 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
2 8
3 9 * IPython/iplib.py (InteractiveShell.__init__): add check for the
4 10 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
5 11 recognize the option. After a bug report by Will Maier. This
6 12 closes #64 (will do it after confirmation from W. Maier).
7 13
8 14 * IPython/irunner.py: New module to run scripts as if manually
9 15 typed into an interactive environment, based on pexpect. After a
10 16 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
11 17 ipython-user list. Simple unittests in the tests/ directory.
12 18
13 19 * tools/release: add Will Maier, OpenBSD port maintainer, to
14 20 recepients list. We are now officially part of the OpenBSD ports:
15 21 http://www.openbsd.org/ports.html ! Many thanks to Will for the
16 22 work.
17 23
18 24 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
19 25
20 26 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
21 27 so that it doesn't break tkinter apps.
22 28
23 29 * IPython/iplib.py (_prefilter): fix bug where aliases would
24 30 shadow variables when autocall was fully off. Reported by SAGE
25 31 author William Stein.
26 32
27 33 * IPython/OInspect.py (Inspector.__init__): add a flag to control
28 34 at what detail level strings are computed when foo? is requested.
29 35 This allows users to ask for example that the string form of an
30 36 object is only computed when foo?? is called, or even never, by
31 37 setting the object_info_string_level >= 2 in the configuration
32 38 file. This new option has been added and documented. After a
33 39 request by SAGE to be able to control the printing of very large
34 40 objects more easily.
35 41
36 42 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
37 43
38 44 * IPython/ipmaker.py (make_IPython): remove the ipython call path
39 45 from sys.argv, to be 100% consistent with how Python itself works
40 46 (as seen for example with python -i file.py). After a bug report
41 47 by Jeffrey Collins.
42 48
43 49 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
44 50 nasty bug which was preventing custom namespaces with -pylab,
45 51 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
46 52 compatibility (long gone from mpl).
47 53
48 54 * IPython/ipapi.py (make_session): name change: create->make. We
49 55 use make in other places (ipmaker,...), it's shorter and easier to
50 56 type and say, etc. I'm trying to clean things before 0.7.2 so
51 57 that I can keep things stable wrt to ipapi in the chainsaw branch.
52 58
53 59 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
54 60 python-mode recognizes our debugger mode. Add support for
55 61 autoindent inside (X)emacs. After a patch sent in by Jin Liu
56 62 <m.liu.jin-AT-gmail.com> originally written by
57 63 doxgen-AT-newsmth.net (with minor modifications for xemacs
58 64 compatibility)
59 65
60 66 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
61 67 tracebacks when walking the stack so that the stack tracking system
62 68 in emacs' python-mode can identify the frames correctly.
63 69
64 70 * IPython/ipmaker.py (make_IPython): make the internal (and
65 71 default config) autoedit_syntax value false by default. Too many
66 72 users have complained to me (both on and off-list) about problems
67 73 with this option being on by default, so I'm making it default to
68 74 off. It can still be enabled by anyone via the usual mechanisms.
69 75
70 76 * IPython/completer.py (Completer.attr_matches): add support for
71 77 PyCrust-style _getAttributeNames magic method. Patch contributed
72 78 by <mscott-AT-goldenspud.com>. Closes #50.
73 79
74 80 * IPython/iplib.py (InteractiveShell.__init__): remove the
75 81 deletion of exit/quit from __builtin__, which can break
76 82 third-party tools like the Zope debugging console. The
77 83 %exit/%quit magics remain. In general, it's probably a good idea
78 84 not to delete anything from __builtin__, since we never know what
79 85 that will break. In any case, python now (for 2.5) will support
80 86 'real' exit/quit, so this issue is moot. Closes #55.
81 87
82 88 * IPython/genutils.py (with_obj): rename the 'with' function to
83 89 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
84 90 becomes a language keyword. Closes #53.
85 91
86 92 * IPython/FakeModule.py (FakeModule.__init__): add a proper
87 93 __file__ attribute to this so it fools more things into thinking
88 94 it is a real module. Closes #59.
89 95
90 96 * IPython/Magic.py (magic_edit): add -n option to open the editor
91 97 at a specific line number. After a patch by Stefan van der Walt.
92 98
93 99 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
94 100
95 101 * IPython/iplib.py (edit_syntax_error): fix crash when for some
96 102 reason the file could not be opened. After automatic crash
97 103 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
98 104 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
99 105 (_should_recompile): Don't fire editor if using %bg, since there
100 106 is no file in the first place. From the same report as above.
101 107 (raw_input): protect against faulty third-party prefilters. After
102 108 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
103 109 while running under SAGE.
104 110
105 111 2006-05-23 Ville Vainio <vivainio@gmail.com>
106 112
107 113 * ipapi.py: Stripped down ip.to_user_ns() to work only as
108 114 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
109 115 now returns None (again), unless dummy is specifically allowed by
110 116 ipapi.get(allow_dummy=True).
111 117
112 118 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
113 119
114 120 * IPython: remove all 2.2-compatibility objects and hacks from
115 121 everywhere, since we only support 2.3 at this point. Docs
116 122 updated.
117 123
118 124 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
119 125 Anything requiring extra validation can be turned into a Python
120 126 property in the future. I used a property for the db one b/c
121 127 there was a nasty circularity problem with the initialization
122 128 order, which right now I don't have time to clean up.
123 129
124 130 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
125 131 another locking bug reported by Jorgen. I'm not 100% sure though,
126 132 so more testing is needed...
127 133
128 134 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
129 135
130 136 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
131 137 local variables from any routine in user code (typically executed
132 138 with %run) directly into the interactive namespace. Very useful
133 139 when doing complex debugging.
134 140 (IPythonNotRunning): Changed the default None object to a dummy
135 141 whose attributes can be queried as well as called without
136 142 exploding, to ease writing code which works transparently both in
137 143 and out of ipython and uses some of this API.
138 144
139 145 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
140 146
141 147 * IPython/hooks.py (result_display): Fix the fact that our display
142 148 hook was using str() instead of repr(), as the default python
143 149 console does. This had gone unnoticed b/c it only happened if
144 150 %Pprint was off, but the inconsistency was there.
145 151
146 152 2006-05-15 Ville Vainio <vivainio@gmail.com>
147 153
148 154 * Oinspect.py: Only show docstring for nonexisting/binary files
149 155 when doing object??, closing ticket #62
150 156
151 157 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
152 158
153 159 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
154 160 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
155 161 was being released in a routine which hadn't checked if it had
156 162 been the one to acquire it.
157 163
158 164 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
159 165
160 166 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
161 167
162 168 2006-04-11 Ville Vainio <vivainio@gmail.com>
163 169
164 170 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
165 171 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
166 172 prefilters, allowing stuff like magics and aliases in the file.
167 173
168 174 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
169 175 added. Supported now are "%clear in" and "%clear out" (clear input and
170 176 output history, respectively). Also fixed CachedOutput.flush to
171 177 properly flush the output cache.
172 178
173 179 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
174 180 half-success (and fail explicitly).
175 181
176 182 2006-03-28 Ville Vainio <vivainio@gmail.com>
177 183
178 184 * iplib.py: Fix quoting of aliases so that only argless ones
179 185 are quoted
180 186
181 187 2006-03-28 Ville Vainio <vivainio@gmail.com>
182 188
183 189 * iplib.py: Quote aliases with spaces in the name.
184 190 "c:\program files\blah\bin" is now legal alias target.
185 191
186 192 * ext_rehashdir.py: Space no longer allowed as arg
187 193 separator, since space is legal in path names.
188 194
189 195 2006-03-16 Ville Vainio <vivainio@gmail.com>
190 196
191 197 * upgrade_dir.py: Take path.py from Extensions, correcting
192 198 %upgrade magic
193 199
194 200 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
195 201
196 202 * hooks.py: Only enclose editor binary in quotes if legal and
197 203 necessary (space in the name, and is an existing file). Fixes a bug
198 204 reported by Zachary Pincus.
199 205
200 206 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
201 207
202 208 * Manual: thanks to a tip on proper color handling for Emacs, by
203 209 Eric J Haywiser <ejh1-AT-MIT.EDU>.
204 210
205 211 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
206 212 by applying the provided patch. Thanks to Liu Jin
207 213 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
208 214 XEmacs/Linux, I'm trusting the submitter that it actually helps
209 215 under win32/GNU Emacs. Will revisit if any problems are reported.
210 216
211 217 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
212 218
213 219 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
214 220 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
215 221
216 222 2006-03-12 Ville Vainio <vivainio@gmail.com>
217 223
218 224 * Magic.py (magic_timeit): Added %timeit magic, contributed by
219 225 Torsten Marek.
220 226
221 227 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
222 228
223 229 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
224 230 line ranges works again.
225 231
226 232 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
227 233
228 234 * IPython/iplib.py (showtraceback): add back sys.last_traceback
229 235 and friends, after a discussion with Zach Pincus on ipython-user.
230 236 I'm not 100% sure, but after thinking aobut it quite a bit, it may
231 237 be OK. Testing with the multithreaded shells didn't reveal any
232 238 problems, but let's keep an eye out.
233 239
234 240 In the process, I fixed a few things which were calling
235 241 self.InteractiveTB() directly (like safe_execfile), which is a
236 242 mistake: ALL exception reporting should be done by calling
237 243 self.showtraceback(), which handles state and tab-completion and
238 244 more.
239 245
240 246 2006-03-01 Ville Vainio <vivainio@gmail.com>
241 247
242 248 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
243 249 To use, do "from ipipe import *".
244 250
245 251 2006-02-24 Ville Vainio <vivainio@gmail.com>
246 252
247 253 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
248 254 "cleanly" and safely than the older upgrade mechanism.
249 255
250 256 2006-02-21 Ville Vainio <vivainio@gmail.com>
251 257
252 258 * Magic.py: %save works again.
253 259
254 260 2006-02-15 Ville Vainio <vivainio@gmail.com>
255 261
256 262 * Magic.py: %Pprint works again
257 263
258 264 * Extensions/ipy_sane_defaults.py: Provide everything provided
259 265 in default ipythonrc, to make it possible to have a completely empty
260 266 ipythonrc (and thus completely rc-file free configuration)
261 267
262 268
263 269 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
264 270
265 271 * IPython/hooks.py (editor): quote the call to the editor command,
266 272 to allow commands with spaces in them. Problem noted by watching
267 273 Ian Oswald's video about textpad under win32 at
268 274 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
269 275
270 276 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
271 277 describing magics (we haven't used @ for a loong time).
272 278
273 279 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
274 280 contributed by marienz to close
275 281 http://www.scipy.net/roundup/ipython/issue53.
276 282
277 283 2006-02-10 Ville Vainio <vivainio@gmail.com>
278 284
279 285 * genutils.py: getoutput now works in win32 too
280 286
281 287 * completer.py: alias and magic completion only invoked
282 288 at the first "item" in the line, to avoid "cd %store"
283 289 nonsense.
284 290
285 291 2006-02-09 Ville Vainio <vivainio@gmail.com>
286 292
287 293 * test/*: Added a unit testing framework (finally).
288 294 '%run runtests.py' to run test_*.
289 295
290 296 * ipapi.py: Exposed runlines and set_custom_exc
291 297
292 298 2006-02-07 Ville Vainio <vivainio@gmail.com>
293 299
294 300 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
295 301 instead use "f(1 2)" as before.
296 302
297 303 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
298 304
299 305 * IPython/demo.py (IPythonDemo): Add new classes to the demo
300 306 facilities, for demos processed by the IPython input filter
301 307 (IPythonDemo), and for running a script one-line-at-a-time as a
302 308 demo, both for pure Python (LineDemo) and for IPython-processed
303 309 input (IPythonLineDemo). After a request by Dave Kohel, from the
304 310 SAGE team.
305 311 (Demo.edit): added and edit() method to the demo objects, to edit
306 312 the in-memory copy of the last executed block.
307 313
308 314 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
309 315 processing to %edit, %macro and %save. These commands can now be
310 316 invoked on the unprocessed input as it was typed by the user
311 317 (without any prefilters applied). After requests by the SAGE team
312 318 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
313 319
314 320 2006-02-01 Ville Vainio <vivainio@gmail.com>
315 321
316 322 * setup.py, eggsetup.py: easy_install ipython==dev works
317 323 correctly now (on Linux)
318 324
319 325 * ipy_user_conf,ipmaker: user config changes, removed spurious
320 326 warnings
321 327
322 328 * iplib: if rc.banner is string, use it as is.
323 329
324 330 * Magic: %pycat accepts a string argument and pages it's contents.
325 331
326 332
327 333 2006-01-30 Ville Vainio <vivainio@gmail.com>
328 334
329 335 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
330 336 Now %store and bookmarks work through PickleShare, meaning that
331 337 concurrent access is possible and all ipython sessions see the
332 338 same database situation all the time, instead of snapshot of
333 339 the situation when the session was started. Hence, %bookmark
334 340 results are immediately accessible from othes sessions. The database
335 341 is also available for use by user extensions. See:
336 342 http://www.python.org/pypi/pickleshare
337 343
338 344 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
339 345
340 346 * aliases can now be %store'd
341 347
342 348 * path.py move to Extensions so that pickleshare does not need
343 349 IPython-specific import. Extensions added to pythonpath right
344 350 at __init__.
345 351
346 352 * iplib.py: ipalias deprecated/redundant; aliases are converted and
347 353 called with _ip.system and the pre-transformed command string.
348 354
349 355 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
350 356
351 357 * IPython/iplib.py (interact): Fix that we were not catching
352 358 KeyboardInterrupt exceptions properly. I'm not quite sure why the
353 359 logic here had to change, but it's fixed now.
354 360
355 361 2006-01-29 Ville Vainio <vivainio@gmail.com>
356 362
357 363 * iplib.py: Try to import pyreadline on Windows.
358 364
359 365 2006-01-27 Ville Vainio <vivainio@gmail.com>
360 366
361 367 * iplib.py: Expose ipapi as _ip in builtin namespace.
362 368 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
363 369 and ip_set_hook (-> _ip.set_hook) redundant. % and !
364 370 syntax now produce _ip.* variant of the commands.
365 371
366 372 * "_ip.options().autoedit_syntax = 2" automatically throws
367 373 user to editor for syntax error correction without prompting.
368 374
369 375 2006-01-27 Ville Vainio <vivainio@gmail.com>
370 376
371 377 * ipmaker.py: Give "realistic" sys.argv for scripts (without
372 378 'ipython' at argv[0]) executed through command line.
373 379 NOTE: this DEPRECATES calling ipython with multiple scripts
374 380 ("ipython a.py b.py c.py")
375 381
376 382 * iplib.py, hooks.py: Added configurable input prefilter,
377 383 named 'input_prefilter'. See ext_rescapture.py for example
378 384 usage.
379 385
380 386 * ext_rescapture.py, Magic.py: Better system command output capture
381 387 through 'var = !ls' (deprecates user-visible %sc). Same notation
382 388 applies for magics, 'var = %alias' assigns alias list to var.
383 389
384 390 * ipapi.py: added meta() for accessing extension-usable data store.
385 391
386 392 * iplib.py: added InteractiveShell.getapi(). New magics should be
387 393 written doing self.getapi() instead of using the shell directly.
388 394
389 395 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
390 396 %store foo >> ~/myfoo.txt to store variables to files (in clean
391 397 textual form, not a restorable pickle).
392 398
393 399 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
394 400
395 401 * usage.py, Magic.py: added %quickref
396 402
397 403 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
398 404
399 405 * GetoptErrors when invoking magics etc. with wrong args
400 406 are now more helpful:
401 407 GetoptError: option -l not recognized (allowed: "qb" )
402 408
403 409 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
404 410
405 411 * IPython/demo.py (Demo.show): Flush stdout after each block, so
406 412 computationally intensive blocks don't appear to stall the demo.
407 413
408 414 2006-01-24 Ville Vainio <vivainio@gmail.com>
409 415
410 416 * iplib.py, hooks.py: 'result_display' hook can return a non-None
411 417 value to manipulate resulting history entry.
412 418
413 419 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
414 420 to instance methods of IPApi class, to make extending an embedded
415 421 IPython feasible. See ext_rehashdir.py for example usage.
416 422
417 423 * Merged 1071-1076 from banches/0.7.1
418 424
419 425
420 426 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
421 427
422 428 * tools/release (daystamp): Fix build tools to use the new
423 429 eggsetup.py script to build lightweight eggs.
424 430
425 431 * Applied changesets 1062 and 1064 before 0.7.1 release.
426 432
427 433 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
428 434 see the raw input history (without conversions like %ls ->
429 435 ipmagic("ls")). After a request from W. Stein, SAGE
430 436 (http://modular.ucsd.edu/sage) developer. This information is
431 437 stored in the input_hist_raw attribute of the IPython instance, so
432 438 developers can access it if needed (it's an InputList instance).
433 439
434 440 * Versionstring = 0.7.2.svn
435 441
436 442 * eggsetup.py: A separate script for constructing eggs, creates
437 443 proper launch scripts even on Windows (an .exe file in
438 444 \python24\scripts).
439 445
440 446 * ipapi.py: launch_new_instance, launch entry point needed for the
441 447 egg.
442 448
443 449 2006-01-23 Ville Vainio <vivainio@gmail.com>
444 450
445 451 * Added %cpaste magic for pasting python code
446 452
447 453 2006-01-22 Ville Vainio <vivainio@gmail.com>
448 454
449 455 * Merge from branches/0.7.1 into trunk, revs 1052-1057
450 456
451 457 * Versionstring = 0.7.2.svn
452 458
453 459 * eggsetup.py: A separate script for constructing eggs, creates
454 460 proper launch scripts even on Windows (an .exe file in
455 461 \python24\scripts).
456 462
457 463 * ipapi.py: launch_new_instance, launch entry point needed for the
458 464 egg.
459 465
460 466 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
461 467
462 468 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
463 469 %pfile foo would print the file for foo even if it was a binary.
464 470 Now, extensions '.so' and '.dll' are skipped.
465 471
466 472 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
467 473 bug, where macros would fail in all threaded modes. I'm not 100%
468 474 sure, so I'm going to put out an rc instead of making a release
469 475 today, and wait for feedback for at least a few days.
470 476
471 477 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
472 478 it...) the handling of pasting external code with autoindent on.
473 479 To get out of a multiline input, the rule will appear for most
474 480 users unchanged: two blank lines or change the indent level
475 481 proposed by IPython. But there is a twist now: you can
476 482 add/subtract only *one or two spaces*. If you add/subtract three
477 483 or more (unless you completely delete the line), IPython will
478 484 accept that line, and you'll need to enter a second one of pure
479 485 whitespace. I know it sounds complicated, but I can't find a
480 486 different solution that covers all the cases, with the right
481 487 heuristics. Hopefully in actual use, nobody will really notice
482 488 all these strange rules and things will 'just work'.
483 489
484 490 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
485 491
486 492 * IPython/iplib.py (interact): catch exceptions which can be
487 493 triggered asynchronously by signal handlers. Thanks to an
488 494 automatic crash report, submitted by Colin Kingsley
489 495 <tercel-AT-gentoo.org>.
490 496
491 497 2006-01-20 Ville Vainio <vivainio@gmail.com>
492 498
493 499 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
494 500 (%rehashdir, very useful, try it out) of how to extend ipython
495 501 with new magics. Also added Extensions dir to pythonpath to make
496 502 importing extensions easy.
497 503
498 504 * %store now complains when trying to store interactively declared
499 505 classes / instances of those classes.
500 506
501 507 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
502 508 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
503 509 if they exist, and ipy_user_conf.py with some defaults is created for
504 510 the user.
505 511
506 512 * Startup rehashing done by the config file, not InterpreterExec.
507 513 This means system commands are available even without selecting the
508 514 pysh profile. It's the sensible default after all.
509 515
510 516 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
511 517
512 518 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
513 519 multiline code with autoindent on working. But I am really not
514 520 sure, so this needs more testing. Will commit a debug-enabled
515 521 version for now, while I test it some more, so that Ville and
516 522 others may also catch any problems. Also made
517 523 self.indent_current_str() a method, to ensure that there's no
518 524 chance of the indent space count and the corresponding string
519 525 falling out of sync. All code needing the string should just call
520 526 the method.
521 527
522 528 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
523 529
524 530 * IPython/Magic.py (magic_edit): fix check for when users don't
525 531 save their output files, the try/except was in the wrong section.
526 532
527 533 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
528 534
529 535 * IPython/Magic.py (magic_run): fix __file__ global missing from
530 536 script's namespace when executed via %run. After a report by
531 537 Vivian.
532 538
533 539 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
534 540 when using python 2.4. The parent constructor changed in 2.4, and
535 541 we need to track it directly (we can't call it, as it messes up
536 542 readline and tab-completion inside our pdb would stop working).
537 543 After a bug report by R. Bernstein <rocky-AT-panix.com>.
538 544
539 545 2006-01-16 Ville Vainio <vivainio@gmail.com>
540 546
541 547 * Ipython/magic.py:Reverted back to old %edit functionality
542 548 that returns file contents on exit.
543 549
544 550 * IPython/path.py: Added Jason Orendorff's "path" module to
545 551 IPython tree, http://www.jorendorff.com/articles/python/path/.
546 552 You can get path objects conveniently through %sc, and !!, e.g.:
547 553 sc files=ls
548 554 for p in files.paths: # or files.p
549 555 print p,p.mtime
550 556
551 557 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
552 558 now work again without considering the exclusion regexp -
553 559 hence, things like ',foo my/path' turn to 'foo("my/path")'
554 560 instead of syntax error.
555 561
556 562
557 563 2006-01-14 Ville Vainio <vivainio@gmail.com>
558 564
559 565 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
560 566 ipapi decorators for python 2.4 users, options() provides access to rc
561 567 data.
562 568
563 569 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
564 570 as path separators (even on Linux ;-). Space character after
565 571 backslash (as yielded by tab completer) is still space;
566 572 "%cd long\ name" works as expected.
567 573
568 574 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
569 575 as "chain of command", with priority. API stays the same,
570 576 TryNext exception raised by a hook function signals that
571 577 current hook failed and next hook should try handling it, as
572 578 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
573 579 requested configurable display hook, which is now implemented.
574 580
575 581 2006-01-13 Ville Vainio <vivainio@gmail.com>
576 582
577 583 * IPython/platutils*.py: platform specific utility functions,
578 584 so far only set_term_title is implemented (change terminal
579 585 label in windowing systems). %cd now changes the title to
580 586 current dir.
581 587
582 588 * IPython/Release.py: Added myself to "authors" list,
583 589 had to create new files.
584 590
585 591 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
586 592 shell escape; not a known bug but had potential to be one in the
587 593 future.
588 594
589 595 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
590 596 extension API for IPython! See the module for usage example. Fix
591 597 OInspect for docstring-less magic functions.
592 598
593 599
594 600 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
595 601
596 602 * IPython/iplib.py (raw_input): temporarily deactivate all
597 603 attempts at allowing pasting of code with autoindent on. It
598 604 introduced bugs (reported by Prabhu) and I can't seem to find a
599 605 robust combination which works in all cases. Will have to revisit
600 606 later.
601 607
602 608 * IPython/genutils.py: remove isspace() function. We've dropped
603 609 2.2 compatibility, so it's OK to use the string method.
604 610
605 611 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
606 612
607 613 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
608 614 matching what NOT to autocall on, to include all python binary
609 615 operators (including things like 'and', 'or', 'is' and 'in').
610 616 Prompted by a bug report on 'foo & bar', but I realized we had
611 617 many more potential bug cases with other operators. The regexp is
612 618 self.re_exclude_auto, it's fairly commented.
613 619
614 620 2006-01-12 Ville Vainio <vivainio@gmail.com>
615 621
616 622 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
617 623 Prettified and hardened string/backslash quoting with ipsystem(),
618 624 ipalias() and ipmagic(). Now even \ characters are passed to
619 625 %magics, !shell escapes and aliases exactly as they are in the
620 626 ipython command line. Should improve backslash experience,
621 627 particularly in Windows (path delimiter for some commands that
622 628 won't understand '/'), but Unix benefits as well (regexps). %cd
623 629 magic still doesn't support backslash path delimiters, though. Also
624 630 deleted all pretense of supporting multiline command strings in
625 631 !system or %magic commands. Thanks to Jerry McRae for suggestions.
626 632
627 633 * doc/build_doc_instructions.txt added. Documentation on how to
628 634 use doc/update_manual.py, added yesterday. Both files contributed
629 635 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
630 636 doc/*.sh for deprecation at a later date.
631 637
632 638 * /ipython.py Added ipython.py to root directory for
633 639 zero-installation (tar xzvf ipython.tgz; cd ipython; python
634 640 ipython.py) and development convenience (no need to kee doing
635 641 "setup.py install" between changes).
636 642
637 643 * Made ! and !! shell escapes work (again) in multiline expressions:
638 644 if 1:
639 645 !ls
640 646 !!ls
641 647
642 648 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
643 649
644 650 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
645 651 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
646 652 module in case-insensitive installation. Was causing crashes
647 653 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
648 654
649 655 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
650 656 <marienz-AT-gentoo.org>, closes
651 657 http://www.scipy.net/roundup/ipython/issue51.
652 658
653 659 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
654 660
655 661 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
656 662 problem of excessive CPU usage under *nix and keyboard lag under
657 663 win32.
658 664
659 665 2006-01-10 *** Released version 0.7.0
660 666
661 667 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
662 668
663 669 * IPython/Release.py (revision): tag version number to 0.7.0,
664 670 ready for release.
665 671
666 672 * IPython/Magic.py (magic_edit): Add print statement to %edit so
667 673 it informs the user of the name of the temp. file used. This can
668 674 help if you decide later to reuse that same file, so you know
669 675 where to copy the info from.
670 676
671 677 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
672 678
673 679 * setup_bdist_egg.py: little script to build an egg. Added
674 680 support in the release tools as well.
675 681
676 682 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
677 683
678 684 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
679 685 version selection (new -wxversion command line and ipythonrc
680 686 parameter). Patch contributed by Arnd Baecker
681 687 <arnd.baecker-AT-web.de>.
682 688
683 689 * IPython/iplib.py (embed_mainloop): fix tab-completion in
684 690 embedded instances, for variables defined at the interactive
685 691 prompt of the embedded ipython. Reported by Arnd.
686 692
687 693 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
688 694 it can be used as a (stateful) toggle, or with a direct parameter.
689 695
690 696 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
691 697 could be triggered in certain cases and cause the traceback
692 698 printer not to work.
693 699
694 700 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
695 701
696 702 * IPython/iplib.py (_should_recompile): Small fix, closes
697 703 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
698 704
699 705 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
700 706
701 707 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
702 708 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
703 709 Moad for help with tracking it down.
704 710
705 711 * IPython/iplib.py (handle_auto): fix autocall handling for
706 712 objects which support BOTH __getitem__ and __call__ (so that f [x]
707 713 is left alone, instead of becoming f([x]) automatically).
708 714
709 715 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
710 716 Ville's patch.
711 717
712 718 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
713 719
714 720 * IPython/iplib.py (handle_auto): changed autocall semantics to
715 721 include 'smart' mode, where the autocall transformation is NOT
716 722 applied if there are no arguments on the line. This allows you to
717 723 just type 'foo' if foo is a callable to see its internal form,
718 724 instead of having it called with no arguments (typically a
719 725 mistake). The old 'full' autocall still exists: for that, you
720 726 need to set the 'autocall' parameter to 2 in your ipythonrc file.
721 727
722 728 * IPython/completer.py (Completer.attr_matches): add
723 729 tab-completion support for Enthoughts' traits. After a report by
724 730 Arnd and a patch by Prabhu.
725 731
726 732 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
727 733
728 734 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
729 735 Schmolck's patch to fix inspect.getinnerframes().
730 736
731 737 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
732 738 for embedded instances, regarding handling of namespaces and items
733 739 added to the __builtin__ one. Multiple embedded instances and
734 740 recursive embeddings should work better now (though I'm not sure
735 741 I've got all the corner cases fixed, that code is a bit of a brain
736 742 twister).
737 743
738 744 * IPython/Magic.py (magic_edit): added support to edit in-memory
739 745 macros (automatically creates the necessary temp files). %edit
740 746 also doesn't return the file contents anymore, it's just noise.
741 747
742 748 * IPython/completer.py (Completer.attr_matches): revert change to
743 749 complete only on attributes listed in __all__. I realized it
744 750 cripples the tab-completion system as a tool for exploring the
745 751 internals of unknown libraries (it renders any non-__all__
746 752 attribute off-limits). I got bit by this when trying to see
747 753 something inside the dis module.
748 754
749 755 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
750 756
751 757 * IPython/iplib.py (InteractiveShell.__init__): add .meta
752 758 namespace for users and extension writers to hold data in. This
753 759 follows the discussion in
754 760 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
755 761
756 762 * IPython/completer.py (IPCompleter.complete): small patch to help
757 763 tab-completion under Emacs, after a suggestion by John Barnard
758 764 <barnarj-AT-ccf.org>.
759 765
760 766 * IPython/Magic.py (Magic.extract_input_slices): added support for
761 767 the slice notation in magics to use N-M to represent numbers N...M
762 768 (closed endpoints). This is used by %macro and %save.
763 769
764 770 * IPython/completer.py (Completer.attr_matches): for modules which
765 771 define __all__, complete only on those. After a patch by Jeffrey
766 772 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
767 773 speed up this routine.
768 774
769 775 * IPython/Logger.py (Logger.log): fix a history handling bug. I
770 776 don't know if this is the end of it, but the behavior now is
771 777 certainly much more correct. Note that coupled with macros,
772 778 slightly surprising (at first) behavior may occur: a macro will in
773 779 general expand to multiple lines of input, so upon exiting, the
774 780 in/out counters will both be bumped by the corresponding amount
775 781 (as if the macro's contents had been typed interactively). Typing
776 782 %hist will reveal the intermediate (silently processed) lines.
777 783
778 784 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
779 785 pickle to fail (%run was overwriting __main__ and not restoring
780 786 it, but pickle relies on __main__ to operate).
781 787
782 788 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
783 789 using properties, but forgot to make the main InteractiveShell
784 790 class a new-style class. Properties fail silently, and
785 791 misteriously, with old-style class (getters work, but
786 792 setters don't do anything).
787 793
788 794 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
789 795
790 796 * IPython/Magic.py (magic_history): fix history reporting bug (I
791 797 know some nasties are still there, I just can't seem to find a
792 798 reproducible test case to track them down; the input history is
793 799 falling out of sync...)
794 800
795 801 * IPython/iplib.py (handle_shell_escape): fix bug where both
796 802 aliases and system accesses where broken for indented code (such
797 803 as loops).
798 804
799 805 * IPython/genutils.py (shell): fix small but critical bug for
800 806 win32 system access.
801 807
802 808 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
803 809
804 810 * IPython/iplib.py (showtraceback): remove use of the
805 811 sys.last_{type/value/traceback} structures, which are non
806 812 thread-safe.
807 813 (_prefilter): change control flow to ensure that we NEVER
808 814 introspect objects when autocall is off. This will guarantee that
809 815 having an input line of the form 'x.y', where access to attribute
810 816 'y' has side effects, doesn't trigger the side effect TWICE. It
811 817 is important to note that, with autocall on, these side effects
812 818 can still happen.
813 819 (ipsystem): new builtin, to complete the ip{magic/alias/system}
814 820 trio. IPython offers these three kinds of special calls which are
815 821 not python code, and it's a good thing to have their call method
816 822 be accessible as pure python functions (not just special syntax at
817 823 the command line). It gives us a better internal implementation
818 824 structure, as well as exposing these for user scripting more
819 825 cleanly.
820 826
821 827 * IPython/macro.py (Macro.__init__): moved macros to a standalone
822 828 file. Now that they'll be more likely to be used with the
823 829 persistance system (%store), I want to make sure their module path
824 830 doesn't change in the future, so that we don't break things for
825 831 users' persisted data.
826 832
827 833 * IPython/iplib.py (autoindent_update): move indentation
828 834 management into the _text_ processing loop, not the keyboard
829 835 interactive one. This is necessary to correctly process non-typed
830 836 multiline input (such as macros).
831 837
832 838 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
833 839 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
834 840 which was producing problems in the resulting manual.
835 841 (magic_whos): improve reporting of instances (show their class,
836 842 instead of simply printing 'instance' which isn't terribly
837 843 informative).
838 844
839 845 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
840 846 (minor mods) to support network shares under win32.
841 847
842 848 * IPython/winconsole.py (get_console_size): add new winconsole
843 849 module and fixes to page_dumb() to improve its behavior under
844 850 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
845 851
846 852 * IPython/Magic.py (Macro): simplified Macro class to just
847 853 subclass list. We've had only 2.2 compatibility for a very long
848 854 time, yet I was still avoiding subclassing the builtin types. No
849 855 more (I'm also starting to use properties, though I won't shift to
850 856 2.3-specific features quite yet).
851 857 (magic_store): added Ville's patch for lightweight variable
852 858 persistence, after a request on the user list by Matt Wilkie
853 859 <maphew-AT-gmail.com>. The new %store magic's docstring has full
854 860 details.
855 861
856 862 * IPython/iplib.py (InteractiveShell.post_config_initialization):
857 863 changed the default logfile name from 'ipython.log' to
858 864 'ipython_log.py'. These logs are real python files, and now that
859 865 we have much better multiline support, people are more likely to
860 866 want to use them as such. Might as well name them correctly.
861 867
862 868 * IPython/Magic.py: substantial cleanup. While we can't stop
863 869 using magics as mixins, due to the existing customizations 'out
864 870 there' which rely on the mixin naming conventions, at least I
865 871 cleaned out all cross-class name usage. So once we are OK with
866 872 breaking compatibility, the two systems can be separated.
867 873
868 874 * IPython/Logger.py: major cleanup. This one is NOT a mixin
869 875 anymore, and the class is a fair bit less hideous as well. New
870 876 features were also introduced: timestamping of input, and logging
871 877 of output results. These are user-visible with the -t and -o
872 878 options to %logstart. Closes
873 879 http://www.scipy.net/roundup/ipython/issue11 and a request by
874 880 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
875 881
876 882 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
877 883
878 884 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
879 885 better hadnle backslashes in paths. See the thread 'More Windows
880 886 questions part 2 - \/ characters revisited' on the iypthon user
881 887 list:
882 888 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
883 889
884 890 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
885 891
886 892 (InteractiveShell.__init__): change threaded shells to not use the
887 893 ipython crash handler. This was causing more problems than not,
888 894 as exceptions in the main thread (GUI code, typically) would
889 895 always show up as a 'crash', when they really weren't.
890 896
891 897 The colors and exception mode commands (%colors/%xmode) have been
892 898 synchronized to also take this into account, so users can get
893 899 verbose exceptions for their threaded code as well. I also added
894 900 support for activating pdb inside this exception handler as well,
895 901 so now GUI authors can use IPython's enhanced pdb at runtime.
896 902
897 903 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
898 904 true by default, and add it to the shipped ipythonrc file. Since
899 905 this asks the user before proceeding, I think it's OK to make it
900 906 true by default.
901 907
902 908 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
903 909 of the previous special-casing of input in the eval loop. I think
904 910 this is cleaner, as they really are commands and shouldn't have
905 911 a special role in the middle of the core code.
906 912
907 913 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
908 914
909 915 * IPython/iplib.py (edit_syntax_error): added support for
910 916 automatically reopening the editor if the file had a syntax error
911 917 in it. Thanks to scottt who provided the patch at:
912 918 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
913 919 version committed).
914 920
915 921 * IPython/iplib.py (handle_normal): add suport for multi-line
916 922 input with emtpy lines. This fixes
917 923 http://www.scipy.net/roundup/ipython/issue43 and a similar
918 924 discussion on the user list.
919 925
920 926 WARNING: a behavior change is necessarily introduced to support
921 927 blank lines: now a single blank line with whitespace does NOT
922 928 break the input loop, which means that when autoindent is on, by
923 929 default hitting return on the next (indented) line does NOT exit.
924 930
925 931 Instead, to exit a multiline input you can either have:
926 932
927 933 - TWO whitespace lines (just hit return again), or
928 934 - a single whitespace line of a different length than provided
929 935 by the autoindent (add or remove a space).
930 936
931 937 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
932 938 module to better organize all readline-related functionality.
933 939 I've deleted FlexCompleter and put all completion clases here.
934 940
935 941 * IPython/iplib.py (raw_input): improve indentation management.
936 942 It is now possible to paste indented code with autoindent on, and
937 943 the code is interpreted correctly (though it still looks bad on
938 944 screen, due to the line-oriented nature of ipython).
939 945 (MagicCompleter.complete): change behavior so that a TAB key on an
940 946 otherwise empty line actually inserts a tab, instead of completing
941 947 on the entire global namespace. This makes it easier to use the
942 948 TAB key for indentation. After a request by Hans Meine
943 949 <hans_meine-AT-gmx.net>
944 950 (_prefilter): add support so that typing plain 'exit' or 'quit'
945 951 does a sensible thing. Originally I tried to deviate as little as
946 952 possible from the default python behavior, but even that one may
947 953 change in this direction (thread on python-dev to that effect).
948 954 Regardless, ipython should do the right thing even if CPython's
949 955 '>>>' prompt doesn't.
950 956 (InteractiveShell): removed subclassing code.InteractiveConsole
951 957 class. By now we'd overridden just about all of its methods: I've
952 958 copied the remaining two over, and now ipython is a standalone
953 959 class. This will provide a clearer picture for the chainsaw
954 960 branch refactoring.
955 961
956 962 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
957 963
958 964 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
959 965 failures for objects which break when dir() is called on them.
960 966
961 967 * IPython/FlexCompleter.py (Completer.__init__): Added support for
962 968 distinct local and global namespaces in the completer API. This
963 969 change allows us top properly handle completion with distinct
964 970 scopes, including in embedded instances (this had never really
965 971 worked correctly).
966 972
967 973 Note: this introduces a change in the constructor for
968 974 MagicCompleter, as a new global_namespace parameter is now the
969 975 second argument (the others were bumped one position).
970 976
971 977 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
972 978
973 979 * IPython/iplib.py (embed_mainloop): fix tab-completion in
974 980 embedded instances (which can be done now thanks to Vivian's
975 981 frame-handling fixes for pdb).
976 982 (InteractiveShell.__init__): Fix namespace handling problem in
977 983 embedded instances. We were overwriting __main__ unconditionally,
978 984 and this should only be done for 'full' (non-embedded) IPython;
979 985 embedded instances must respect the caller's __main__. Thanks to
980 986 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
981 987
982 988 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
983 989
984 990 * setup.py: added download_url to setup(). This registers the
985 991 download address at PyPI, which is not only useful to humans
986 992 browsing the site, but is also picked up by setuptools (the Eggs
987 993 machinery). Thanks to Ville and R. Kern for the info/discussion
988 994 on this.
989 995
990 996 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
991 997
992 998 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
993 999 This brings a lot of nice functionality to the pdb mode, which now
994 1000 has tab-completion, syntax highlighting, and better stack handling
995 1001 than before. Many thanks to Vivian De Smedt
996 1002 <vivian-AT-vdesmedt.com> for the original patches.
997 1003
998 1004 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
999 1005
1000 1006 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1001 1007 sequence to consistently accept the banner argument. The
1002 1008 inconsistency was tripping SAGE, thanks to Gary Zablackis
1003 1009 <gzabl-AT-yahoo.com> for the report.
1004 1010
1005 1011 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1006 1012
1007 1013 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1008 1014 Fix bug where a naked 'alias' call in the ipythonrc file would
1009 1015 cause a crash. Bug reported by Jorgen Stenarson.
1010 1016
1011 1017 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1012 1018
1013 1019 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1014 1020 startup time.
1015 1021
1016 1022 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1017 1023 instances had introduced a bug with globals in normal code. Now
1018 1024 it's working in all cases.
1019 1025
1020 1026 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1021 1027 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1022 1028 has been introduced to set the default case sensitivity of the
1023 1029 searches. Users can still select either mode at runtime on a
1024 1030 per-search basis.
1025 1031
1026 1032 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1027 1033
1028 1034 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1029 1035 attributes in wildcard searches for subclasses. Modified version
1030 1036 of a patch by Jorgen.
1031 1037
1032 1038 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1033 1039
1034 1040 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1035 1041 embedded instances. I added a user_global_ns attribute to the
1036 1042 InteractiveShell class to handle this.
1037 1043
1038 1044 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1039 1045
1040 1046 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1041 1047 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1042 1048 (reported under win32, but may happen also in other platforms).
1043 1049 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1044 1050
1045 1051 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1046 1052
1047 1053 * IPython/Magic.py (magic_psearch): new support for wildcard
1048 1054 patterns. Now, typing ?a*b will list all names which begin with a
1049 1055 and end in b, for example. The %psearch magic has full
1050 1056 docstrings. Many thanks to JΓΆrgen Stenarson
1051 1057 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1052 1058 implementing this functionality.
1053 1059
1054 1060 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1055 1061
1056 1062 * Manual: fixed long-standing annoyance of double-dashes (as in
1057 1063 --prefix=~, for example) being stripped in the HTML version. This
1058 1064 is a latex2html bug, but a workaround was provided. Many thanks
1059 1065 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1060 1066 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1061 1067 rolling. This seemingly small issue had tripped a number of users
1062 1068 when first installing, so I'm glad to see it gone.
1063 1069
1064 1070 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1065 1071
1066 1072 * IPython/Extensions/numeric_formats.py: fix missing import,
1067 1073 reported by Stephen Walton.
1068 1074
1069 1075 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1070 1076
1071 1077 * IPython/demo.py: finish demo module, fully documented now.
1072 1078
1073 1079 * IPython/genutils.py (file_read): simple little utility to read a
1074 1080 file and ensure it's closed afterwards.
1075 1081
1076 1082 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1077 1083
1078 1084 * IPython/demo.py (Demo.__init__): added support for individually
1079 1085 tagging blocks for automatic execution.
1080 1086
1081 1087 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1082 1088 syntax-highlighted python sources, requested by John.
1083 1089
1084 1090 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1085 1091
1086 1092 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1087 1093 finishing.
1088 1094
1089 1095 * IPython/genutils.py (shlex_split): moved from Magic to here,
1090 1096 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1091 1097
1092 1098 * IPython/demo.py (Demo.__init__): added support for silent
1093 1099 blocks, improved marks as regexps, docstrings written.
1094 1100 (Demo.__init__): better docstring, added support for sys.argv.
1095 1101
1096 1102 * IPython/genutils.py (marquee): little utility used by the demo
1097 1103 code, handy in general.
1098 1104
1099 1105 * IPython/demo.py (Demo.__init__): new class for interactive
1100 1106 demos. Not documented yet, I just wrote it in a hurry for
1101 1107 scipy'05. Will docstring later.
1102 1108
1103 1109 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1104 1110
1105 1111 * IPython/Shell.py (sigint_handler): Drastic simplification which
1106 1112 also seems to make Ctrl-C work correctly across threads! This is
1107 1113 so simple, that I can't beleive I'd missed it before. Needs more
1108 1114 testing, though.
1109 1115 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1110 1116 like this before...
1111 1117
1112 1118 * IPython/genutils.py (get_home_dir): add protection against
1113 1119 non-dirs in win32 registry.
1114 1120
1115 1121 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1116 1122 bug where dict was mutated while iterating (pysh crash).
1117 1123
1118 1124 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1119 1125
1120 1126 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1121 1127 spurious newlines added by this routine. After a report by
1122 1128 F. Mantegazza.
1123 1129
1124 1130 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1125 1131
1126 1132 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1127 1133 calls. These were a leftover from the GTK 1.x days, and can cause
1128 1134 problems in certain cases (after a report by John Hunter).
1129 1135
1130 1136 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1131 1137 os.getcwd() fails at init time. Thanks to patch from David Remahl
1132 1138 <chmod007-AT-mac.com>.
1133 1139 (InteractiveShell.__init__): prevent certain special magics from
1134 1140 being shadowed by aliases. Closes
1135 1141 http://www.scipy.net/roundup/ipython/issue41.
1136 1142
1137 1143 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1138 1144
1139 1145 * IPython/iplib.py (InteractiveShell.complete): Added new
1140 1146 top-level completion method to expose the completion mechanism
1141 1147 beyond readline-based environments.
1142 1148
1143 1149 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1144 1150
1145 1151 * tools/ipsvnc (svnversion): fix svnversion capture.
1146 1152
1147 1153 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1148 1154 attribute to self, which was missing. Before, it was set by a
1149 1155 routine which in certain cases wasn't being called, so the
1150 1156 instance could end up missing the attribute. This caused a crash.
1151 1157 Closes http://www.scipy.net/roundup/ipython/issue40.
1152 1158
1153 1159 2005-08-16 Fernando Perez <fperez@colorado.edu>
1154 1160
1155 1161 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1156 1162 contains non-string attribute. Closes
1157 1163 http://www.scipy.net/roundup/ipython/issue38.
1158 1164
1159 1165 2005-08-14 Fernando Perez <fperez@colorado.edu>
1160 1166
1161 1167 * tools/ipsvnc: Minor improvements, to add changeset info.
1162 1168
1163 1169 2005-08-12 Fernando Perez <fperez@colorado.edu>
1164 1170
1165 1171 * IPython/iplib.py (runsource): remove self.code_to_run_src
1166 1172 attribute. I realized this is nothing more than
1167 1173 '\n'.join(self.buffer), and having the same data in two different
1168 1174 places is just asking for synchronization bugs. This may impact
1169 1175 people who have custom exception handlers, so I need to warn
1170 1176 ipython-dev about it (F. Mantegazza may use them).
1171 1177
1172 1178 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1173 1179
1174 1180 * IPython/genutils.py: fix 2.2 compatibility (generators)
1175 1181
1176 1182 2005-07-18 Fernando Perez <fperez@colorado.edu>
1177 1183
1178 1184 * IPython/genutils.py (get_home_dir): fix to help users with
1179 1185 invalid $HOME under win32.
1180 1186
1181 1187 2005-07-17 Fernando Perez <fperez@colorado.edu>
1182 1188
1183 1189 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1184 1190 some old hacks and clean up a bit other routines; code should be
1185 1191 simpler and a bit faster.
1186 1192
1187 1193 * IPython/iplib.py (interact): removed some last-resort attempts
1188 1194 to survive broken stdout/stderr. That code was only making it
1189 1195 harder to abstract out the i/o (necessary for gui integration),
1190 1196 and the crashes it could prevent were extremely rare in practice
1191 1197 (besides being fully user-induced in a pretty violent manner).
1192 1198
1193 1199 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1194 1200 Nothing major yet, but the code is simpler to read; this should
1195 1201 make it easier to do more serious modifications in the future.
1196 1202
1197 1203 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1198 1204 which broke in .15 (thanks to a report by Ville).
1199 1205
1200 1206 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1201 1207 be quite correct, I know next to nothing about unicode). This
1202 1208 will allow unicode strings to be used in prompts, amongst other
1203 1209 cases. It also will prevent ipython from crashing when unicode
1204 1210 shows up unexpectedly in many places. If ascii encoding fails, we
1205 1211 assume utf_8. Currently the encoding is not a user-visible
1206 1212 setting, though it could be made so if there is demand for it.
1207 1213
1208 1214 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1209 1215
1210 1216 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1211 1217
1212 1218 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1213 1219
1214 1220 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1215 1221 code can work transparently for 2.2/2.3.
1216 1222
1217 1223 2005-07-16 Fernando Perez <fperez@colorado.edu>
1218 1224
1219 1225 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1220 1226 out of the color scheme table used for coloring exception
1221 1227 tracebacks. This allows user code to add new schemes at runtime.
1222 1228 This is a minimally modified version of the patch at
1223 1229 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1224 1230 for the contribution.
1225 1231
1226 1232 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1227 1233 slightly modified version of the patch in
1228 1234 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1229 1235 to remove the previous try/except solution (which was costlier).
1230 1236 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1231 1237
1232 1238 2005-06-08 Fernando Perez <fperez@colorado.edu>
1233 1239
1234 1240 * IPython/iplib.py (write/write_err): Add methods to abstract all
1235 1241 I/O a bit more.
1236 1242
1237 1243 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1238 1244 warning, reported by Aric Hagberg, fix by JD Hunter.
1239 1245
1240 1246 2005-06-02 *** Released version 0.6.15
1241 1247
1242 1248 2005-06-01 Fernando Perez <fperez@colorado.edu>
1243 1249
1244 1250 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1245 1251 tab-completion of filenames within open-quoted strings. Note that
1246 1252 this requires that in ~/.ipython/ipythonrc, users change the
1247 1253 readline delimiters configuration to read:
1248 1254
1249 1255 readline_remove_delims -/~
1250 1256
1251 1257
1252 1258 2005-05-31 *** Released version 0.6.14
1253 1259
1254 1260 2005-05-29 Fernando Perez <fperez@colorado.edu>
1255 1261
1256 1262 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1257 1263 with files not on the filesystem. Reported by Eliyahu Sandler
1258 1264 <eli@gondolin.net>
1259 1265
1260 1266 2005-05-22 Fernando Perez <fperez@colorado.edu>
1261 1267
1262 1268 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1263 1269 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1264 1270
1265 1271 2005-05-19 Fernando Perez <fperez@colorado.edu>
1266 1272
1267 1273 * IPython/iplib.py (safe_execfile): close a file which could be
1268 1274 left open (causing problems in win32, which locks open files).
1269 1275 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1270 1276
1271 1277 2005-05-18 Fernando Perez <fperez@colorado.edu>
1272 1278
1273 1279 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1274 1280 keyword arguments correctly to safe_execfile().
1275 1281
1276 1282 2005-05-13 Fernando Perez <fperez@colorado.edu>
1277 1283
1278 1284 * ipython.1: Added info about Qt to manpage, and threads warning
1279 1285 to usage page (invoked with --help).
1280 1286
1281 1287 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1282 1288 new matcher (it goes at the end of the priority list) to do
1283 1289 tab-completion on named function arguments. Submitted by George
1284 1290 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1285 1291 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1286 1292 for more details.
1287 1293
1288 1294 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1289 1295 SystemExit exceptions in the script being run. Thanks to a report
1290 1296 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1291 1297 producing very annoying behavior when running unit tests.
1292 1298
1293 1299 2005-05-12 Fernando Perez <fperez@colorado.edu>
1294 1300
1295 1301 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1296 1302 which I'd broken (again) due to a changed regexp. In the process,
1297 1303 added ';' as an escape to auto-quote the whole line without
1298 1304 splitting its arguments. Thanks to a report by Jerry McRae
1299 1305 <qrs0xyc02-AT-sneakemail.com>.
1300 1306
1301 1307 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1302 1308 possible crashes caused by a TokenError. Reported by Ed Schofield
1303 1309 <schofield-AT-ftw.at>.
1304 1310
1305 1311 2005-05-06 Fernando Perez <fperez@colorado.edu>
1306 1312
1307 1313 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1308 1314
1309 1315 2005-04-29 Fernando Perez <fperez@colorado.edu>
1310 1316
1311 1317 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1312 1318 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1313 1319 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1314 1320 which provides support for Qt interactive usage (similar to the
1315 1321 existing one for WX and GTK). This had been often requested.
1316 1322
1317 1323 2005-04-14 *** Released version 0.6.13
1318 1324
1319 1325 2005-04-08 Fernando Perez <fperez@colorado.edu>
1320 1326
1321 1327 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1322 1328 from _ofind, which gets called on almost every input line. Now,
1323 1329 we only try to get docstrings if they are actually going to be
1324 1330 used (the overhead of fetching unnecessary docstrings can be
1325 1331 noticeable for certain objects, such as Pyro proxies).
1326 1332
1327 1333 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1328 1334 for completers. For some reason I had been passing them the state
1329 1335 variable, which completers never actually need, and was in
1330 1336 conflict with the rlcompleter API. Custom completers ONLY need to
1331 1337 take the text parameter.
1332 1338
1333 1339 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1334 1340 work correctly in pysh. I've also moved all the logic which used
1335 1341 to be in pysh.py here, which will prevent problems with future
1336 1342 upgrades. However, this time I must warn users to update their
1337 1343 pysh profile to include the line
1338 1344
1339 1345 import_all IPython.Extensions.InterpreterExec
1340 1346
1341 1347 because otherwise things won't work for them. They MUST also
1342 1348 delete pysh.py and the line
1343 1349
1344 1350 execfile pysh.py
1345 1351
1346 1352 from their ipythonrc-pysh.
1347 1353
1348 1354 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1349 1355 robust in the face of objects whose dir() returns non-strings
1350 1356 (which it shouldn't, but some broken libs like ITK do). Thanks to
1351 1357 a patch by John Hunter (implemented differently, though). Also
1352 1358 minor improvements by using .extend instead of + on lists.
1353 1359
1354 1360 * pysh.py:
1355 1361
1356 1362 2005-04-06 Fernando Perez <fperez@colorado.edu>
1357 1363
1358 1364 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1359 1365 by default, so that all users benefit from it. Those who don't
1360 1366 want it can still turn it off.
1361 1367
1362 1368 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1363 1369 config file, I'd forgotten about this, so users were getting it
1364 1370 off by default.
1365 1371
1366 1372 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1367 1373 consistency. Now magics can be called in multiline statements,
1368 1374 and python variables can be expanded in magic calls via $var.
1369 1375 This makes the magic system behave just like aliases or !system
1370 1376 calls.
1371 1377
1372 1378 2005-03-28 Fernando Perez <fperez@colorado.edu>
1373 1379
1374 1380 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1375 1381 expensive string additions for building command. Add support for
1376 1382 trailing ';' when autocall is used.
1377 1383
1378 1384 2005-03-26 Fernando Perez <fperez@colorado.edu>
1379 1385
1380 1386 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1381 1387 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1382 1388 ipython.el robust against prompts with any number of spaces
1383 1389 (including 0) after the ':' character.
1384 1390
1385 1391 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1386 1392 continuation prompt, which misled users to think the line was
1387 1393 already indented. Closes debian Bug#300847, reported to me by
1388 1394 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1389 1395
1390 1396 2005-03-23 Fernando Perez <fperez@colorado.edu>
1391 1397
1392 1398 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1393 1399 properly aligned if they have embedded newlines.
1394 1400
1395 1401 * IPython/iplib.py (runlines): Add a public method to expose
1396 1402 IPython's code execution machinery, so that users can run strings
1397 1403 as if they had been typed at the prompt interactively.
1398 1404 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1399 1405 methods which can call the system shell, but with python variable
1400 1406 expansion. The three such methods are: __IPYTHON__.system,
1401 1407 .getoutput and .getoutputerror. These need to be documented in a
1402 1408 'public API' section (to be written) of the manual.
1403 1409
1404 1410 2005-03-20 Fernando Perez <fperez@colorado.edu>
1405 1411
1406 1412 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1407 1413 for custom exception handling. This is quite powerful, and it
1408 1414 allows for user-installable exception handlers which can trap
1409 1415 custom exceptions at runtime and treat them separately from
1410 1416 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1411 1417 Mantegazza <mantegazza-AT-ill.fr>.
1412 1418 (InteractiveShell.set_custom_completer): public API function to
1413 1419 add new completers at runtime.
1414 1420
1415 1421 2005-03-19 Fernando Perez <fperez@colorado.edu>
1416 1422
1417 1423 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1418 1424 allow objects which provide their docstrings via non-standard
1419 1425 mechanisms (like Pyro proxies) to still be inspected by ipython's
1420 1426 ? system.
1421 1427
1422 1428 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1423 1429 automatic capture system. I tried quite hard to make it work
1424 1430 reliably, and simply failed. I tried many combinations with the
1425 1431 subprocess module, but eventually nothing worked in all needed
1426 1432 cases (not blocking stdin for the child, duplicating stdout
1427 1433 without blocking, etc). The new %sc/%sx still do capture to these
1428 1434 magical list/string objects which make shell use much more
1429 1435 conveninent, so not all is lost.
1430 1436
1431 1437 XXX - FIX MANUAL for the change above!
1432 1438
1433 1439 (runsource): I copied code.py's runsource() into ipython to modify
1434 1440 it a bit. Now the code object and source to be executed are
1435 1441 stored in ipython. This makes this info accessible to third-party
1436 1442 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1437 1443 Mantegazza <mantegazza-AT-ill.fr>.
1438 1444
1439 1445 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1440 1446 history-search via readline (like C-p/C-n). I'd wanted this for a
1441 1447 long time, but only recently found out how to do it. For users
1442 1448 who already have their ipythonrc files made and want this, just
1443 1449 add:
1444 1450
1445 1451 readline_parse_and_bind "\e[A": history-search-backward
1446 1452 readline_parse_and_bind "\e[B": history-search-forward
1447 1453
1448 1454 2005-03-18 Fernando Perez <fperez@colorado.edu>
1449 1455
1450 1456 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1451 1457 LSString and SList classes which allow transparent conversions
1452 1458 between list mode and whitespace-separated string.
1453 1459 (magic_r): Fix recursion problem in %r.
1454 1460
1455 1461 * IPython/genutils.py (LSString): New class to be used for
1456 1462 automatic storage of the results of all alias/system calls in _o
1457 1463 and _e (stdout/err). These provide a .l/.list attribute which
1458 1464 does automatic splitting on newlines. This means that for most
1459 1465 uses, you'll never need to do capturing of output with %sc/%sx
1460 1466 anymore, since ipython keeps this always done for you. Note that
1461 1467 only the LAST results are stored, the _o/e variables are
1462 1468 overwritten on each call. If you need to save their contents
1463 1469 further, simply bind them to any other name.
1464 1470
1465 1471 2005-03-17 Fernando Perez <fperez@colorado.edu>
1466 1472
1467 1473 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1468 1474 prompt namespace handling.
1469 1475
1470 1476 2005-03-16 Fernando Perez <fperez@colorado.edu>
1471 1477
1472 1478 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1473 1479 classic prompts to be '>>> ' (final space was missing, and it
1474 1480 trips the emacs python mode).
1475 1481 (BasePrompt.__str__): Added safe support for dynamic prompt
1476 1482 strings. Now you can set your prompt string to be '$x', and the
1477 1483 value of x will be printed from your interactive namespace. The
1478 1484 interpolation syntax includes the full Itpl support, so
1479 1485 ${foo()+x+bar()} is a valid prompt string now, and the function
1480 1486 calls will be made at runtime.
1481 1487
1482 1488 2005-03-15 Fernando Perez <fperez@colorado.edu>
1483 1489
1484 1490 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1485 1491 avoid name clashes in pylab. %hist still works, it just forwards
1486 1492 the call to %history.
1487 1493
1488 1494 2005-03-02 *** Released version 0.6.12
1489 1495
1490 1496 2005-03-02 Fernando Perez <fperez@colorado.edu>
1491 1497
1492 1498 * IPython/iplib.py (handle_magic): log magic calls properly as
1493 1499 ipmagic() function calls.
1494 1500
1495 1501 * IPython/Magic.py (magic_time): Improved %time to support
1496 1502 statements and provide wall-clock as well as CPU time.
1497 1503
1498 1504 2005-02-27 Fernando Perez <fperez@colorado.edu>
1499 1505
1500 1506 * IPython/hooks.py: New hooks module, to expose user-modifiable
1501 1507 IPython functionality in a clean manner. For now only the editor
1502 1508 hook is actually written, and other thigns which I intend to turn
1503 1509 into proper hooks aren't yet there. The display and prefilter
1504 1510 stuff, for example, should be hooks. But at least now the
1505 1511 framework is in place, and the rest can be moved here with more
1506 1512 time later. IPython had had a .hooks variable for a long time for
1507 1513 this purpose, but I'd never actually used it for anything.
1508 1514
1509 1515 2005-02-26 Fernando Perez <fperez@colorado.edu>
1510 1516
1511 1517 * IPython/ipmaker.py (make_IPython): make the default ipython
1512 1518 directory be called _ipython under win32, to follow more the
1513 1519 naming peculiarities of that platform (where buggy software like
1514 1520 Visual Sourcesafe breaks with .named directories). Reported by
1515 1521 Ville Vainio.
1516 1522
1517 1523 2005-02-23 Fernando Perez <fperez@colorado.edu>
1518 1524
1519 1525 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1520 1526 auto_aliases for win32 which were causing problems. Users can
1521 1527 define the ones they personally like.
1522 1528
1523 1529 2005-02-21 Fernando Perez <fperez@colorado.edu>
1524 1530
1525 1531 * IPython/Magic.py (magic_time): new magic to time execution of
1526 1532 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1527 1533
1528 1534 2005-02-19 Fernando Perez <fperez@colorado.edu>
1529 1535
1530 1536 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1531 1537 into keys (for prompts, for example).
1532 1538
1533 1539 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1534 1540 prompts in case users want them. This introduces a small behavior
1535 1541 change: ipython does not automatically add a space to all prompts
1536 1542 anymore. To get the old prompts with a space, users should add it
1537 1543 manually to their ipythonrc file, so for example prompt_in1 should
1538 1544 now read 'In [\#]: ' instead of 'In [\#]:'.
1539 1545 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1540 1546 file) to control left-padding of secondary prompts.
1541 1547
1542 1548 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1543 1549 the profiler can't be imported. Fix for Debian, which removed
1544 1550 profile.py because of License issues. I applied a slightly
1545 1551 modified version of the original Debian patch at
1546 1552 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1547 1553
1548 1554 2005-02-17 Fernando Perez <fperez@colorado.edu>
1549 1555
1550 1556 * IPython/genutils.py (native_line_ends): Fix bug which would
1551 1557 cause improper line-ends under win32 b/c I was not opening files
1552 1558 in binary mode. Bug report and fix thanks to Ville.
1553 1559
1554 1560 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1555 1561 trying to catch spurious foo[1] autocalls. My fix actually broke
1556 1562 ',/' autoquote/call with explicit escape (bad regexp).
1557 1563
1558 1564 2005-02-15 *** Released version 0.6.11
1559 1565
1560 1566 2005-02-14 Fernando Perez <fperez@colorado.edu>
1561 1567
1562 1568 * IPython/background_jobs.py: New background job management
1563 1569 subsystem. This is implemented via a new set of classes, and
1564 1570 IPython now provides a builtin 'jobs' object for background job
1565 1571 execution. A convenience %bg magic serves as a lightweight
1566 1572 frontend for starting the more common type of calls. This was
1567 1573 inspired by discussions with B. Granger and the BackgroundCommand
1568 1574 class described in the book Python Scripting for Computational
1569 1575 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1570 1576 (although ultimately no code from this text was used, as IPython's
1571 1577 system is a separate implementation).
1572 1578
1573 1579 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1574 1580 to control the completion of single/double underscore names
1575 1581 separately. As documented in the example ipytonrc file, the
1576 1582 readline_omit__names variable can now be set to 2, to omit even
1577 1583 single underscore names. Thanks to a patch by Brian Wong
1578 1584 <BrianWong-AT-AirgoNetworks.Com>.
1579 1585 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1580 1586 be autocalled as foo([1]) if foo were callable. A problem for
1581 1587 things which are both callable and implement __getitem__.
1582 1588 (init_readline): Fix autoindentation for win32. Thanks to a patch
1583 1589 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1584 1590
1585 1591 2005-02-12 Fernando Perez <fperez@colorado.edu>
1586 1592
1587 1593 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1588 1594 which I had written long ago to sort out user error messages which
1589 1595 may occur during startup. This seemed like a good idea initially,
1590 1596 but it has proven a disaster in retrospect. I don't want to
1591 1597 change much code for now, so my fix is to set the internal 'debug'
1592 1598 flag to true everywhere, whose only job was precisely to control
1593 1599 this subsystem. This closes issue 28 (as well as avoiding all
1594 1600 sorts of strange hangups which occur from time to time).
1595 1601
1596 1602 2005-02-07 Fernando Perez <fperez@colorado.edu>
1597 1603
1598 1604 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1599 1605 previous call produced a syntax error.
1600 1606
1601 1607 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1602 1608 classes without constructor.
1603 1609
1604 1610 2005-02-06 Fernando Perez <fperez@colorado.edu>
1605 1611
1606 1612 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1607 1613 completions with the results of each matcher, so we return results
1608 1614 to the user from all namespaces. This breaks with ipython
1609 1615 tradition, but I think it's a nicer behavior. Now you get all
1610 1616 possible completions listed, from all possible namespaces (python,
1611 1617 filesystem, magics...) After a request by John Hunter
1612 1618 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1613 1619
1614 1620 2005-02-05 Fernando Perez <fperez@colorado.edu>
1615 1621
1616 1622 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1617 1623 the call had quote characters in it (the quotes were stripped).
1618 1624
1619 1625 2005-01-31 Fernando Perez <fperez@colorado.edu>
1620 1626
1621 1627 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1622 1628 Itpl.itpl() to make the code more robust against psyco
1623 1629 optimizations.
1624 1630
1625 1631 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1626 1632 of causing an exception. Quicker, cleaner.
1627 1633
1628 1634 2005-01-28 Fernando Perez <fperez@colorado.edu>
1629 1635
1630 1636 * scripts/ipython_win_post_install.py (install): hardcode
1631 1637 sys.prefix+'python.exe' as the executable path. It turns out that
1632 1638 during the post-installation run, sys.executable resolves to the
1633 1639 name of the binary installer! I should report this as a distutils
1634 1640 bug, I think. I updated the .10 release with this tiny fix, to
1635 1641 avoid annoying the lists further.
1636 1642
1637 1643 2005-01-27 *** Released version 0.6.10
1638 1644
1639 1645 2005-01-27 Fernando Perez <fperez@colorado.edu>
1640 1646
1641 1647 * IPython/numutils.py (norm): Added 'inf' as optional name for
1642 1648 L-infinity norm, included references to mathworld.com for vector
1643 1649 norm definitions.
1644 1650 (amin/amax): added amin/amax for array min/max. Similar to what
1645 1651 pylab ships with after the recent reorganization of names.
1646 1652 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1647 1653
1648 1654 * ipython.el: committed Alex's recent fixes and improvements.
1649 1655 Tested with python-mode from CVS, and it looks excellent. Since
1650 1656 python-mode hasn't released anything in a while, I'm temporarily
1651 1657 putting a copy of today's CVS (v 4.70) of python-mode in:
1652 1658 http://ipython.scipy.org/tmp/python-mode.el
1653 1659
1654 1660 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1655 1661 sys.executable for the executable name, instead of assuming it's
1656 1662 called 'python.exe' (the post-installer would have produced broken
1657 1663 setups on systems with a differently named python binary).
1658 1664
1659 1665 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1660 1666 references to os.linesep, to make the code more
1661 1667 platform-independent. This is also part of the win32 coloring
1662 1668 fixes.
1663 1669
1664 1670 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1665 1671 lines, which actually cause coloring bugs because the length of
1666 1672 the line is very difficult to correctly compute with embedded
1667 1673 escapes. This was the source of all the coloring problems under
1668 1674 Win32. I think that _finally_, Win32 users have a properly
1669 1675 working ipython in all respects. This would never have happened
1670 1676 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1671 1677
1672 1678 2005-01-26 *** Released version 0.6.9
1673 1679
1674 1680 2005-01-25 Fernando Perez <fperez@colorado.edu>
1675 1681
1676 1682 * setup.py: finally, we have a true Windows installer, thanks to
1677 1683 the excellent work of Viktor Ransmayr
1678 1684 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1679 1685 Windows users. The setup routine is quite a bit cleaner thanks to
1680 1686 this, and the post-install script uses the proper functions to
1681 1687 allow a clean de-installation using the standard Windows Control
1682 1688 Panel.
1683 1689
1684 1690 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1685 1691 environment variable under all OSes (including win32) if
1686 1692 available. This will give consistency to win32 users who have set
1687 1693 this variable for any reason. If os.environ['HOME'] fails, the
1688 1694 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1689 1695
1690 1696 2005-01-24 Fernando Perez <fperez@colorado.edu>
1691 1697
1692 1698 * IPython/numutils.py (empty_like): add empty_like(), similar to
1693 1699 zeros_like() but taking advantage of the new empty() Numeric routine.
1694 1700
1695 1701 2005-01-23 *** Released version 0.6.8
1696 1702
1697 1703 2005-01-22 Fernando Perez <fperez@colorado.edu>
1698 1704
1699 1705 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1700 1706 automatic show() calls. After discussing things with JDH, it
1701 1707 turns out there are too many corner cases where this can go wrong.
1702 1708 It's best not to try to be 'too smart', and simply have ipython
1703 1709 reproduce as much as possible the default behavior of a normal
1704 1710 python shell.
1705 1711
1706 1712 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1707 1713 line-splitting regexp and _prefilter() to avoid calling getattr()
1708 1714 on assignments. This closes
1709 1715 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1710 1716 readline uses getattr(), so a simple <TAB> keypress is still
1711 1717 enough to trigger getattr() calls on an object.
1712 1718
1713 1719 2005-01-21 Fernando Perez <fperez@colorado.edu>
1714 1720
1715 1721 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1716 1722 docstring under pylab so it doesn't mask the original.
1717 1723
1718 1724 2005-01-21 *** Released version 0.6.7
1719 1725
1720 1726 2005-01-21 Fernando Perez <fperez@colorado.edu>
1721 1727
1722 1728 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1723 1729 signal handling for win32 users in multithreaded mode.
1724 1730
1725 1731 2005-01-17 Fernando Perez <fperez@colorado.edu>
1726 1732
1727 1733 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1728 1734 instances with no __init__. After a crash report by Norbert Nemec
1729 1735 <Norbert-AT-nemec-online.de>.
1730 1736
1731 1737 2005-01-14 Fernando Perez <fperez@colorado.edu>
1732 1738
1733 1739 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1734 1740 names for verbose exceptions, when multiple dotted names and the
1735 1741 'parent' object were present on the same line.
1736 1742
1737 1743 2005-01-11 Fernando Perez <fperez@colorado.edu>
1738 1744
1739 1745 * IPython/genutils.py (flag_calls): new utility to trap and flag
1740 1746 calls in functions. I need it to clean up matplotlib support.
1741 1747 Also removed some deprecated code in genutils.
1742 1748
1743 1749 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1744 1750 that matplotlib scripts called with %run, which don't call show()
1745 1751 themselves, still have their plotting windows open.
1746 1752
1747 1753 2005-01-05 Fernando Perez <fperez@colorado.edu>
1748 1754
1749 1755 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1750 1756 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1751 1757
1752 1758 2004-12-19 Fernando Perez <fperez@colorado.edu>
1753 1759
1754 1760 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1755 1761 parent_runcode, which was an eyesore. The same result can be
1756 1762 obtained with Python's regular superclass mechanisms.
1757 1763
1758 1764 2004-12-17 Fernando Perez <fperez@colorado.edu>
1759 1765
1760 1766 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1761 1767 reported by Prabhu.
1762 1768 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1763 1769 sys.stderr) instead of explicitly calling sys.stderr. This helps
1764 1770 maintain our I/O abstractions clean, for future GUI embeddings.
1765 1771
1766 1772 * IPython/genutils.py (info): added new utility for sys.stderr
1767 1773 unified info message handling (thin wrapper around warn()).
1768 1774
1769 1775 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1770 1776 composite (dotted) names on verbose exceptions.
1771 1777 (VerboseTB.nullrepr): harden against another kind of errors which
1772 1778 Python's inspect module can trigger, and which were crashing
1773 1779 IPython. Thanks to a report by Marco Lombardi
1774 1780 <mlombard-AT-ma010192.hq.eso.org>.
1775 1781
1776 1782 2004-12-13 *** Released version 0.6.6
1777 1783
1778 1784 2004-12-12 Fernando Perez <fperez@colorado.edu>
1779 1785
1780 1786 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1781 1787 generated by pygtk upon initialization if it was built without
1782 1788 threads (for matplotlib users). After a crash reported by
1783 1789 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1784 1790
1785 1791 * IPython/ipmaker.py (make_IPython): fix small bug in the
1786 1792 import_some parameter for multiple imports.
1787 1793
1788 1794 * IPython/iplib.py (ipmagic): simplified the interface of
1789 1795 ipmagic() to take a single string argument, just as it would be
1790 1796 typed at the IPython cmd line.
1791 1797 (ipalias): Added new ipalias() with an interface identical to
1792 1798 ipmagic(). This completes exposing a pure python interface to the
1793 1799 alias and magic system, which can be used in loops or more complex
1794 1800 code where IPython's automatic line mangling is not active.
1795 1801
1796 1802 * IPython/genutils.py (timing): changed interface of timing to
1797 1803 simply run code once, which is the most common case. timings()
1798 1804 remains unchanged, for the cases where you want multiple runs.
1799 1805
1800 1806 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1801 1807 bug where Python2.2 crashes with exec'ing code which does not end
1802 1808 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1803 1809 before.
1804 1810
1805 1811 2004-12-10 Fernando Perez <fperez@colorado.edu>
1806 1812
1807 1813 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1808 1814 -t to -T, to accomodate the new -t flag in %run (the %run and
1809 1815 %prun options are kind of intermixed, and it's not easy to change
1810 1816 this with the limitations of python's getopt).
1811 1817
1812 1818 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1813 1819 the execution of scripts. It's not as fine-tuned as timeit.py,
1814 1820 but it works from inside ipython (and under 2.2, which lacks
1815 1821 timeit.py). Optionally a number of runs > 1 can be given for
1816 1822 timing very short-running code.
1817 1823
1818 1824 * IPython/genutils.py (uniq_stable): new routine which returns a
1819 1825 list of unique elements in any iterable, but in stable order of
1820 1826 appearance. I needed this for the ultraTB fixes, and it's a handy
1821 1827 utility.
1822 1828
1823 1829 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1824 1830 dotted names in Verbose exceptions. This had been broken since
1825 1831 the very start, now x.y will properly be printed in a Verbose
1826 1832 traceback, instead of x being shown and y appearing always as an
1827 1833 'undefined global'. Getting this to work was a bit tricky,
1828 1834 because by default python tokenizers are stateless. Saved by
1829 1835 python's ability to easily add a bit of state to an arbitrary
1830 1836 function (without needing to build a full-blown callable object).
1831 1837
1832 1838 Also big cleanup of this code, which had horrendous runtime
1833 1839 lookups of zillions of attributes for colorization. Moved all
1834 1840 this code into a few templates, which make it cleaner and quicker.
1835 1841
1836 1842 Printout quality was also improved for Verbose exceptions: one
1837 1843 variable per line, and memory addresses are printed (this can be
1838 1844 quite handy in nasty debugging situations, which is what Verbose
1839 1845 is for).
1840 1846
1841 1847 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1842 1848 the command line as scripts to be loaded by embedded instances.
1843 1849 Doing so has the potential for an infinite recursion if there are
1844 1850 exceptions thrown in the process. This fixes a strange crash
1845 1851 reported by Philippe MULLER <muller-AT-irit.fr>.
1846 1852
1847 1853 2004-12-09 Fernando Perez <fperez@colorado.edu>
1848 1854
1849 1855 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1850 1856 to reflect new names in matplotlib, which now expose the
1851 1857 matlab-compatible interface via a pylab module instead of the
1852 1858 'matlab' name. The new code is backwards compatible, so users of
1853 1859 all matplotlib versions are OK. Patch by J. Hunter.
1854 1860
1855 1861 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1856 1862 of __init__ docstrings for instances (class docstrings are already
1857 1863 automatically printed). Instances with customized docstrings
1858 1864 (indep. of the class) are also recognized and all 3 separate
1859 1865 docstrings are printed (instance, class, constructor). After some
1860 1866 comments/suggestions by J. Hunter.
1861 1867
1862 1868 2004-12-05 Fernando Perez <fperez@colorado.edu>
1863 1869
1864 1870 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1865 1871 warnings when tab-completion fails and triggers an exception.
1866 1872
1867 1873 2004-12-03 Fernando Perez <fperez@colorado.edu>
1868 1874
1869 1875 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1870 1876 be triggered when using 'run -p'. An incorrect option flag was
1871 1877 being set ('d' instead of 'D').
1872 1878 (manpage): fix missing escaped \- sign.
1873 1879
1874 1880 2004-11-30 *** Released version 0.6.5
1875 1881
1876 1882 2004-11-30 Fernando Perez <fperez@colorado.edu>
1877 1883
1878 1884 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1879 1885 setting with -d option.
1880 1886
1881 1887 * setup.py (docfiles): Fix problem where the doc glob I was using
1882 1888 was COMPLETELY BROKEN. It was giving the right files by pure
1883 1889 accident, but failed once I tried to include ipython.el. Note:
1884 1890 glob() does NOT allow you to do exclusion on multiple endings!
1885 1891
1886 1892 2004-11-29 Fernando Perez <fperez@colorado.edu>
1887 1893
1888 1894 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1889 1895 the manpage as the source. Better formatting & consistency.
1890 1896
1891 1897 * IPython/Magic.py (magic_run): Added new -d option, to run
1892 1898 scripts under the control of the python pdb debugger. Note that
1893 1899 this required changing the %prun option -d to -D, to avoid a clash
1894 1900 (since %run must pass options to %prun, and getopt is too dumb to
1895 1901 handle options with string values with embedded spaces). Thanks
1896 1902 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1897 1903 (magic_who_ls): added type matching to %who and %whos, so that one
1898 1904 can filter their output to only include variables of certain
1899 1905 types. Another suggestion by Matthew.
1900 1906 (magic_whos): Added memory summaries in kb and Mb for arrays.
1901 1907 (magic_who): Improve formatting (break lines every 9 vars).
1902 1908
1903 1909 2004-11-28 Fernando Perez <fperez@colorado.edu>
1904 1910
1905 1911 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1906 1912 cache when empty lines were present.
1907 1913
1908 1914 2004-11-24 Fernando Perez <fperez@colorado.edu>
1909 1915
1910 1916 * IPython/usage.py (__doc__): document the re-activated threading
1911 1917 options for WX and GTK.
1912 1918
1913 1919 2004-11-23 Fernando Perez <fperez@colorado.edu>
1914 1920
1915 1921 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1916 1922 the -wthread and -gthread options, along with a new -tk one to try
1917 1923 and coordinate Tk threading with wx/gtk. The tk support is very
1918 1924 platform dependent, since it seems to require Tcl and Tk to be
1919 1925 built with threads (Fedora1/2 appears NOT to have it, but in
1920 1926 Prabhu's Debian boxes it works OK). But even with some Tk
1921 1927 limitations, this is a great improvement.
1922 1928
1923 1929 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1924 1930 info in user prompts. Patch by Prabhu.
1925 1931
1926 1932 2004-11-18 Fernando Perez <fperez@colorado.edu>
1927 1933
1928 1934 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1929 1935 EOFErrors and bail, to avoid infinite loops if a non-terminating
1930 1936 file is fed into ipython. Patch submitted in issue 19 by user,
1931 1937 many thanks.
1932 1938
1933 1939 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1934 1940 autoquote/parens in continuation prompts, which can cause lots of
1935 1941 problems. Closes roundup issue 20.
1936 1942
1937 1943 2004-11-17 Fernando Perez <fperez@colorado.edu>
1938 1944
1939 1945 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1940 1946 reported as debian bug #280505. I'm not sure my local changelog
1941 1947 entry has the proper debian format (Jack?).
1942 1948
1943 1949 2004-11-08 *** Released version 0.6.4
1944 1950
1945 1951 2004-11-08 Fernando Perez <fperez@colorado.edu>
1946 1952
1947 1953 * IPython/iplib.py (init_readline): Fix exit message for Windows
1948 1954 when readline is active. Thanks to a report by Eric Jones
1949 1955 <eric-AT-enthought.com>.
1950 1956
1951 1957 2004-11-07 Fernando Perez <fperez@colorado.edu>
1952 1958
1953 1959 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1954 1960 sometimes seen by win2k/cygwin users.
1955 1961
1956 1962 2004-11-06 Fernando Perez <fperez@colorado.edu>
1957 1963
1958 1964 * IPython/iplib.py (interact): Change the handling of %Exit from
1959 1965 trying to propagate a SystemExit to an internal ipython flag.
1960 1966 This is less elegant than using Python's exception mechanism, but
1961 1967 I can't get that to work reliably with threads, so under -pylab
1962 1968 %Exit was hanging IPython. Cross-thread exception handling is
1963 1969 really a bitch. Thaks to a bug report by Stephen Walton
1964 1970 <stephen.walton-AT-csun.edu>.
1965 1971
1966 1972 2004-11-04 Fernando Perez <fperez@colorado.edu>
1967 1973
1968 1974 * IPython/iplib.py (raw_input_original): store a pointer to the
1969 1975 true raw_input to harden against code which can modify it
1970 1976 (wx.py.PyShell does this and would otherwise crash ipython).
1971 1977 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1972 1978
1973 1979 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1974 1980 Ctrl-C problem, which does not mess up the input line.
1975 1981
1976 1982 2004-11-03 Fernando Perez <fperez@colorado.edu>
1977 1983
1978 1984 * IPython/Release.py: Changed licensing to BSD, in all files.
1979 1985 (name): lowercase name for tarball/RPM release.
1980 1986
1981 1987 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1982 1988 use throughout ipython.
1983 1989
1984 1990 * IPython/Magic.py (Magic._ofind): Switch to using the new
1985 1991 OInspect.getdoc() function.
1986 1992
1987 1993 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1988 1994 of the line currently being canceled via Ctrl-C. It's extremely
1989 1995 ugly, but I don't know how to do it better (the problem is one of
1990 1996 handling cross-thread exceptions).
1991 1997
1992 1998 2004-10-28 Fernando Perez <fperez@colorado.edu>
1993 1999
1994 2000 * IPython/Shell.py (signal_handler): add signal handlers to trap
1995 2001 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1996 2002 report by Francesc Alted.
1997 2003
1998 2004 2004-10-21 Fernando Perez <fperez@colorado.edu>
1999 2005
2000 2006 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2001 2007 to % for pysh syntax extensions.
2002 2008
2003 2009 2004-10-09 Fernando Perez <fperez@colorado.edu>
2004 2010
2005 2011 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2006 2012 arrays to print a more useful summary, without calling str(arr).
2007 2013 This avoids the problem of extremely lengthy computations which
2008 2014 occur if arr is large, and appear to the user as a system lockup
2009 2015 with 100% cpu activity. After a suggestion by Kristian Sandberg
2010 2016 <Kristian.Sandberg@colorado.edu>.
2011 2017 (Magic.__init__): fix bug in global magic escapes not being
2012 2018 correctly set.
2013 2019
2014 2020 2004-10-08 Fernando Perez <fperez@colorado.edu>
2015 2021
2016 2022 * IPython/Magic.py (__license__): change to absolute imports of
2017 2023 ipython's own internal packages, to start adapting to the absolute
2018 2024 import requirement of PEP-328.
2019 2025
2020 2026 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2021 2027 files, and standardize author/license marks through the Release
2022 2028 module instead of having per/file stuff (except for files with
2023 2029 particular licenses, like the MIT/PSF-licensed codes).
2024 2030
2025 2031 * IPython/Debugger.py: remove dead code for python 2.1
2026 2032
2027 2033 2004-10-04 Fernando Perez <fperez@colorado.edu>
2028 2034
2029 2035 * IPython/iplib.py (ipmagic): New function for accessing magics
2030 2036 via a normal python function call.
2031 2037
2032 2038 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2033 2039 from '@' to '%', to accomodate the new @decorator syntax of python
2034 2040 2.4.
2035 2041
2036 2042 2004-09-29 Fernando Perez <fperez@colorado.edu>
2037 2043
2038 2044 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2039 2045 matplotlib.use to prevent running scripts which try to switch
2040 2046 interactive backends from within ipython. This will just crash
2041 2047 the python interpreter, so we can't allow it (but a detailed error
2042 2048 is given to the user).
2043 2049
2044 2050 2004-09-28 Fernando Perez <fperez@colorado.edu>
2045 2051
2046 2052 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2047 2053 matplotlib-related fixes so that using @run with non-matplotlib
2048 2054 scripts doesn't pop up spurious plot windows. This requires
2049 2055 matplotlib >= 0.63, where I had to make some changes as well.
2050 2056
2051 2057 * IPython/ipmaker.py (make_IPython): update version requirement to
2052 2058 python 2.2.
2053 2059
2054 2060 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2055 2061 banner arg for embedded customization.
2056 2062
2057 2063 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2058 2064 explicit uses of __IP as the IPython's instance name. Now things
2059 2065 are properly handled via the shell.name value. The actual code
2060 2066 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2061 2067 is much better than before. I'll clean things completely when the
2062 2068 magic stuff gets a real overhaul.
2063 2069
2064 2070 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2065 2071 minor changes to debian dir.
2066 2072
2067 2073 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2068 2074 pointer to the shell itself in the interactive namespace even when
2069 2075 a user-supplied dict is provided. This is needed for embedding
2070 2076 purposes (found by tests with Michel Sanner).
2071 2077
2072 2078 2004-09-27 Fernando Perez <fperez@colorado.edu>
2073 2079
2074 2080 * IPython/UserConfig/ipythonrc: remove []{} from
2075 2081 readline_remove_delims, so that things like [modname.<TAB> do
2076 2082 proper completion. This disables [].TAB, but that's a less common
2077 2083 case than module names in list comprehensions, for example.
2078 2084 Thanks to a report by Andrea Riciputi.
2079 2085
2080 2086 2004-09-09 Fernando Perez <fperez@colorado.edu>
2081 2087
2082 2088 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2083 2089 blocking problems in win32 and osx. Fix by John.
2084 2090
2085 2091 2004-09-08 Fernando Perez <fperez@colorado.edu>
2086 2092
2087 2093 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2088 2094 for Win32 and OSX. Fix by John Hunter.
2089 2095
2090 2096 2004-08-30 *** Released version 0.6.3
2091 2097
2092 2098 2004-08-30 Fernando Perez <fperez@colorado.edu>
2093 2099
2094 2100 * setup.py (isfile): Add manpages to list of dependent files to be
2095 2101 updated.
2096 2102
2097 2103 2004-08-27 Fernando Perez <fperez@colorado.edu>
2098 2104
2099 2105 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2100 2106 for now. They don't really work with standalone WX/GTK code
2101 2107 (though matplotlib IS working fine with both of those backends).
2102 2108 This will neeed much more testing. I disabled most things with
2103 2109 comments, so turning it back on later should be pretty easy.
2104 2110
2105 2111 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2106 2112 autocalling of expressions like r'foo', by modifying the line
2107 2113 split regexp. Closes
2108 2114 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2109 2115 Riley <ipythonbugs-AT-sabi.net>.
2110 2116 (InteractiveShell.mainloop): honor --nobanner with banner
2111 2117 extensions.
2112 2118
2113 2119 * IPython/Shell.py: Significant refactoring of all classes, so
2114 2120 that we can really support ALL matplotlib backends and threading
2115 2121 models (John spotted a bug with Tk which required this). Now we
2116 2122 should support single-threaded, WX-threads and GTK-threads, both
2117 2123 for generic code and for matplotlib.
2118 2124
2119 2125 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2120 2126 -pylab, to simplify things for users. Will also remove the pylab
2121 2127 profile, since now all of matplotlib configuration is directly
2122 2128 handled here. This also reduces startup time.
2123 2129
2124 2130 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2125 2131 shell wasn't being correctly called. Also in IPShellWX.
2126 2132
2127 2133 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2128 2134 fine-tune banner.
2129 2135
2130 2136 * IPython/numutils.py (spike): Deprecate these spike functions,
2131 2137 delete (long deprecated) gnuplot_exec handler.
2132 2138
2133 2139 2004-08-26 Fernando Perez <fperez@colorado.edu>
2134 2140
2135 2141 * ipython.1: Update for threading options, plus some others which
2136 2142 were missing.
2137 2143
2138 2144 * IPython/ipmaker.py (__call__): Added -wthread option for
2139 2145 wxpython thread handling. Make sure threading options are only
2140 2146 valid at the command line.
2141 2147
2142 2148 * scripts/ipython: moved shell selection into a factory function
2143 2149 in Shell.py, to keep the starter script to a minimum.
2144 2150
2145 2151 2004-08-25 Fernando Perez <fperez@colorado.edu>
2146 2152
2147 2153 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2148 2154 John. Along with some recent changes he made to matplotlib, the
2149 2155 next versions of both systems should work very well together.
2150 2156
2151 2157 2004-08-24 Fernando Perez <fperez@colorado.edu>
2152 2158
2153 2159 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2154 2160 tried to switch the profiling to using hotshot, but I'm getting
2155 2161 strange errors from prof.runctx() there. I may be misreading the
2156 2162 docs, but it looks weird. For now the profiling code will
2157 2163 continue to use the standard profiler.
2158 2164
2159 2165 2004-08-23 Fernando Perez <fperez@colorado.edu>
2160 2166
2161 2167 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2162 2168 threaded shell, by John Hunter. It's not quite ready yet, but
2163 2169 close.
2164 2170
2165 2171 2004-08-22 Fernando Perez <fperez@colorado.edu>
2166 2172
2167 2173 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2168 2174 in Magic and ultraTB.
2169 2175
2170 2176 * ipython.1: document threading options in manpage.
2171 2177
2172 2178 * scripts/ipython: Changed name of -thread option to -gthread,
2173 2179 since this is GTK specific. I want to leave the door open for a
2174 2180 -wthread option for WX, which will most likely be necessary. This
2175 2181 change affects usage and ipmaker as well.
2176 2182
2177 2183 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2178 2184 handle the matplotlib shell issues. Code by John Hunter
2179 2185 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2180 2186 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2181 2187 broken (and disabled for end users) for now, but it puts the
2182 2188 infrastructure in place.
2183 2189
2184 2190 2004-08-21 Fernando Perez <fperez@colorado.edu>
2185 2191
2186 2192 * ipythonrc-pylab: Add matplotlib support.
2187 2193
2188 2194 * matplotlib_config.py: new files for matplotlib support, part of
2189 2195 the pylab profile.
2190 2196
2191 2197 * IPython/usage.py (__doc__): documented the threading options.
2192 2198
2193 2199 2004-08-20 Fernando Perez <fperez@colorado.edu>
2194 2200
2195 2201 * ipython: Modified the main calling routine to handle the -thread
2196 2202 and -mpthread options. This needs to be done as a top-level hack,
2197 2203 because it determines which class to instantiate for IPython
2198 2204 itself.
2199 2205
2200 2206 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2201 2207 classes to support multithreaded GTK operation without blocking,
2202 2208 and matplotlib with all backends. This is a lot of still very
2203 2209 experimental code, and threads are tricky. So it may still have a
2204 2210 few rough edges... This code owes a lot to
2205 2211 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2206 2212 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2207 2213 to John Hunter for all the matplotlib work.
2208 2214
2209 2215 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2210 2216 options for gtk thread and matplotlib support.
2211 2217
2212 2218 2004-08-16 Fernando Perez <fperez@colorado.edu>
2213 2219
2214 2220 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2215 2221 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2216 2222 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2217 2223
2218 2224 2004-08-11 Fernando Perez <fperez@colorado.edu>
2219 2225
2220 2226 * setup.py (isfile): Fix build so documentation gets updated for
2221 2227 rpms (it was only done for .tgz builds).
2222 2228
2223 2229 2004-08-10 Fernando Perez <fperez@colorado.edu>
2224 2230
2225 2231 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2226 2232
2227 2233 * iplib.py : Silence syntax error exceptions in tab-completion.
2228 2234
2229 2235 2004-08-05 Fernando Perez <fperez@colorado.edu>
2230 2236
2231 2237 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2232 2238 'color off' mark for continuation prompts. This was causing long
2233 2239 continuation lines to mis-wrap.
2234 2240
2235 2241 2004-08-01 Fernando Perez <fperez@colorado.edu>
2236 2242
2237 2243 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2238 2244 for building ipython to be a parameter. All this is necessary
2239 2245 right now to have a multithreaded version, but this insane
2240 2246 non-design will be cleaned up soon. For now, it's a hack that
2241 2247 works.
2242 2248
2243 2249 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2244 2250 args in various places. No bugs so far, but it's a dangerous
2245 2251 practice.
2246 2252
2247 2253 2004-07-31 Fernando Perez <fperez@colorado.edu>
2248 2254
2249 2255 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2250 2256 fix completion of files with dots in their names under most
2251 2257 profiles (pysh was OK because the completion order is different).
2252 2258
2253 2259 2004-07-27 Fernando Perez <fperez@colorado.edu>
2254 2260
2255 2261 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2256 2262 keywords manually, b/c the one in keyword.py was removed in python
2257 2263 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2258 2264 This is NOT a bug under python 2.3 and earlier.
2259 2265
2260 2266 2004-07-26 Fernando Perez <fperez@colorado.edu>
2261 2267
2262 2268 * IPython/ultraTB.py (VerboseTB.text): Add another
2263 2269 linecache.checkcache() call to try to prevent inspect.py from
2264 2270 crashing under python 2.3. I think this fixes
2265 2271 http://www.scipy.net/roundup/ipython/issue17.
2266 2272
2267 2273 2004-07-26 *** Released version 0.6.2
2268 2274
2269 2275 2004-07-26 Fernando Perez <fperez@colorado.edu>
2270 2276
2271 2277 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2272 2278 fail for any number.
2273 2279 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2274 2280 empty bookmarks.
2275 2281
2276 2282 2004-07-26 *** Released version 0.6.1
2277 2283
2278 2284 2004-07-26 Fernando Perez <fperez@colorado.edu>
2279 2285
2280 2286 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2281 2287
2282 2288 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2283 2289 escaping '()[]{}' in filenames.
2284 2290
2285 2291 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2286 2292 Python 2.2 users who lack a proper shlex.split.
2287 2293
2288 2294 2004-07-19 Fernando Perez <fperez@colorado.edu>
2289 2295
2290 2296 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2291 2297 for reading readline's init file. I follow the normal chain:
2292 2298 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2293 2299 report by Mike Heeter. This closes
2294 2300 http://www.scipy.net/roundup/ipython/issue16.
2295 2301
2296 2302 2004-07-18 Fernando Perez <fperez@colorado.edu>
2297 2303
2298 2304 * IPython/iplib.py (__init__): Add better handling of '\' under
2299 2305 Win32 for filenames. After a patch by Ville.
2300 2306
2301 2307 2004-07-17 Fernando Perez <fperez@colorado.edu>
2302 2308
2303 2309 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2304 2310 autocalling would be triggered for 'foo is bar' if foo is
2305 2311 callable. I also cleaned up the autocall detection code to use a
2306 2312 regexp, which is faster. Bug reported by Alexander Schmolck.
2307 2313
2308 2314 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2309 2315 '?' in them would confuse the help system. Reported by Alex
2310 2316 Schmolck.
2311 2317
2312 2318 2004-07-16 Fernando Perez <fperez@colorado.edu>
2313 2319
2314 2320 * IPython/GnuplotInteractive.py (__all__): added plot2.
2315 2321
2316 2322 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2317 2323 plotting dictionaries, lists or tuples of 1d arrays.
2318 2324
2319 2325 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2320 2326 optimizations.
2321 2327
2322 2328 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2323 2329 the information which was there from Janko's original IPP code:
2324 2330
2325 2331 03.05.99 20:53 porto.ifm.uni-kiel.de
2326 2332 --Started changelog.
2327 2333 --make clear do what it say it does
2328 2334 --added pretty output of lines from inputcache
2329 2335 --Made Logger a mixin class, simplifies handling of switches
2330 2336 --Added own completer class. .string<TAB> expands to last history
2331 2337 line which starts with string. The new expansion is also present
2332 2338 with Ctrl-r from the readline library. But this shows, who this
2333 2339 can be done for other cases.
2334 2340 --Added convention that all shell functions should accept a
2335 2341 parameter_string This opens the door for different behaviour for
2336 2342 each function. @cd is a good example of this.
2337 2343
2338 2344 04.05.99 12:12 porto.ifm.uni-kiel.de
2339 2345 --added logfile rotation
2340 2346 --added new mainloop method which freezes first the namespace
2341 2347
2342 2348 07.05.99 21:24 porto.ifm.uni-kiel.de
2343 2349 --added the docreader classes. Now there is a help system.
2344 2350 -This is only a first try. Currently it's not easy to put new
2345 2351 stuff in the indices. But this is the way to go. Info would be
2346 2352 better, but HTML is every where and not everybody has an info
2347 2353 system installed and it's not so easy to change html-docs to info.
2348 2354 --added global logfile option
2349 2355 --there is now a hook for object inspection method pinfo needs to
2350 2356 be provided for this. Can be reached by two '??'.
2351 2357
2352 2358 08.05.99 20:51 porto.ifm.uni-kiel.de
2353 2359 --added a README
2354 2360 --bug in rc file. Something has changed so functions in the rc
2355 2361 file need to reference the shell and not self. Not clear if it's a
2356 2362 bug or feature.
2357 2363 --changed rc file for new behavior
2358 2364
2359 2365 2004-07-15 Fernando Perez <fperez@colorado.edu>
2360 2366
2361 2367 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2362 2368 cache was falling out of sync in bizarre manners when multi-line
2363 2369 input was present. Minor optimizations and cleanup.
2364 2370
2365 2371 (Logger): Remove old Changelog info for cleanup. This is the
2366 2372 information which was there from Janko's original code:
2367 2373
2368 2374 Changes to Logger: - made the default log filename a parameter
2369 2375
2370 2376 - put a check for lines beginning with !@? in log(). Needed
2371 2377 (even if the handlers properly log their lines) for mid-session
2372 2378 logging activation to work properly. Without this, lines logged
2373 2379 in mid session, which get read from the cache, would end up
2374 2380 'bare' (with !@? in the open) in the log. Now they are caught
2375 2381 and prepended with a #.
2376 2382
2377 2383 * IPython/iplib.py (InteractiveShell.init_readline): added check
2378 2384 in case MagicCompleter fails to be defined, so we don't crash.
2379 2385
2380 2386 2004-07-13 Fernando Perez <fperez@colorado.edu>
2381 2387
2382 2388 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2383 2389 of EPS if the requested filename ends in '.eps'.
2384 2390
2385 2391 2004-07-04 Fernando Perez <fperez@colorado.edu>
2386 2392
2387 2393 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2388 2394 escaping of quotes when calling the shell.
2389 2395
2390 2396 2004-07-02 Fernando Perez <fperez@colorado.edu>
2391 2397
2392 2398 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2393 2399 gettext not working because we were clobbering '_'. Fixes
2394 2400 http://www.scipy.net/roundup/ipython/issue6.
2395 2401
2396 2402 2004-07-01 Fernando Perez <fperez@colorado.edu>
2397 2403
2398 2404 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2399 2405 into @cd. Patch by Ville.
2400 2406
2401 2407 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2402 2408 new function to store things after ipmaker runs. Patch by Ville.
2403 2409 Eventually this will go away once ipmaker is removed and the class
2404 2410 gets cleaned up, but for now it's ok. Key functionality here is
2405 2411 the addition of the persistent storage mechanism, a dict for
2406 2412 keeping data across sessions (for now just bookmarks, but more can
2407 2413 be implemented later).
2408 2414
2409 2415 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2410 2416 persistent across sections. Patch by Ville, I modified it
2411 2417 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2412 2418 added a '-l' option to list all bookmarks.
2413 2419
2414 2420 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2415 2421 center for cleanup. Registered with atexit.register(). I moved
2416 2422 here the old exit_cleanup(). After a patch by Ville.
2417 2423
2418 2424 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2419 2425 characters in the hacked shlex_split for python 2.2.
2420 2426
2421 2427 * IPython/iplib.py (file_matches): more fixes to filenames with
2422 2428 whitespace in them. It's not perfect, but limitations in python's
2423 2429 readline make it impossible to go further.
2424 2430
2425 2431 2004-06-29 Fernando Perez <fperez@colorado.edu>
2426 2432
2427 2433 * IPython/iplib.py (file_matches): escape whitespace correctly in
2428 2434 filename completions. Bug reported by Ville.
2429 2435
2430 2436 2004-06-28 Fernando Perez <fperez@colorado.edu>
2431 2437
2432 2438 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2433 2439 the history file will be called 'history-PROFNAME' (or just
2434 2440 'history' if no profile is loaded). I was getting annoyed at
2435 2441 getting my Numerical work history clobbered by pysh sessions.
2436 2442
2437 2443 * IPython/iplib.py (InteractiveShell.__init__): Internal
2438 2444 getoutputerror() function so that we can honor the system_verbose
2439 2445 flag for _all_ system calls. I also added escaping of #
2440 2446 characters here to avoid confusing Itpl.
2441 2447
2442 2448 * IPython/Magic.py (shlex_split): removed call to shell in
2443 2449 parse_options and replaced it with shlex.split(). The annoying
2444 2450 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2445 2451 to backport it from 2.3, with several frail hacks (the shlex
2446 2452 module is rather limited in 2.2). Thanks to a suggestion by Ville
2447 2453 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2448 2454 problem.
2449 2455
2450 2456 (Magic.magic_system_verbose): new toggle to print the actual
2451 2457 system calls made by ipython. Mainly for debugging purposes.
2452 2458
2453 2459 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2454 2460 doesn't support persistence. Reported (and fix suggested) by
2455 2461 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2456 2462
2457 2463 2004-06-26 Fernando Perez <fperez@colorado.edu>
2458 2464
2459 2465 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2460 2466 continue prompts.
2461 2467
2462 2468 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2463 2469 function (basically a big docstring) and a few more things here to
2464 2470 speedup startup. pysh.py is now very lightweight. We want because
2465 2471 it gets execfile'd, while InterpreterExec gets imported, so
2466 2472 byte-compilation saves time.
2467 2473
2468 2474 2004-06-25 Fernando Perez <fperez@colorado.edu>
2469 2475
2470 2476 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2471 2477 -NUM', which was recently broken.
2472 2478
2473 2479 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2474 2480 in multi-line input (but not !!, which doesn't make sense there).
2475 2481
2476 2482 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2477 2483 It's just too useful, and people can turn it off in the less
2478 2484 common cases where it's a problem.
2479 2485
2480 2486 2004-06-24 Fernando Perez <fperez@colorado.edu>
2481 2487
2482 2488 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2483 2489 special syntaxes (like alias calling) is now allied in multi-line
2484 2490 input. This is still _very_ experimental, but it's necessary for
2485 2491 efficient shell usage combining python looping syntax with system
2486 2492 calls. For now it's restricted to aliases, I don't think it
2487 2493 really even makes sense to have this for magics.
2488 2494
2489 2495 2004-06-23 Fernando Perez <fperez@colorado.edu>
2490 2496
2491 2497 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2492 2498 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2493 2499
2494 2500 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2495 2501 extensions under Windows (after code sent by Gary Bishop). The
2496 2502 extensions considered 'executable' are stored in IPython's rc
2497 2503 structure as win_exec_ext.
2498 2504
2499 2505 * IPython/genutils.py (shell): new function, like system() but
2500 2506 without return value. Very useful for interactive shell work.
2501 2507
2502 2508 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2503 2509 delete aliases.
2504 2510
2505 2511 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2506 2512 sure that the alias table doesn't contain python keywords.
2507 2513
2508 2514 2004-06-21 Fernando Perez <fperez@colorado.edu>
2509 2515
2510 2516 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2511 2517 non-existent items are found in $PATH. Reported by Thorsten.
2512 2518
2513 2519 2004-06-20 Fernando Perez <fperez@colorado.edu>
2514 2520
2515 2521 * IPython/iplib.py (complete): modified the completer so that the
2516 2522 order of priorities can be easily changed at runtime.
2517 2523
2518 2524 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2519 2525 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2520 2526
2521 2527 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2522 2528 expand Python variables prepended with $ in all system calls. The
2523 2529 same was done to InteractiveShell.handle_shell_escape. Now all
2524 2530 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2525 2531 expansion of python variables and expressions according to the
2526 2532 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2527 2533
2528 2534 Though PEP-215 has been rejected, a similar (but simpler) one
2529 2535 seems like it will go into Python 2.4, PEP-292 -
2530 2536 http://www.python.org/peps/pep-0292.html.
2531 2537
2532 2538 I'll keep the full syntax of PEP-215, since IPython has since the
2533 2539 start used Ka-Ping Yee's reference implementation discussed there
2534 2540 (Itpl), and I actually like the powerful semantics it offers.
2535 2541
2536 2542 In order to access normal shell variables, the $ has to be escaped
2537 2543 via an extra $. For example:
2538 2544
2539 2545 In [7]: PATH='a python variable'
2540 2546
2541 2547 In [8]: !echo $PATH
2542 2548 a python variable
2543 2549
2544 2550 In [9]: !echo $$PATH
2545 2551 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2546 2552
2547 2553 (Magic.parse_options): escape $ so the shell doesn't evaluate
2548 2554 things prematurely.
2549 2555
2550 2556 * IPython/iplib.py (InteractiveShell.call_alias): added the
2551 2557 ability for aliases to expand python variables via $.
2552 2558
2553 2559 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2554 2560 system, now there's a @rehash/@rehashx pair of magics. These work
2555 2561 like the csh rehash command, and can be invoked at any time. They
2556 2562 build a table of aliases to everything in the user's $PATH
2557 2563 (@rehash uses everything, @rehashx is slower but only adds
2558 2564 executable files). With this, the pysh.py-based shell profile can
2559 2565 now simply call rehash upon startup, and full access to all
2560 2566 programs in the user's path is obtained.
2561 2567
2562 2568 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2563 2569 functionality is now fully in place. I removed the old dynamic
2564 2570 code generation based approach, in favor of a much lighter one
2565 2571 based on a simple dict. The advantage is that this allows me to
2566 2572 now have thousands of aliases with negligible cost (unthinkable
2567 2573 with the old system).
2568 2574
2569 2575 2004-06-19 Fernando Perez <fperez@colorado.edu>
2570 2576
2571 2577 * IPython/iplib.py (__init__): extended MagicCompleter class to
2572 2578 also complete (last in priority) on user aliases.
2573 2579
2574 2580 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2575 2581 call to eval.
2576 2582 (ItplNS.__init__): Added a new class which functions like Itpl,
2577 2583 but allows configuring the namespace for the evaluation to occur
2578 2584 in.
2579 2585
2580 2586 2004-06-18 Fernando Perez <fperez@colorado.edu>
2581 2587
2582 2588 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2583 2589 better message when 'exit' or 'quit' are typed (a common newbie
2584 2590 confusion).
2585 2591
2586 2592 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2587 2593 check for Windows users.
2588 2594
2589 2595 * IPython/iplib.py (InteractiveShell.user_setup): removed
2590 2596 disabling of colors for Windows. I'll test at runtime and issue a
2591 2597 warning if Gary's readline isn't found, as to nudge users to
2592 2598 download it.
2593 2599
2594 2600 2004-06-16 Fernando Perez <fperez@colorado.edu>
2595 2601
2596 2602 * IPython/genutils.py (Stream.__init__): changed to print errors
2597 2603 to sys.stderr. I had a circular dependency here. Now it's
2598 2604 possible to run ipython as IDLE's shell (consider this pre-alpha,
2599 2605 since true stdout things end up in the starting terminal instead
2600 2606 of IDLE's out).
2601 2607
2602 2608 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2603 2609 users who haven't # updated their prompt_in2 definitions. Remove
2604 2610 eventually.
2605 2611 (multiple_replace): added credit to original ASPN recipe.
2606 2612
2607 2613 2004-06-15 Fernando Perez <fperez@colorado.edu>
2608 2614
2609 2615 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2610 2616 list of auto-defined aliases.
2611 2617
2612 2618 2004-06-13 Fernando Perez <fperez@colorado.edu>
2613 2619
2614 2620 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2615 2621 install was really requested (so setup.py can be used for other
2616 2622 things under Windows).
2617 2623
2618 2624 2004-06-10 Fernando Perez <fperez@colorado.edu>
2619 2625
2620 2626 * IPython/Logger.py (Logger.create_log): Manually remove any old
2621 2627 backup, since os.remove may fail under Windows. Fixes bug
2622 2628 reported by Thorsten.
2623 2629
2624 2630 2004-06-09 Fernando Perez <fperez@colorado.edu>
2625 2631
2626 2632 * examples/example-embed.py: fixed all references to %n (replaced
2627 2633 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2628 2634 for all examples and the manual as well.
2629 2635
2630 2636 2004-06-08 Fernando Perez <fperez@colorado.edu>
2631 2637
2632 2638 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2633 2639 alignment and color management. All 3 prompt subsystems now
2634 2640 inherit from BasePrompt.
2635 2641
2636 2642 * tools/release: updates for windows installer build and tag rpms
2637 2643 with python version (since paths are fixed).
2638 2644
2639 2645 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2640 2646 which will become eventually obsolete. Also fixed the default
2641 2647 prompt_in2 to use \D, so at least new users start with the correct
2642 2648 defaults.
2643 2649 WARNING: Users with existing ipythonrc files will need to apply
2644 2650 this fix manually!
2645 2651
2646 2652 * setup.py: make windows installer (.exe). This is finally the
2647 2653 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2648 2654 which I hadn't included because it required Python 2.3 (or recent
2649 2655 distutils).
2650 2656
2651 2657 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2652 2658 usage of new '\D' escape.
2653 2659
2654 2660 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2655 2661 lacks os.getuid())
2656 2662 (CachedOutput.set_colors): Added the ability to turn coloring
2657 2663 on/off with @colors even for manually defined prompt colors. It
2658 2664 uses a nasty global, but it works safely and via the generic color
2659 2665 handling mechanism.
2660 2666 (Prompt2.__init__): Introduced new escape '\D' for continuation
2661 2667 prompts. It represents the counter ('\#') as dots.
2662 2668 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2663 2669 need to update their ipythonrc files and replace '%n' with '\D' in
2664 2670 their prompt_in2 settings everywhere. Sorry, but there's
2665 2671 otherwise no clean way to get all prompts to properly align. The
2666 2672 ipythonrc shipped with IPython has been updated.
2667 2673
2668 2674 2004-06-07 Fernando Perez <fperez@colorado.edu>
2669 2675
2670 2676 * setup.py (isfile): Pass local_icons option to latex2html, so the
2671 2677 resulting HTML file is self-contained. Thanks to
2672 2678 dryice-AT-liu.com.cn for the tip.
2673 2679
2674 2680 * pysh.py: I created a new profile 'shell', which implements a
2675 2681 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2676 2682 system shell, nor will it become one anytime soon. It's mainly
2677 2683 meant to illustrate the use of the new flexible bash-like prompts.
2678 2684 I guess it could be used by hardy souls for true shell management,
2679 2685 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2680 2686 profile. This uses the InterpreterExec extension provided by
2681 2687 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2682 2688
2683 2689 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2684 2690 auto-align itself with the length of the previous input prompt
2685 2691 (taking into account the invisible color escapes).
2686 2692 (CachedOutput.__init__): Large restructuring of this class. Now
2687 2693 all three prompts (primary1, primary2, output) are proper objects,
2688 2694 managed by the 'parent' CachedOutput class. The code is still a
2689 2695 bit hackish (all prompts share state via a pointer to the cache),
2690 2696 but it's overall far cleaner than before.
2691 2697
2692 2698 * IPython/genutils.py (getoutputerror): modified to add verbose,
2693 2699 debug and header options. This makes the interface of all getout*
2694 2700 functions uniform.
2695 2701 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2696 2702
2697 2703 * IPython/Magic.py (Magic.default_option): added a function to
2698 2704 allow registering default options for any magic command. This
2699 2705 makes it easy to have profiles which customize the magics globally
2700 2706 for a certain use. The values set through this function are
2701 2707 picked up by the parse_options() method, which all magics should
2702 2708 use to parse their options.
2703 2709
2704 2710 * IPython/genutils.py (warn): modified the warnings framework to
2705 2711 use the Term I/O class. I'm trying to slowly unify all of
2706 2712 IPython's I/O operations to pass through Term.
2707 2713
2708 2714 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2709 2715 the secondary prompt to correctly match the length of the primary
2710 2716 one for any prompt. Now multi-line code will properly line up
2711 2717 even for path dependent prompts, such as the new ones available
2712 2718 via the prompt_specials.
2713 2719
2714 2720 2004-06-06 Fernando Perez <fperez@colorado.edu>
2715 2721
2716 2722 * IPython/Prompts.py (prompt_specials): Added the ability to have
2717 2723 bash-like special sequences in the prompts, which get
2718 2724 automatically expanded. Things like hostname, current working
2719 2725 directory and username are implemented already, but it's easy to
2720 2726 add more in the future. Thanks to a patch by W.J. van der Laan
2721 2727 <gnufnork-AT-hetdigitalegat.nl>
2722 2728 (prompt_specials): Added color support for prompt strings, so
2723 2729 users can define arbitrary color setups for their prompts.
2724 2730
2725 2731 2004-06-05 Fernando Perez <fperez@colorado.edu>
2726 2732
2727 2733 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2728 2734 code to load Gary Bishop's readline and configure it
2729 2735 automatically. Thanks to Gary for help on this.
2730 2736
2731 2737 2004-06-01 Fernando Perez <fperez@colorado.edu>
2732 2738
2733 2739 * IPython/Logger.py (Logger.create_log): fix bug for logging
2734 2740 with no filename (previous fix was incomplete).
2735 2741
2736 2742 2004-05-25 Fernando Perez <fperez@colorado.edu>
2737 2743
2738 2744 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2739 2745 parens would get passed to the shell.
2740 2746
2741 2747 2004-05-20 Fernando Perez <fperez@colorado.edu>
2742 2748
2743 2749 * IPython/Magic.py (Magic.magic_prun): changed default profile
2744 2750 sort order to 'time' (the more common profiling need).
2745 2751
2746 2752 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2747 2753 so that source code shown is guaranteed in sync with the file on
2748 2754 disk (also changed in psource). Similar fix to the one for
2749 2755 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2750 2756 <yann.ledu-AT-noos.fr>.
2751 2757
2752 2758 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2753 2759 with a single option would not be correctly parsed. Closes
2754 2760 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2755 2761 introduced in 0.6.0 (on 2004-05-06).
2756 2762
2757 2763 2004-05-13 *** Released version 0.6.0
2758 2764
2759 2765 2004-05-13 Fernando Perez <fperez@colorado.edu>
2760 2766
2761 2767 * debian/: Added debian/ directory to CVS, so that debian support
2762 2768 is publicly accessible. The debian package is maintained by Jack
2763 2769 Moffit <jack-AT-xiph.org>.
2764 2770
2765 2771 * Documentation: included the notes about an ipython-based system
2766 2772 shell (the hypothetical 'pysh') into the new_design.pdf document,
2767 2773 so that these ideas get distributed to users along with the
2768 2774 official documentation.
2769 2775
2770 2776 2004-05-10 Fernando Perez <fperez@colorado.edu>
2771 2777
2772 2778 * IPython/Logger.py (Logger.create_log): fix recently introduced
2773 2779 bug (misindented line) where logstart would fail when not given an
2774 2780 explicit filename.
2775 2781
2776 2782 2004-05-09 Fernando Perez <fperez@colorado.edu>
2777 2783
2778 2784 * IPython/Magic.py (Magic.parse_options): skip system call when
2779 2785 there are no options to look for. Faster, cleaner for the common
2780 2786 case.
2781 2787
2782 2788 * Documentation: many updates to the manual: describing Windows
2783 2789 support better, Gnuplot updates, credits, misc small stuff. Also
2784 2790 updated the new_design doc a bit.
2785 2791
2786 2792 2004-05-06 *** Released version 0.6.0.rc1
2787 2793
2788 2794 2004-05-06 Fernando Perez <fperez@colorado.edu>
2789 2795
2790 2796 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2791 2797 operations to use the vastly more efficient list/''.join() method.
2792 2798 (FormattedTB.text): Fix
2793 2799 http://www.scipy.net/roundup/ipython/issue12 - exception source
2794 2800 extract not updated after reload. Thanks to Mike Salib
2795 2801 <msalib-AT-mit.edu> for pinning the source of the problem.
2796 2802 Fortunately, the solution works inside ipython and doesn't require
2797 2803 any changes to python proper.
2798 2804
2799 2805 * IPython/Magic.py (Magic.parse_options): Improved to process the
2800 2806 argument list as a true shell would (by actually using the
2801 2807 underlying system shell). This way, all @magics automatically get
2802 2808 shell expansion for variables. Thanks to a comment by Alex
2803 2809 Schmolck.
2804 2810
2805 2811 2004-04-04 Fernando Perez <fperez@colorado.edu>
2806 2812
2807 2813 * IPython/iplib.py (InteractiveShell.interact): Added a special
2808 2814 trap for a debugger quit exception, which is basically impossible
2809 2815 to handle by normal mechanisms, given what pdb does to the stack.
2810 2816 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2811 2817
2812 2818 2004-04-03 Fernando Perez <fperez@colorado.edu>
2813 2819
2814 2820 * IPython/genutils.py (Term): Standardized the names of the Term
2815 2821 class streams to cin/cout/cerr, following C++ naming conventions
2816 2822 (I can't use in/out/err because 'in' is not a valid attribute
2817 2823 name).
2818 2824
2819 2825 * IPython/iplib.py (InteractiveShell.interact): don't increment
2820 2826 the prompt if there's no user input. By Daniel 'Dang' Griffith
2821 2827 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2822 2828 Francois Pinard.
2823 2829
2824 2830 2004-04-02 Fernando Perez <fperez@colorado.edu>
2825 2831
2826 2832 * IPython/genutils.py (Stream.__init__): Modified to survive at
2827 2833 least importing in contexts where stdin/out/err aren't true file
2828 2834 objects, such as PyCrust (they lack fileno() and mode). However,
2829 2835 the recovery facilities which rely on these things existing will
2830 2836 not work.
2831 2837
2832 2838 2004-04-01 Fernando Perez <fperez@colorado.edu>
2833 2839
2834 2840 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2835 2841 use the new getoutputerror() function, so it properly
2836 2842 distinguishes stdout/err.
2837 2843
2838 2844 * IPython/genutils.py (getoutputerror): added a function to
2839 2845 capture separately the standard output and error of a command.
2840 2846 After a comment from dang on the mailing lists. This code is
2841 2847 basically a modified version of commands.getstatusoutput(), from
2842 2848 the standard library.
2843 2849
2844 2850 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2845 2851 '!!' as a special syntax (shorthand) to access @sx.
2846 2852
2847 2853 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2848 2854 command and return its output as a list split on '\n'.
2849 2855
2850 2856 2004-03-31 Fernando Perez <fperez@colorado.edu>
2851 2857
2852 2858 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2853 2859 method to dictionaries used as FakeModule instances if they lack
2854 2860 it. At least pydoc in python2.3 breaks for runtime-defined
2855 2861 functions without this hack. At some point I need to _really_
2856 2862 understand what FakeModule is doing, because it's a gross hack.
2857 2863 But it solves Arnd's problem for now...
2858 2864
2859 2865 2004-02-27 Fernando Perez <fperez@colorado.edu>
2860 2866
2861 2867 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2862 2868 mode would behave erratically. Also increased the number of
2863 2869 possible logs in rotate mod to 999. Thanks to Rod Holland
2864 2870 <rhh@StructureLABS.com> for the report and fixes.
2865 2871
2866 2872 2004-02-26 Fernando Perez <fperez@colorado.edu>
2867 2873
2868 2874 * IPython/genutils.py (page): Check that the curses module really
2869 2875 has the initscr attribute before trying to use it. For some
2870 2876 reason, the Solaris curses module is missing this. I think this
2871 2877 should be considered a Solaris python bug, but I'm not sure.
2872 2878
2873 2879 2004-01-17 Fernando Perez <fperez@colorado.edu>
2874 2880
2875 2881 * IPython/genutils.py (Stream.__init__): Changes to try to make
2876 2882 ipython robust against stdin/out/err being closed by the user.
2877 2883 This is 'user error' (and blocks a normal python session, at least
2878 2884 the stdout case). However, Ipython should be able to survive such
2879 2885 instances of abuse as gracefully as possible. To simplify the
2880 2886 coding and maintain compatibility with Gary Bishop's Term
2881 2887 contributions, I've made use of classmethods for this. I think
2882 2888 this introduces a dependency on python 2.2.
2883 2889
2884 2890 2004-01-13 Fernando Perez <fperez@colorado.edu>
2885 2891
2886 2892 * IPython/numutils.py (exp_safe): simplified the code a bit and
2887 2893 removed the need for importing the kinds module altogether.
2888 2894
2889 2895 2004-01-06 Fernando Perez <fperez@colorado.edu>
2890 2896
2891 2897 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2892 2898 a magic function instead, after some community feedback. No
2893 2899 special syntax will exist for it, but its name is deliberately
2894 2900 very short.
2895 2901
2896 2902 2003-12-20 Fernando Perez <fperez@colorado.edu>
2897 2903
2898 2904 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2899 2905 new functionality, to automagically assign the result of a shell
2900 2906 command to a variable. I'll solicit some community feedback on
2901 2907 this before making it permanent.
2902 2908
2903 2909 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2904 2910 requested about callables for which inspect couldn't obtain a
2905 2911 proper argspec. Thanks to a crash report sent by Etienne
2906 2912 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2907 2913
2908 2914 2003-12-09 Fernando Perez <fperez@colorado.edu>
2909 2915
2910 2916 * IPython/genutils.py (page): patch for the pager to work across
2911 2917 various versions of Windows. By Gary Bishop.
2912 2918
2913 2919 2003-12-04 Fernando Perez <fperez@colorado.edu>
2914 2920
2915 2921 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2916 2922 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2917 2923 While I tested this and it looks ok, there may still be corner
2918 2924 cases I've missed.
2919 2925
2920 2926 2003-12-01 Fernando Perez <fperez@colorado.edu>
2921 2927
2922 2928 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2923 2929 where a line like 'p,q=1,2' would fail because the automagic
2924 2930 system would be triggered for @p.
2925 2931
2926 2932 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2927 2933 cleanups, code unmodified.
2928 2934
2929 2935 * IPython/genutils.py (Term): added a class for IPython to handle
2930 2936 output. In most cases it will just be a proxy for stdout/err, but
2931 2937 having this allows modifications to be made for some platforms,
2932 2938 such as handling color escapes under Windows. All of this code
2933 2939 was contributed by Gary Bishop, with minor modifications by me.
2934 2940 The actual changes affect many files.
2935 2941
2936 2942 2003-11-30 Fernando Perez <fperez@colorado.edu>
2937 2943
2938 2944 * IPython/iplib.py (file_matches): new completion code, courtesy
2939 2945 of Jeff Collins. This enables filename completion again under
2940 2946 python 2.3, which disabled it at the C level.
2941 2947
2942 2948 2003-11-11 Fernando Perez <fperez@colorado.edu>
2943 2949
2944 2950 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2945 2951 for Numeric.array(map(...)), but often convenient.
2946 2952
2947 2953 2003-11-05 Fernando Perez <fperez@colorado.edu>
2948 2954
2949 2955 * IPython/numutils.py (frange): Changed a call from int() to
2950 2956 int(round()) to prevent a problem reported with arange() in the
2951 2957 numpy list.
2952 2958
2953 2959 2003-10-06 Fernando Perez <fperez@colorado.edu>
2954 2960
2955 2961 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2956 2962 prevent crashes if sys lacks an argv attribute (it happens with
2957 2963 embedded interpreters which build a bare-bones sys module).
2958 2964 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2959 2965
2960 2966 2003-09-24 Fernando Perez <fperez@colorado.edu>
2961 2967
2962 2968 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2963 2969 to protect against poorly written user objects where __getattr__
2964 2970 raises exceptions other than AttributeError. Thanks to a bug
2965 2971 report by Oliver Sander <osander-AT-gmx.de>.
2966 2972
2967 2973 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2968 2974 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2969 2975
2970 2976 2003-09-09 Fernando Perez <fperez@colorado.edu>
2971 2977
2972 2978 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2973 2979 unpacking a list whith a callable as first element would
2974 2980 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2975 2981 Collins.
2976 2982
2977 2983 2003-08-25 *** Released version 0.5.0
2978 2984
2979 2985 2003-08-22 Fernando Perez <fperez@colorado.edu>
2980 2986
2981 2987 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2982 2988 improperly defined user exceptions. Thanks to feedback from Mark
2983 2989 Russell <mrussell-AT-verio.net>.
2984 2990
2985 2991 2003-08-20 Fernando Perez <fperez@colorado.edu>
2986 2992
2987 2993 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2988 2994 printing so that it would print multi-line string forms starting
2989 2995 with a new line. This way the formatting is better respected for
2990 2996 objects which work hard to make nice string forms.
2991 2997
2992 2998 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2993 2999 autocall would overtake data access for objects with both
2994 3000 __getitem__ and __call__.
2995 3001
2996 3002 2003-08-19 *** Released version 0.5.0-rc1
2997 3003
2998 3004 2003-08-19 Fernando Perez <fperez@colorado.edu>
2999 3005
3000 3006 * IPython/deep_reload.py (load_tail): single tiny change here
3001 3007 seems to fix the long-standing bug of dreload() failing to work
3002 3008 for dotted names. But this module is pretty tricky, so I may have
3003 3009 missed some subtlety. Needs more testing!.
3004 3010
3005 3011 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3006 3012 exceptions which have badly implemented __str__ methods.
3007 3013 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3008 3014 which I've been getting reports about from Python 2.3 users. I
3009 3015 wish I had a simple test case to reproduce the problem, so I could
3010 3016 either write a cleaner workaround or file a bug report if
3011 3017 necessary.
3012 3018
3013 3019 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3014 3020 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3015 3021 a bug report by Tjabo Kloppenburg.
3016 3022
3017 3023 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3018 3024 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3019 3025 seems rather unstable. Thanks to a bug report by Tjabo
3020 3026 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3021 3027
3022 3028 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3023 3029 this out soon because of the critical fixes in the inner loop for
3024 3030 generators.
3025 3031
3026 3032 * IPython/Magic.py (Magic.getargspec): removed. This (and
3027 3033 _get_def) have been obsoleted by OInspect for a long time, I
3028 3034 hadn't noticed that they were dead code.
3029 3035 (Magic._ofind): restored _ofind functionality for a few literals
3030 3036 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3031 3037 for things like "hello".capitalize?, since that would require a
3032 3038 potentially dangerous eval() again.
3033 3039
3034 3040 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3035 3041 logic a bit more to clean up the escapes handling and minimize the
3036 3042 use of _ofind to only necessary cases. The interactive 'feel' of
3037 3043 IPython should have improved quite a bit with the changes in
3038 3044 _prefilter and _ofind (besides being far safer than before).
3039 3045
3040 3046 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3041 3047 obscure, never reported). Edit would fail to find the object to
3042 3048 edit under some circumstances.
3043 3049 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3044 3050 which were causing double-calling of generators. Those eval calls
3045 3051 were _very_ dangerous, since code with side effects could be
3046 3052 triggered. As they say, 'eval is evil'... These were the
3047 3053 nastiest evals in IPython. Besides, _ofind is now far simpler,
3048 3054 and it should also be quite a bit faster. Its use of inspect is
3049 3055 also safer, so perhaps some of the inspect-related crashes I've
3050 3056 seen lately with Python 2.3 might be taken care of. That will
3051 3057 need more testing.
3052 3058
3053 3059 2003-08-17 Fernando Perez <fperez@colorado.edu>
3054 3060
3055 3061 * IPython/iplib.py (InteractiveShell._prefilter): significant
3056 3062 simplifications to the logic for handling user escapes. Faster
3057 3063 and simpler code.
3058 3064
3059 3065 2003-08-14 Fernando Perez <fperez@colorado.edu>
3060 3066
3061 3067 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3062 3068 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3063 3069 but it should be quite a bit faster. And the recursive version
3064 3070 generated O(log N) intermediate storage for all rank>1 arrays,
3065 3071 even if they were contiguous.
3066 3072 (l1norm): Added this function.
3067 3073 (norm): Added this function for arbitrary norms (including
3068 3074 l-infinity). l1 and l2 are still special cases for convenience
3069 3075 and speed.
3070 3076
3071 3077 2003-08-03 Fernando Perez <fperez@colorado.edu>
3072 3078
3073 3079 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3074 3080 exceptions, which now raise PendingDeprecationWarnings in Python
3075 3081 2.3. There were some in Magic and some in Gnuplot2.
3076 3082
3077 3083 2003-06-30 Fernando Perez <fperez@colorado.edu>
3078 3084
3079 3085 * IPython/genutils.py (page): modified to call curses only for
3080 3086 terminals where TERM=='xterm'. After problems under many other
3081 3087 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3082 3088
3083 3089 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3084 3090 would be triggered when readline was absent. This was just an old
3085 3091 debugging statement I'd forgotten to take out.
3086 3092
3087 3093 2003-06-20 Fernando Perez <fperez@colorado.edu>
3088 3094
3089 3095 * IPython/genutils.py (clock): modified to return only user time
3090 3096 (not counting system time), after a discussion on scipy. While
3091 3097 system time may be a useful quantity occasionally, it may much
3092 3098 more easily be skewed by occasional swapping or other similar
3093 3099 activity.
3094 3100
3095 3101 2003-06-05 Fernando Perez <fperez@colorado.edu>
3096 3102
3097 3103 * IPython/numutils.py (identity): new function, for building
3098 3104 arbitrary rank Kronecker deltas (mostly backwards compatible with
3099 3105 Numeric.identity)
3100 3106
3101 3107 2003-06-03 Fernando Perez <fperez@colorado.edu>
3102 3108
3103 3109 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3104 3110 arguments passed to magics with spaces, to allow trailing '\' to
3105 3111 work normally (mainly for Windows users).
3106 3112
3107 3113 2003-05-29 Fernando Perez <fperez@colorado.edu>
3108 3114
3109 3115 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3110 3116 instead of pydoc.help. This fixes a bizarre behavior where
3111 3117 printing '%s' % locals() would trigger the help system. Now
3112 3118 ipython behaves like normal python does.
3113 3119
3114 3120 Note that if one does 'from pydoc import help', the bizarre
3115 3121 behavior returns, but this will also happen in normal python, so
3116 3122 it's not an ipython bug anymore (it has to do with how pydoc.help
3117 3123 is implemented).
3118 3124
3119 3125 2003-05-22 Fernando Perez <fperez@colorado.edu>
3120 3126
3121 3127 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3122 3128 return [] instead of None when nothing matches, also match to end
3123 3129 of line. Patch by Gary Bishop.
3124 3130
3125 3131 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3126 3132 protection as before, for files passed on the command line. This
3127 3133 prevents the CrashHandler from kicking in if user files call into
3128 3134 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3129 3135 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3130 3136
3131 3137 2003-05-20 *** Released version 0.4.0
3132 3138
3133 3139 2003-05-20 Fernando Perez <fperez@colorado.edu>
3134 3140
3135 3141 * setup.py: added support for manpages. It's a bit hackish b/c of
3136 3142 a bug in the way the bdist_rpm distutils target handles gzipped
3137 3143 manpages, but it works. After a patch by Jack.
3138 3144
3139 3145 2003-05-19 Fernando Perez <fperez@colorado.edu>
3140 3146
3141 3147 * IPython/numutils.py: added a mockup of the kinds module, since
3142 3148 it was recently removed from Numeric. This way, numutils will
3143 3149 work for all users even if they are missing kinds.
3144 3150
3145 3151 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3146 3152 failure, which can occur with SWIG-wrapped extensions. After a
3147 3153 crash report from Prabhu.
3148 3154
3149 3155 2003-05-16 Fernando Perez <fperez@colorado.edu>
3150 3156
3151 3157 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3152 3158 protect ipython from user code which may call directly
3153 3159 sys.excepthook (this looks like an ipython crash to the user, even
3154 3160 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3155 3161 This is especially important to help users of WxWindows, but may
3156 3162 also be useful in other cases.
3157 3163
3158 3164 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3159 3165 an optional tb_offset to be specified, and to preserve exception
3160 3166 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3161 3167
3162 3168 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3163 3169
3164 3170 2003-05-15 Fernando Perez <fperez@colorado.edu>
3165 3171
3166 3172 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3167 3173 installing for a new user under Windows.
3168 3174
3169 3175 2003-05-12 Fernando Perez <fperez@colorado.edu>
3170 3176
3171 3177 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3172 3178 handler for Emacs comint-based lines. Currently it doesn't do
3173 3179 much (but importantly, it doesn't update the history cache). In
3174 3180 the future it may be expanded if Alex needs more functionality
3175 3181 there.
3176 3182
3177 3183 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3178 3184 info to crash reports.
3179 3185
3180 3186 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3181 3187 just like Python's -c. Also fixed crash with invalid -color
3182 3188 option value at startup. Thanks to Will French
3183 3189 <wfrench-AT-bestweb.net> for the bug report.
3184 3190
3185 3191 2003-05-09 Fernando Perez <fperez@colorado.edu>
3186 3192
3187 3193 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3188 3194 to EvalDict (it's a mapping, after all) and simplified its code
3189 3195 quite a bit, after a nice discussion on c.l.py where Gustavo
3190 3196 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3191 3197
3192 3198 2003-04-30 Fernando Perez <fperez@colorado.edu>
3193 3199
3194 3200 * IPython/genutils.py (timings_out): modified it to reduce its
3195 3201 overhead in the common reps==1 case.
3196 3202
3197 3203 2003-04-29 Fernando Perez <fperez@colorado.edu>
3198 3204
3199 3205 * IPython/genutils.py (timings_out): Modified to use the resource
3200 3206 module, which avoids the wraparound problems of time.clock().
3201 3207
3202 3208 2003-04-17 *** Released version 0.2.15pre4
3203 3209
3204 3210 2003-04-17 Fernando Perez <fperez@colorado.edu>
3205 3211
3206 3212 * setup.py (scriptfiles): Split windows-specific stuff over to a
3207 3213 separate file, in an attempt to have a Windows GUI installer.
3208 3214 That didn't work, but part of the groundwork is done.
3209 3215
3210 3216 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3211 3217 indent/unindent with 4 spaces. Particularly useful in combination
3212 3218 with the new auto-indent option.
3213 3219
3214 3220 2003-04-16 Fernando Perez <fperez@colorado.edu>
3215 3221
3216 3222 * IPython/Magic.py: various replacements of self.rc for
3217 3223 self.shell.rc. A lot more remains to be done to fully disentangle
3218 3224 this class from the main Shell class.
3219 3225
3220 3226 * IPython/GnuplotRuntime.py: added checks for mouse support so
3221 3227 that we don't try to enable it if the current gnuplot doesn't
3222 3228 really support it. Also added checks so that we don't try to
3223 3229 enable persist under Windows (where Gnuplot doesn't recognize the
3224 3230 option).
3225 3231
3226 3232 * IPython/iplib.py (InteractiveShell.interact): Added optional
3227 3233 auto-indenting code, after a patch by King C. Shu
3228 3234 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3229 3235 get along well with pasting indented code. If I ever figure out
3230 3236 how to make that part go well, it will become on by default.
3231 3237
3232 3238 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3233 3239 crash ipython if there was an unmatched '%' in the user's prompt
3234 3240 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3235 3241
3236 3242 * IPython/iplib.py (InteractiveShell.interact): removed the
3237 3243 ability to ask the user whether he wants to crash or not at the
3238 3244 'last line' exception handler. Calling functions at that point
3239 3245 changes the stack, and the error reports would have incorrect
3240 3246 tracebacks.
3241 3247
3242 3248 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3243 3249 pass through a peger a pretty-printed form of any object. After a
3244 3250 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3245 3251
3246 3252 2003-04-14 Fernando Perez <fperez@colorado.edu>
3247 3253
3248 3254 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3249 3255 all files in ~ would be modified at first install (instead of
3250 3256 ~/.ipython). This could be potentially disastrous, as the
3251 3257 modification (make line-endings native) could damage binary files.
3252 3258
3253 3259 2003-04-10 Fernando Perez <fperez@colorado.edu>
3254 3260
3255 3261 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3256 3262 handle only lines which are invalid python. This now means that
3257 3263 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3258 3264 for the bug report.
3259 3265
3260 3266 2003-04-01 Fernando Perez <fperez@colorado.edu>
3261 3267
3262 3268 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3263 3269 where failing to set sys.last_traceback would crash pdb.pm().
3264 3270 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3265 3271 report.
3266 3272
3267 3273 2003-03-25 Fernando Perez <fperez@colorado.edu>
3268 3274
3269 3275 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3270 3276 before printing it (it had a lot of spurious blank lines at the
3271 3277 end).
3272 3278
3273 3279 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3274 3280 output would be sent 21 times! Obviously people don't use this
3275 3281 too often, or I would have heard about it.
3276 3282
3277 3283 2003-03-24 Fernando Perez <fperez@colorado.edu>
3278 3284
3279 3285 * setup.py (scriptfiles): renamed the data_files parameter from
3280 3286 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3281 3287 for the patch.
3282 3288
3283 3289 2003-03-20 Fernando Perez <fperez@colorado.edu>
3284 3290
3285 3291 * IPython/genutils.py (error): added error() and fatal()
3286 3292 functions.
3287 3293
3288 3294 2003-03-18 *** Released version 0.2.15pre3
3289 3295
3290 3296 2003-03-18 Fernando Perez <fperez@colorado.edu>
3291 3297
3292 3298 * setupext/install_data_ext.py
3293 3299 (install_data_ext.initialize_options): Class contributed by Jack
3294 3300 Moffit for fixing the old distutils hack. He is sending this to
3295 3301 the distutils folks so in the future we may not need it as a
3296 3302 private fix.
3297 3303
3298 3304 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3299 3305 changes for Debian packaging. See his patch for full details.
3300 3306 The old distutils hack of making the ipythonrc* files carry a
3301 3307 bogus .py extension is gone, at last. Examples were moved to a
3302 3308 separate subdir under doc/, and the separate executable scripts
3303 3309 now live in their own directory. Overall a great cleanup. The
3304 3310 manual was updated to use the new files, and setup.py has been
3305 3311 fixed for this setup.
3306 3312
3307 3313 * IPython/PyColorize.py (Parser.usage): made non-executable and
3308 3314 created a pycolor wrapper around it to be included as a script.
3309 3315
3310 3316 2003-03-12 *** Released version 0.2.15pre2
3311 3317
3312 3318 2003-03-12 Fernando Perez <fperez@colorado.edu>
3313 3319
3314 3320 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3315 3321 long-standing problem with garbage characters in some terminals.
3316 3322 The issue was really that the \001 and \002 escapes must _only_ be
3317 3323 passed to input prompts (which call readline), but _never_ to
3318 3324 normal text to be printed on screen. I changed ColorANSI to have
3319 3325 two classes: TermColors and InputTermColors, each with the
3320 3326 appropriate escapes for input prompts or normal text. The code in
3321 3327 Prompts.py got slightly more complicated, but this very old and
3322 3328 annoying bug is finally fixed.
3323 3329
3324 3330 All the credit for nailing down the real origin of this problem
3325 3331 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3326 3332 *Many* thanks to him for spending quite a bit of effort on this.
3327 3333
3328 3334 2003-03-05 *** Released version 0.2.15pre1
3329 3335
3330 3336 2003-03-03 Fernando Perez <fperez@colorado.edu>
3331 3337
3332 3338 * IPython/FakeModule.py: Moved the former _FakeModule to a
3333 3339 separate file, because it's also needed by Magic (to fix a similar
3334 3340 pickle-related issue in @run).
3335 3341
3336 3342 2003-03-02 Fernando Perez <fperez@colorado.edu>
3337 3343
3338 3344 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3339 3345 the autocall option at runtime.
3340 3346 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3341 3347 across Magic.py to start separating Magic from InteractiveShell.
3342 3348 (Magic._ofind): Fixed to return proper namespace for dotted
3343 3349 names. Before, a dotted name would always return 'not currently
3344 3350 defined', because it would find the 'parent'. s.x would be found,
3345 3351 but since 'x' isn't defined by itself, it would get confused.
3346 3352 (Magic.magic_run): Fixed pickling problems reported by Ralf
3347 3353 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3348 3354 that I'd used when Mike Heeter reported similar issues at the
3349 3355 top-level, but now for @run. It boils down to injecting the
3350 3356 namespace where code is being executed with something that looks
3351 3357 enough like a module to fool pickle.dump(). Since a pickle stores
3352 3358 a named reference to the importing module, we need this for
3353 3359 pickles to save something sensible.
3354 3360
3355 3361 * IPython/ipmaker.py (make_IPython): added an autocall option.
3356 3362
3357 3363 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3358 3364 the auto-eval code. Now autocalling is an option, and the code is
3359 3365 also vastly safer. There is no more eval() involved at all.
3360 3366
3361 3367 2003-03-01 Fernando Perez <fperez@colorado.edu>
3362 3368
3363 3369 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3364 3370 dict with named keys instead of a tuple.
3365 3371
3366 3372 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3367 3373
3368 3374 * setup.py (make_shortcut): Fixed message about directories
3369 3375 created during Windows installation (the directories were ok, just
3370 3376 the printed message was misleading). Thanks to Chris Liechti
3371 3377 <cliechti-AT-gmx.net> for the heads up.
3372 3378
3373 3379 2003-02-21 Fernando Perez <fperez@colorado.edu>
3374 3380
3375 3381 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3376 3382 of ValueError exception when checking for auto-execution. This
3377 3383 one is raised by things like Numeric arrays arr.flat when the
3378 3384 array is non-contiguous.
3379 3385
3380 3386 2003-01-31 Fernando Perez <fperez@colorado.edu>
3381 3387
3382 3388 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3383 3389 not return any value at all (even though the command would get
3384 3390 executed).
3385 3391 (xsys): Flush stdout right after printing the command to ensure
3386 3392 proper ordering of commands and command output in the total
3387 3393 output.
3388 3394 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3389 3395 system/getoutput as defaults. The old ones are kept for
3390 3396 compatibility reasons, so no code which uses this library needs
3391 3397 changing.
3392 3398
3393 3399 2003-01-27 *** Released version 0.2.14
3394 3400
3395 3401 2003-01-25 Fernando Perez <fperez@colorado.edu>
3396 3402
3397 3403 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3398 3404 functions defined in previous edit sessions could not be re-edited
3399 3405 (because the temp files were immediately removed). Now temp files
3400 3406 are removed only at IPython's exit.
3401 3407 (Magic.magic_run): Improved @run to perform shell-like expansions
3402 3408 on its arguments (~users and $VARS). With this, @run becomes more
3403 3409 like a normal command-line.
3404 3410
3405 3411 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3406 3412 bugs related to embedding and cleaned up that code. A fairly
3407 3413 important one was the impossibility to access the global namespace
3408 3414 through the embedded IPython (only local variables were visible).
3409 3415
3410 3416 2003-01-14 Fernando Perez <fperez@colorado.edu>
3411 3417
3412 3418 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3413 3419 auto-calling to be a bit more conservative. Now it doesn't get
3414 3420 triggered if any of '!=()<>' are in the rest of the input line, to
3415 3421 allow comparing callables. Thanks to Alex for the heads up.
3416 3422
3417 3423 2003-01-07 Fernando Perez <fperez@colorado.edu>
3418 3424
3419 3425 * IPython/genutils.py (page): fixed estimation of the number of
3420 3426 lines in a string to be paged to simply count newlines. This
3421 3427 prevents over-guessing due to embedded escape sequences. A better
3422 3428 long-term solution would involve stripping out the control chars
3423 3429 for the count, but it's potentially so expensive I just don't
3424 3430 think it's worth doing.
3425 3431
3426 3432 2002-12-19 *** Released version 0.2.14pre50
3427 3433
3428 3434 2002-12-19 Fernando Perez <fperez@colorado.edu>
3429 3435
3430 3436 * tools/release (version): Changed release scripts to inform
3431 3437 Andrea and build a NEWS file with a list of recent changes.
3432 3438
3433 3439 * IPython/ColorANSI.py (__all__): changed terminal detection
3434 3440 code. Seems to work better for xterms without breaking
3435 3441 konsole. Will need more testing to determine if WinXP and Mac OSX
3436 3442 also work ok.
3437 3443
3438 3444 2002-12-18 *** Released version 0.2.14pre49
3439 3445
3440 3446 2002-12-18 Fernando Perez <fperez@colorado.edu>
3441 3447
3442 3448 * Docs: added new info about Mac OSX, from Andrea.
3443 3449
3444 3450 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3445 3451 allow direct plotting of python strings whose format is the same
3446 3452 of gnuplot data files.
3447 3453
3448 3454 2002-12-16 Fernando Perez <fperez@colorado.edu>
3449 3455
3450 3456 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3451 3457 value of exit question to be acknowledged.
3452 3458
3453 3459 2002-12-03 Fernando Perez <fperez@colorado.edu>
3454 3460
3455 3461 * IPython/ipmaker.py: removed generators, which had been added
3456 3462 by mistake in an earlier debugging run. This was causing trouble
3457 3463 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3458 3464 for pointing this out.
3459 3465
3460 3466 2002-11-17 Fernando Perez <fperez@colorado.edu>
3461 3467
3462 3468 * Manual: updated the Gnuplot section.
3463 3469
3464 3470 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3465 3471 a much better split of what goes in Runtime and what goes in
3466 3472 Interactive.
3467 3473
3468 3474 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3469 3475 being imported from iplib.
3470 3476
3471 3477 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3472 3478 for command-passing. Now the global Gnuplot instance is called
3473 3479 'gp' instead of 'g', which was really a far too fragile and
3474 3480 common name.
3475 3481
3476 3482 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3477 3483 bounding boxes generated by Gnuplot for square plots.
3478 3484
3479 3485 * IPython/genutils.py (popkey): new function added. I should
3480 3486 suggest this on c.l.py as a dict method, it seems useful.
3481 3487
3482 3488 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3483 3489 to transparently handle PostScript generation. MUCH better than
3484 3490 the previous plot_eps/replot_eps (which I removed now). The code
3485 3491 is also fairly clean and well documented now (including
3486 3492 docstrings).
3487 3493
3488 3494 2002-11-13 Fernando Perez <fperez@colorado.edu>
3489 3495
3490 3496 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3491 3497 (inconsistent with options).
3492 3498
3493 3499 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3494 3500 manually disabled, I don't know why. Fixed it.
3495 3501 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3496 3502 eps output.
3497 3503
3498 3504 2002-11-12 Fernando Perez <fperez@colorado.edu>
3499 3505
3500 3506 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3501 3507 don't propagate up to caller. Fixes crash reported by François
3502 3508 Pinard.
3503 3509
3504 3510 2002-11-09 Fernando Perez <fperez@colorado.edu>
3505 3511
3506 3512 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3507 3513 history file for new users.
3508 3514 (make_IPython): fixed bug where initial install would leave the
3509 3515 user running in the .ipython dir.
3510 3516 (make_IPython): fixed bug where config dir .ipython would be
3511 3517 created regardless of the given -ipythondir option. Thanks to Cory
3512 3518 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3513 3519
3514 3520 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3515 3521 type confirmations. Will need to use it in all of IPython's code
3516 3522 consistently.
3517 3523
3518 3524 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3519 3525 context to print 31 lines instead of the default 5. This will make
3520 3526 the crash reports extremely detailed in case the problem is in
3521 3527 libraries I don't have access to.
3522 3528
3523 3529 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3524 3530 line of defense' code to still crash, but giving users fair
3525 3531 warning. I don't want internal errors to go unreported: if there's
3526 3532 an internal problem, IPython should crash and generate a full
3527 3533 report.
3528 3534
3529 3535 2002-11-08 Fernando Perez <fperez@colorado.edu>
3530 3536
3531 3537 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3532 3538 otherwise uncaught exceptions which can appear if people set
3533 3539 sys.stdout to something badly broken. Thanks to a crash report
3534 3540 from henni-AT-mail.brainbot.com.
3535 3541
3536 3542 2002-11-04 Fernando Perez <fperez@colorado.edu>
3537 3543
3538 3544 * IPython/iplib.py (InteractiveShell.interact): added
3539 3545 __IPYTHON__active to the builtins. It's a flag which goes on when
3540 3546 the interaction starts and goes off again when it stops. This
3541 3547 allows embedding code to detect being inside IPython. Before this
3542 3548 was done via __IPYTHON__, but that only shows that an IPython
3543 3549 instance has been created.
3544 3550
3545 3551 * IPython/Magic.py (Magic.magic_env): I realized that in a
3546 3552 UserDict, instance.data holds the data as a normal dict. So I
3547 3553 modified @env to return os.environ.data instead of rebuilding a
3548 3554 dict by hand.
3549 3555
3550 3556 2002-11-02 Fernando Perez <fperez@colorado.edu>
3551 3557
3552 3558 * IPython/genutils.py (warn): changed so that level 1 prints no
3553 3559 header. Level 2 is now the default (with 'WARNING' header, as
3554 3560 before). I think I tracked all places where changes were needed in
3555 3561 IPython, but outside code using the old level numbering may have
3556 3562 broken.
3557 3563
3558 3564 * IPython/iplib.py (InteractiveShell.runcode): added this to
3559 3565 handle the tracebacks in SystemExit traps correctly. The previous
3560 3566 code (through interact) was printing more of the stack than
3561 3567 necessary, showing IPython internal code to the user.
3562 3568
3563 3569 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3564 3570 default. Now that the default at the confirmation prompt is yes,
3565 3571 it's not so intrusive. François' argument that ipython sessions
3566 3572 tend to be complex enough not to lose them from an accidental C-d,
3567 3573 is a valid one.
3568 3574
3569 3575 * IPython/iplib.py (InteractiveShell.interact): added a
3570 3576 showtraceback() call to the SystemExit trap, and modified the exit
3571 3577 confirmation to have yes as the default.
3572 3578
3573 3579 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3574 3580 this file. It's been gone from the code for a long time, this was
3575 3581 simply leftover junk.
3576 3582
3577 3583 2002-11-01 Fernando Perez <fperez@colorado.edu>
3578 3584
3579 3585 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3580 3586 added. If set, IPython now traps EOF and asks for
3581 3587 confirmation. After a request by François Pinard.
3582 3588
3583 3589 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3584 3590 of @abort, and with a new (better) mechanism for handling the
3585 3591 exceptions.
3586 3592
3587 3593 2002-10-27 Fernando Perez <fperez@colorado.edu>
3588 3594
3589 3595 * IPython/usage.py (__doc__): updated the --help information and
3590 3596 the ipythonrc file to indicate that -log generates
3591 3597 ./ipython.log. Also fixed the corresponding info in @logstart.
3592 3598 This and several other fixes in the manuals thanks to reports by
3593 3599 François Pinard <pinard-AT-iro.umontreal.ca>.
3594 3600
3595 3601 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3596 3602 refer to @logstart (instead of @log, which doesn't exist).
3597 3603
3598 3604 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3599 3605 AttributeError crash. Thanks to Christopher Armstrong
3600 3606 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3601 3607 introduced recently (in 0.2.14pre37) with the fix to the eval
3602 3608 problem mentioned below.
3603 3609
3604 3610 2002-10-17 Fernando Perez <fperez@colorado.edu>
3605 3611
3606 3612 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3607 3613 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3608 3614
3609 3615 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3610 3616 this function to fix a problem reported by Alex Schmolck. He saw
3611 3617 it with list comprehensions and generators, which were getting
3612 3618 called twice. The real problem was an 'eval' call in testing for
3613 3619 automagic which was evaluating the input line silently.
3614 3620
3615 3621 This is a potentially very nasty bug, if the input has side
3616 3622 effects which must not be repeated. The code is much cleaner now,
3617 3623 without any blanket 'except' left and with a regexp test for
3618 3624 actual function names.
3619 3625
3620 3626 But an eval remains, which I'm not fully comfortable with. I just
3621 3627 don't know how to find out if an expression could be a callable in
3622 3628 the user's namespace without doing an eval on the string. However
3623 3629 that string is now much more strictly checked so that no code
3624 3630 slips by, so the eval should only happen for things that can
3625 3631 really be only function/method names.
3626 3632
3627 3633 2002-10-15 Fernando Perez <fperez@colorado.edu>
3628 3634
3629 3635 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3630 3636 OSX information to main manual, removed README_Mac_OSX file from
3631 3637 distribution. Also updated credits for recent additions.
3632 3638
3633 3639 2002-10-10 Fernando Perez <fperez@colorado.edu>
3634 3640
3635 3641 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3636 3642 terminal-related issues. Many thanks to Andrea Riciputi
3637 3643 <andrea.riciputi-AT-libero.it> for writing it.
3638 3644
3639 3645 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3640 3646 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3641 3647
3642 3648 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3643 3649 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3644 3650 <syver-en-AT-online.no> who both submitted patches for this problem.
3645 3651
3646 3652 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3647 3653 global embedding to make sure that things don't overwrite user
3648 3654 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3649 3655
3650 3656 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3651 3657 compatibility. Thanks to Hayden Callow
3652 3658 <h.callow-AT-elec.canterbury.ac.nz>
3653 3659
3654 3660 2002-10-04 Fernando Perez <fperez@colorado.edu>
3655 3661
3656 3662 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3657 3663 Gnuplot.File objects.
3658 3664
3659 3665 2002-07-23 Fernando Perez <fperez@colorado.edu>
3660 3666
3661 3667 * IPython/genutils.py (timing): Added timings() and timing() for
3662 3668 quick access to the most commonly needed data, the execution
3663 3669 times. Old timing() renamed to timings_out().
3664 3670
3665 3671 2002-07-18 Fernando Perez <fperez@colorado.edu>
3666 3672
3667 3673 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3668 3674 bug with nested instances disrupting the parent's tab completion.
3669 3675
3670 3676 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3671 3677 all_completions code to begin the emacs integration.
3672 3678
3673 3679 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3674 3680 argument to allow titling individual arrays when plotting.
3675 3681
3676 3682 2002-07-15 Fernando Perez <fperez@colorado.edu>
3677 3683
3678 3684 * setup.py (make_shortcut): changed to retrieve the value of
3679 3685 'Program Files' directory from the registry (this value changes in
3680 3686 non-english versions of Windows). Thanks to Thomas Fanslau
3681 3687 <tfanslau-AT-gmx.de> for the report.
3682 3688
3683 3689 2002-07-10 Fernando Perez <fperez@colorado.edu>
3684 3690
3685 3691 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3686 3692 a bug in pdb, which crashes if a line with only whitespace is
3687 3693 entered. Bug report submitted to sourceforge.
3688 3694
3689 3695 2002-07-09 Fernando Perez <fperez@colorado.edu>
3690 3696
3691 3697 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3692 3698 reporting exceptions (it's a bug in inspect.py, I just set a
3693 3699 workaround).
3694 3700
3695 3701 2002-07-08 Fernando Perez <fperez@colorado.edu>
3696 3702
3697 3703 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3698 3704 __IPYTHON__ in __builtins__ to show up in user_ns.
3699 3705
3700 3706 2002-07-03 Fernando Perez <fperez@colorado.edu>
3701 3707
3702 3708 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3703 3709 name from @gp_set_instance to @gp_set_default.
3704 3710
3705 3711 * IPython/ipmaker.py (make_IPython): default editor value set to
3706 3712 '0' (a string), to match the rc file. Otherwise will crash when
3707 3713 .strip() is called on it.
3708 3714
3709 3715
3710 3716 2002-06-28 Fernando Perez <fperez@colorado.edu>
3711 3717
3712 3718 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3713 3719 of files in current directory when a file is executed via
3714 3720 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3715 3721
3716 3722 * setup.py (manfiles): fix for rpm builds, submitted by RA
3717 3723 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3718 3724
3719 3725 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3720 3726 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3721 3727 string!). A. Schmolck caught this one.
3722 3728
3723 3729 2002-06-27 Fernando Perez <fperez@colorado.edu>
3724 3730
3725 3731 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3726 3732 defined files at the cmd line. __name__ wasn't being set to
3727 3733 __main__.
3728 3734
3729 3735 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3730 3736 regular lists and tuples besides Numeric arrays.
3731 3737
3732 3738 * IPython/Prompts.py (CachedOutput.__call__): Added output
3733 3739 supression for input ending with ';'. Similar to Mathematica and
3734 3740 Matlab. The _* vars and Out[] list are still updated, just like
3735 3741 Mathematica behaves.
3736 3742
3737 3743 2002-06-25 Fernando Perez <fperez@colorado.edu>
3738 3744
3739 3745 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3740 3746 .ini extensions for profiels under Windows.
3741 3747
3742 3748 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3743 3749 string form. Fix contributed by Alexander Schmolck
3744 3750 <a.schmolck-AT-gmx.net>
3745 3751
3746 3752 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3747 3753 pre-configured Gnuplot instance.
3748 3754
3749 3755 2002-06-21 Fernando Perez <fperez@colorado.edu>
3750 3756
3751 3757 * IPython/numutils.py (exp_safe): new function, works around the
3752 3758 underflow problems in Numeric.
3753 3759 (log2): New fn. Safe log in base 2: returns exact integer answer
3754 3760 for exact integer powers of 2.
3755 3761
3756 3762 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3757 3763 properly.
3758 3764
3759 3765 2002-06-20 Fernando Perez <fperez@colorado.edu>
3760 3766
3761 3767 * IPython/genutils.py (timing): new function like
3762 3768 Mathematica's. Similar to time_test, but returns more info.
3763 3769
3764 3770 2002-06-18 Fernando Perez <fperez@colorado.edu>
3765 3771
3766 3772 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3767 3773 according to Mike Heeter's suggestions.
3768 3774
3769 3775 2002-06-16 Fernando Perez <fperez@colorado.edu>
3770 3776
3771 3777 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3772 3778 system. GnuplotMagic is gone as a user-directory option. New files
3773 3779 make it easier to use all the gnuplot stuff both from external
3774 3780 programs as well as from IPython. Had to rewrite part of
3775 3781 hardcopy() b/c of a strange bug: often the ps files simply don't
3776 3782 get created, and require a repeat of the command (often several
3777 3783 times).
3778 3784
3779 3785 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3780 3786 resolve output channel at call time, so that if sys.stderr has
3781 3787 been redirected by user this gets honored.
3782 3788
3783 3789 2002-06-13 Fernando Perez <fperez@colorado.edu>
3784 3790
3785 3791 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3786 3792 IPShell. Kept a copy with the old names to avoid breaking people's
3787 3793 embedded code.
3788 3794
3789 3795 * IPython/ipython: simplified it to the bare minimum after
3790 3796 Holger's suggestions. Added info about how to use it in
3791 3797 PYTHONSTARTUP.
3792 3798
3793 3799 * IPython/Shell.py (IPythonShell): changed the options passing
3794 3800 from a string with funky %s replacements to a straight list. Maybe
3795 3801 a bit more typing, but it follows sys.argv conventions, so there's
3796 3802 less special-casing to remember.
3797 3803
3798 3804 2002-06-12 Fernando Perez <fperez@colorado.edu>
3799 3805
3800 3806 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3801 3807 command. Thanks to a suggestion by Mike Heeter.
3802 3808 (Magic.magic_pfile): added behavior to look at filenames if given
3803 3809 arg is not a defined object.
3804 3810 (Magic.magic_save): New @save function to save code snippets. Also
3805 3811 a Mike Heeter idea.
3806 3812
3807 3813 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3808 3814 plot() and replot(). Much more convenient now, especially for
3809 3815 interactive use.
3810 3816
3811 3817 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3812 3818 filenames.
3813 3819
3814 3820 2002-06-02 Fernando Perez <fperez@colorado.edu>
3815 3821
3816 3822 * IPython/Struct.py (Struct.__init__): modified to admit
3817 3823 initialization via another struct.
3818 3824
3819 3825 * IPython/genutils.py (SystemExec.__init__): New stateful
3820 3826 interface to xsys and bq. Useful for writing system scripts.
3821 3827
3822 3828 2002-05-30 Fernando Perez <fperez@colorado.edu>
3823 3829
3824 3830 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3825 3831 documents. This will make the user download smaller (it's getting
3826 3832 too big).
3827 3833
3828 3834 2002-05-29 Fernando Perez <fperez@colorado.edu>
3829 3835
3830 3836 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3831 3837 fix problems with shelve and pickle. Seems to work, but I don't
3832 3838 know if corner cases break it. Thanks to Mike Heeter
3833 3839 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3834 3840
3835 3841 2002-05-24 Fernando Perez <fperez@colorado.edu>
3836 3842
3837 3843 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3838 3844 macros having broken.
3839 3845
3840 3846 2002-05-21 Fernando Perez <fperez@colorado.edu>
3841 3847
3842 3848 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3843 3849 introduced logging bug: all history before logging started was
3844 3850 being written one character per line! This came from the redesign
3845 3851 of the input history as a special list which slices to strings,
3846 3852 not to lists.
3847 3853
3848 3854 2002-05-20 Fernando Perez <fperez@colorado.edu>
3849 3855
3850 3856 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3851 3857 be an attribute of all classes in this module. The design of these
3852 3858 classes needs some serious overhauling.
3853 3859
3854 3860 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3855 3861 which was ignoring '_' in option names.
3856 3862
3857 3863 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3858 3864 'Verbose_novars' to 'Context' and made it the new default. It's a
3859 3865 bit more readable and also safer than verbose.
3860 3866
3861 3867 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3862 3868 triple-quoted strings.
3863 3869
3864 3870 * IPython/OInspect.py (__all__): new module exposing the object
3865 3871 introspection facilities. Now the corresponding magics are dummy
3866 3872 wrappers around this. Having this module will make it much easier
3867 3873 to put these functions into our modified pdb.
3868 3874 This new object inspector system uses the new colorizing module,
3869 3875 so source code and other things are nicely syntax highlighted.
3870 3876
3871 3877 2002-05-18 Fernando Perez <fperez@colorado.edu>
3872 3878
3873 3879 * IPython/ColorANSI.py: Split the coloring tools into a separate
3874 3880 module so I can use them in other code easier (they were part of
3875 3881 ultraTB).
3876 3882
3877 3883 2002-05-17 Fernando Perez <fperez@colorado.edu>
3878 3884
3879 3885 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3880 3886 fixed it to set the global 'g' also to the called instance, as
3881 3887 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3882 3888 user's 'g' variables).
3883 3889
3884 3890 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3885 3891 global variables (aliases to _ih,_oh) so that users which expect
3886 3892 In[5] or Out[7] to work aren't unpleasantly surprised.
3887 3893 (InputList.__getslice__): new class to allow executing slices of
3888 3894 input history directly. Very simple class, complements the use of
3889 3895 macros.
3890 3896
3891 3897 2002-05-16 Fernando Perez <fperez@colorado.edu>
3892 3898
3893 3899 * setup.py (docdirbase): make doc directory be just doc/IPython
3894 3900 without version numbers, it will reduce clutter for users.
3895 3901
3896 3902 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3897 3903 execfile call to prevent possible memory leak. See for details:
3898 3904 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3899 3905
3900 3906 2002-05-15 Fernando Perez <fperez@colorado.edu>
3901 3907
3902 3908 * IPython/Magic.py (Magic.magic_psource): made the object
3903 3909 introspection names be more standard: pdoc, pdef, pfile and
3904 3910 psource. They all print/page their output, and it makes
3905 3911 remembering them easier. Kept old names for compatibility as
3906 3912 aliases.
3907 3913
3908 3914 2002-05-14 Fernando Perez <fperez@colorado.edu>
3909 3915
3910 3916 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3911 3917 what the mouse problem was. The trick is to use gnuplot with temp
3912 3918 files and NOT with pipes (for data communication), because having
3913 3919 both pipes and the mouse on is bad news.
3914 3920
3915 3921 2002-05-13 Fernando Perez <fperez@colorado.edu>
3916 3922
3917 3923 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3918 3924 bug. Information would be reported about builtins even when
3919 3925 user-defined functions overrode them.
3920 3926
3921 3927 2002-05-11 Fernando Perez <fperez@colorado.edu>
3922 3928
3923 3929 * IPython/__init__.py (__all__): removed FlexCompleter from
3924 3930 __all__ so that things don't fail in platforms without readline.
3925 3931
3926 3932 2002-05-10 Fernando Perez <fperez@colorado.edu>
3927 3933
3928 3934 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3929 3935 it requires Numeric, effectively making Numeric a dependency for
3930 3936 IPython.
3931 3937
3932 3938 * Released 0.2.13
3933 3939
3934 3940 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3935 3941 profiler interface. Now all the major options from the profiler
3936 3942 module are directly supported in IPython, both for single
3937 3943 expressions (@prun) and for full programs (@run -p).
3938 3944
3939 3945 2002-05-09 Fernando Perez <fperez@colorado.edu>
3940 3946
3941 3947 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3942 3948 magic properly formatted for screen.
3943 3949
3944 3950 * setup.py (make_shortcut): Changed things to put pdf version in
3945 3951 doc/ instead of doc/manual (had to change lyxport a bit).
3946 3952
3947 3953 * IPython/Magic.py (Profile.string_stats): made profile runs go
3948 3954 through pager (they are long and a pager allows searching, saving,
3949 3955 etc.)
3950 3956
3951 3957 2002-05-08 Fernando Perez <fperez@colorado.edu>
3952 3958
3953 3959 * Released 0.2.12
3954 3960
3955 3961 2002-05-06 Fernando Perez <fperez@colorado.edu>
3956 3962
3957 3963 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3958 3964 introduced); 'hist n1 n2' was broken.
3959 3965 (Magic.magic_pdb): added optional on/off arguments to @pdb
3960 3966 (Magic.magic_run): added option -i to @run, which executes code in
3961 3967 the IPython namespace instead of a clean one. Also added @irun as
3962 3968 an alias to @run -i.
3963 3969
3964 3970 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3965 3971 fixed (it didn't really do anything, the namespaces were wrong).
3966 3972
3967 3973 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3968 3974
3969 3975 * IPython/__init__.py (__all__): Fixed package namespace, now
3970 3976 'import IPython' does give access to IPython.<all> as
3971 3977 expected. Also renamed __release__ to Release.
3972 3978
3973 3979 * IPython/Debugger.py (__license__): created new Pdb class which
3974 3980 functions like a drop-in for the normal pdb.Pdb but does NOT
3975 3981 import readline by default. This way it doesn't muck up IPython's
3976 3982 readline handling, and now tab-completion finally works in the
3977 3983 debugger -- sort of. It completes things globally visible, but the
3978 3984 completer doesn't track the stack as pdb walks it. That's a bit
3979 3985 tricky, and I'll have to implement it later.
3980 3986
3981 3987 2002-05-05 Fernando Perez <fperez@colorado.edu>
3982 3988
3983 3989 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3984 3990 magic docstrings when printed via ? (explicit \'s were being
3985 3991 printed).
3986 3992
3987 3993 * IPython/ipmaker.py (make_IPython): fixed namespace
3988 3994 identification bug. Now variables loaded via logs or command-line
3989 3995 files are recognized in the interactive namespace by @who.
3990 3996
3991 3997 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3992 3998 log replay system stemming from the string form of Structs.
3993 3999
3994 4000 * IPython/Magic.py (Macro.__init__): improved macros to properly
3995 4001 handle magic commands in them.
3996 4002 (Magic.magic_logstart): usernames are now expanded so 'logstart
3997 4003 ~/mylog' now works.
3998 4004
3999 4005 * IPython/iplib.py (complete): fixed bug where paths starting with
4000 4006 '/' would be completed as magic names.
4001 4007
4002 4008 2002-05-04 Fernando Perez <fperez@colorado.edu>
4003 4009
4004 4010 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4005 4011 allow running full programs under the profiler's control.
4006 4012
4007 4013 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4008 4014 mode to report exceptions verbosely but without formatting
4009 4015 variables. This addresses the issue of ipython 'freezing' (it's
4010 4016 not frozen, but caught in an expensive formatting loop) when huge
4011 4017 variables are in the context of an exception.
4012 4018 (VerboseTB.text): Added '--->' markers at line where exception was
4013 4019 triggered. Much clearer to read, especially in NoColor modes.
4014 4020
4015 4021 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4016 4022 implemented in reverse when changing to the new parse_options().
4017 4023
4018 4024 2002-05-03 Fernando Perez <fperez@colorado.edu>
4019 4025
4020 4026 * IPython/Magic.py (Magic.parse_options): new function so that
4021 4027 magics can parse options easier.
4022 4028 (Magic.magic_prun): new function similar to profile.run(),
4023 4029 suggested by Chris Hart.
4024 4030 (Magic.magic_cd): fixed behavior so that it only changes if
4025 4031 directory actually is in history.
4026 4032
4027 4033 * IPython/usage.py (__doc__): added information about potential
4028 4034 slowness of Verbose exception mode when there are huge data
4029 4035 structures to be formatted (thanks to Archie Paulson).
4030 4036
4031 4037 * IPython/ipmaker.py (make_IPython): Changed default logging
4032 4038 (when simply called with -log) to use curr_dir/ipython.log in
4033 4039 rotate mode. Fixed crash which was occuring with -log before
4034 4040 (thanks to Jim Boyle).
4035 4041
4036 4042 2002-05-01 Fernando Perez <fperez@colorado.edu>
4037 4043
4038 4044 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4039 4045 was nasty -- though somewhat of a corner case).
4040 4046
4041 4047 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4042 4048 text (was a bug).
4043 4049
4044 4050 2002-04-30 Fernando Perez <fperez@colorado.edu>
4045 4051
4046 4052 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4047 4053 a print after ^D or ^C from the user so that the In[] prompt
4048 4054 doesn't over-run the gnuplot one.
4049 4055
4050 4056 2002-04-29 Fernando Perez <fperez@colorado.edu>
4051 4057
4052 4058 * Released 0.2.10
4053 4059
4054 4060 * IPython/__release__.py (version): get date dynamically.
4055 4061
4056 4062 * Misc. documentation updates thanks to Arnd's comments. Also ran
4057 4063 a full spellcheck on the manual (hadn't been done in a while).
4058 4064
4059 4065 2002-04-27 Fernando Perez <fperez@colorado.edu>
4060 4066
4061 4067 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4062 4068 starting a log in mid-session would reset the input history list.
4063 4069
4064 4070 2002-04-26 Fernando Perez <fperez@colorado.edu>
4065 4071
4066 4072 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4067 4073 all files were being included in an update. Now anything in
4068 4074 UserConfig that matches [A-Za-z]*.py will go (this excludes
4069 4075 __init__.py)
4070 4076
4071 4077 2002-04-25 Fernando Perez <fperez@colorado.edu>
4072 4078
4073 4079 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4074 4080 to __builtins__ so that any form of embedded or imported code can
4075 4081 test for being inside IPython.
4076 4082
4077 4083 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4078 4084 changed to GnuplotMagic because it's now an importable module,
4079 4085 this makes the name follow that of the standard Gnuplot module.
4080 4086 GnuplotMagic can now be loaded at any time in mid-session.
4081 4087
4082 4088 2002-04-24 Fernando Perez <fperez@colorado.edu>
4083 4089
4084 4090 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4085 4091 the globals (IPython has its own namespace) and the
4086 4092 PhysicalQuantity stuff is much better anyway.
4087 4093
4088 4094 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4089 4095 embedding example to standard user directory for
4090 4096 distribution. Also put it in the manual.
4091 4097
4092 4098 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4093 4099 instance as first argument (so it doesn't rely on some obscure
4094 4100 hidden global).
4095 4101
4096 4102 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4097 4103 delimiters. While it prevents ().TAB from working, it allows
4098 4104 completions in open (... expressions. This is by far a more common
4099 4105 case.
4100 4106
4101 4107 2002-04-23 Fernando Perez <fperez@colorado.edu>
4102 4108
4103 4109 * IPython/Extensions/InterpreterPasteInput.py: new
4104 4110 syntax-processing module for pasting lines with >>> or ... at the
4105 4111 start.
4106 4112
4107 4113 * IPython/Extensions/PhysicalQ_Interactive.py
4108 4114 (PhysicalQuantityInteractive.__int__): fixed to work with either
4109 4115 Numeric or math.
4110 4116
4111 4117 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4112 4118 provided profiles. Now we have:
4113 4119 -math -> math module as * and cmath with its own namespace.
4114 4120 -numeric -> Numeric as *, plus gnuplot & grace
4115 4121 -physics -> same as before
4116 4122
4117 4123 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4118 4124 user-defined magics wouldn't be found by @magic if they were
4119 4125 defined as class methods. Also cleaned up the namespace search
4120 4126 logic and the string building (to use %s instead of many repeated
4121 4127 string adds).
4122 4128
4123 4129 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4124 4130 of user-defined magics to operate with class methods (cleaner, in
4125 4131 line with the gnuplot code).
4126 4132
4127 4133 2002-04-22 Fernando Perez <fperez@colorado.edu>
4128 4134
4129 4135 * setup.py: updated dependency list so that manual is updated when
4130 4136 all included files change.
4131 4137
4132 4138 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4133 4139 the delimiter removal option (the fix is ugly right now).
4134 4140
4135 4141 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4136 4142 all of the math profile (quicker loading, no conflict between
4137 4143 g-9.8 and g-gnuplot).
4138 4144
4139 4145 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4140 4146 name of post-mortem files to IPython_crash_report.txt.
4141 4147
4142 4148 * Cleanup/update of the docs. Added all the new readline info and
4143 4149 formatted all lists as 'real lists'.
4144 4150
4145 4151 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4146 4152 tab-completion options, since the full readline parse_and_bind is
4147 4153 now accessible.
4148 4154
4149 4155 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4150 4156 handling of readline options. Now users can specify any string to
4151 4157 be passed to parse_and_bind(), as well as the delimiters to be
4152 4158 removed.
4153 4159 (InteractiveShell.__init__): Added __name__ to the global
4154 4160 namespace so that things like Itpl which rely on its existence
4155 4161 don't crash.
4156 4162 (InteractiveShell._prefilter): Defined the default with a _ so
4157 4163 that prefilter() is easier to override, while the default one
4158 4164 remains available.
4159 4165
4160 4166 2002-04-18 Fernando Perez <fperez@colorado.edu>
4161 4167
4162 4168 * Added information about pdb in the docs.
4163 4169
4164 4170 2002-04-17 Fernando Perez <fperez@colorado.edu>
4165 4171
4166 4172 * IPython/ipmaker.py (make_IPython): added rc_override option to
4167 4173 allow passing config options at creation time which may override
4168 4174 anything set in the config files or command line. This is
4169 4175 particularly useful for configuring embedded instances.
4170 4176
4171 4177 2002-04-15 Fernando Perez <fperez@colorado.edu>
4172 4178
4173 4179 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4174 4180 crash embedded instances because of the input cache falling out of
4175 4181 sync with the output counter.
4176 4182
4177 4183 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4178 4184 mode which calls pdb after an uncaught exception in IPython itself.
4179 4185
4180 4186 2002-04-14 Fernando Perez <fperez@colorado.edu>
4181 4187
4182 4188 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4183 4189 readline, fix it back after each call.
4184 4190
4185 4191 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4186 4192 method to force all access via __call__(), which guarantees that
4187 4193 traceback references are properly deleted.
4188 4194
4189 4195 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4190 4196 improve printing when pprint is in use.
4191 4197
4192 4198 2002-04-13 Fernando Perez <fperez@colorado.edu>
4193 4199
4194 4200 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4195 4201 exceptions aren't caught anymore. If the user triggers one, he
4196 4202 should know why he's doing it and it should go all the way up,
4197 4203 just like any other exception. So now @abort will fully kill the
4198 4204 embedded interpreter and the embedding code (unless that happens
4199 4205 to catch SystemExit).
4200 4206
4201 4207 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4202 4208 and a debugger() method to invoke the interactive pdb debugger
4203 4209 after printing exception information. Also added the corresponding
4204 4210 -pdb option and @pdb magic to control this feature, and updated
4205 4211 the docs. After a suggestion from Christopher Hart
4206 4212 (hart-AT-caltech.edu).
4207 4213
4208 4214 2002-04-12 Fernando Perez <fperez@colorado.edu>
4209 4215
4210 4216 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4211 4217 the exception handlers defined by the user (not the CrashHandler)
4212 4218 so that user exceptions don't trigger an ipython bug report.
4213 4219
4214 4220 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4215 4221 configurable (it should have always been so).
4216 4222
4217 4223 2002-03-26 Fernando Perez <fperez@colorado.edu>
4218 4224
4219 4225 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4220 4226 and there to fix embedding namespace issues. This should all be
4221 4227 done in a more elegant way.
4222 4228
4223 4229 2002-03-25 Fernando Perez <fperez@colorado.edu>
4224 4230
4225 4231 * IPython/genutils.py (get_home_dir): Try to make it work under
4226 4232 win9x also.
4227 4233
4228 4234 2002-03-20 Fernando Perez <fperez@colorado.edu>
4229 4235
4230 4236 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4231 4237 sys.displayhook untouched upon __init__.
4232 4238
4233 4239 2002-03-19 Fernando Perez <fperez@colorado.edu>
4234 4240
4235 4241 * Released 0.2.9 (for embedding bug, basically).
4236 4242
4237 4243 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4238 4244 exceptions so that enclosing shell's state can be restored.
4239 4245
4240 4246 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4241 4247 naming conventions in the .ipython/ dir.
4242 4248
4243 4249 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4244 4250 from delimiters list so filenames with - in them get expanded.
4245 4251
4246 4252 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4247 4253 sys.displayhook not being properly restored after an embedded call.
4248 4254
4249 4255 2002-03-18 Fernando Perez <fperez@colorado.edu>
4250 4256
4251 4257 * Released 0.2.8
4252 4258
4253 4259 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4254 4260 some files weren't being included in a -upgrade.
4255 4261 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4256 4262 on' so that the first tab completes.
4257 4263 (InteractiveShell.handle_magic): fixed bug with spaces around
4258 4264 quotes breaking many magic commands.
4259 4265
4260 4266 * setup.py: added note about ignoring the syntax error messages at
4261 4267 installation.
4262 4268
4263 4269 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4264 4270 streamlining the gnuplot interface, now there's only one magic @gp.
4265 4271
4266 4272 2002-03-17 Fernando Perez <fperez@colorado.edu>
4267 4273
4268 4274 * IPython/UserConfig/magic_gnuplot.py: new name for the
4269 4275 example-magic_pm.py file. Much enhanced system, now with a shell
4270 4276 for communicating directly with gnuplot, one command at a time.
4271 4277
4272 4278 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4273 4279 setting __name__=='__main__'.
4274 4280
4275 4281 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4276 4282 mini-shell for accessing gnuplot from inside ipython. Should
4277 4283 extend it later for grace access too. Inspired by Arnd's
4278 4284 suggestion.
4279 4285
4280 4286 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4281 4287 calling magic functions with () in their arguments. Thanks to Arnd
4282 4288 Baecker for pointing this to me.
4283 4289
4284 4290 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4285 4291 infinitely for integer or complex arrays (only worked with floats).
4286 4292
4287 4293 2002-03-16 Fernando Perez <fperez@colorado.edu>
4288 4294
4289 4295 * setup.py: Merged setup and setup_windows into a single script
4290 4296 which properly handles things for windows users.
4291 4297
4292 4298 2002-03-15 Fernando Perez <fperez@colorado.edu>
4293 4299
4294 4300 * Big change to the manual: now the magics are all automatically
4295 4301 documented. This information is generated from their docstrings
4296 4302 and put in a latex file included by the manual lyx file. This way
4297 4303 we get always up to date information for the magics. The manual
4298 4304 now also has proper version information, also auto-synced.
4299 4305
4300 4306 For this to work, an undocumented --magic_docstrings option was added.
4301 4307
4302 4308 2002-03-13 Fernando Perez <fperez@colorado.edu>
4303 4309
4304 4310 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4305 4311 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4306 4312
4307 4313 2002-03-12 Fernando Perez <fperez@colorado.edu>
4308 4314
4309 4315 * IPython/ultraTB.py (TermColors): changed color escapes again to
4310 4316 fix the (old, reintroduced) line-wrapping bug. Basically, if
4311 4317 \001..\002 aren't given in the color escapes, lines get wrapped
4312 4318 weirdly. But giving those screws up old xterms and emacs terms. So
4313 4319 I added some logic for emacs terms to be ok, but I can't identify old
4314 4320 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4315 4321
4316 4322 2002-03-10 Fernando Perez <fperez@colorado.edu>
4317 4323
4318 4324 * IPython/usage.py (__doc__): Various documentation cleanups and
4319 4325 updates, both in usage docstrings and in the manual.
4320 4326
4321 4327 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4322 4328 handling of caching. Set minimum acceptabe value for having a
4323 4329 cache at 20 values.
4324 4330
4325 4331 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4326 4332 install_first_time function to a method, renamed it and added an
4327 4333 'upgrade' mode. Now people can update their config directory with
4328 4334 a simple command line switch (-upgrade, also new).
4329 4335
4330 4336 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4331 4337 @file (convenient for automagic users under Python >= 2.2).
4332 4338 Removed @files (it seemed more like a plural than an abbrev. of
4333 4339 'file show').
4334 4340
4335 4341 * IPython/iplib.py (install_first_time): Fixed crash if there were
4336 4342 backup files ('~') in .ipython/ install directory.
4337 4343
4338 4344 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4339 4345 system. Things look fine, but these changes are fairly
4340 4346 intrusive. Test them for a few days.
4341 4347
4342 4348 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4343 4349 the prompts system. Now all in/out prompt strings are user
4344 4350 controllable. This is particularly useful for embedding, as one
4345 4351 can tag embedded instances with particular prompts.
4346 4352
4347 4353 Also removed global use of sys.ps1/2, which now allows nested
4348 4354 embeddings without any problems. Added command-line options for
4349 4355 the prompt strings.
4350 4356
4351 4357 2002-03-08 Fernando Perez <fperez@colorado.edu>
4352 4358
4353 4359 * IPython/UserConfig/example-embed-short.py (ipshell): added
4354 4360 example file with the bare minimum code for embedding.
4355 4361
4356 4362 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4357 4363 functionality for the embeddable shell to be activated/deactivated
4358 4364 either globally or at each call.
4359 4365
4360 4366 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4361 4367 rewriting the prompt with '--->' for auto-inputs with proper
4362 4368 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4363 4369 this is handled by the prompts class itself, as it should.
4364 4370
4365 4371 2002-03-05 Fernando Perez <fperez@colorado.edu>
4366 4372
4367 4373 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4368 4374 @logstart to avoid name clashes with the math log function.
4369 4375
4370 4376 * Big updates to X/Emacs section of the manual.
4371 4377
4372 4378 * Removed ipython_emacs. Milan explained to me how to pass
4373 4379 arguments to ipython through Emacs. Some day I'm going to end up
4374 4380 learning some lisp...
4375 4381
4376 4382 2002-03-04 Fernando Perez <fperez@colorado.edu>
4377 4383
4378 4384 * IPython/ipython_emacs: Created script to be used as the
4379 4385 py-python-command Emacs variable so we can pass IPython
4380 4386 parameters. I can't figure out how to tell Emacs directly to pass
4381 4387 parameters to IPython, so a dummy shell script will do it.
4382 4388
4383 4389 Other enhancements made for things to work better under Emacs'
4384 4390 various types of terminals. Many thanks to Milan Zamazal
4385 4391 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4386 4392
4387 4393 2002-03-01 Fernando Perez <fperez@colorado.edu>
4388 4394
4389 4395 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4390 4396 that loading of readline is now optional. This gives better
4391 4397 control to emacs users.
4392 4398
4393 4399 * IPython/ultraTB.py (__date__): Modified color escape sequences
4394 4400 and now things work fine under xterm and in Emacs' term buffers
4395 4401 (though not shell ones). Well, in emacs you get colors, but all
4396 4402 seem to be 'light' colors (no difference between dark and light
4397 4403 ones). But the garbage chars are gone, and also in xterms. It
4398 4404 seems that now I'm using 'cleaner' ansi sequences.
4399 4405
4400 4406 2002-02-21 Fernando Perez <fperez@colorado.edu>
4401 4407
4402 4408 * Released 0.2.7 (mainly to publish the scoping fix).
4403 4409
4404 4410 * IPython/Logger.py (Logger.logstate): added. A corresponding
4405 4411 @logstate magic was created.
4406 4412
4407 4413 * IPython/Magic.py: fixed nested scoping problem under Python
4408 4414 2.1.x (automagic wasn't working).
4409 4415
4410 4416 2002-02-20 Fernando Perez <fperez@colorado.edu>
4411 4417
4412 4418 * Released 0.2.6.
4413 4419
4414 4420 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4415 4421 option so that logs can come out without any headers at all.
4416 4422
4417 4423 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4418 4424 SciPy.
4419 4425
4420 4426 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4421 4427 that embedded IPython calls don't require vars() to be explicitly
4422 4428 passed. Now they are extracted from the caller's frame (code
4423 4429 snatched from Eric Jones' weave). Added better documentation to
4424 4430 the section on embedding and the example file.
4425 4431
4426 4432 * IPython/genutils.py (page): Changed so that under emacs, it just
4427 4433 prints the string. You can then page up and down in the emacs
4428 4434 buffer itself. This is how the builtin help() works.
4429 4435
4430 4436 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4431 4437 macro scoping: macros need to be executed in the user's namespace
4432 4438 to work as if they had been typed by the user.
4433 4439
4434 4440 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4435 4441 execute automatically (no need to type 'exec...'). They then
4436 4442 behave like 'true macros'. The printing system was also modified
4437 4443 for this to work.
4438 4444
4439 4445 2002-02-19 Fernando Perez <fperez@colorado.edu>
4440 4446
4441 4447 * IPython/genutils.py (page_file): new function for paging files
4442 4448 in an OS-independent way. Also necessary for file viewing to work
4443 4449 well inside Emacs buffers.
4444 4450 (page): Added checks for being in an emacs buffer.
4445 4451 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4446 4452 same bug in iplib.
4447 4453
4448 4454 2002-02-18 Fernando Perez <fperez@colorado.edu>
4449 4455
4450 4456 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4451 4457 of readline so that IPython can work inside an Emacs buffer.
4452 4458
4453 4459 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4454 4460 method signatures (they weren't really bugs, but it looks cleaner
4455 4461 and keeps PyChecker happy).
4456 4462
4457 4463 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4458 4464 for implementing various user-defined hooks. Currently only
4459 4465 display is done.
4460 4466
4461 4467 * IPython/Prompts.py (CachedOutput._display): changed display
4462 4468 functions so that they can be dynamically changed by users easily.
4463 4469
4464 4470 * IPython/Extensions/numeric_formats.py (num_display): added an
4465 4471 extension for printing NumPy arrays in flexible manners. It
4466 4472 doesn't do anything yet, but all the structure is in
4467 4473 place. Ultimately the plan is to implement output format control
4468 4474 like in Octave.
4469 4475
4470 4476 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4471 4477 methods are found at run-time by all the automatic machinery.
4472 4478
4473 4479 2002-02-17 Fernando Perez <fperez@colorado.edu>
4474 4480
4475 4481 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4476 4482 whole file a little.
4477 4483
4478 4484 * ToDo: closed this document. Now there's a new_design.lyx
4479 4485 document for all new ideas. Added making a pdf of it for the
4480 4486 end-user distro.
4481 4487
4482 4488 * IPython/Logger.py (Logger.switch_log): Created this to replace
4483 4489 logon() and logoff(). It also fixes a nasty crash reported by
4484 4490 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4485 4491
4486 4492 * IPython/iplib.py (complete): got auto-completion to work with
4487 4493 automagic (I had wanted this for a long time).
4488 4494
4489 4495 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4490 4496 to @file, since file() is now a builtin and clashes with automagic
4491 4497 for @file.
4492 4498
4493 4499 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4494 4500 of this was previously in iplib, which had grown to more than 2000
4495 4501 lines, way too long. No new functionality, but it makes managing
4496 4502 the code a bit easier.
4497 4503
4498 4504 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4499 4505 information to crash reports.
4500 4506
4501 4507 2002-02-12 Fernando Perez <fperez@colorado.edu>
4502 4508
4503 4509 * Released 0.2.5.
4504 4510
4505 4511 2002-02-11 Fernando Perez <fperez@colorado.edu>
4506 4512
4507 4513 * Wrote a relatively complete Windows installer. It puts
4508 4514 everything in place, creates Start Menu entries and fixes the
4509 4515 color issues. Nothing fancy, but it works.
4510 4516
4511 4517 2002-02-10 Fernando Perez <fperez@colorado.edu>
4512 4518
4513 4519 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4514 4520 os.path.expanduser() call so that we can type @run ~/myfile.py and
4515 4521 have thigs work as expected.
4516 4522
4517 4523 * IPython/genutils.py (page): fixed exception handling so things
4518 4524 work both in Unix and Windows correctly. Quitting a pager triggers
4519 4525 an IOError/broken pipe in Unix, and in windows not finding a pager
4520 4526 is also an IOError, so I had to actually look at the return value
4521 4527 of the exception, not just the exception itself. Should be ok now.
4522 4528
4523 4529 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4524 4530 modified to allow case-insensitive color scheme changes.
4525 4531
4526 4532 2002-02-09 Fernando Perez <fperez@colorado.edu>
4527 4533
4528 4534 * IPython/genutils.py (native_line_ends): new function to leave
4529 4535 user config files with os-native line-endings.
4530 4536
4531 4537 * README and manual updates.
4532 4538
4533 4539 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4534 4540 instead of StringType to catch Unicode strings.
4535 4541
4536 4542 * IPython/genutils.py (filefind): fixed bug for paths with
4537 4543 embedded spaces (very common in Windows).
4538 4544
4539 4545 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4540 4546 files under Windows, so that they get automatically associated
4541 4547 with a text editor. Windows makes it a pain to handle
4542 4548 extension-less files.
4543 4549
4544 4550 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4545 4551 warning about readline only occur for Posix. In Windows there's no
4546 4552 way to get readline, so why bother with the warning.
4547 4553
4548 4554 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4549 4555 for __str__ instead of dir(self), since dir() changed in 2.2.
4550 4556
4551 4557 * Ported to Windows! Tested on XP, I suspect it should work fine
4552 4558 on NT/2000, but I don't think it will work on 98 et al. That
4553 4559 series of Windows is such a piece of junk anyway that I won't try
4554 4560 porting it there. The XP port was straightforward, showed a few
4555 4561 bugs here and there (fixed all), in particular some string
4556 4562 handling stuff which required considering Unicode strings (which
4557 4563 Windows uses). This is good, but hasn't been too tested :) No
4558 4564 fancy installer yet, I'll put a note in the manual so people at
4559 4565 least make manually a shortcut.
4560 4566
4561 4567 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4562 4568 into a single one, "colors". This now controls both prompt and
4563 4569 exception color schemes, and can be changed both at startup
4564 4570 (either via command-line switches or via ipythonrc files) and at
4565 4571 runtime, with @colors.
4566 4572 (Magic.magic_run): renamed @prun to @run and removed the old
4567 4573 @run. The two were too similar to warrant keeping both.
4568 4574
4569 4575 2002-02-03 Fernando Perez <fperez@colorado.edu>
4570 4576
4571 4577 * IPython/iplib.py (install_first_time): Added comment on how to
4572 4578 configure the color options for first-time users. Put a <return>
4573 4579 request at the end so that small-terminal users get a chance to
4574 4580 read the startup info.
4575 4581
4576 4582 2002-01-23 Fernando Perez <fperez@colorado.edu>
4577 4583
4578 4584 * IPython/iplib.py (CachedOutput.update): Changed output memory
4579 4585 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4580 4586 input history we still use _i. Did this b/c these variable are
4581 4587 very commonly used in interactive work, so the less we need to
4582 4588 type the better off we are.
4583 4589 (Magic.magic_prun): updated @prun to better handle the namespaces
4584 4590 the file will run in, including a fix for __name__ not being set
4585 4591 before.
4586 4592
4587 4593 2002-01-20 Fernando Perez <fperez@colorado.edu>
4588 4594
4589 4595 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4590 4596 extra garbage for Python 2.2. Need to look more carefully into
4591 4597 this later.
4592 4598
4593 4599 2002-01-19 Fernando Perez <fperez@colorado.edu>
4594 4600
4595 4601 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4596 4602 display SyntaxError exceptions properly formatted when they occur
4597 4603 (they can be triggered by imported code).
4598 4604
4599 4605 2002-01-18 Fernando Perez <fperez@colorado.edu>
4600 4606
4601 4607 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4602 4608 SyntaxError exceptions are reported nicely formatted, instead of
4603 4609 spitting out only offset information as before.
4604 4610 (Magic.magic_prun): Added the @prun function for executing
4605 4611 programs with command line args inside IPython.
4606 4612
4607 4613 2002-01-16 Fernando Perez <fperez@colorado.edu>
4608 4614
4609 4615 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4610 4616 to *not* include the last item given in a range. This brings their
4611 4617 behavior in line with Python's slicing:
4612 4618 a[n1:n2] -> a[n1]...a[n2-1]
4613 4619 It may be a bit less convenient, but I prefer to stick to Python's
4614 4620 conventions *everywhere*, so users never have to wonder.
4615 4621 (Magic.magic_macro): Added @macro function to ease the creation of
4616 4622 macros.
4617 4623
4618 4624 2002-01-05 Fernando Perez <fperez@colorado.edu>
4619 4625
4620 4626 * Released 0.2.4.
4621 4627
4622 4628 * IPython/iplib.py (Magic.magic_pdef):
4623 4629 (InteractiveShell.safe_execfile): report magic lines and error
4624 4630 lines without line numbers so one can easily copy/paste them for
4625 4631 re-execution.
4626 4632
4627 4633 * Updated manual with recent changes.
4628 4634
4629 4635 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4630 4636 docstring printing when class? is called. Very handy for knowing
4631 4637 how to create class instances (as long as __init__ is well
4632 4638 documented, of course :)
4633 4639 (Magic.magic_doc): print both class and constructor docstrings.
4634 4640 (Magic.magic_pdef): give constructor info if passed a class and
4635 4641 __call__ info for callable object instances.
4636 4642
4637 4643 2002-01-04 Fernando Perez <fperez@colorado.edu>
4638 4644
4639 4645 * Made deep_reload() off by default. It doesn't always work
4640 4646 exactly as intended, so it's probably safer to have it off. It's
4641 4647 still available as dreload() anyway, so nothing is lost.
4642 4648
4643 4649 2002-01-02 Fernando Perez <fperez@colorado.edu>
4644 4650
4645 4651 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4646 4652 so I wanted an updated release).
4647 4653
4648 4654 2001-12-27 Fernando Perez <fperez@colorado.edu>
4649 4655
4650 4656 * IPython/iplib.py (InteractiveShell.interact): Added the original
4651 4657 code from 'code.py' for this module in order to change the
4652 4658 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4653 4659 the history cache would break when the user hit Ctrl-C, and
4654 4660 interact() offers no way to add any hooks to it.
4655 4661
4656 4662 2001-12-23 Fernando Perez <fperez@colorado.edu>
4657 4663
4658 4664 * setup.py: added check for 'MANIFEST' before trying to remove
4659 4665 it. Thanks to Sean Reifschneider.
4660 4666
4661 4667 2001-12-22 Fernando Perez <fperez@colorado.edu>
4662 4668
4663 4669 * Released 0.2.2.
4664 4670
4665 4671 * Finished (reasonably) writing the manual. Later will add the
4666 4672 python-standard navigation stylesheets, but for the time being
4667 4673 it's fairly complete. Distribution will include html and pdf
4668 4674 versions.
4669 4675
4670 4676 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4671 4677 (MayaVi author).
4672 4678
4673 4679 2001-12-21 Fernando Perez <fperez@colorado.edu>
4674 4680
4675 4681 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4676 4682 good public release, I think (with the manual and the distutils
4677 4683 installer). The manual can use some work, but that can go
4678 4684 slowly. Otherwise I think it's quite nice for end users. Next
4679 4685 summer, rewrite the guts of it...
4680 4686
4681 4687 * Changed format of ipythonrc files to use whitespace as the
4682 4688 separator instead of an explicit '='. Cleaner.
4683 4689
4684 4690 2001-12-20 Fernando Perez <fperez@colorado.edu>
4685 4691
4686 4692 * Started a manual in LyX. For now it's just a quick merge of the
4687 4693 various internal docstrings and READMEs. Later it may grow into a
4688 4694 nice, full-blown manual.
4689 4695
4690 4696 * Set up a distutils based installer. Installation should now be
4691 4697 trivially simple for end-users.
4692 4698
4693 4699 2001-12-11 Fernando Perez <fperez@colorado.edu>
4694 4700
4695 4701 * Released 0.2.0. First public release, announced it at
4696 4702 comp.lang.python. From now on, just bugfixes...
4697 4703
4698 4704 * Went through all the files, set copyright/license notices and
4699 4705 cleaned up things. Ready for release.
4700 4706
4701 4707 2001-12-10 Fernando Perez <fperez@colorado.edu>
4702 4708
4703 4709 * Changed the first-time installer not to use tarfiles. It's more
4704 4710 robust now and less unix-dependent. Also makes it easier for
4705 4711 people to later upgrade versions.
4706 4712
4707 4713 * Changed @exit to @abort to reflect the fact that it's pretty
4708 4714 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4709 4715 becomes significant only when IPyhton is embedded: in that case,
4710 4716 C-D closes IPython only, but @abort kills the enclosing program
4711 4717 too (unless it had called IPython inside a try catching
4712 4718 SystemExit).
4713 4719
4714 4720 * Created Shell module which exposes the actuall IPython Shell
4715 4721 classes, currently the normal and the embeddable one. This at
4716 4722 least offers a stable interface we won't need to change when
4717 4723 (later) the internals are rewritten. That rewrite will be confined
4718 4724 to iplib and ipmaker, but the Shell interface should remain as is.
4719 4725
4720 4726 * Added embed module which offers an embeddable IPShell object,
4721 4727 useful to fire up IPython *inside* a running program. Great for
4722 4728 debugging or dynamical data analysis.
4723 4729
4724 4730 2001-12-08 Fernando Perez <fperez@colorado.edu>
4725 4731
4726 4732 * Fixed small bug preventing seeing info from methods of defined
4727 4733 objects (incorrect namespace in _ofind()).
4728 4734
4729 4735 * Documentation cleanup. Moved the main usage docstrings to a
4730 4736 separate file, usage.py (cleaner to maintain, and hopefully in the
4731 4737 future some perlpod-like way of producing interactive, man and
4732 4738 html docs out of it will be found).
4733 4739
4734 4740 * Added @profile to see your profile at any time.
4735 4741
4736 4742 * Added @p as an alias for 'print'. It's especially convenient if
4737 4743 using automagic ('p x' prints x).
4738 4744
4739 4745 * Small cleanups and fixes after a pychecker run.
4740 4746
4741 4747 * Changed the @cd command to handle @cd - and @cd -<n> for
4742 4748 visiting any directory in _dh.
4743 4749
4744 4750 * Introduced _dh, a history of visited directories. @dhist prints
4745 4751 it out with numbers.
4746 4752
4747 4753 2001-12-07 Fernando Perez <fperez@colorado.edu>
4748 4754
4749 4755 * Released 0.1.22
4750 4756
4751 4757 * Made initialization a bit more robust against invalid color
4752 4758 options in user input (exit, not traceback-crash).
4753 4759
4754 4760 * Changed the bug crash reporter to write the report only in the
4755 4761 user's .ipython directory. That way IPython won't litter people's
4756 4762 hard disks with crash files all over the place. Also print on
4757 4763 screen the necessary mail command.
4758 4764
4759 4765 * With the new ultraTB, implemented LightBG color scheme for light
4760 4766 background terminals. A lot of people like white backgrounds, so I
4761 4767 guess we should at least give them something readable.
4762 4768
4763 4769 2001-12-06 Fernando Perez <fperez@colorado.edu>
4764 4770
4765 4771 * Modified the structure of ultraTB. Now there's a proper class
4766 4772 for tables of color schemes which allow adding schemes easily and
4767 4773 switching the active scheme without creating a new instance every
4768 4774 time (which was ridiculous). The syntax for creating new schemes
4769 4775 is also cleaner. I think ultraTB is finally done, with a clean
4770 4776 class structure. Names are also much cleaner (now there's proper
4771 4777 color tables, no need for every variable to also have 'color' in
4772 4778 its name).
4773 4779
4774 4780 * Broke down genutils into separate files. Now genutils only
4775 4781 contains utility functions, and classes have been moved to their
4776 4782 own files (they had enough independent functionality to warrant
4777 4783 it): ConfigLoader, OutputTrap, Struct.
4778 4784
4779 4785 2001-12-05 Fernando Perez <fperez@colorado.edu>
4780 4786
4781 4787 * IPython turns 21! Released version 0.1.21, as a candidate for
4782 4788 public consumption. If all goes well, release in a few days.
4783 4789
4784 4790 * Fixed path bug (files in Extensions/ directory wouldn't be found
4785 4791 unless IPython/ was explicitly in sys.path).
4786 4792
4787 4793 * Extended the FlexCompleter class as MagicCompleter to allow
4788 4794 completion of @-starting lines.
4789 4795
4790 4796 * Created __release__.py file as a central repository for release
4791 4797 info that other files can read from.
4792 4798
4793 4799 * Fixed small bug in logging: when logging was turned on in
4794 4800 mid-session, old lines with special meanings (!@?) were being
4795 4801 logged without the prepended comment, which is necessary since
4796 4802 they are not truly valid python syntax. This should make session
4797 4803 restores produce less errors.
4798 4804
4799 4805 * The namespace cleanup forced me to make a FlexCompleter class
4800 4806 which is nothing but a ripoff of rlcompleter, but with selectable
4801 4807 namespace (rlcompleter only works in __main__.__dict__). I'll try
4802 4808 to submit a note to the authors to see if this change can be
4803 4809 incorporated in future rlcompleter releases (Dec.6: done)
4804 4810
4805 4811 * More fixes to namespace handling. It was a mess! Now all
4806 4812 explicit references to __main__.__dict__ are gone (except when
4807 4813 really needed) and everything is handled through the namespace
4808 4814 dicts in the IPython instance. We seem to be getting somewhere
4809 4815 with this, finally...
4810 4816
4811 4817 * Small documentation updates.
4812 4818
4813 4819 * Created the Extensions directory under IPython (with an
4814 4820 __init__.py). Put the PhysicalQ stuff there. This directory should
4815 4821 be used for all special-purpose extensions.
4816 4822
4817 4823 * File renaming:
4818 4824 ipythonlib --> ipmaker
4819 4825 ipplib --> iplib
4820 4826 This makes a bit more sense in terms of what these files actually do.
4821 4827
4822 4828 * Moved all the classes and functions in ipythonlib to ipplib, so
4823 4829 now ipythonlib only has make_IPython(). This will ease up its
4824 4830 splitting in smaller functional chunks later.
4825 4831
4826 4832 * Cleaned up (done, I think) output of @whos. Better column
4827 4833 formatting, and now shows str(var) for as much as it can, which is
4828 4834 typically what one gets with a 'print var'.
4829 4835
4830 4836 2001-12-04 Fernando Perez <fperez@colorado.edu>
4831 4837
4832 4838 * Fixed namespace problems. Now builtin/IPyhton/user names get
4833 4839 properly reported in their namespace. Internal namespace handling
4834 4840 is finally getting decent (not perfect yet, but much better than
4835 4841 the ad-hoc mess we had).
4836 4842
4837 4843 * Removed -exit option. If people just want to run a python
4838 4844 script, that's what the normal interpreter is for. Less
4839 4845 unnecessary options, less chances for bugs.
4840 4846
4841 4847 * Added a crash handler which generates a complete post-mortem if
4842 4848 IPython crashes. This will help a lot in tracking bugs down the
4843 4849 road.
4844 4850
4845 4851 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4846 4852 which were boud to functions being reassigned would bypass the
4847 4853 logger, breaking the sync of _il with the prompt counter. This
4848 4854 would then crash IPython later when a new line was logged.
4849 4855
4850 4856 2001-12-02 Fernando Perez <fperez@colorado.edu>
4851 4857
4852 4858 * Made IPython a package. This means people don't have to clutter
4853 4859 their sys.path with yet another directory. Changed the INSTALL
4854 4860 file accordingly.
4855 4861
4856 4862 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4857 4863 sorts its output (so @who shows it sorted) and @whos formats the
4858 4864 table according to the width of the first column. Nicer, easier to
4859 4865 read. Todo: write a generic table_format() which takes a list of
4860 4866 lists and prints it nicely formatted, with optional row/column
4861 4867 separators and proper padding and justification.
4862 4868
4863 4869 * Released 0.1.20
4864 4870
4865 4871 * Fixed bug in @log which would reverse the inputcache list (a
4866 4872 copy operation was missing).
4867 4873
4868 4874 * Code cleanup. @config was changed to use page(). Better, since
4869 4875 its output is always quite long.
4870 4876
4871 4877 * Itpl is back as a dependency. I was having too many problems
4872 4878 getting the parametric aliases to work reliably, and it's just
4873 4879 easier to code weird string operations with it than playing %()s
4874 4880 games. It's only ~6k, so I don't think it's too big a deal.
4875 4881
4876 4882 * Found (and fixed) a very nasty bug with history. !lines weren't
4877 4883 getting cached, and the out of sync caches would crash
4878 4884 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4879 4885 division of labor a bit better. Bug fixed, cleaner structure.
4880 4886
4881 4887 2001-12-01 Fernando Perez <fperez@colorado.edu>
4882 4888
4883 4889 * Released 0.1.19
4884 4890
4885 4891 * Added option -n to @hist to prevent line number printing. Much
4886 4892 easier to copy/paste code this way.
4887 4893
4888 4894 * Created global _il to hold the input list. Allows easy
4889 4895 re-execution of blocks of code by slicing it (inspired by Janko's
4890 4896 comment on 'macros').
4891 4897
4892 4898 * Small fixes and doc updates.
4893 4899
4894 4900 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4895 4901 much too fragile with automagic. Handles properly multi-line
4896 4902 statements and takes parameters.
4897 4903
4898 4904 2001-11-30 Fernando Perez <fperez@colorado.edu>
4899 4905
4900 4906 * Version 0.1.18 released.
4901 4907
4902 4908 * Fixed nasty namespace bug in initial module imports.
4903 4909
4904 4910 * Added copyright/license notes to all code files (except
4905 4911 DPyGetOpt). For the time being, LGPL. That could change.
4906 4912
4907 4913 * Rewrote a much nicer README, updated INSTALL, cleaned up
4908 4914 ipythonrc-* samples.
4909 4915
4910 4916 * Overall code/documentation cleanup. Basically ready for
4911 4917 release. Only remaining thing: licence decision (LGPL?).
4912 4918
4913 4919 * Converted load_config to a class, ConfigLoader. Now recursion
4914 4920 control is better organized. Doesn't include the same file twice.
4915 4921
4916 4922 2001-11-29 Fernando Perez <fperez@colorado.edu>
4917 4923
4918 4924 * Got input history working. Changed output history variables from
4919 4925 _p to _o so that _i is for input and _o for output. Just cleaner
4920 4926 convention.
4921 4927
4922 4928 * Implemented parametric aliases. This pretty much allows the
4923 4929 alias system to offer full-blown shell convenience, I think.
4924 4930
4925 4931 * Version 0.1.17 released, 0.1.18 opened.
4926 4932
4927 4933 * dot_ipython/ipythonrc (alias): added documentation.
4928 4934 (xcolor): Fixed small bug (xcolors -> xcolor)
4929 4935
4930 4936 * Changed the alias system. Now alias is a magic command to define
4931 4937 aliases just like the shell. Rationale: the builtin magics should
4932 4938 be there for things deeply connected to IPython's
4933 4939 architecture. And this is a much lighter system for what I think
4934 4940 is the really important feature: allowing users to define quickly
4935 4941 magics that will do shell things for them, so they can customize
4936 4942 IPython easily to match their work habits. If someone is really
4937 4943 desperate to have another name for a builtin alias, they can
4938 4944 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4939 4945 works.
4940 4946
4941 4947 2001-11-28 Fernando Perez <fperez@colorado.edu>
4942 4948
4943 4949 * Changed @file so that it opens the source file at the proper
4944 4950 line. Since it uses less, if your EDITOR environment is
4945 4951 configured, typing v will immediately open your editor of choice
4946 4952 right at the line where the object is defined. Not as quick as
4947 4953 having a direct @edit command, but for all intents and purposes it
4948 4954 works. And I don't have to worry about writing @edit to deal with
4949 4955 all the editors, less does that.
4950 4956
4951 4957 * Version 0.1.16 released, 0.1.17 opened.
4952 4958
4953 4959 * Fixed some nasty bugs in the page/page_dumb combo that could
4954 4960 crash IPython.
4955 4961
4956 4962 2001-11-27 Fernando Perez <fperez@colorado.edu>
4957 4963
4958 4964 * Version 0.1.15 released, 0.1.16 opened.
4959 4965
4960 4966 * Finally got ? and ?? to work for undefined things: now it's
4961 4967 possible to type {}.get? and get information about the get method
4962 4968 of dicts, or os.path? even if only os is defined (so technically
4963 4969 os.path isn't). Works at any level. For example, after import os,
4964 4970 os?, os.path?, os.path.abspath? all work. This is great, took some
4965 4971 work in _ofind.
4966 4972
4967 4973 * Fixed more bugs with logging. The sanest way to do it was to add
4968 4974 to @log a 'mode' parameter. Killed two in one shot (this mode
4969 4975 option was a request of Janko's). I think it's finally clean
4970 4976 (famous last words).
4971 4977
4972 4978 * Added a page_dumb() pager which does a decent job of paging on
4973 4979 screen, if better things (like less) aren't available. One less
4974 4980 unix dependency (someday maybe somebody will port this to
4975 4981 windows).
4976 4982
4977 4983 * Fixed problem in magic_log: would lock of logging out if log
4978 4984 creation failed (because it would still think it had succeeded).
4979 4985
4980 4986 * Improved the page() function using curses to auto-detect screen
4981 4987 size. Now it can make a much better decision on whether to print
4982 4988 or page a string. Option screen_length was modified: a value 0
4983 4989 means auto-detect, and that's the default now.
4984 4990
4985 4991 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4986 4992 go out. I'll test it for a few days, then talk to Janko about
4987 4993 licences and announce it.
4988 4994
4989 4995 * Fixed the length of the auto-generated ---> prompt which appears
4990 4996 for auto-parens and auto-quotes. Getting this right isn't trivial,
4991 4997 with all the color escapes, different prompt types and optional
4992 4998 separators. But it seems to be working in all the combinations.
4993 4999
4994 5000 2001-11-26 Fernando Perez <fperez@colorado.edu>
4995 5001
4996 5002 * Wrote a regexp filter to get option types from the option names
4997 5003 string. This eliminates the need to manually keep two duplicate
4998 5004 lists.
4999 5005
5000 5006 * Removed the unneeded check_option_names. Now options are handled
5001 5007 in a much saner manner and it's easy to visually check that things
5002 5008 are ok.
5003 5009
5004 5010 * Updated version numbers on all files I modified to carry a
5005 5011 notice so Janko and Nathan have clear version markers.
5006 5012
5007 5013 * Updated docstring for ultraTB with my changes. I should send
5008 5014 this to Nathan.
5009 5015
5010 5016 * Lots of small fixes. Ran everything through pychecker again.
5011 5017
5012 5018 * Made loading of deep_reload an cmd line option. If it's not too
5013 5019 kosher, now people can just disable it. With -nodeep_reload it's
5014 5020 still available as dreload(), it just won't overwrite reload().
5015 5021
5016 5022 * Moved many options to the no| form (-opt and -noopt
5017 5023 accepted). Cleaner.
5018 5024
5019 5025 * Changed magic_log so that if called with no parameters, it uses
5020 5026 'rotate' mode. That way auto-generated logs aren't automatically
5021 5027 over-written. For normal logs, now a backup is made if it exists
5022 5028 (only 1 level of backups). A new 'backup' mode was added to the
5023 5029 Logger class to support this. This was a request by Janko.
5024 5030
5025 5031 * Added @logoff/@logon to stop/restart an active log.
5026 5032
5027 5033 * Fixed a lot of bugs in log saving/replay. It was pretty
5028 5034 broken. Now special lines (!@,/) appear properly in the command
5029 5035 history after a log replay.
5030 5036
5031 5037 * Tried and failed to implement full session saving via pickle. My
5032 5038 idea was to pickle __main__.__dict__, but modules can't be
5033 5039 pickled. This would be a better alternative to replaying logs, but
5034 5040 seems quite tricky to get to work. Changed -session to be called
5035 5041 -logplay, which more accurately reflects what it does. And if we
5036 5042 ever get real session saving working, -session is now available.
5037 5043
5038 5044 * Implemented color schemes for prompts also. As for tracebacks,
5039 5045 currently only NoColor and Linux are supported. But now the
5040 5046 infrastructure is in place, based on a generic ColorScheme
5041 5047 class. So writing and activating new schemes both for the prompts
5042 5048 and the tracebacks should be straightforward.
5043 5049
5044 5050 * Version 0.1.13 released, 0.1.14 opened.
5045 5051
5046 5052 * Changed handling of options for output cache. Now counter is
5047 5053 hardwired starting at 1 and one specifies the maximum number of
5048 5054 entries *in the outcache* (not the max prompt counter). This is
5049 5055 much better, since many statements won't increase the cache
5050 5056 count. It also eliminated some confusing options, now there's only
5051 5057 one: cache_size.
5052 5058
5053 5059 * Added 'alias' magic function and magic_alias option in the
5054 5060 ipythonrc file. Now the user can easily define whatever names he
5055 5061 wants for the magic functions without having to play weird
5056 5062 namespace games. This gives IPython a real shell-like feel.
5057 5063
5058 5064 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5059 5065 @ or not).
5060 5066
5061 5067 This was one of the last remaining 'visible' bugs (that I know
5062 5068 of). I think if I can clean up the session loading so it works
5063 5069 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5064 5070 about licensing).
5065 5071
5066 5072 2001-11-25 Fernando Perez <fperez@colorado.edu>
5067 5073
5068 5074 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5069 5075 there's a cleaner distinction between what ? and ?? show.
5070 5076
5071 5077 * Added screen_length option. Now the user can define his own
5072 5078 screen size for page() operations.
5073 5079
5074 5080 * Implemented magic shell-like functions with automatic code
5075 5081 generation. Now adding another function is just a matter of adding
5076 5082 an entry to a dict, and the function is dynamically generated at
5077 5083 run-time. Python has some really cool features!
5078 5084
5079 5085 * Renamed many options to cleanup conventions a little. Now all
5080 5086 are lowercase, and only underscores where needed. Also in the code
5081 5087 option name tables are clearer.
5082 5088
5083 5089 * Changed prompts a little. Now input is 'In [n]:' instead of
5084 5090 'In[n]:='. This allows it the numbers to be aligned with the
5085 5091 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5086 5092 Python (it was a Mathematica thing). The '...' continuation prompt
5087 5093 was also changed a little to align better.
5088 5094
5089 5095 * Fixed bug when flushing output cache. Not all _p<n> variables
5090 5096 exist, so their deletion needs to be wrapped in a try:
5091 5097
5092 5098 * Figured out how to properly use inspect.formatargspec() (it
5093 5099 requires the args preceded by *). So I removed all the code from
5094 5100 _get_pdef in Magic, which was just replicating that.
5095 5101
5096 5102 * Added test to prefilter to allow redefining magic function names
5097 5103 as variables. This is ok, since the @ form is always available,
5098 5104 but whe should allow the user to define a variable called 'ls' if
5099 5105 he needs it.
5100 5106
5101 5107 * Moved the ToDo information from README into a separate ToDo.
5102 5108
5103 5109 * General code cleanup and small bugfixes. I think it's close to a
5104 5110 state where it can be released, obviously with a big 'beta'
5105 5111 warning on it.
5106 5112
5107 5113 * Got the magic function split to work. Now all magics are defined
5108 5114 in a separate class. It just organizes things a bit, and now
5109 5115 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5110 5116 was too long).
5111 5117
5112 5118 * Changed @clear to @reset to avoid potential confusions with
5113 5119 the shell command clear. Also renamed @cl to @clear, which does
5114 5120 exactly what people expect it to from their shell experience.
5115 5121
5116 5122 Added a check to the @reset command (since it's so
5117 5123 destructive, it's probably a good idea to ask for confirmation).
5118 5124 But now reset only works for full namespace resetting. Since the
5119 5125 del keyword is already there for deleting a few specific
5120 5126 variables, I don't see the point of having a redundant magic
5121 5127 function for the same task.
5122 5128
5123 5129 2001-11-24 Fernando Perez <fperez@colorado.edu>
5124 5130
5125 5131 * Updated the builtin docs (esp. the ? ones).
5126 5132
5127 5133 * Ran all the code through pychecker. Not terribly impressed with
5128 5134 it: lots of spurious warnings and didn't really find anything of
5129 5135 substance (just a few modules being imported and not used).
5130 5136
5131 5137 * Implemented the new ultraTB functionality into IPython. New
5132 5138 option: xcolors. This chooses color scheme. xmode now only selects
5133 5139 between Plain and Verbose. Better orthogonality.
5134 5140
5135 5141 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5136 5142 mode and color scheme for the exception handlers. Now it's
5137 5143 possible to have the verbose traceback with no coloring.
5138 5144
5139 5145 2001-11-23 Fernando Perez <fperez@colorado.edu>
5140 5146
5141 5147 * Version 0.1.12 released, 0.1.13 opened.
5142 5148
5143 5149 * Removed option to set auto-quote and auto-paren escapes by
5144 5150 user. The chances of breaking valid syntax are just too high. If
5145 5151 someone *really* wants, they can always dig into the code.
5146 5152
5147 5153 * Made prompt separators configurable.
5148 5154
5149 5155 2001-11-22 Fernando Perez <fperez@colorado.edu>
5150 5156
5151 5157 * Small bugfixes in many places.
5152 5158
5153 5159 * Removed the MyCompleter class from ipplib. It seemed redundant
5154 5160 with the C-p,C-n history search functionality. Less code to
5155 5161 maintain.
5156 5162
5157 5163 * Moved all the original ipython.py code into ipythonlib.py. Right
5158 5164 now it's just one big dump into a function called make_IPython, so
5159 5165 no real modularity has been gained. But at least it makes the
5160 5166 wrapper script tiny, and since ipythonlib is a module, it gets
5161 5167 compiled and startup is much faster.
5162 5168
5163 5169 This is a reasobably 'deep' change, so we should test it for a
5164 5170 while without messing too much more with the code.
5165 5171
5166 5172 2001-11-21 Fernando Perez <fperez@colorado.edu>
5167 5173
5168 5174 * Version 0.1.11 released, 0.1.12 opened for further work.
5169 5175
5170 5176 * Removed dependency on Itpl. It was only needed in one place. It
5171 5177 would be nice if this became part of python, though. It makes life
5172 5178 *a lot* easier in some cases.
5173 5179
5174 5180 * Simplified the prefilter code a bit. Now all handlers are
5175 5181 expected to explicitly return a value (at least a blank string).
5176 5182
5177 5183 * Heavy edits in ipplib. Removed the help system altogether. Now
5178 5184 obj?/?? is used for inspecting objects, a magic @doc prints
5179 5185 docstrings, and full-blown Python help is accessed via the 'help'
5180 5186 keyword. This cleans up a lot of code (less to maintain) and does
5181 5187 the job. Since 'help' is now a standard Python component, might as
5182 5188 well use it and remove duplicate functionality.
5183 5189
5184 5190 Also removed the option to use ipplib as a standalone program. By
5185 5191 now it's too dependent on other parts of IPython to function alone.
5186 5192
5187 5193 * Fixed bug in genutils.pager. It would crash if the pager was
5188 5194 exited immediately after opening (broken pipe).
5189 5195
5190 5196 * Trimmed down the VerboseTB reporting a little. The header is
5191 5197 much shorter now and the repeated exception arguments at the end
5192 5198 have been removed. For interactive use the old header seemed a bit
5193 5199 excessive.
5194 5200
5195 5201 * Fixed small bug in output of @whos for variables with multi-word
5196 5202 types (only first word was displayed).
5197 5203
5198 5204 2001-11-17 Fernando Perez <fperez@colorado.edu>
5199 5205
5200 5206 * Version 0.1.10 released, 0.1.11 opened for further work.
5201 5207
5202 5208 * Modified dirs and friends. dirs now *returns* the stack (not
5203 5209 prints), so one can manipulate it as a variable. Convenient to
5204 5210 travel along many directories.
5205 5211
5206 5212 * Fixed bug in magic_pdef: would only work with functions with
5207 5213 arguments with default values.
5208 5214
5209 5215 2001-11-14 Fernando Perez <fperez@colorado.edu>
5210 5216
5211 5217 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5212 5218 example with IPython. Various other minor fixes and cleanups.
5213 5219
5214 5220 * Version 0.1.9 released, 0.1.10 opened for further work.
5215 5221
5216 5222 * Added sys.path to the list of directories searched in the
5217 5223 execfile= option. It used to be the current directory and the
5218 5224 user's IPYTHONDIR only.
5219 5225
5220 5226 2001-11-13 Fernando Perez <fperez@colorado.edu>
5221 5227
5222 5228 * Reinstated the raw_input/prefilter separation that Janko had
5223 5229 initially. This gives a more convenient setup for extending the
5224 5230 pre-processor from the outside: raw_input always gets a string,
5225 5231 and prefilter has to process it. We can then redefine prefilter
5226 5232 from the outside and implement extensions for special
5227 5233 purposes.
5228 5234
5229 5235 Today I got one for inputting PhysicalQuantity objects
5230 5236 (from Scientific) without needing any function calls at
5231 5237 all. Extremely convenient, and it's all done as a user-level
5232 5238 extension (no IPython code was touched). Now instead of:
5233 5239 a = PhysicalQuantity(4.2,'m/s**2')
5234 5240 one can simply say
5235 5241 a = 4.2 m/s**2
5236 5242 or even
5237 5243 a = 4.2 m/s^2
5238 5244
5239 5245 I use this, but it's also a proof of concept: IPython really is
5240 5246 fully user-extensible, even at the level of the parsing of the
5241 5247 command line. It's not trivial, but it's perfectly doable.
5242 5248
5243 5249 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5244 5250 the problem of modules being loaded in the inverse order in which
5245 5251 they were defined in
5246 5252
5247 5253 * Version 0.1.8 released, 0.1.9 opened for further work.
5248 5254
5249 5255 * Added magics pdef, source and file. They respectively show the
5250 5256 definition line ('prototype' in C), source code and full python
5251 5257 file for any callable object. The object inspector oinfo uses
5252 5258 these to show the same information.
5253 5259
5254 5260 * Version 0.1.7 released, 0.1.8 opened for further work.
5255 5261
5256 5262 * Separated all the magic functions into a class called Magic. The
5257 5263 InteractiveShell class was becoming too big for Xemacs to handle
5258 5264 (de-indenting a line would lock it up for 10 seconds while it
5259 5265 backtracked on the whole class!)
5260 5266
5261 5267 FIXME: didn't work. It can be done, but right now namespaces are
5262 5268 all messed up. Do it later (reverted it for now, so at least
5263 5269 everything works as before).
5264 5270
5265 5271 * Got the object introspection system (magic_oinfo) working! I
5266 5272 think this is pretty much ready for release to Janko, so he can
5267 5273 test it for a while and then announce it. Pretty much 100% of what
5268 5274 I wanted for the 'phase 1' release is ready. Happy, tired.
5269 5275
5270 5276 2001-11-12 Fernando Perez <fperez@colorado.edu>
5271 5277
5272 5278 * Version 0.1.6 released, 0.1.7 opened for further work.
5273 5279
5274 5280 * Fixed bug in printing: it used to test for truth before
5275 5281 printing, so 0 wouldn't print. Now checks for None.
5276 5282
5277 5283 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5278 5284 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5279 5285 reaches by hand into the outputcache. Think of a better way to do
5280 5286 this later.
5281 5287
5282 5288 * Various small fixes thanks to Nathan's comments.
5283 5289
5284 5290 * Changed magic_pprint to magic_Pprint. This way it doesn't
5285 5291 collide with pprint() and the name is consistent with the command
5286 5292 line option.
5287 5293
5288 5294 * Changed prompt counter behavior to be fully like
5289 5295 Mathematica's. That is, even input that doesn't return a result
5290 5296 raises the prompt counter. The old behavior was kind of confusing
5291 5297 (getting the same prompt number several times if the operation
5292 5298 didn't return a result).
5293 5299
5294 5300 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5295 5301
5296 5302 * Fixed -Classic mode (wasn't working anymore).
5297 5303
5298 5304 * Added colored prompts using Nathan's new code. Colors are
5299 5305 currently hardwired, they can be user-configurable. For
5300 5306 developers, they can be chosen in file ipythonlib.py, at the
5301 5307 beginning of the CachedOutput class def.
5302 5308
5303 5309 2001-11-11 Fernando Perez <fperez@colorado.edu>
5304 5310
5305 5311 * Version 0.1.5 released, 0.1.6 opened for further work.
5306 5312
5307 5313 * Changed magic_env to *return* the environment as a dict (not to
5308 5314 print it). This way it prints, but it can also be processed.
5309 5315
5310 5316 * Added Verbose exception reporting to interactive
5311 5317 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5312 5318 traceback. Had to make some changes to the ultraTB file. This is
5313 5319 probably the last 'big' thing in my mental todo list. This ties
5314 5320 in with the next entry:
5315 5321
5316 5322 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5317 5323 has to specify is Plain, Color or Verbose for all exception
5318 5324 handling.
5319 5325
5320 5326 * Removed ShellServices option. All this can really be done via
5321 5327 the magic system. It's easier to extend, cleaner and has automatic
5322 5328 namespace protection and documentation.
5323 5329
5324 5330 2001-11-09 Fernando Perez <fperez@colorado.edu>
5325 5331
5326 5332 * Fixed bug in output cache flushing (missing parameter to
5327 5333 __init__). Other small bugs fixed (found using pychecker).
5328 5334
5329 5335 * Version 0.1.4 opened for bugfixing.
5330 5336
5331 5337 2001-11-07 Fernando Perez <fperez@colorado.edu>
5332 5338
5333 5339 * Version 0.1.3 released, mainly because of the raw_input bug.
5334 5340
5335 5341 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5336 5342 and when testing for whether things were callable, a call could
5337 5343 actually be made to certain functions. They would get called again
5338 5344 once 'really' executed, with a resulting double call. A disaster
5339 5345 in many cases (list.reverse() would never work!).
5340 5346
5341 5347 * Removed prefilter() function, moved its code to raw_input (which
5342 5348 after all was just a near-empty caller for prefilter). This saves
5343 5349 a function call on every prompt, and simplifies the class a tiny bit.
5344 5350
5345 5351 * Fix _ip to __ip name in magic example file.
5346 5352
5347 5353 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5348 5354 work with non-gnu versions of tar.
5349 5355
5350 5356 2001-11-06 Fernando Perez <fperez@colorado.edu>
5351 5357
5352 5358 * Version 0.1.2. Just to keep track of the recent changes.
5353 5359
5354 5360 * Fixed nasty bug in output prompt routine. It used to check 'if
5355 5361 arg != None...'. Problem is, this fails if arg implements a
5356 5362 special comparison (__cmp__) which disallows comparing to
5357 5363 None. Found it when trying to use the PhysicalQuantity module from
5358 5364 ScientificPython.
5359 5365
5360 5366 2001-11-05 Fernando Perez <fperez@colorado.edu>
5361 5367
5362 5368 * Also added dirs. Now the pushd/popd/dirs family functions
5363 5369 basically like the shell, with the added convenience of going home
5364 5370 when called with no args.
5365 5371
5366 5372 * pushd/popd slightly modified to mimic shell behavior more
5367 5373 closely.
5368 5374
5369 5375 * Added env,pushd,popd from ShellServices as magic functions. I
5370 5376 think the cleanest will be to port all desired functions from
5371 5377 ShellServices as magics and remove ShellServices altogether. This
5372 5378 will provide a single, clean way of adding functionality
5373 5379 (shell-type or otherwise) to IP.
5374 5380
5375 5381 2001-11-04 Fernando Perez <fperez@colorado.edu>
5376 5382
5377 5383 * Added .ipython/ directory to sys.path. This way users can keep
5378 5384 customizations there and access them via import.
5379 5385
5380 5386 2001-11-03 Fernando Perez <fperez@colorado.edu>
5381 5387
5382 5388 * Opened version 0.1.1 for new changes.
5383 5389
5384 5390 * Changed version number to 0.1.0: first 'public' release, sent to
5385 5391 Nathan and Janko.
5386 5392
5387 5393 * Lots of small fixes and tweaks.
5388 5394
5389 5395 * Minor changes to whos format. Now strings are shown, snipped if
5390 5396 too long.
5391 5397
5392 5398 * Changed ShellServices to work on __main__ so they show up in @who
5393 5399
5394 5400 * Help also works with ? at the end of a line:
5395 5401 ?sin and sin?
5396 5402 both produce the same effect. This is nice, as often I use the
5397 5403 tab-complete to find the name of a method, but I used to then have
5398 5404 to go to the beginning of the line to put a ? if I wanted more
5399 5405 info. Now I can just add the ? and hit return. Convenient.
5400 5406
5401 5407 2001-11-02 Fernando Perez <fperez@colorado.edu>
5402 5408
5403 5409 * Python version check (>=2.1) added.
5404 5410
5405 5411 * Added LazyPython documentation. At this point the docs are quite
5406 5412 a mess. A cleanup is in order.
5407 5413
5408 5414 * Auto-installer created. For some bizarre reason, the zipfiles
5409 5415 module isn't working on my system. So I made a tar version
5410 5416 (hopefully the command line options in various systems won't kill
5411 5417 me).
5412 5418
5413 5419 * Fixes to Struct in genutils. Now all dictionary-like methods are
5414 5420 protected (reasonably).
5415 5421
5416 5422 * Added pager function to genutils and changed ? to print usage
5417 5423 note through it (it was too long).
5418 5424
5419 5425 * Added the LazyPython functionality. Works great! I changed the
5420 5426 auto-quote escape to ';', it's on home row and next to '. But
5421 5427 both auto-quote and auto-paren (still /) escapes are command-line
5422 5428 parameters.
5423 5429
5424 5430
5425 5431 2001-11-01 Fernando Perez <fperez@colorado.edu>
5426 5432
5427 5433 * Version changed to 0.0.7. Fairly large change: configuration now
5428 5434 is all stored in a directory, by default .ipython. There, all
5429 5435 config files have normal looking names (not .names)
5430 5436
5431 5437 * Version 0.0.6 Released first to Lucas and Archie as a test
5432 5438 run. Since it's the first 'semi-public' release, change version to
5433 5439 > 0.0.6 for any changes now.
5434 5440
5435 5441 * Stuff I had put in the ipplib.py changelog:
5436 5442
5437 5443 Changes to InteractiveShell:
5438 5444
5439 5445 - Made the usage message a parameter.
5440 5446
5441 5447 - Require the name of the shell variable to be given. It's a bit
5442 5448 of a hack, but allows the name 'shell' not to be hardwire in the
5443 5449 magic (@) handler, which is problematic b/c it requires
5444 5450 polluting the global namespace with 'shell'. This in turn is
5445 5451 fragile: if a user redefines a variable called shell, things
5446 5452 break.
5447 5453
5448 5454 - magic @: all functions available through @ need to be defined
5449 5455 as magic_<name>, even though they can be called simply as
5450 5456 @<name>. This allows the special command @magic to gather
5451 5457 information automatically about all existing magic functions,
5452 5458 even if they are run-time user extensions, by parsing the shell
5453 5459 instance __dict__ looking for special magic_ names.
5454 5460
5455 5461 - mainloop: added *two* local namespace parameters. This allows
5456 5462 the class to differentiate between parameters which were there
5457 5463 before and after command line initialization was processed. This
5458 5464 way, later @who can show things loaded at startup by the
5459 5465 user. This trick was necessary to make session saving/reloading
5460 5466 really work: ideally after saving/exiting/reloading a session,
5461 5467 *everythin* should look the same, including the output of @who. I
5462 5468 was only able to make this work with this double namespace
5463 5469 trick.
5464 5470
5465 5471 - added a header to the logfile which allows (almost) full
5466 5472 session restoring.
5467 5473
5468 5474 - prepend lines beginning with @ or !, with a and log
5469 5475 them. Why? !lines: may be useful to know what you did @lines:
5470 5476 they may affect session state. So when restoring a session, at
5471 5477 least inform the user of their presence. I couldn't quite get
5472 5478 them to properly re-execute, but at least the user is warned.
5473 5479
5474 5480 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now