##// END OF EJS Templates
Added ipapi, the extension api for ipython....
vivainio -
Show More
@@ -0,0 +1,78 b''
1 ''' IPython customization API
2
3 Your one-stop module for configuring ipython
4
5 This is experimental, use at your own risk.
6
7 All names prefixed by underscores are for internal use, not part
8 of the public api.
9
10 No formal doc yet, here's an example that you can just put
11 to a module and import from ipython.
12
13 -----------------------------------------------
14 import IPython.ipapi as ip
15
16 def ankka_f(self, arg):
17 print "Ankka",self,"says uppercase:",arg.upper()
18
19 ip.expose_magic("ankka",ankka_f)
20
21 ip.magic('alias sayhi echo "Testing, hi ok"')
22 ip.magic('alias helloworld echo "Hello world"')
23 ip.system('pwd')
24
25 ip.ex('import re')
26 ip.ex("""
27 def funcci(a,b):
28 print a+b
29 print funcci(3,4)
30 """)
31 ip.ex("funcci(348,9)")
32
33 def jed_editor(self,filename, linenum=None):
34 print "Calling my own editor, jed ... via hook!"
35 import os
36 if linenum is None: linenum = 0
37 os.system('jed +%d %s' % (linenum, filename))
38 print "exiting jed"
39
40 ip.set_hook('editor',jed_editor)
41 print "done!"
42
43 '''
44
45
46
47
48 def _init_with_shell(ip):
49 global magic
50 magic = ip.ipmagic
51 global system
52 system = ip.ipsystem
53 global set_hook
54 set_hook = ip.set_hook
55 global __IP
56 __IP = ip
57
58 def user_ns():
59 return __IP.user_ns
60
61 def expose_magic(magicname, func):
62 ''' Expose own function as magic function for ipython
63
64 def foo_impl(self,parameter_s=''):
65 """My very own magic!. (Use docstrings, IPython reads them)."""
66 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
67 print 'The self object is:',self
68
69 ipapi.expose_magic("foo",foo_impl)
70 '''
71
72 from IPython import Magic
73
74 setattr(Magic.Magic, "magic_" + magicname, func)
75
76 def ex(cmd):
77 """ Execute a normal python statement """
78 exec cmd in user_ns() No newline at end of file
@@ -1,459 +1,461 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Tools for inspecting Python objects.
3 3
4 4 Uses syntax highlighting for presenting the various information elements.
5 5
6 6 Similar in spirit to the inspect module, but all calls take a name argument to
7 7 reference the name under which an object is being read.
8 8
9 $Id: OInspect.py 958 2005-12-27 23:17:51Z fperez $
9 $Id: OInspect.py 1016 2006-01-14 00:54:23Z vivainio $
10 10 """
11 11
12 12 #*****************************************************************************
13 13 # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu>
14 14 #
15 15 # Distributed under the terms of the BSD License. The full license is in
16 16 # the file COPYING, distributed as part of this software.
17 17 #*****************************************************************************
18 18
19 19 from IPython import Release
20 20 __author__ = '%s <%s>' % Release.authors['Fernando']
21 21 __license__ = Release.license
22 22
23 23 __all__ = ['Inspector','InspectColors']
24 24
25 25 # stdlib modules
26 26 import __builtin__
27 27 import inspect
28 28 import linecache
29 29 import string
30 30 import StringIO
31 31 import types
32 32
33 33 # IPython's own
34 34 from IPython import PyColorize
35 35 from IPython.genutils import page,indent,Term,mkdict
36 36 from IPython.Itpl import itpl
37 37 from IPython.wildcard import list_namespace
38 38 from IPython.ColorANSI import *
39 39
40 40 #****************************************************************************
41 41 # Builtin color schemes
42 42
43 43 Colors = TermColors # just a shorthand
44 44
45 45 # Build a few color schemes
46 46 NoColor = ColorScheme(
47 47 'NoColor',{
48 48 'header' : Colors.NoColor,
49 49 'normal' : Colors.NoColor # color off (usu. Colors.Normal)
50 50 } )
51 51
52 52 LinuxColors = ColorScheme(
53 53 'Linux',{
54 54 'header' : Colors.LightRed,
55 55 'normal' : Colors.Normal # color off (usu. Colors.Normal)
56 56 } )
57 57
58 58 LightBGColors = ColorScheme(
59 59 'LightBG',{
60 60 'header' : Colors.Red,
61 61 'normal' : Colors.Normal # color off (usu. Colors.Normal)
62 62 } )
63 63
64 64 # Build table of color schemes (needed by the parser)
65 65 InspectColors = ColorSchemeTable([NoColor,LinuxColors,LightBGColors],
66 66 'Linux')
67 67
68 68 #****************************************************************************
69 69 # Auxiliary functions
70 70 def getdoc(obj):
71 71 """Stable wrapper around inspect.getdoc.
72 72
73 73 This can't crash because of attribute problems.
74 74
75 75 It also attempts to call a getdoc() method on the given object. This
76 76 allows objects which provide their docstrings via non-standard mechanisms
77 77 (like Pyro proxies) to still be inspected by ipython's ? system."""
78 78
79 79 ds = None # default return value
80 80 try:
81 81 ds = inspect.getdoc(obj)
82 82 except:
83 83 # Harden against an inspect failure, which can occur with
84 84 # SWIG-wrapped extensions.
85 85 pass
86 86 # Allow objects to offer customized documentation via a getdoc method:
87 87 try:
88 88 ds2 = obj.getdoc()
89 89 except:
90 90 pass
91 91 else:
92 92 # if we get extra info, we add it to the normal docstring.
93 93 if ds is None:
94 94 ds = ds2
95 95 else:
96 96 ds = '%s\n%s' % (ds,ds2)
97 97 return ds
98 98
99 99 #****************************************************************************
100 100 # Class definitions
101 101
102 102 class myStringIO(StringIO.StringIO):
103 103 """Adds a writeln method to normal StringIO."""
104 104 def writeln(self,*arg,**kw):
105 105 """Does a write() and then a write('\n')"""
106 106 self.write(*arg,**kw)
107 107 self.write('\n')
108 108
109 109 class Inspector:
110 110 def __init__(self,color_table,code_color_table,scheme):
111 111 self.color_table = color_table
112 112 self.parser = PyColorize.Parser(code_color_table,out='str')
113 113 self.format = self.parser.format
114 114 self.set_active_scheme(scheme)
115 115
116 116 def __getargspec(self,obj):
117 117 """Get the names and default values of a function's arguments.
118 118
119 119 A tuple of four things is returned: (args, varargs, varkw, defaults).
120 120 'args' is a list of the argument names (it may contain nested lists).
121 121 'varargs' and 'varkw' are the names of the * and ** arguments or None.
122 122 'defaults' is an n-tuple of the default values of the last n arguments.
123 123
124 124 Modified version of inspect.getargspec from the Python Standard
125 125 Library."""
126 126
127 127 if inspect.isfunction(obj):
128 128 func_obj = obj
129 129 elif inspect.ismethod(obj):
130 130 func_obj = obj.im_func
131 131 else:
132 132 raise TypeError, 'arg is not a Python function'
133 133 args, varargs, varkw = inspect.getargs(func_obj.func_code)
134 134 return args, varargs, varkw, func_obj.func_defaults
135 135
136 136 def __getdef(self,obj,oname=''):
137 137 """Return the definition header for any callable object.
138 138
139 139 If any exception is generated, None is returned instead and the
140 140 exception is suppressed."""
141 141
142 142 try:
143 143 return oname + inspect.formatargspec(*self.__getargspec(obj))
144 144 except:
145 145 return None
146 146
147 147 def __head(self,h):
148 148 """Return a header string with proper colors."""
149 149 return '%s%s%s' % (self.color_table.active_colors.header,h,
150 150 self.color_table.active_colors.normal)
151 151
152 152 def set_active_scheme(self,scheme):
153 153 self.color_table.set_active_scheme(scheme)
154 154 self.parser.color_table.set_active_scheme(scheme)
155 155
156 156 def noinfo(self,msg,oname):
157 157 """Generic message when no information is found."""
158 158 print 'No %s found' % msg,
159 159 if oname:
160 160 print 'for %s' % oname
161 161 else:
162 162 print
163 163
164 164 def pdef(self,obj,oname=''):
165 165 """Print the definition header for any callable object.
166 166
167 167 If the object is a class, print the constructor information."""
168 168
169 169 if not callable(obj):
170 170 print 'Object is not callable.'
171 171 return
172 172
173 173 header = ''
174 174 if type(obj) is types.ClassType:
175 175 header = self.__head('Class constructor information:\n')
176 176 obj = obj.__init__
177 177 elif type(obj) is types.InstanceType:
178 178 obj = obj.__call__
179 179
180 180 output = self.__getdef(obj,oname)
181 181 if output is None:
182 182 self.noinfo('definition header',oname)
183 183 else:
184 184 print >>Term.cout, header,self.format(output),
185 185
186 186 def pdoc(self,obj,oname='',formatter = None):
187 187 """Print the docstring for any object.
188 188
189 189 Optional:
190 190 -formatter: a function to run the docstring through for specially
191 191 formatted docstrings."""
192 192
193 193 head = self.__head # so that itpl can find it even if private
194 194 ds = getdoc(obj)
195 195 if formatter:
196 196 ds = formatter(ds)
197 197 if type(obj) is types.ClassType:
198 198 init_ds = getdoc(obj.__init__)
199 199 output = itpl('$head("Class Docstring:")\n'
200 200 '$indent(ds)\n'
201 201 '$head("Constructor Docstring"):\n'
202 202 '$indent(init_ds)')
203 203 elif type(obj) is types.InstanceType and hasattr(obj,'__call__'):
204 204 call_ds = getdoc(obj.__call__)
205 205 if call_ds:
206 206 output = itpl('$head("Class Docstring:")\n$indent(ds)\n'
207 207 '$head("Calling Docstring:")\n$indent(call_ds)')
208 208 else:
209 209 output = ds
210 210 else:
211 211 output = ds
212 212 if output is None:
213 213 self.noinfo('documentation',oname)
214 214 return
215 215 page(output)
216 216
217 217 def psource(self,obj,oname=''):
218 218 """Print the source code for an object."""
219 219
220 220 # Flush the source cache because inspect can return out-of-date source
221 221 linecache.checkcache()
222 222 try:
223 223 src = inspect.getsource(obj)
224 224 except:
225 225 self.noinfo('source',oname)
226 226 else:
227 227 page(self.format(src))
228 228
229 229 def pfile(self,obj,oname=''):
230 230 """Show the whole file where an object was defined."""
231 231 try:
232 232 sourcelines,lineno = inspect.getsourcelines(obj)
233 233 except:
234 234 self.noinfo('file',oname)
235 235 else:
236 236 # run contents of file through pager starting at line
237 237 # where the object is defined
238 238 page(self.format(open(inspect.getabsfile(obj)).read()),lineno)
239 239
240 240 def pinfo(self,obj,oname='',formatter=None,info=None,detail_level=0):
241 241 """Show detailed information about an object.
242 242
243 243 Optional arguments:
244 244
245 245 - oname: name of the variable pointing to the object.
246 246
247 247 - formatter: special formatter for docstrings (see pdoc)
248 248
249 249 - info: a structure with some information fields which may have been
250 250 precomputed already.
251 251
252 252 - detail_level: if set to 1, more information is given.
253 253 """
254 254
255 255 obj_type = type(obj)
256 256
257 257 header = self.__head
258 258 if info is None:
259 259 ismagic = 0
260 260 isalias = 0
261 261 ospace = ''
262 262 else:
263 263 ismagic = info.ismagic
264 264 isalias = info.isalias
265 265 ospace = info.namespace
266 266 # Get docstring, special-casing aliases:
267 267 if isalias:
268 268 ds = "Alias to the system command:\n %s" % obj[1]
269 269 else:
270 270 ds = getdoc(obj)
271 if ds is None:
272 ds = '<no docstring>'
271 273 if formatter is not None:
272 274 ds = formatter(ds)
273 275
274 276 # store output in a list which gets joined with \n at the end.
275 277 out = myStringIO()
276 278
277 279 string_max = 200 # max size of strings to show (snipped if longer)
278 280 shalf = int((string_max -5)/2)
279 281
280 282 if ismagic:
281 283 obj_type_name = 'Magic function'
282 284 elif isalias:
283 285 obj_type_name = 'System alias'
284 286 else:
285 287 obj_type_name = obj_type.__name__
286 288 out.writeln(header('Type:\t\t')+obj_type_name)
287 289
288 290 try:
289 291 bclass = obj.__class__
290 292 out.writeln(header('Base Class:\t')+str(bclass))
291 293 except: pass
292 294
293 295 # String form, but snip if too long in ? form (full in ??)
294 296 try:
295 297 ostr = str(obj)
296 298 str_head = 'String Form:'
297 299 if not detail_level and len(ostr)>string_max:
298 300 ostr = ostr[:shalf] + ' <...> ' + ostr[-shalf:]
299 301 ostr = ("\n" + " " * len(str_head.expandtabs())).\
300 302 join(map(string.strip,ostr.split("\n")))
301 303 if ostr.find('\n') > -1:
302 304 # Print multi-line strings starting at the next line.
303 305 str_sep = '\n'
304 306 else:
305 307 str_sep = '\t'
306 308 out.writeln("%s%s%s" % (header(str_head),str_sep,ostr))
307 309 except:
308 310 pass
309 311
310 312 if ospace:
311 313 out.writeln(header('Namespace:\t')+ospace)
312 314
313 315 # Length (for strings and lists)
314 316 try:
315 317 length = str(len(obj))
316 318 out.writeln(header('Length:\t\t')+length)
317 319 except: pass
318 320
319 321 # Filename where object was defined
320 322 try:
321 323 file = inspect.getabsfile(obj)
322 324 if file.endswith('<string>'):
323 325 file = 'Dynamically generated function. No source code available.'
324 326 out.writeln(header('File:\t\t')+file)
325 327 except: pass
326 328
327 329 # reconstruct the function definition and print it:
328 330 defln = self.__getdef(obj,oname)
329 331 if defln:
330 332 out.write(header('Definition:\t')+self.format(defln))
331 333
332 334 # Docstrings only in detail 0 mode, since source contains them (we
333 335 # avoid repetitions). If source fails, we add them back, see below.
334 336 if ds and detail_level == 0:
335 337 out.writeln(header('Docstring:\n') + indent(ds))
336 338
337 339 # Original source code for any callable
338 340 if detail_level:
339 341 # Flush the source cache because inspect can return out-of-date source
340 342 linecache.checkcache()
341 343 try:
342 344 source = self.format(inspect.getsource(obj))
343 345 out.write(header('Source:\n')+source.rstrip())
344 346 except:
345 347 if ds:
346 348 out.writeln(header('Docstring:\n') + indent(ds))
347 349
348 350 # Constructor docstring for classes
349 351 if obj_type is types.ClassType:
350 352 # reconstruct the function definition and print it:
351 353 try:
352 354 obj_init = obj.__init__
353 355 except AttributeError:
354 356 init_def = init_ds = None
355 357 else:
356 358 init_def = self.__getdef(obj_init,oname)
357 359 init_ds = getdoc(obj_init)
358 360
359 361 if init_def or init_ds:
360 362 out.writeln(header('\nConstructor information:'))
361 363 if init_def:
362 364 out.write(header('Definition:\t')+ self.format(init_def))
363 365 if init_ds:
364 366 out.writeln(header('Docstring:\n') + indent(init_ds))
365 367 # and class docstring for instances:
366 368 elif obj_type is types.InstanceType:
367 369
368 370 # First, check whether the instance docstring is identical to the
369 371 # class one, and print it separately if they don't coincide. In
370 372 # most cases they will, but it's nice to print all the info for
371 373 # objects which use instance-customized docstrings.
372 374 if ds:
373 375 class_ds = getdoc(obj.__class__)
374 376 if class_ds and ds != class_ds:
375 377 out.writeln(header('Class Docstring:\n') +
376 378 indent(class_ds))
377 379
378 380 # Next, try to show constructor docstrings
379 381 try:
380 382 init_ds = getdoc(obj.__init__)
381 383 except AttributeError:
382 384 init_ds = None
383 385 if init_ds:
384 386 out.writeln(header('Constructor Docstring:\n') +
385 387 indent(init_ds))
386 388
387 389 # Call form docstring for callable instances
388 390 if hasattr(obj,'__call__'):
389 391 out.writeln(header('Callable:\t')+'Yes')
390 392 call_def = self.__getdef(obj.__call__,oname)
391 393 if call_def is None:
392 394 out.write(header('Call def:\t')+
393 395 'Calling definition not available.')
394 396 else:
395 397 out.write(header('Call def:\t')+self.format(call_def))
396 398 call_ds = getdoc(obj.__call__)
397 399 if call_ds:
398 400 out.writeln(header('Call docstring:\n') + indent(call_ds))
399 401
400 402 # Finally send to printer/pager
401 403 output = out.getvalue()
402 404 if output:
403 405 page(output)
404 406 # end pinfo
405 407
406 408 def psearch(self,pattern,ns_table,ns_search=[],
407 409 ignore_case=False,show_all=False):
408 410 """Search namespaces with wildcards for objects.
409 411
410 412 Arguments:
411 413
412 414 - pattern: string containing shell-like wildcards to use in namespace
413 415 searches and optionally a type specification to narrow the search to
414 416 objects of that type.
415 417
416 418 - ns_table: dict of name->namespaces for search.
417 419
418 420 Optional arguments:
419 421
420 422 - ns_search: list of namespace names to include in search.
421 423
422 424 - ignore_case(False): make the search case-insensitive.
423 425
424 426 - show_all(False): show all names, including those starting with
425 427 underscores.
426 428 """
427 429 # defaults
428 430 type_pattern = 'all'
429 431 filter = ''
430 432
431 433 cmds = pattern.split()
432 434 len_cmds = len(cmds)
433 435 if len_cmds == 1:
434 436 # Only filter pattern given
435 437 filter = cmds[0]
436 438 elif len_cmds == 2:
437 439 # Both filter and type specified
438 440 filter,type_pattern = cmds
439 441 else:
440 442 raise ValueError('invalid argument string for psearch: <%s>' %
441 443 pattern)
442 444
443 445 # filter search namespaces
444 446 for name in ns_search:
445 447 if name not in ns_table:
446 448 raise ValueError('invalid namespace <%s>. Valid names: %s' %
447 449 (name,ns_table.keys()))
448 450
449 451 #print 'type_pattern:',type_pattern # dbg
450 452 search_result = []
451 453 for ns_name in ns_search:
452 454 ns = ns_table[ns_name]
453 455 tmp_res = list(list_namespace(ns,type_pattern,filter,
454 456 ignore_case=ignore_case,
455 457 show_all=show_all))
456 458 search_result.extend(tmp_res)
457 459 search_result.sort()
458 460
459 461 page('\n'.join(search_result))
@@ -1,65 +1,66 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 One of Python's nicest features is its interactive interpreter. This allows
6 6 very fast testing of ideas without the overhead of creating test files as is
7 7 typical in most programming languages. However, the interpreter supplied with
8 8 the standard Python distribution is fairly primitive (and IDLE isn't really
9 9 much better).
10 10
11 11 IPython tries to:
12 12
13 13 i - provide an efficient environment for interactive work in Python
14 14 programming. It tries to address what we see as shortcomings of the standard
15 15 Python prompt, and adds many features to make interactive work much more
16 16 efficient.
17 17
18 18 ii - offer a flexible framework so that it can be used as the base
19 19 environment for other projects and problems where Python can be the
20 20 underlying language. Specifically scientific environments like Mathematica,
21 21 IDL and Mathcad inspired its design, but similar ideas can be useful in many
22 22 fields. Python is a fabulous language for implementing this kind of system
23 23 (due to its dynamic and introspective features), and with suitable libraries
24 24 entire systems could be built leveraging Python's power.
25 25
26 26 iii - serve as an embeddable, ready to go interpreter for your own programs.
27 27
28 28 IPython requires Python 2.2 or newer.
29 29
30 $Id: __init__.py 1014 2006-01-13 19:16:41Z vivainio $"""
30 $Id: __init__.py 1016 2006-01-14 00:54:23Z vivainio $"""
31 31
32 32 #*****************************************************************************
33 33 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
34 34 #
35 35 # Distributed under the terms of the BSD License. The full license is in
36 36 # the file COPYING, distributed as part of this software.
37 37 #*****************************************************************************
38 38
39 39 # Enforce proper version requirements
40 40 import sys
41 41 if sys.version[0:3] < '2.3':
42 42 raise ImportError, 'Python Version 2.3 or above is required.'
43 43
44 44 # Define what gets imported with a 'from IPython import *'
45 45 __all__ = ['deep_reload','genutils','ipstruct','ultraTB','DPyGetOpt',
46 46 'Itpl','hooks','ConfigLoader','OutputTrap','Release','Shell',
47 'platutils','platutils_win32','platutils_posix','platutils_dummy']
47 'platutils','platutils_win32','platutils_posix','platutils_dummy',
48 'ipapi']
48 49
49 50 # Load __all__ in IPython namespace so that a simple 'import IPython' gives
50 51 # access to them via IPython.<name>
51 52 glob,loc = globals(),locals()
52 53 for name in __all__:
53 54 __import__(name,glob,loc,[])
54 55
55 56 # Release data
56 57 from IPython import Release # do it explicitly so pydoc can see it - pydoc bug
57 58 __author__ = '%s <%s>\n%s <%s>\n%s <%s>' % \
58 59 ( Release.authors['Fernando'] + Release.authors['Janko'] + \
59 60 Release.authors['Nathan'] )
60 61 __license__ = Release.license
61 62 __version__ = Release.version
62 63 __revision__ = Release.revision
63 64
64 65 # Namespace cleanup
65 66 del name,glob,loc
@@ -1,2193 +1,2198 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 Requires Python 2.1 or newer.
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 1015 2006-01-13 22:47:06Z vivainio $
9 $Id: iplib.py 1016 2006-01-14 00:54:23Z vivainio $
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 __future__ import generators # for 2.2 backwards-compatibility
32 32
33 33 from IPython import Release
34 34 __author__ = '%s <%s>\n%s <%s>' % \
35 35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 36 __license__ = Release.license
37 37 __version__ = Release.version
38 38
39 39 # Python standard modules
40 40 import __main__
41 41 import __builtin__
42 42 import StringIO
43 43 import bdb
44 44 import cPickle as pickle
45 45 import codeop
46 46 import exceptions
47 47 import glob
48 48 import inspect
49 49 import keyword
50 50 import new
51 51 import os
52 52 import pdb
53 53 import pydoc
54 54 import re
55 55 import shutil
56 56 import string
57 57 import sys
58 58 import tempfile
59 59 import traceback
60 60 import types
61 61
62 62 from pprint import pprint, pformat
63 63
64 64 # IPython's own modules
65 65 import IPython
66 66 from IPython import OInspect,PyColorize,ultraTB
67 67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 68 from IPython.FakeModule import FakeModule
69 69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 70 from IPython.Logger import Logger
71 71 from IPython.Magic import Magic
72 72 from IPython.Prompts import CachedOutput
73 73 from IPython.ipstruct import Struct
74 74 from IPython.background_jobs import BackgroundJobManager
75 75 from IPython.usage import cmd_line_usage,interactive_usage
76 76 from IPython.genutils import *
77 import IPython.ipapi
77 78
78 79 # Globals
79 80
80 81 # store the builtin raw_input globally, and use this always, in case user code
81 82 # overwrites it (like wx.py.PyShell does)
82 83 raw_input_original = raw_input
83 84
84 85 # compiled regexps for autoindent management
85 86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 87
87 88
88 89 #****************************************************************************
89 90 # Some utility function definitions
90 91
91 92 ini_spaces_re = re.compile(r'^(\s+)')
92 93
93 94 def num_ini_spaces(strng):
94 95 """Return the number of initial spaces in a string"""
95 96
96 97 ini_spaces = ini_spaces_re.match(strng)
97 98 if ini_spaces:
98 99 return ini_spaces.end()
99 100 else:
100 101 return 0
101 102
102 103 def softspace(file, newvalue):
103 104 """Copied from code.py, to remove the dependency"""
104 105
105 106 oldvalue = 0
106 107 try:
107 108 oldvalue = file.softspace
108 109 except AttributeError:
109 110 pass
110 111 try:
111 112 file.softspace = newvalue
112 113 except (AttributeError, TypeError):
113 114 # "attribute-less object" or "read-only attributes"
114 115 pass
115 116 return oldvalue
116 117
117 118
118 119 #****************************************************************************
119 120 # Local use exceptions
120 121 class SpaceInInput(exceptions.Exception): pass
121 122
122 123
123 124 #****************************************************************************
124 125 # Local use classes
125 126 class Bunch: pass
126 127
127 128 class Undefined: pass
128 129
129 130 class InputList(list):
130 131 """Class to store user input.
131 132
132 133 It's basically a list, but slices return a string instead of a list, thus
133 134 allowing things like (assuming 'In' is an instance):
134 135
135 136 exec In[4:7]
136 137
137 138 or
138 139
139 140 exec In[5:9] + In[14] + In[21:25]"""
140 141
141 142 def __getslice__(self,i,j):
142 143 return ''.join(list.__getslice__(self,i,j))
143 144
144 145 class SyntaxTB(ultraTB.ListTB):
145 146 """Extension which holds some state: the last exception value"""
146 147
147 148 def __init__(self,color_scheme = 'NoColor'):
148 149 ultraTB.ListTB.__init__(self,color_scheme)
149 150 self.last_syntax_error = None
150 151
151 152 def __call__(self, etype, value, elist):
152 153 self.last_syntax_error = value
153 154 ultraTB.ListTB.__call__(self,etype,value,elist)
154 155
155 156 def clear_err_state(self):
156 157 """Return the current error state and clear it"""
157 158 e = self.last_syntax_error
158 159 self.last_syntax_error = None
159 160 return e
160 161
161 162 #****************************************************************************
162 163 # Main IPython class
163 164
164 165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 167 # attributes and methods, but too much user code out there relies on the
167 168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 169 #
169 170 # But at least now, all the pieces have been separated and we could, in
170 171 # principle, stop using the mixin. This will ease the transition to the
171 172 # chainsaw branch.
172 173
173 174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 176 # class, to prevent clashes.
176 177
177 178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 181 # 'self.value']
181 182
182 183 class InteractiveShell(object,Magic):
183 184 """An enhanced console for Python."""
184 185
185 186 # class attribute to indicate whether the class supports threads or not.
186 187 # Subclasses with thread support should override this as needed.
187 188 isthreaded = False
188 189
189 190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 191 user_ns = None,user_global_ns=None,banner2='',
191 192 custom_exceptions=((),None),embedded=False):
192 193
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
195 # before it knows an InteractiveShell object. Uninitialized state is ok
196 IPython.ipapi._init_with_shell(self)
197
193 198 # some minimal strict typechecks. For some core data structures, I
194 199 # want actual basic python types, not just anything that looks like
195 200 # one. This is especially true for namespaces.
196 201 for ns in (user_ns,user_global_ns):
197 202 if ns is not None and type(ns) != types.DictType:
198 203 raise TypeError,'namespace must be a dictionary'
199 204
200 205 # Job manager (for jobs run as background threads)
201 206 self.jobs = BackgroundJobManager()
202 207
203 208 # track which builtins we add, so we can clean up later
204 209 self.builtins_added = {}
205 210 # This method will add the necessary builtins for operation, but
206 211 # tracking what it did via the builtins_added dict.
207 212 self.add_builtins()
208 213
209 214 # Do the intuitively correct thing for quit/exit: we remove the
210 215 # builtins if they exist, and our own magics will deal with this
211 216 try:
212 217 del __builtin__.exit, __builtin__.quit
213 218 except AttributeError:
214 219 pass
215 220
216 221 # Store the actual shell's name
217 222 self.name = name
218 223
219 224 # We need to know whether the instance is meant for embedding, since
220 225 # global/local namespaces need to be handled differently in that case
221 226 self.embedded = embedded
222 227
223 228 # command compiler
224 229 self.compile = codeop.CommandCompiler()
225 230
226 231 # User input buffer
227 232 self.buffer = []
228 233
229 234 # Default name given in compilation of code
230 235 self.filename = '<ipython console>'
231 236
232 237 # Make an empty namespace, which extension writers can rely on both
233 238 # existing and NEVER being used by ipython itself. This gives them a
234 239 # convenient location for storing additional information and state
235 240 # their extensions may require, without fear of collisions with other
236 241 # ipython names that may develop later.
237 242 self.meta = Bunch()
238 243
239 244 # Create the namespace where the user will operate. user_ns is
240 245 # normally the only one used, and it is passed to the exec calls as
241 246 # the locals argument. But we do carry a user_global_ns namespace
242 247 # given as the exec 'globals' argument, This is useful in embedding
243 248 # situations where the ipython shell opens in a context where the
244 249 # distinction between locals and globals is meaningful.
245 250
246 251 # FIXME. For some strange reason, __builtins__ is showing up at user
247 252 # level as a dict instead of a module. This is a manual fix, but I
248 253 # should really track down where the problem is coming from. Alex
249 254 # Schmolck reported this problem first.
250 255
251 256 # A useful post by Alex Martelli on this topic:
252 257 # Re: inconsistent value from __builtins__
253 258 # Von: Alex Martelli <aleaxit@yahoo.com>
254 259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
255 260 # Gruppen: comp.lang.python
256 261
257 262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
258 263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
259 264 # > <type 'dict'>
260 265 # > >>> print type(__builtins__)
261 266 # > <type 'module'>
262 267 # > Is this difference in return value intentional?
263 268
264 269 # Well, it's documented that '__builtins__' can be either a dictionary
265 270 # or a module, and it's been that way for a long time. Whether it's
266 271 # intentional (or sensible), I don't know. In any case, the idea is
267 272 # that if you need to access the built-in namespace directly, you
268 273 # should start with "import __builtin__" (note, no 's') which will
269 274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
270 275
271 276 if user_ns is None:
272 277 # Set __name__ to __main__ to better match the behavior of the
273 278 # normal interpreter.
274 279 user_ns = {'__name__' :'__main__',
275 280 '__builtins__' : __builtin__,
276 281 }
277 282
278 283 if user_global_ns is None:
279 284 user_global_ns = {}
280 285
281 286 # Assign namespaces
282 287 # This is the namespace where all normal user variables live
283 288 self.user_ns = user_ns
284 289 # Embedded instances require a separate namespace for globals.
285 290 # Normally this one is unused by non-embedded instances.
286 291 self.user_global_ns = user_global_ns
287 292 # A namespace to keep track of internal data structures to prevent
288 293 # them from cluttering user-visible stuff. Will be updated later
289 294 self.internal_ns = {}
290 295
291 296 # Namespace of system aliases. Each entry in the alias
292 297 # table must be a 2-tuple of the form (N,name), where N is the number
293 298 # of positional arguments of the alias.
294 299 self.alias_table = {}
295 300
296 301 # A table holding all the namespaces IPython deals with, so that
297 302 # introspection facilities can search easily.
298 303 self.ns_table = {'user':user_ns,
299 304 'user_global':user_global_ns,
300 305 'alias':self.alias_table,
301 306 'internal':self.internal_ns,
302 307 'builtin':__builtin__.__dict__
303 308 }
304 309
305 310 # The user namespace MUST have a pointer to the shell itself.
306 311 self.user_ns[name] = self
307 312
308 313 # We need to insert into sys.modules something that looks like a
309 314 # module but which accesses the IPython namespace, for shelve and
310 315 # pickle to work interactively. Normally they rely on getting
311 316 # everything out of __main__, but for embedding purposes each IPython
312 317 # instance has its own private namespace, so we can't go shoving
313 318 # everything into __main__.
314 319
315 320 # note, however, that we should only do this for non-embedded
316 321 # ipythons, which really mimic the __main__.__dict__ with their own
317 322 # namespace. Embedded instances, on the other hand, should not do
318 323 # this because they need to manage the user local/global namespaces
319 324 # only, but they live within a 'normal' __main__ (meaning, they
320 325 # shouldn't overtake the execution environment of the script they're
321 326 # embedded in).
322 327
323 328 if not embedded:
324 329 try:
325 330 main_name = self.user_ns['__name__']
326 331 except KeyError:
327 332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
328 333 else:
329 334 #print "pickle hack in place" # dbg
330 335 #print 'main_name:',main_name # dbg
331 336 sys.modules[main_name] = FakeModule(self.user_ns)
332 337
333 338 # List of input with multi-line handling.
334 339 # Fill its zero entry, user counter starts at 1
335 340 self.input_hist = InputList(['\n'])
336 341
337 342 # list of visited directories
338 343 try:
339 344 self.dir_hist = [os.getcwd()]
340 345 except IOError, e:
341 346 self.dir_hist = []
342 347
343 348 # dict of output history
344 349 self.output_hist = {}
345 350
346 351 # dict of things NOT to alias (keywords, builtins and some magics)
347 352 no_alias = {}
348 353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
349 354 for key in keyword.kwlist + no_alias_magics:
350 355 no_alias[key] = 1
351 356 no_alias.update(__builtin__.__dict__)
352 357 self.no_alias = no_alias
353 358
354 359 # make global variables for user access to these
355 360 self.user_ns['_ih'] = self.input_hist
356 361 self.user_ns['_oh'] = self.output_hist
357 362 self.user_ns['_dh'] = self.dir_hist
358 363
359 364 # user aliases to input and output histories
360 365 self.user_ns['In'] = self.input_hist
361 366 self.user_ns['Out'] = self.output_hist
362 367
363 368 # Object variable to store code object waiting execution. This is
364 369 # used mainly by the multithreaded shells, but it can come in handy in
365 370 # other situations. No need to use a Queue here, since it's a single
366 371 # item which gets cleared once run.
367 372 self.code_to_run = None
368 373
369 374 # escapes for automatic behavior on the command line
370 375 self.ESC_SHELL = '!'
371 376 self.ESC_HELP = '?'
372 377 self.ESC_MAGIC = '%'
373 378 self.ESC_QUOTE = ','
374 379 self.ESC_QUOTE2 = ';'
375 380 self.ESC_PAREN = '/'
376 381
377 382 # And their associated handlers
378 383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
379 384 self.ESC_QUOTE : self.handle_auto,
380 385 self.ESC_QUOTE2 : self.handle_auto,
381 386 self.ESC_MAGIC : self.handle_magic,
382 387 self.ESC_HELP : self.handle_help,
383 388 self.ESC_SHELL : self.handle_shell_escape,
384 389 }
385 390
386 391 # class initializations
387 392 Magic.__init__(self,self)
388 393
389 394 # Python source parser/formatter for syntax highlighting
390 395 pyformat = PyColorize.Parser().format
391 396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
392 397
393 398 # hooks holds pointers used for user-side customizations
394 399 self.hooks = Struct()
395 400
396 401 # Set all default hooks, defined in the IPython.hooks module.
397 402 hooks = IPython.hooks
398 403 for hook_name in hooks.__all__:
399 404 self.set_hook(hook_name,getattr(hooks,hook_name))
400 405
401 406 # Flag to mark unconditional exit
402 407 self.exit_now = False
403 408
404 409 self.usage_min = """\
405 410 An enhanced console for Python.
406 411 Some of its features are:
407 412 - Readline support if the readline library is present.
408 413 - Tab completion in the local namespace.
409 414 - Logging of input, see command-line options.
410 415 - System shell escape via ! , eg !ls.
411 416 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
412 417 - Keeps track of locally defined variables via %who, %whos.
413 418 - Show object information with a ? eg ?x or x? (use ?? for more info).
414 419 """
415 420 if usage: self.usage = usage
416 421 else: self.usage = self.usage_min
417 422
418 423 # Storage
419 424 self.rc = rc # This will hold all configuration information
420 425 self.pager = 'less'
421 426 # temporary files used for various purposes. Deleted at exit.
422 427 self.tempfiles = []
423 428
424 429 # Keep track of readline usage (later set by init_readline)
425 430 self.has_readline = False
426 431
427 432 # template for logfile headers. It gets resolved at runtime by the
428 433 # logstart method.
429 434 self.loghead_tpl = \
430 435 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
431 436 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
432 437 #log# opts = %s
433 438 #log# args = %s
434 439 #log# It is safe to make manual edits below here.
435 440 #log#-----------------------------------------------------------------------
436 441 """
437 442 # for pushd/popd management
438 443 try:
439 444 self.home_dir = get_home_dir()
440 445 except HomeDirError,msg:
441 446 fatal(msg)
442 447
443 448 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
444 449
445 450 # Functions to call the underlying shell.
446 451
447 452 # utility to expand user variables via Itpl
448 453 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
449 454 self.user_ns))
450 455 # The first is similar to os.system, but it doesn't return a value,
451 456 # and it allows interpolation of variables in the user's namespace.
452 457 self.system = lambda cmd: shell(self.var_expand(cmd),
453 458 header='IPython system call: ',
454 459 verbose=self.rc.system_verbose)
455 460 # These are for getoutput and getoutputerror:
456 461 self.getoutput = lambda cmd: \
457 462 getoutput(self.var_expand(cmd),
458 463 header='IPython system call: ',
459 464 verbose=self.rc.system_verbose)
460 465 self.getoutputerror = lambda cmd: \
461 466 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
462 467 self.user_ns)),
463 468 header='IPython system call: ',
464 469 verbose=self.rc.system_verbose)
465 470
466 471 # RegExp for splitting line contents into pre-char//first
467 472 # word-method//rest. For clarity, each group in on one line.
468 473
469 474 # WARNING: update the regexp if the above escapes are changed, as they
470 475 # are hardwired in.
471 476
472 477 # Don't get carried away with trying to make the autocalling catch too
473 478 # much: it's better to be conservative rather than to trigger hidden
474 479 # evals() somewhere and end up causing side effects.
475 480
476 481 self.line_split = re.compile(r'^([\s*,;/])'
477 482 r'([\?\w\.]+\w*\s*)'
478 483 r'(\(?.*$)')
479 484
480 485 # Original re, keep around for a while in case changes break something
481 486 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
482 487 # r'(\s*[\?\w\.]+\w*\s*)'
483 488 # r'(\(?.*$)')
484 489
485 490 # RegExp to identify potential function names
486 491 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
487 492
488 493 # RegExp to exclude strings with this start from autocalling. In
489 494 # particular, all binary operators should be excluded, so that if foo
490 495 # is callable, foo OP bar doesn't become foo(OP bar), which is
491 496 # invalid. The characters '!=()' don't need to be checked for, as the
492 497 # _prefilter routine explicitely does so, to catch direct calls and
493 498 # rebindings of existing names.
494 499
495 500 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
496 501 # it affects the rest of the group in square brackets.
497 502 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
498 503 '|^is |^not |^in |^and |^or ')
499 504
500 505 # try to catch also methods for stuff in lists/tuples/dicts: off
501 506 # (experimental). For this to work, the line_split regexp would need
502 507 # to be modified so it wouldn't break things at '['. That line is
503 508 # nasty enough that I shouldn't change it until I can test it _well_.
504 509 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
505 510
506 511 # keep track of where we started running (mainly for crash post-mortem)
507 512 self.starting_dir = os.getcwd()
508 513
509 514 # Various switches which can be set
510 515 self.CACHELENGTH = 5000 # this is cheap, it's just text
511 516 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
512 517 self.banner2 = banner2
513 518
514 519 # TraceBack handlers:
515 520
516 521 # Syntax error handler.
517 522 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
518 523
519 524 # The interactive one is initialized with an offset, meaning we always
520 525 # want to remove the topmost item in the traceback, which is our own
521 526 # internal code. Valid modes: ['Plain','Context','Verbose']
522 527 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
523 528 color_scheme='NoColor',
524 529 tb_offset = 1)
525 530
526 531 # IPython itself shouldn't crash. This will produce a detailed
527 532 # post-mortem if it does. But we only install the crash handler for
528 533 # non-threaded shells, the threaded ones use a normal verbose reporter
529 534 # and lose the crash handler. This is because exceptions in the main
530 535 # thread (such as in GUI code) propagate directly to sys.excepthook,
531 536 # and there's no point in printing crash dumps for every user exception.
532 537 if self.isthreaded:
533 538 sys.excepthook = ultraTB.FormattedTB()
534 539 else:
535 540 from IPython import CrashHandler
536 541 sys.excepthook = CrashHandler.CrashHandler(self)
537 542
538 543 # The instance will store a pointer to this, so that runtime code
539 544 # (such as magics) can access it. This is because during the
540 545 # read-eval loop, it gets temporarily overwritten (to deal with GUI
541 546 # frameworks).
542 547 self.sys_excepthook = sys.excepthook
543 548
544 549 # and add any custom exception handlers the user may have specified
545 550 self.set_custom_exc(*custom_exceptions)
546 551
547 552 # Object inspector
548 553 self.inspector = OInspect.Inspector(OInspect.InspectColors,
549 554 PyColorize.ANSICodeColors,
550 555 'NoColor')
551 556 # indentation management
552 557 self.autoindent = False
553 558 self.indent_current_nsp = 0
554 559 self.indent_current = '' # actual indent string
555 560
556 561 # Make some aliases automatically
557 562 # Prepare list of shell aliases to auto-define
558 563 if os.name == 'posix':
559 564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
560 565 'mv mv -i','rm rm -i','cp cp -i',
561 566 'cat cat','less less','clear clear',
562 567 # a better ls
563 568 'ls ls -F',
564 569 # long ls
565 570 'll ls -lF',
566 571 # color ls
567 572 'lc ls -F -o --color',
568 573 # ls normal files only
569 574 'lf ls -F -o --color %l | grep ^-',
570 575 # ls symbolic links
571 576 'lk ls -F -o --color %l | grep ^l',
572 577 # directories or links to directories,
573 578 'ldir ls -F -o --color %l | grep /$',
574 579 # things which are executable
575 580 'lx ls -F -o --color %l | grep ^-..x',
576 581 )
577 582 elif os.name in ['nt','dos']:
578 583 auto_alias = ('dir dir /on', 'ls dir /on',
579 584 'ddir dir /ad /on', 'ldir dir /ad /on',
580 585 'mkdir mkdir','rmdir rmdir','echo echo',
581 586 'ren ren','cls cls','copy copy')
582 587 else:
583 588 auto_alias = ()
584 589 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
585 590 # Call the actual (public) initializer
586 591 self.init_auto_alias()
587 592 # end __init__
588 593
589 594 def post_config_initialization(self):
590 595 """Post configuration init method
591 596
592 597 This is called after the configuration files have been processed to
593 598 'finalize' the initialization."""
594 599
595 600 rc = self.rc
596 601
597 602 # Load readline proper
598 603 if rc.readline:
599 604 self.init_readline()
600 605
601 606 # log system
602 607 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
603 608 # local shortcut, this is used a LOT
604 609 self.log = self.logger.log
605 610
606 611 # Initialize cache, set in/out prompts and printing system
607 612 self.outputcache = CachedOutput(self,
608 613 rc.cache_size,
609 614 rc.pprint,
610 615 input_sep = rc.separate_in,
611 616 output_sep = rc.separate_out,
612 617 output_sep2 = rc.separate_out2,
613 618 ps1 = rc.prompt_in1,
614 619 ps2 = rc.prompt_in2,
615 620 ps_out = rc.prompt_out,
616 621 pad_left = rc.prompts_pad_left)
617 622
618 623 # user may have over-ridden the default print hook:
619 624 try:
620 625 self.outputcache.__class__.display = self.hooks.display
621 626 except AttributeError:
622 627 pass
623 628
624 629 # I don't like assigning globally to sys, because it means when embedding
625 630 # instances, each embedded instance overrides the previous choice. But
626 631 # sys.displayhook seems to be called internally by exec, so I don't see a
627 632 # way around it.
628 633 sys.displayhook = self.outputcache
629 634
630 635 # Set user colors (don't do it in the constructor above so that it
631 636 # doesn't crash if colors option is invalid)
632 637 self.magic_colors(rc.colors)
633 638
634 639 # Set calling of pdb on exceptions
635 640 self.call_pdb = rc.pdb
636 641
637 642 # Load user aliases
638 643 for alias in rc.alias:
639 644 self.magic_alias(alias)
640 645
641 646 # dynamic data that survives through sessions
642 647 # XXX make the filename a config option?
643 648 persist_base = 'persist'
644 649 if rc.profile:
645 650 persist_base += '_%s' % rc.profile
646 651 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
647 652
648 653 try:
649 654 self.persist = pickle.load(file(self.persist_fname))
650 655 except:
651 656 self.persist = {}
652 657
653 658
654 659 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
655 660 try:
656 661 obj = pickle.loads(value)
657 662 except:
658 663
659 664 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
660 665 print "The error was:",sys.exc_info()[0]
661 666 continue
662 667
663 668
664 669 self.user_ns[key] = obj
665 670
666 671 def add_builtins(self):
667 672 """Store ipython references into the builtin namespace.
668 673
669 674 Some parts of ipython operate via builtins injected here, which hold a
670 675 reference to IPython itself."""
671 676
672 677 builtins_new = dict(__IPYTHON__ = self,
673 678 ip_set_hook = self.set_hook,
674 679 jobs = self.jobs,
675 680 ipmagic = self.ipmagic,
676 681 ipalias = self.ipalias,
677 682 ipsystem = self.ipsystem,
678 683 )
679 684 for biname,bival in builtins_new.items():
680 685 try:
681 686 # store the orignal value so we can restore it
682 687 self.builtins_added[biname] = __builtin__.__dict__[biname]
683 688 except KeyError:
684 689 # or mark that it wasn't defined, and we'll just delete it at
685 690 # cleanup
686 691 self.builtins_added[biname] = Undefined
687 692 __builtin__.__dict__[biname] = bival
688 693
689 694 # Keep in the builtins a flag for when IPython is active. We set it
690 695 # with setdefault so that multiple nested IPythons don't clobber one
691 696 # another. Each will increase its value by one upon being activated,
692 697 # which also gives us a way to determine the nesting level.
693 698 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
694 699
695 700 def clean_builtins(self):
696 701 """Remove any builtins which might have been added by add_builtins, or
697 702 restore overwritten ones to their previous values."""
698 703 for biname,bival in self.builtins_added.items():
699 704 if bival is Undefined:
700 705 del __builtin__.__dict__[biname]
701 706 else:
702 707 __builtin__.__dict__[biname] = bival
703 708 self.builtins_added.clear()
704 709
705 710 def set_hook(self,name,hook):
706 711 """set_hook(name,hook) -> sets an internal IPython hook.
707 712
708 713 IPython exposes some of its internal API as user-modifiable hooks. By
709 714 resetting one of these hooks, you can modify IPython's behavior to
710 715 call at runtime your own routines."""
711 716
712 717 # At some point in the future, this should validate the hook before it
713 718 # accepts it. Probably at least check that the hook takes the number
714 719 # of args it's supposed to.
715 720 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
716 721
717 722 def set_custom_exc(self,exc_tuple,handler):
718 723 """set_custom_exc(exc_tuple,handler)
719 724
720 725 Set a custom exception handler, which will be called if any of the
721 726 exceptions in exc_tuple occur in the mainloop (specifically, in the
722 727 runcode() method.
723 728
724 729 Inputs:
725 730
726 731 - exc_tuple: a *tuple* of valid exceptions to call the defined
727 732 handler for. It is very important that you use a tuple, and NOT A
728 733 LIST here, because of the way Python's except statement works. If
729 734 you only want to trap a single exception, use a singleton tuple:
730 735
731 736 exc_tuple == (MyCustomException,)
732 737
733 738 - handler: this must be defined as a function with the following
734 739 basic interface: def my_handler(self,etype,value,tb).
735 740
736 741 This will be made into an instance method (via new.instancemethod)
737 742 of IPython itself, and it will be called if any of the exceptions
738 743 listed in the exc_tuple are caught. If the handler is None, an
739 744 internal basic one is used, which just prints basic info.
740 745
741 746 WARNING: by putting in your own exception handler into IPython's main
742 747 execution loop, you run a very good chance of nasty crashes. This
743 748 facility should only be used if you really know what you are doing."""
744 749
745 750 assert type(exc_tuple)==type(()) , \
746 751 "The custom exceptions must be given AS A TUPLE."
747 752
748 753 def dummy_handler(self,etype,value,tb):
749 754 print '*** Simple custom exception handler ***'
750 755 print 'Exception type :',etype
751 756 print 'Exception value:',value
752 757 print 'Traceback :',tb
753 758 print 'Source code :','\n'.join(self.buffer)
754 759
755 760 if handler is None: handler = dummy_handler
756 761
757 762 self.CustomTB = new.instancemethod(handler,self,self.__class__)
758 763 self.custom_exceptions = exc_tuple
759 764
760 765 def set_custom_completer(self,completer,pos=0):
761 766 """set_custom_completer(completer,pos=0)
762 767
763 768 Adds a new custom completer function.
764 769
765 770 The position argument (defaults to 0) is the index in the completers
766 771 list where you want the completer to be inserted."""
767 772
768 773 newcomp = new.instancemethod(completer,self.Completer,
769 774 self.Completer.__class__)
770 775 self.Completer.matchers.insert(pos,newcomp)
771 776
772 777 def _get_call_pdb(self):
773 778 return self._call_pdb
774 779
775 780 def _set_call_pdb(self,val):
776 781
777 782 if val not in (0,1,False,True):
778 783 raise ValueError,'new call_pdb value must be boolean'
779 784
780 785 # store value in instance
781 786 self._call_pdb = val
782 787
783 788 # notify the actual exception handlers
784 789 self.InteractiveTB.call_pdb = val
785 790 if self.isthreaded:
786 791 try:
787 792 self.sys_excepthook.call_pdb = val
788 793 except:
789 794 warn('Failed to activate pdb for threaded exception handler')
790 795
791 796 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
792 797 'Control auto-activation of pdb at exceptions')
793 798
794 799
795 800 # These special functions get installed in the builtin namespace, to
796 801 # provide programmatic (pure python) access to magics, aliases and system
797 802 # calls. This is important for logging, user scripting, and more.
798 803
799 804 # We are basically exposing, via normal python functions, the three
800 805 # mechanisms in which ipython offers special call modes (magics for
801 806 # internal control, aliases for direct system access via pre-selected
802 807 # names, and !cmd for calling arbitrary system commands).
803 808
804 809 def ipmagic(self,arg_s):
805 810 """Call a magic function by name.
806 811
807 812 Input: a string containing the name of the magic function to call and any
808 813 additional arguments to be passed to the magic.
809 814
810 815 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
811 816 prompt:
812 817
813 818 In[1]: %name -opt foo bar
814 819
815 820 To call a magic without arguments, simply use ipmagic('name').
816 821
817 822 This provides a proper Python function to call IPython's magics in any
818 823 valid Python code you can type at the interpreter, including loops and
819 824 compound statements. It is added by IPython to the Python builtin
820 825 namespace upon initialization."""
821 826
822 827 args = arg_s.split(' ',1)
823 828 magic_name = args[0]
824 if magic_name.startswith(self.ESC_MAGIC):
825 magic_name = magic_name[1:]
829 magic_name = magic_name.lstrip(self.ESC_MAGIC)
830
826 831 try:
827 832 magic_args = args[1]
828 833 except IndexError:
829 834 magic_args = ''
830 835 fn = getattr(self,'magic_'+magic_name,None)
831 836 if fn is None:
832 837 error("Magic function `%s` not found." % magic_name)
833 838 else:
834 839 magic_args = self.var_expand(magic_args)
835 840 return fn(magic_args)
836 841
837 842 def ipalias(self,arg_s):
838 843 """Call an alias by name.
839 844
840 845 Input: a string containing the name of the alias to call and any
841 846 additional arguments to be passed to the magic.
842 847
843 848 ipalias('name -opt foo bar') is equivalent to typing at the ipython
844 849 prompt:
845 850
846 851 In[1]: name -opt foo bar
847 852
848 853 To call an alias without arguments, simply use ipalias('name').
849 854
850 855 This provides a proper Python function to call IPython's aliases in any
851 856 valid Python code you can type at the interpreter, including loops and
852 857 compound statements. It is added by IPython to the Python builtin
853 858 namespace upon initialization."""
854 859
855 860 args = arg_s.split(' ',1)
856 861 alias_name = args[0]
857 862 try:
858 863 alias_args = args[1]
859 864 except IndexError:
860 865 alias_args = ''
861 866 if alias_name in self.alias_table:
862 867 self.call_alias(alias_name,alias_args)
863 868 else:
864 869 error("Alias `%s` not found." % alias_name)
865 870
866 871 def ipsystem(self,arg_s):
867 872 """Make a system call, using IPython."""
868 873
869 874 self.system(arg_s)
870 875
871 876 def complete(self,text):
872 877 """Return a sorted list of all possible completions on text.
873 878
874 879 Inputs:
875 880
876 881 - text: a string of text to be completed on.
877 882
878 883 This is a wrapper around the completion mechanism, similar to what
879 884 readline does at the command line when the TAB key is hit. By
880 885 exposing it as a method, it can be used by other non-readline
881 886 environments (such as GUIs) for text completion.
882 887
883 888 Simple usage example:
884 889
885 890 In [1]: x = 'hello'
886 891
887 892 In [2]: __IP.complete('x.l')
888 893 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
889 894
890 895 complete = self.Completer.complete
891 896 state = 0
892 897 # use a dict so we get unique keys, since ipyhton's multiple
893 898 # completers can return duplicates.
894 899 comps = {}
895 900 while True:
896 901 newcomp = complete(text,state)
897 902 if newcomp is None:
898 903 break
899 904 comps[newcomp] = 1
900 905 state += 1
901 906 outcomps = comps.keys()
902 907 outcomps.sort()
903 908 return outcomps
904 909
905 910 def set_completer_frame(self, frame=None):
906 911 if frame:
907 912 self.Completer.namespace = frame.f_locals
908 913 self.Completer.global_namespace = frame.f_globals
909 914 else:
910 915 self.Completer.namespace = self.user_ns
911 916 self.Completer.global_namespace = self.user_global_ns
912 917
913 918 def init_auto_alias(self):
914 919 """Define some aliases automatically.
915 920
916 921 These are ALL parameter-less aliases"""
917 922
918 923 for alias,cmd in self.auto_alias:
919 924 self.alias_table[alias] = (0,cmd)
920 925
921 926 def alias_table_validate(self,verbose=0):
922 927 """Update information about the alias table.
923 928
924 929 In particular, make sure no Python keywords/builtins are in it."""
925 930
926 931 no_alias = self.no_alias
927 932 for k in self.alias_table.keys():
928 933 if k in no_alias:
929 934 del self.alias_table[k]
930 935 if verbose:
931 936 print ("Deleting alias <%s>, it's a Python "
932 937 "keyword or builtin." % k)
933 938
934 939 def set_autoindent(self,value=None):
935 940 """Set the autoindent flag, checking for readline support.
936 941
937 942 If called with no arguments, it acts as a toggle."""
938 943
939 944 if not self.has_readline:
940 945 if os.name == 'posix':
941 946 warn("The auto-indent feature requires the readline library")
942 947 self.autoindent = 0
943 948 return
944 949 if value is None:
945 950 self.autoindent = not self.autoindent
946 951 else:
947 952 self.autoindent = value
948 953
949 954 def rc_set_toggle(self,rc_field,value=None):
950 955 """Set or toggle a field in IPython's rc config. structure.
951 956
952 957 If called with no arguments, it acts as a toggle.
953 958
954 959 If called with a non-existent field, the resulting AttributeError
955 960 exception will propagate out."""
956 961
957 962 rc_val = getattr(self.rc,rc_field)
958 963 if value is None:
959 964 value = not rc_val
960 965 setattr(self.rc,rc_field,value)
961 966
962 967 def user_setup(self,ipythondir,rc_suffix,mode='install'):
963 968 """Install the user configuration directory.
964 969
965 970 Can be called when running for the first time or to upgrade the user's
966 971 .ipython/ directory with the mode parameter. Valid modes are 'install'
967 972 and 'upgrade'."""
968 973
969 974 def wait():
970 975 try:
971 976 raw_input("Please press <RETURN> to start IPython.")
972 977 except EOFError:
973 978 print >> Term.cout
974 979 print '*'*70
975 980
976 981 cwd = os.getcwd() # remember where we started
977 982 glb = glob.glob
978 983 print '*'*70
979 984 if mode == 'install':
980 985 print \
981 986 """Welcome to IPython. I will try to create a personal configuration directory
982 987 where you can customize many aspects of IPython's functionality in:\n"""
983 988 else:
984 989 print 'I am going to upgrade your configuration in:'
985 990
986 991 print ipythondir
987 992
988 993 rcdirend = os.path.join('IPython','UserConfig')
989 994 cfg = lambda d: os.path.join(d,rcdirend)
990 995 try:
991 996 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
992 997 except IOError:
993 998 warning = """
994 999 Installation error. IPython's directory was not found.
995 1000
996 1001 Check the following:
997 1002
998 1003 The ipython/IPython directory should be in a directory belonging to your
999 1004 PYTHONPATH environment variable (that is, it should be in a directory
1000 1005 belonging to sys.path). You can copy it explicitly there or just link to it.
1001 1006
1002 1007 IPython will proceed with builtin defaults.
1003 1008 """
1004 1009 warn(warning)
1005 1010 wait()
1006 1011 return
1007 1012
1008 1013 if mode == 'install':
1009 1014 try:
1010 1015 shutil.copytree(rcdir,ipythondir)
1011 1016 os.chdir(ipythondir)
1012 1017 rc_files = glb("ipythonrc*")
1013 1018 for rc_file in rc_files:
1014 1019 os.rename(rc_file,rc_file+rc_suffix)
1015 1020 except:
1016 1021 warning = """
1017 1022
1018 1023 There was a problem with the installation:
1019 1024 %s
1020 1025 Try to correct it or contact the developers if you think it's a bug.
1021 1026 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1022 1027 warn(warning)
1023 1028 wait()
1024 1029 return
1025 1030
1026 1031 elif mode == 'upgrade':
1027 1032 try:
1028 1033 os.chdir(ipythondir)
1029 1034 except:
1030 1035 print """
1031 1036 Can not upgrade: changing to directory %s failed. Details:
1032 1037 %s
1033 1038 """ % (ipythondir,sys.exc_info()[1])
1034 1039 wait()
1035 1040 return
1036 1041 else:
1037 1042 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1038 1043 for new_full_path in sources:
1039 1044 new_filename = os.path.basename(new_full_path)
1040 1045 if new_filename.startswith('ipythonrc'):
1041 1046 new_filename = new_filename + rc_suffix
1042 1047 # The config directory should only contain files, skip any
1043 1048 # directories which may be there (like CVS)
1044 1049 if os.path.isdir(new_full_path):
1045 1050 continue
1046 1051 if os.path.exists(new_filename):
1047 1052 old_file = new_filename+'.old'
1048 1053 if os.path.exists(old_file):
1049 1054 os.remove(old_file)
1050 1055 os.rename(new_filename,old_file)
1051 1056 shutil.copy(new_full_path,new_filename)
1052 1057 else:
1053 1058 raise ValueError,'unrecognized mode for install:',`mode`
1054 1059
1055 1060 # Fix line-endings to those native to each platform in the config
1056 1061 # directory.
1057 1062 try:
1058 1063 os.chdir(ipythondir)
1059 1064 except:
1060 1065 print """
1061 1066 Problem: changing to directory %s failed.
1062 1067 Details:
1063 1068 %s
1064 1069
1065 1070 Some configuration files may have incorrect line endings. This should not
1066 1071 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1067 1072 wait()
1068 1073 else:
1069 1074 for fname in glb('ipythonrc*'):
1070 1075 try:
1071 1076 native_line_ends(fname,backup=0)
1072 1077 except IOError:
1073 1078 pass
1074 1079
1075 1080 if mode == 'install':
1076 1081 print """
1077 1082 Successful installation!
1078 1083
1079 1084 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1080 1085 IPython manual (there are both HTML and PDF versions supplied with the
1081 1086 distribution) to make sure that your system environment is properly configured
1082 1087 to take advantage of IPython's features."""
1083 1088 else:
1084 1089 print """
1085 1090 Successful upgrade!
1086 1091
1087 1092 All files in your directory:
1088 1093 %(ipythondir)s
1089 1094 which would have been overwritten by the upgrade were backed up with a .old
1090 1095 extension. If you had made particular customizations in those files you may
1091 1096 want to merge them back into the new files.""" % locals()
1092 1097 wait()
1093 1098 os.chdir(cwd)
1094 1099 # end user_setup()
1095 1100
1096 1101 def atexit_operations(self):
1097 1102 """This will be executed at the time of exit.
1098 1103
1099 1104 Saving of persistent data should be performed here. """
1100 1105
1101 1106 #print '*** IPython exit cleanup ***' # dbg
1102 1107 # input history
1103 1108 self.savehist()
1104 1109
1105 1110 # Cleanup all tempfiles left around
1106 1111 for tfile in self.tempfiles:
1107 1112 try:
1108 1113 os.unlink(tfile)
1109 1114 except OSError:
1110 1115 pass
1111 1116
1112 1117 # save the "persistent data" catch-all dictionary
1113 1118 try:
1114 1119 pickle.dump(self.persist, open(self.persist_fname,"w"))
1115 1120 except:
1116 1121 print "*** ERROR *** persistent data saving failed."
1117 1122
1118 1123 def savehist(self):
1119 1124 """Save input history to a file (via readline library)."""
1120 1125 try:
1121 1126 self.readline.write_history_file(self.histfile)
1122 1127 except:
1123 1128 print 'Unable to save IPython command history to file: ' + \
1124 1129 `self.histfile`
1125 1130
1126 1131 def pre_readline(self):
1127 1132 """readline hook to be used at the start of each line.
1128 1133
1129 1134 Currently it handles auto-indent only."""
1130 1135
1131 1136 self.readline.insert_text(self.indent_current)
1132 1137
1133 1138 def init_readline(self):
1134 1139 """Command history completion/saving/reloading."""
1135 1140 try:
1136 1141 import readline
1137 1142 except ImportError:
1138 1143 self.has_readline = 0
1139 1144 self.readline = None
1140 1145 # no point in bugging windows users with this every time:
1141 1146 if os.name == 'posix':
1142 1147 warn('Readline services not available on this platform.')
1143 1148 else:
1144 1149 import atexit
1145 1150 from IPython.completer import IPCompleter
1146 1151 self.Completer = IPCompleter(self,
1147 1152 self.user_ns,
1148 1153 self.user_global_ns,
1149 1154 self.rc.readline_omit__names,
1150 1155 self.alias_table)
1151 1156
1152 1157 # Platform-specific configuration
1153 1158 if os.name == 'nt':
1154 1159 self.readline_startup_hook = readline.set_pre_input_hook
1155 1160 else:
1156 1161 self.readline_startup_hook = readline.set_startup_hook
1157 1162
1158 1163 # Load user's initrc file (readline config)
1159 1164 inputrc_name = os.environ.get('INPUTRC')
1160 1165 if inputrc_name is None:
1161 1166 home_dir = get_home_dir()
1162 1167 if home_dir is not None:
1163 1168 inputrc_name = os.path.join(home_dir,'.inputrc')
1164 1169 if os.path.isfile(inputrc_name):
1165 1170 try:
1166 1171 readline.read_init_file(inputrc_name)
1167 1172 except:
1168 1173 warn('Problems reading readline initialization file <%s>'
1169 1174 % inputrc_name)
1170 1175
1171 1176 self.has_readline = 1
1172 1177 self.readline = readline
1173 1178 # save this in sys so embedded copies can restore it properly
1174 1179 sys.ipcompleter = self.Completer.complete
1175 1180 readline.set_completer(self.Completer.complete)
1176 1181
1177 1182 # Configure readline according to user's prefs
1178 1183 for rlcommand in self.rc.readline_parse_and_bind:
1179 1184 readline.parse_and_bind(rlcommand)
1180 1185
1181 1186 # remove some chars from the delimiters list
1182 1187 delims = readline.get_completer_delims()
1183 1188 delims = delims.translate(string._idmap,
1184 1189 self.rc.readline_remove_delims)
1185 1190 readline.set_completer_delims(delims)
1186 1191 # otherwise we end up with a monster history after a while:
1187 1192 readline.set_history_length(1000)
1188 1193 try:
1189 1194 #print '*** Reading readline history' # dbg
1190 1195 readline.read_history_file(self.histfile)
1191 1196 except IOError:
1192 1197 pass # It doesn't exist yet.
1193 1198
1194 1199 atexit.register(self.atexit_operations)
1195 1200 del atexit
1196 1201
1197 1202 # Configure auto-indent for all platforms
1198 1203 self.set_autoindent(self.rc.autoindent)
1199 1204
1200 1205 def _should_recompile(self,e):
1201 1206 """Utility routine for edit_syntax_error"""
1202 1207
1203 1208 if e.filename in ('<ipython console>','<input>','<string>',
1204 1209 '<console>',None):
1205 1210
1206 1211 return False
1207 1212 try:
1208 1213 if not ask_yes_no('Return to editor to correct syntax error? '
1209 1214 '[Y/n] ','y'):
1210 1215 return False
1211 1216 except EOFError:
1212 1217 return False
1213 1218
1214 1219 def int0(x):
1215 1220 try:
1216 1221 return int(x)
1217 1222 except TypeError:
1218 1223 return 0
1219 1224 # always pass integer line and offset values to editor hook
1220 1225 self.hooks.fix_error_editor(e.filename,
1221 1226 int0(e.lineno),int0(e.offset),e.msg)
1222 1227 return True
1223 1228
1224 1229 def edit_syntax_error(self):
1225 1230 """The bottom half of the syntax error handler called in the main loop.
1226 1231
1227 1232 Loop until syntax error is fixed or user cancels.
1228 1233 """
1229 1234
1230 1235 while self.SyntaxTB.last_syntax_error:
1231 1236 # copy and clear last_syntax_error
1232 1237 err = self.SyntaxTB.clear_err_state()
1233 1238 if not self._should_recompile(err):
1234 1239 return
1235 1240 try:
1236 1241 # may set last_syntax_error again if a SyntaxError is raised
1237 1242 self.safe_execfile(err.filename,self.shell.user_ns)
1238 1243 except:
1239 1244 self.showtraceback()
1240 1245 else:
1241 1246 f = file(err.filename)
1242 1247 try:
1243 1248 sys.displayhook(f.read())
1244 1249 finally:
1245 1250 f.close()
1246 1251
1247 1252 def showsyntaxerror(self, filename=None):
1248 1253 """Display the syntax error that just occurred.
1249 1254
1250 1255 This doesn't display a stack trace because there isn't one.
1251 1256
1252 1257 If a filename is given, it is stuffed in the exception instead
1253 1258 of what was there before (because Python's parser always uses
1254 1259 "<string>" when reading from a string).
1255 1260 """
1256 1261 etype, value, last_traceback = sys.exc_info()
1257 1262 if filename and etype is SyntaxError:
1258 1263 # Work hard to stuff the correct filename in the exception
1259 1264 try:
1260 1265 msg, (dummy_filename, lineno, offset, line) = value
1261 1266 except:
1262 1267 # Not the format we expect; leave it alone
1263 1268 pass
1264 1269 else:
1265 1270 # Stuff in the right filename
1266 1271 try:
1267 1272 # Assume SyntaxError is a class exception
1268 1273 value = SyntaxError(msg, (filename, lineno, offset, line))
1269 1274 except:
1270 1275 # If that failed, assume SyntaxError is a string
1271 1276 value = msg, (filename, lineno, offset, line)
1272 1277 self.SyntaxTB(etype,value,[])
1273 1278
1274 1279 def debugger(self):
1275 1280 """Call the pdb debugger."""
1276 1281
1277 1282 if not self.rc.pdb:
1278 1283 return
1279 1284 pdb.pm()
1280 1285
1281 1286 def showtraceback(self,exc_tuple = None,filename=None):
1282 1287 """Display the exception that just occurred."""
1283 1288
1284 1289 # Though this won't be called by syntax errors in the input line,
1285 1290 # there may be SyntaxError cases whith imported code.
1286 1291 if exc_tuple is None:
1287 1292 type, value, tb = sys.exc_info()
1288 1293 else:
1289 1294 type, value, tb = exc_tuple
1290 1295 if type is SyntaxError:
1291 1296 self.showsyntaxerror(filename)
1292 1297 else:
1293 1298 self.InteractiveTB()
1294 1299 if self.InteractiveTB.call_pdb and self.has_readline:
1295 1300 # pdb mucks up readline, fix it back
1296 1301 self.readline.set_completer(self.Completer.complete)
1297 1302
1298 1303 def mainloop(self,banner=None):
1299 1304 """Creates the local namespace and starts the mainloop.
1300 1305
1301 1306 If an optional banner argument is given, it will override the
1302 1307 internally created default banner."""
1303 1308
1304 1309 if self.rc.c: # Emulate Python's -c option
1305 1310 self.exec_init_cmd()
1306 1311 if banner is None:
1307 1312 if self.rc.banner:
1308 1313 banner = self.BANNER+self.banner2
1309 1314 else:
1310 1315 banner = ''
1311 1316 self.interact(banner)
1312 1317
1313 1318 def exec_init_cmd(self):
1314 1319 """Execute a command given at the command line.
1315 1320
1316 1321 This emulates Python's -c option."""
1317 1322
1318 1323 sys.argv = ['-c']
1319 1324 self.push(self.rc.c)
1320 1325
1321 1326 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1322 1327 """Embeds IPython into a running python program.
1323 1328
1324 1329 Input:
1325 1330
1326 1331 - header: An optional header message can be specified.
1327 1332
1328 1333 - local_ns, global_ns: working namespaces. If given as None, the
1329 1334 IPython-initialized one is updated with __main__.__dict__, so that
1330 1335 program variables become visible but user-specific configuration
1331 1336 remains possible.
1332 1337
1333 1338 - stack_depth: specifies how many levels in the stack to go to
1334 1339 looking for namespaces (when local_ns and global_ns are None). This
1335 1340 allows an intermediate caller to make sure that this function gets
1336 1341 the namespace from the intended level in the stack. By default (0)
1337 1342 it will get its locals and globals from the immediate caller.
1338 1343
1339 1344 Warning: it's possible to use this in a program which is being run by
1340 1345 IPython itself (via %run), but some funny things will happen (a few
1341 1346 globals get overwritten). In the future this will be cleaned up, as
1342 1347 there is no fundamental reason why it can't work perfectly."""
1343 1348
1344 1349 # Get locals and globals from caller
1345 1350 if local_ns is None or global_ns is None:
1346 1351 call_frame = sys._getframe(stack_depth).f_back
1347 1352
1348 1353 if local_ns is None:
1349 1354 local_ns = call_frame.f_locals
1350 1355 if global_ns is None:
1351 1356 global_ns = call_frame.f_globals
1352 1357
1353 1358 # Update namespaces and fire up interpreter
1354 1359
1355 1360 # The global one is easy, we can just throw it in
1356 1361 self.user_global_ns = global_ns
1357 1362
1358 1363 # but the user/local one is tricky: ipython needs it to store internal
1359 1364 # data, but we also need the locals. We'll copy locals in the user
1360 1365 # one, but will track what got copied so we can delete them at exit.
1361 1366 # This is so that a later embedded call doesn't see locals from a
1362 1367 # previous call (which most likely existed in a separate scope).
1363 1368 local_varnames = local_ns.keys()
1364 1369 self.user_ns.update(local_ns)
1365 1370
1366 1371 # Patch for global embedding to make sure that things don't overwrite
1367 1372 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1368 1373 # FIXME. Test this a bit more carefully (the if.. is new)
1369 1374 if local_ns is None and global_ns is None:
1370 1375 self.user_global_ns.update(__main__.__dict__)
1371 1376
1372 1377 # make sure the tab-completer has the correct frame information, so it
1373 1378 # actually completes using the frame's locals/globals
1374 1379 self.set_completer_frame()
1375 1380
1376 1381 # before activating the interactive mode, we need to make sure that
1377 1382 # all names in the builtin namespace needed by ipython point to
1378 1383 # ourselves, and not to other instances.
1379 1384 self.add_builtins()
1380 1385
1381 1386 self.interact(header)
1382 1387
1383 1388 # now, purge out the user namespace from anything we might have added
1384 1389 # from the caller's local namespace
1385 1390 delvar = self.user_ns.pop
1386 1391 for var in local_varnames:
1387 1392 delvar(var,None)
1388 1393 # and clean builtins we may have overridden
1389 1394 self.clean_builtins()
1390 1395
1391 1396 def interact(self, banner=None):
1392 1397 """Closely emulate the interactive Python console.
1393 1398
1394 1399 The optional banner argument specify the banner to print
1395 1400 before the first interaction; by default it prints a banner
1396 1401 similar to the one printed by the real Python interpreter,
1397 1402 followed by the current class name in parentheses (so as not
1398 1403 to confuse this with the real interpreter -- since it's so
1399 1404 close!).
1400 1405
1401 1406 """
1402 1407 cprt = 'Type "copyright", "credits" or "license" for more information.'
1403 1408 if banner is None:
1404 1409 self.write("Python %s on %s\n%s\n(%s)\n" %
1405 1410 (sys.version, sys.platform, cprt,
1406 1411 self.__class__.__name__))
1407 1412 else:
1408 1413 self.write(banner)
1409 1414
1410 1415 more = 0
1411 1416
1412 1417 # Mark activity in the builtins
1413 1418 __builtin__.__dict__['__IPYTHON__active'] += 1
1414 1419
1415 1420 # exit_now is set by a call to %Exit or %Quit
1416 1421 self.exit_now = False
1417 1422 while not self.exit_now:
1418 1423
1419 1424 try:
1420 1425 if more:
1421 1426 prompt = self.outputcache.prompt2
1422 1427 if self.autoindent:
1423 1428 self.readline_startup_hook(self.pre_readline)
1424 1429 else:
1425 1430 prompt = self.outputcache.prompt1
1426 1431 try:
1427 1432 line = self.raw_input(prompt,more)
1428 1433 if self.autoindent:
1429 1434 self.readline_startup_hook(None)
1430 1435 except EOFError:
1431 1436 if self.autoindent:
1432 1437 self.readline_startup_hook(None)
1433 1438 self.write("\n")
1434 1439 self.exit()
1435 1440 else:
1436 1441 more = self.push(line)
1437 1442
1438 1443 if (self.SyntaxTB.last_syntax_error and
1439 1444 self.rc.autoedit_syntax):
1440 1445 self.edit_syntax_error()
1441 1446
1442 1447 except KeyboardInterrupt:
1443 1448 self.write("\nKeyboardInterrupt\n")
1444 1449 self.resetbuffer()
1445 1450 more = 0
1446 1451 # keep cache in sync with the prompt counter:
1447 1452 self.outputcache.prompt_count -= 1
1448 1453
1449 1454 if self.autoindent:
1450 1455 self.indent_current_nsp = 0
1451 1456 self.indent_current = ' '* self.indent_current_nsp
1452 1457
1453 1458 except bdb.BdbQuit:
1454 1459 warn("The Python debugger has exited with a BdbQuit exception.\n"
1455 1460 "Because of how pdb handles the stack, it is impossible\n"
1456 1461 "for IPython to properly format this particular exception.\n"
1457 1462 "IPython will resume normal operation.")
1458 1463
1459 1464 # We are off again...
1460 1465 __builtin__.__dict__['__IPYTHON__active'] -= 1
1461 1466
1462 1467 def excepthook(self, type, value, tb):
1463 1468 """One more defense for GUI apps that call sys.excepthook.
1464 1469
1465 1470 GUI frameworks like wxPython trap exceptions and call
1466 1471 sys.excepthook themselves. I guess this is a feature that
1467 1472 enables them to keep running after exceptions that would
1468 1473 otherwise kill their mainloop. This is a bother for IPython
1469 1474 which excepts to catch all of the program exceptions with a try:
1470 1475 except: statement.
1471 1476
1472 1477 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1473 1478 any app directly invokes sys.excepthook, it will look to the user like
1474 1479 IPython crashed. In order to work around this, we can disable the
1475 1480 CrashHandler and replace it with this excepthook instead, which prints a
1476 1481 regular traceback using our InteractiveTB. In this fashion, apps which
1477 1482 call sys.excepthook will generate a regular-looking exception from
1478 1483 IPython, and the CrashHandler will only be triggered by real IPython
1479 1484 crashes.
1480 1485
1481 1486 This hook should be used sparingly, only in places which are not likely
1482 1487 to be true IPython errors.
1483 1488 """
1484 1489
1485 1490 self.InteractiveTB(type, value, tb, tb_offset=0)
1486 1491 if self.InteractiveTB.call_pdb and self.has_readline:
1487 1492 self.readline.set_completer(self.Completer.complete)
1488 1493
1489 1494 def call_alias(self,alias,rest=''):
1490 1495 """Call an alias given its name and the rest of the line.
1491 1496
1492 1497 This function MUST be given a proper alias, because it doesn't make
1493 1498 any checks when looking up into the alias table. The caller is
1494 1499 responsible for invoking it only with a valid alias."""
1495 1500
1496 1501 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1497 1502 nargs,cmd = self.alias_table[alias]
1498 1503 # Expand the %l special to be the user's input line
1499 1504 if cmd.find('%l') >= 0:
1500 1505 cmd = cmd.replace('%l',rest)
1501 1506 rest = ''
1502 1507 if nargs==0:
1503 1508 # Simple, argument-less aliases
1504 1509 cmd = '%s %s' % (cmd,rest)
1505 1510 else:
1506 1511 # Handle aliases with positional arguments
1507 1512 args = rest.split(None,nargs)
1508 1513 if len(args)< nargs:
1509 1514 error('Alias <%s> requires %s arguments, %s given.' %
1510 1515 (alias,nargs,len(args)))
1511 1516 return
1512 1517 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1513 1518 # Now call the macro, evaluating in the user's namespace
1514 1519 try:
1515 1520 self.system(cmd)
1516 1521 except:
1517 1522 self.showtraceback()
1518 1523
1519 1524 def autoindent_update(self,line):
1520 1525 """Keep track of the indent level."""
1521 1526
1522 1527 if self.autoindent:
1523 1528 if line:
1524 1529 self.indent_current_nsp = num_ini_spaces(line)
1525 1530
1526 1531 if line[-1] == ':':
1527 1532 self.indent_current_nsp += 4
1528 1533 elif dedent_re.match(line):
1529 1534 self.indent_current_nsp -= 4
1530 1535 else:
1531 1536 self.indent_current_nsp = 0
1532 1537
1533 1538 # indent_current is the actual string to be inserted
1534 1539 # by the readline hooks for indentation
1535 1540 self.indent_current = ' '* self.indent_current_nsp
1536 1541
1537 1542 def runlines(self,lines):
1538 1543 """Run a string of one or more lines of source.
1539 1544
1540 1545 This method is capable of running a string containing multiple source
1541 1546 lines, as if they had been entered at the IPython prompt. Since it
1542 1547 exposes IPython's processing machinery, the given strings can contain
1543 1548 magic calls (%magic), special shell access (!cmd), etc."""
1544 1549
1545 1550 # We must start with a clean buffer, in case this is run from an
1546 1551 # interactive IPython session (via a magic, for example).
1547 1552 self.resetbuffer()
1548 1553 lines = lines.split('\n')
1549 1554 more = 0
1550 1555 for line in lines:
1551 1556 # skip blank lines so we don't mess up the prompt counter, but do
1552 1557 # NOT skip even a blank line if we are in a code block (more is
1553 1558 # true)
1554 1559 if line or more:
1555 1560 more = self.push(self.prefilter(line,more))
1556 1561 # IPython's runsource returns None if there was an error
1557 1562 # compiling the code. This allows us to stop processing right
1558 1563 # away, so the user gets the error message at the right place.
1559 1564 if more is None:
1560 1565 break
1561 1566 # final newline in case the input didn't have it, so that the code
1562 1567 # actually does get executed
1563 1568 if more:
1564 1569 self.push('\n')
1565 1570
1566 1571 def runsource(self, source, filename='<input>', symbol='single'):
1567 1572 """Compile and run some source in the interpreter.
1568 1573
1569 1574 Arguments are as for compile_command().
1570 1575
1571 1576 One several things can happen:
1572 1577
1573 1578 1) The input is incorrect; compile_command() raised an
1574 1579 exception (SyntaxError or OverflowError). A syntax traceback
1575 1580 will be printed by calling the showsyntaxerror() method.
1576 1581
1577 1582 2) The input is incomplete, and more input is required;
1578 1583 compile_command() returned None. Nothing happens.
1579 1584
1580 1585 3) The input is complete; compile_command() returned a code
1581 1586 object. The code is executed by calling self.runcode() (which
1582 1587 also handles run-time exceptions, except for SystemExit).
1583 1588
1584 1589 The return value is:
1585 1590
1586 1591 - True in case 2
1587 1592
1588 1593 - False in the other cases, unless an exception is raised, where
1589 1594 None is returned instead. This can be used by external callers to
1590 1595 know whether to continue feeding input or not.
1591 1596
1592 1597 The return value can be used to decide whether to use sys.ps1 or
1593 1598 sys.ps2 to prompt the next line."""
1594 1599
1595 1600 try:
1596 1601 code = self.compile(source,filename,symbol)
1597 1602 except (OverflowError, SyntaxError, ValueError):
1598 1603 # Case 1
1599 1604 self.showsyntaxerror(filename)
1600 1605 return None
1601 1606
1602 1607 if code is None:
1603 1608 # Case 2
1604 1609 return True
1605 1610
1606 1611 # Case 3
1607 1612 # We store the code object so that threaded shells and
1608 1613 # custom exception handlers can access all this info if needed.
1609 1614 # The source corresponding to this can be obtained from the
1610 1615 # buffer attribute as '\n'.join(self.buffer).
1611 1616 self.code_to_run = code
1612 1617 # now actually execute the code object
1613 1618 if self.runcode(code) == 0:
1614 1619 return False
1615 1620 else:
1616 1621 return None
1617 1622
1618 1623 def runcode(self,code_obj):
1619 1624 """Execute a code object.
1620 1625
1621 1626 When an exception occurs, self.showtraceback() is called to display a
1622 1627 traceback.
1623 1628
1624 1629 Return value: a flag indicating whether the code to be run completed
1625 1630 successfully:
1626 1631
1627 1632 - 0: successful execution.
1628 1633 - 1: an error occurred.
1629 1634 """
1630 1635
1631 1636 # Set our own excepthook in case the user code tries to call it
1632 1637 # directly, so that the IPython crash handler doesn't get triggered
1633 1638 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1634 1639
1635 1640 # we save the original sys.excepthook in the instance, in case config
1636 1641 # code (such as magics) needs access to it.
1637 1642 self.sys_excepthook = old_excepthook
1638 1643 outflag = 1 # happens in more places, so it's easier as default
1639 1644 try:
1640 1645 try:
1641 1646 # Embedded instances require separate global/local namespaces
1642 1647 # so they can see both the surrounding (local) namespace and
1643 1648 # the module-level globals when called inside another function.
1644 1649 if self.embedded:
1645 1650 exec code_obj in self.user_global_ns, self.user_ns
1646 1651 # Normal (non-embedded) instances should only have a single
1647 1652 # namespace for user code execution, otherwise functions won't
1648 1653 # see interactive top-level globals.
1649 1654 else:
1650 1655 exec code_obj in self.user_ns
1651 1656 finally:
1652 1657 # Reset our crash handler in place
1653 1658 sys.excepthook = old_excepthook
1654 1659 except SystemExit:
1655 1660 self.resetbuffer()
1656 1661 self.showtraceback()
1657 1662 warn("Type exit or quit to exit IPython "
1658 1663 "(%Exit or %Quit do so unconditionally).",level=1)
1659 1664 except self.custom_exceptions:
1660 1665 etype,value,tb = sys.exc_info()
1661 1666 self.CustomTB(etype,value,tb)
1662 1667 except:
1663 1668 self.showtraceback()
1664 1669 else:
1665 1670 outflag = 0
1666 1671 if softspace(sys.stdout, 0):
1667 1672 print
1668 1673 # Flush out code object which has been run (and source)
1669 1674 self.code_to_run = None
1670 1675 return outflag
1671 1676
1672 1677 def push(self, line):
1673 1678 """Push a line to the interpreter.
1674 1679
1675 1680 The line should not have a trailing newline; it may have
1676 1681 internal newlines. The line is appended to a buffer and the
1677 1682 interpreter's runsource() method is called with the
1678 1683 concatenated contents of the buffer as source. If this
1679 1684 indicates that the command was executed or invalid, the buffer
1680 1685 is reset; otherwise, the command is incomplete, and the buffer
1681 1686 is left as it was after the line was appended. The return
1682 1687 value is 1 if more input is required, 0 if the line was dealt
1683 1688 with in some way (this is the same as runsource()).
1684 1689 """
1685 1690
1686 1691 # autoindent management should be done here, and not in the
1687 1692 # interactive loop, since that one is only seen by keyboard input. We
1688 1693 # need this done correctly even for code run via runlines (which uses
1689 1694 # push).
1690 1695
1691 1696 #print 'push line: <%s>' % line # dbg
1692 1697 self.autoindent_update(line)
1693 1698
1694 1699 self.buffer.append(line)
1695 1700 more = self.runsource('\n'.join(self.buffer), self.filename)
1696 1701 if not more:
1697 1702 self.resetbuffer()
1698 1703 return more
1699 1704
1700 1705 def resetbuffer(self):
1701 1706 """Reset the input buffer."""
1702 1707 self.buffer[:] = []
1703 1708
1704 1709 def raw_input(self,prompt='',continue_prompt=False):
1705 1710 """Write a prompt and read a line.
1706 1711
1707 1712 The returned line does not include the trailing newline.
1708 1713 When the user enters the EOF key sequence, EOFError is raised.
1709 1714
1710 1715 Optional inputs:
1711 1716
1712 1717 - prompt(''): a string to be printed to prompt the user.
1713 1718
1714 1719 - continue_prompt(False): whether this line is the first one or a
1715 1720 continuation in a sequence of inputs.
1716 1721 """
1717 1722
1718 1723 line = raw_input_original(prompt)
1719 1724 # Try to be reasonably smart about not re-indenting pasted input more
1720 1725 # than necessary. We do this by trimming out the auto-indent initial
1721 1726 # spaces, if the user's actual input started itself with whitespace.
1722 1727 #debugp('self.buffer[-1]')
1723 1728 ## if self.autoindent:
1724 1729 ## try:
1725 1730 ## prev_line = self.buffer[-1]
1726 1731 ## except IndexError:
1727 1732 ## prev_line = ''
1728 1733 ## prev_indent = num_ini_spaces(prev_line)
1729 1734 ## debugp('prev_indent')
1730 1735 ## # Split the user's input
1731 1736 ## line1 = line[:self.indent_current_nsp]
1732 1737 ## line2 = line[self.indent_current_nsp:]
1733 1738 ## if line1.isspace() and line2 and \
1734 1739 ## num_ini_spaces(line2)==prev_indent:
1735 1740 ## line = line2
1736 1741 #debugp('line')
1737 1742 #debugp('line1')
1738 1743 #debugp('line2')
1739 1744 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1740 1745 ## line = line2
1741 1746 ## debugp('line')
1742 1747 return self.prefilter(line,continue_prompt)
1743 1748
1744 1749 def split_user_input(self,line):
1745 1750 """Split user input into pre-char, function part and rest."""
1746 1751
1747 1752 lsplit = self.line_split.match(line)
1748 1753 if lsplit is None: # no regexp match returns None
1749 1754 try:
1750 1755 iFun,theRest = line.split(None,1)
1751 1756 except ValueError:
1752 1757 iFun,theRest = line,''
1753 1758 pre = re.match('^(\s*)(.*)',line).groups()[0]
1754 1759 else:
1755 1760 pre,iFun,theRest = lsplit.groups()
1756 1761
1757 1762 #print 'line:<%s>' % line # dbg
1758 1763 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1759 1764 return pre,iFun.strip(),theRest
1760 1765
1761 1766 def _prefilter(self, line, continue_prompt):
1762 1767 """Calls different preprocessors, depending on the form of line."""
1763 1768
1764 1769 # All handlers *must* return a value, even if it's blank ('').
1765 1770
1766 1771 # Lines are NOT logged here. Handlers should process the line as
1767 1772 # needed, update the cache AND log it (so that the input cache array
1768 1773 # stays synced).
1769 1774
1770 1775 # This function is _very_ delicate, and since it's also the one which
1771 1776 # determines IPython's response to user input, it must be as efficient
1772 1777 # as possible. For this reason it has _many_ returns in it, trying
1773 1778 # always to exit as quickly as it can figure out what it needs to do.
1774 1779
1775 1780 # This function is the main responsible for maintaining IPython's
1776 1781 # behavior respectful of Python's semantics. So be _very_ careful if
1777 1782 # making changes to anything here.
1778 1783
1779 1784 #.....................................................................
1780 1785 # Code begins
1781 1786
1782 1787 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1783 1788
1784 1789 # save the line away in case we crash, so the post-mortem handler can
1785 1790 # record it
1786 1791 self._last_input_line = line
1787 1792
1788 1793 #print '***line: <%s>' % line # dbg
1789 1794
1790 1795 # the input history needs to track even empty lines
1791 1796 if not line.strip():
1792 1797 if not continue_prompt:
1793 1798 self.outputcache.prompt_count -= 1
1794 1799 return self.handle_normal(line,continue_prompt)
1795 1800 #return self.handle_normal('',continue_prompt)
1796 1801
1797 1802 # print '***cont',continue_prompt # dbg
1798 1803 # special handlers are only allowed for single line statements
1799 1804 if continue_prompt and not self.rc.multi_line_specials:
1800 1805 return self.handle_normal(line,continue_prompt)
1801 1806
1802 1807 # For the rest, we need the structure of the input
1803 1808 pre,iFun,theRest = self.split_user_input(line)
1804 1809 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1805 1810
1806 1811 # First check for explicit escapes in the last/first character
1807 1812 handler = None
1808 1813 if line[-1] == self.ESC_HELP:
1809 1814 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1810 1815 if handler is None:
1811 1816 # look at the first character of iFun, NOT of line, so we skip
1812 1817 # leading whitespace in multiline input
1813 1818 handler = self.esc_handlers.get(iFun[0:1])
1814 1819 if handler is not None:
1815 1820 return handler(line,continue_prompt,pre,iFun,theRest)
1816 1821 # Emacs ipython-mode tags certain input lines
1817 1822 if line.endswith('# PYTHON-MODE'):
1818 1823 return self.handle_emacs(line,continue_prompt)
1819 1824
1820 1825 # Next, check if we can automatically execute this thing
1821 1826
1822 1827 # Allow ! in multi-line statements if multi_line_specials is on:
1823 1828 if continue_prompt and self.rc.multi_line_specials and \
1824 1829 iFun.startswith(self.ESC_SHELL):
1825 1830 return self.handle_shell_escape(line,continue_prompt,
1826 1831 pre=pre,iFun=iFun,
1827 1832 theRest=theRest)
1828 1833
1829 1834 # Let's try to find if the input line is a magic fn
1830 1835 oinfo = None
1831 1836 if hasattr(self,'magic_'+iFun):
1832 1837 # WARNING: _ofind uses getattr(), so it can consume generators and
1833 1838 # cause other side effects.
1834 1839 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1835 1840 if oinfo['ismagic']:
1836 1841 # Be careful not to call magics when a variable assignment is
1837 1842 # being made (ls='hi', for example)
1838 1843 if self.rc.automagic and \
1839 1844 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1840 1845 (self.rc.multi_line_specials or not continue_prompt):
1841 1846 return self.handle_magic(line,continue_prompt,
1842 1847 pre,iFun,theRest)
1843 1848 else:
1844 1849 return self.handle_normal(line,continue_prompt)
1845 1850
1846 1851 # If the rest of the line begins with an (in)equality, assginment or
1847 1852 # function call, we should not call _ofind but simply execute it.
1848 1853 # This avoids spurious geattr() accesses on objects upon assignment.
1849 1854 #
1850 1855 # It also allows users to assign to either alias or magic names true
1851 1856 # python variables (the magic/alias systems always take second seat to
1852 1857 # true python code).
1853 1858 if theRest and theRest[0] in '!=()':
1854 1859 return self.handle_normal(line,continue_prompt)
1855 1860
1856 1861 if oinfo is None:
1857 1862 # let's try to ensure that _oinfo is ONLY called when autocall is
1858 1863 # on. Since it has inevitable potential side effects, at least
1859 1864 # having autocall off should be a guarantee to the user that no
1860 1865 # weird things will happen.
1861 1866
1862 1867 if self.rc.autocall:
1863 1868 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1864 1869 else:
1865 1870 # in this case, all that's left is either an alias or
1866 1871 # processing the line normally.
1867 1872 if iFun in self.alias_table:
1868 1873 return self.handle_alias(line,continue_prompt,
1869 1874 pre,iFun,theRest)
1870 1875
1871 1876 else:
1872 1877 return self.handle_normal(line,continue_prompt)
1873 1878
1874 1879 if not oinfo['found']:
1875 1880 return self.handle_normal(line,continue_prompt)
1876 1881 else:
1877 1882 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1878 1883 if oinfo['isalias']:
1879 1884 return self.handle_alias(line,continue_prompt,
1880 1885 pre,iFun,theRest)
1881 1886
1882 1887 if self.rc.autocall and \
1883 1888 not self.re_exclude_auto.match(theRest) and \
1884 1889 self.re_fun_name.match(iFun) and \
1885 1890 callable(oinfo['obj']) :
1886 1891 #print 'going auto' # dbg
1887 1892 return self.handle_auto(line,continue_prompt,
1888 1893 pre,iFun,theRest,oinfo['obj'])
1889 1894 else:
1890 1895 #print 'was callable?', callable(oinfo['obj']) # dbg
1891 1896 return self.handle_normal(line,continue_prompt)
1892 1897
1893 1898 # If we get here, we have a normal Python line. Log and return.
1894 1899 return self.handle_normal(line,continue_prompt)
1895 1900
1896 1901 def _prefilter_dumb(self, line, continue_prompt):
1897 1902 """simple prefilter function, for debugging"""
1898 1903 return self.handle_normal(line,continue_prompt)
1899 1904
1900 1905 # Set the default prefilter() function (this can be user-overridden)
1901 1906 prefilter = _prefilter
1902 1907
1903 1908 def handle_normal(self,line,continue_prompt=None,
1904 1909 pre=None,iFun=None,theRest=None):
1905 1910 """Handle normal input lines. Use as a template for handlers."""
1906 1911
1907 1912 # With autoindent on, we need some way to exit the input loop, and I
1908 1913 # don't want to force the user to have to backspace all the way to
1909 1914 # clear the line. The rule will be in this case, that either two
1910 1915 # lines of pure whitespace in a row, or a line of pure whitespace but
1911 1916 # of a size different to the indent level, will exit the input loop.
1912 1917
1913 1918 if (continue_prompt and self.autoindent and line.isspace() and
1914 1919 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1915 1920 line = ''
1916 1921
1917 1922 self.log(line,continue_prompt)
1918 1923 return line
1919 1924
1920 1925 def handle_alias(self,line,continue_prompt=None,
1921 1926 pre=None,iFun=None,theRest=None):
1922 1927 """Handle alias input lines. """
1923 1928
1924 1929 # pre is needed, because it carries the leading whitespace. Otherwise
1925 1930 # aliases won't work in indented sections.
1926 1931 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1927 1932 self.log(line_out,continue_prompt)
1928 1933 return line_out
1929 1934
1930 1935 def handle_shell_escape(self, line, continue_prompt=None,
1931 1936 pre=None,iFun=None,theRest=None):
1932 1937 """Execute the line in a shell, empty return value"""
1933 1938
1934 1939 #print 'line in :', `line` # dbg
1935 1940 # Example of a special handler. Others follow a similar pattern.
1936 1941 if line.lstrip().startswith('!!'):
1937 1942 # rewrite iFun/theRest to properly hold the call to %sx and
1938 1943 # the actual command to be executed, so handle_magic can work
1939 1944 # correctly
1940 1945 theRest = '%s %s' % (iFun[2:],theRest)
1941 1946 iFun = 'sx'
1942 1947 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1943 1948 line.lstrip()[2:]),
1944 1949 continue_prompt,pre,iFun,theRest)
1945 1950 else:
1946 1951 cmd=line.lstrip().lstrip('!')
1947 1952 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1948 1953 # update cache/log and return
1949 1954 self.log(line_out,continue_prompt)
1950 1955 return line_out
1951 1956
1952 1957 def handle_magic(self, line, continue_prompt=None,
1953 1958 pre=None,iFun=None,theRest=None):
1954 1959 """Execute magic functions."""
1955 1960
1956 1961
1957 1962 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1958 1963 self.log(cmd,continue_prompt)
1959 1964 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1960 1965 return cmd
1961 1966
1962 1967 def handle_auto(self, line, continue_prompt=None,
1963 1968 pre=None,iFun=None,theRest=None,obj=None):
1964 1969 """Hande lines which can be auto-executed, quoting if requested."""
1965 1970
1966 1971 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1967 1972
1968 1973 # This should only be active for single-line input!
1969 1974 if continue_prompt:
1970 1975 self.log(line,continue_prompt)
1971 1976 return line
1972 1977
1973 1978 auto_rewrite = True
1974 1979 if pre == self.ESC_QUOTE:
1975 1980 # Auto-quote splitting on whitespace
1976 1981 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1977 1982 elif pre == self.ESC_QUOTE2:
1978 1983 # Auto-quote whole string
1979 1984 newcmd = '%s("%s")' % (iFun,theRest)
1980 1985 else:
1981 1986 # Auto-paren.
1982 1987 # We only apply it to argument-less calls if the autocall
1983 1988 # parameter is set to 2. We only need to check that autocall is <
1984 1989 # 2, since this function isn't called unless it's at least 1.
1985 1990 if not theRest and (self.rc.autocall < 2):
1986 1991 newcmd = '%s %s' % (iFun,theRest)
1987 1992 auto_rewrite = False
1988 1993 else:
1989 1994 if theRest.startswith('['):
1990 1995 if hasattr(obj,'__getitem__'):
1991 1996 # Don't autocall in this case: item access for an object
1992 1997 # which is BOTH callable and implements __getitem__.
1993 1998 newcmd = '%s %s' % (iFun,theRest)
1994 1999 auto_rewrite = False
1995 2000 else:
1996 2001 # if the object doesn't support [] access, go ahead and
1997 2002 # autocall
1998 2003 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1999 2004 elif theRest.endswith(';'):
2000 2005 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2001 2006 else:
2002 2007 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2003 2008
2004 2009 if auto_rewrite:
2005 2010 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2006 2011 # log what is now valid Python, not the actual user input (without the
2007 2012 # final newline)
2008 2013 self.log(newcmd,continue_prompt)
2009 2014 return newcmd
2010 2015
2011 2016 def handle_help(self, line, continue_prompt=None,
2012 2017 pre=None,iFun=None,theRest=None):
2013 2018 """Try to get some help for the object.
2014 2019
2015 2020 obj? or ?obj -> basic information.
2016 2021 obj?? or ??obj -> more details.
2017 2022 """
2018 2023
2019 2024 # We need to make sure that we don't process lines which would be
2020 2025 # otherwise valid python, such as "x=1 # what?"
2021 2026 try:
2022 2027 codeop.compile_command(line)
2023 2028 except SyntaxError:
2024 2029 # We should only handle as help stuff which is NOT valid syntax
2025 2030 if line[0]==self.ESC_HELP:
2026 2031 line = line[1:]
2027 2032 elif line[-1]==self.ESC_HELP:
2028 2033 line = line[:-1]
2029 2034 self.log('#?'+line)
2030 2035 if line:
2031 2036 self.magic_pinfo(line)
2032 2037 else:
2033 2038 page(self.usage,screen_lines=self.rc.screen_length)
2034 2039 return '' # Empty string is needed here!
2035 2040 except:
2036 2041 # Pass any other exceptions through to the normal handler
2037 2042 return self.handle_normal(line,continue_prompt)
2038 2043 else:
2039 2044 # If the code compiles ok, we should handle it normally
2040 2045 return self.handle_normal(line,continue_prompt)
2041 2046
2042 2047 def handle_emacs(self,line,continue_prompt=None,
2043 2048 pre=None,iFun=None,theRest=None):
2044 2049 """Handle input lines marked by python-mode."""
2045 2050
2046 2051 # Currently, nothing is done. Later more functionality can be added
2047 2052 # here if needed.
2048 2053
2049 2054 # The input cache shouldn't be updated
2050 2055
2051 2056 return line
2052 2057
2053 2058 def mktempfile(self,data=None):
2054 2059 """Make a new tempfile and return its filename.
2055 2060
2056 2061 This makes a call to tempfile.mktemp, but it registers the created
2057 2062 filename internally so ipython cleans it up at exit time.
2058 2063
2059 2064 Optional inputs:
2060 2065
2061 2066 - data(None): if data is given, it gets written out to the temp file
2062 2067 immediately, and the file is closed again."""
2063 2068
2064 2069 filename = tempfile.mktemp('.py','ipython_edit_')
2065 2070 self.tempfiles.append(filename)
2066 2071
2067 2072 if data:
2068 2073 tmp_file = open(filename,'w')
2069 2074 tmp_file.write(data)
2070 2075 tmp_file.close()
2071 2076 return filename
2072 2077
2073 2078 def write(self,data):
2074 2079 """Write a string to the default output"""
2075 2080 Term.cout.write(data)
2076 2081
2077 2082 def write_err(self,data):
2078 2083 """Write a string to the default error output"""
2079 2084 Term.cerr.write(data)
2080 2085
2081 2086 def exit(self):
2082 2087 """Handle interactive exit.
2083 2088
2084 2089 This method sets the exit_now attribute."""
2085 2090
2086 2091 if self.rc.confirm_exit:
2087 2092 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2088 2093 self.exit_now = True
2089 2094 else:
2090 2095 self.exit_now = True
2091 2096 return self.exit_now
2092 2097
2093 2098 def safe_execfile(self,fname,*where,**kw):
2094 2099 fname = os.path.expanduser(fname)
2095 2100
2096 2101 # find things also in current directory
2097 2102 dname = os.path.dirname(fname)
2098 2103 if not sys.path.count(dname):
2099 2104 sys.path.append(dname)
2100 2105
2101 2106 try:
2102 2107 xfile = open(fname)
2103 2108 except:
2104 2109 print >> Term.cerr, \
2105 2110 'Could not open file <%s> for safe execution.' % fname
2106 2111 return None
2107 2112
2108 2113 kw.setdefault('islog',0)
2109 2114 kw.setdefault('quiet',1)
2110 2115 kw.setdefault('exit_ignore',0)
2111 2116 first = xfile.readline()
2112 2117 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2113 2118 xfile.close()
2114 2119 # line by line execution
2115 2120 if first.startswith(loghead) or kw['islog']:
2116 2121 print 'Loading log file <%s> one line at a time...' % fname
2117 2122 if kw['quiet']:
2118 2123 stdout_save = sys.stdout
2119 2124 sys.stdout = StringIO.StringIO()
2120 2125 try:
2121 2126 globs,locs = where[0:2]
2122 2127 except:
2123 2128 try:
2124 2129 globs = locs = where[0]
2125 2130 except:
2126 2131 globs = locs = globals()
2127 2132 badblocks = []
2128 2133
2129 2134 # we also need to identify indented blocks of code when replaying
2130 2135 # logs and put them together before passing them to an exec
2131 2136 # statement. This takes a bit of regexp and look-ahead work in the
2132 2137 # file. It's easiest if we swallow the whole thing in memory
2133 2138 # first, and manually walk through the lines list moving the
2134 2139 # counter ourselves.
2135 2140 indent_re = re.compile('\s+\S')
2136 2141 xfile = open(fname)
2137 2142 filelines = xfile.readlines()
2138 2143 xfile.close()
2139 2144 nlines = len(filelines)
2140 2145 lnum = 0
2141 2146 while lnum < nlines:
2142 2147 line = filelines[lnum]
2143 2148 lnum += 1
2144 2149 # don't re-insert logger status info into cache
2145 2150 if line.startswith('#log#'):
2146 2151 continue
2147 2152 else:
2148 2153 # build a block of code (maybe a single line) for execution
2149 2154 block = line
2150 2155 try:
2151 2156 next = filelines[lnum] # lnum has already incremented
2152 2157 except:
2153 2158 next = None
2154 2159 while next and indent_re.match(next):
2155 2160 block += next
2156 2161 lnum += 1
2157 2162 try:
2158 2163 next = filelines[lnum]
2159 2164 except:
2160 2165 next = None
2161 2166 # now execute the block of one or more lines
2162 2167 try:
2163 2168 exec block in globs,locs
2164 2169 except SystemExit:
2165 2170 pass
2166 2171 except:
2167 2172 badblocks.append(block.rstrip())
2168 2173 if kw['quiet']: # restore stdout
2169 2174 sys.stdout.close()
2170 2175 sys.stdout = stdout_save
2171 2176 print 'Finished replaying log file <%s>' % fname
2172 2177 if badblocks:
2173 2178 print >> sys.stderr, ('\nThe following lines/blocks in file '
2174 2179 '<%s> reported errors:' % fname)
2175 2180
2176 2181 for badline in badblocks:
2177 2182 print >> sys.stderr, badline
2178 2183 else: # regular file execution
2179 2184 try:
2180 2185 execfile(fname,*where)
2181 2186 except SyntaxError:
2182 2187 etype,evalue = sys.exc_info()[:2]
2183 2188 self.SyntaxTB(etype,evalue,[])
2184 2189 warn('Failure executing file: <%s>' % fname)
2185 2190 except SystemExit,status:
2186 2191 if not kw['exit_ignore']:
2187 2192 self.InteractiveTB()
2188 2193 warn('Failure executing file: <%s>' % fname)
2189 2194 except:
2190 2195 self.InteractiveTB()
2191 2196 warn('Failure executing file: <%s>' % fname)
2192 2197
2193 2198 #************************* end of file <iplib.py> *****************************
@@ -1,4896 +1,4900 b''
1 1 2006-01-13 Ville Vainio <vivainio@gmail.com>
2 2
3 3 * IPython/platutils*.py: platform specific utility functions,
4 4 so far only set_term_title is implemented (change terminal
5 5 label in windowing systems). %cd now changes the title to
6 6 current dir.
7 7
8 8 * IPython/Release.py: Added myself to "authors" list,
9 9 had to create new files.
10 10
11 11 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
12 12 shell escape; not a known bug but had potential to be one in the
13 13 future.
14 14
15 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
16 extension API for IPython! See the module for usage example. Fix
17 OInspect for docstring-less magic functions.
18
15 19
16 20 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
17 21
18 22 * IPython/iplib.py (raw_input): temporarily deactivate all
19 23 attempts at allowing pasting of code with autoindent on. It
20 24 introduced bugs (reported by Prabhu) and I can't seem to find a
21 25 robust combination which works in all cases. Will have to revisit
22 26 later.
23 27
24 28 * IPython/genutils.py: remove isspace() function. We've dropped
25 29 2.2 compatibility, so it's OK to use the string method.
26 30
27 31 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
28 32
29 33 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
30 34 matching what NOT to autocall on, to include all python binary
31 35 operators (including things like 'and', 'or', 'is' and 'in').
32 36 Prompted by a bug report on 'foo & bar', but I realized we had
33 37 many more potential bug cases with other operators. The regexp is
34 38 self.re_exclude_auto, it's fairly commented.
35 39
36 40 2006-01-12 Ville Vainio <vivainio@gmail.com>
37 41
38 42 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
39 43 Prettified and hardened string/backslash quoting with ipsystem(),
40 44 ipalias() and ipmagic(). Now even \ characters are passed to
41 45 %magics, !shell escapes and aliases exactly as they are in the
42 46 ipython command line. Should improve backslash experience,
43 47 particularly in Windows (path delimiter for some commands that
44 48 won't understand '/'), but Unix benefits as well (regexps). %cd
45 49 magic still doesn't support backslash path delimiters, though. Also
46 50 deleted all pretense of supporting multiline command strings in
47 51 !system or %magic commands. Thanks to Jerry McRae for suggestions.
48 52
49 53 * doc/build_doc_instructions.txt added. Documentation on how to
50 54 use doc/update_manual.py, added yesterday. Both files contributed
51 55 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
52 56 doc/*.sh for deprecation at a later date.
53 57
54 58 * /ipython.py Added ipython.py to root directory for
55 59 zero-installation (tar xzvf ipython.tgz; cd ipython; python
56 60 ipython.py) and development convenience (no need to kee doing
57 61 "setup.py install" between changes).
58 62
59 63 * Made ! and !! shell escapes work (again) in multiline expressions:
60 64 if 1:
61 65 !ls
62 66 !!ls
63 67
64 68 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
65 69
66 70 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
67 71 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
68 72 module in case-insensitive installation. Was causing crashes
69 73 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
70 74
71 75 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
72 76 <marienz-AT-gentoo.org>, closes
73 77 http://www.scipy.net/roundup/ipython/issue51.
74 78
75 79 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
76 80
77 81 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
78 82 problem of excessive CPU usage under *nix and keyboard lag under
79 83 win32.
80 84
81 85 2006-01-10 *** Released version 0.7.0
82 86
83 87 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
84 88
85 89 * IPython/Release.py (revision): tag version number to 0.7.0,
86 90 ready for release.
87 91
88 92 * IPython/Magic.py (magic_edit): Add print statement to %edit so
89 93 it informs the user of the name of the temp. file used. This can
90 94 help if you decide later to reuse that same file, so you know
91 95 where to copy the info from.
92 96
93 97 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
94 98
95 99 * setup_bdist_egg.py: little script to build an egg. Added
96 100 support in the release tools as well.
97 101
98 102 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
99 103
100 104 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
101 105 version selection (new -wxversion command line and ipythonrc
102 106 parameter). Patch contributed by Arnd Baecker
103 107 <arnd.baecker-AT-web.de>.
104 108
105 109 * IPython/iplib.py (embed_mainloop): fix tab-completion in
106 110 embedded instances, for variables defined at the interactive
107 111 prompt of the embedded ipython. Reported by Arnd.
108 112
109 113 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
110 114 it can be used as a (stateful) toggle, or with a direct parameter.
111 115
112 116 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
113 117 could be triggered in certain cases and cause the traceback
114 118 printer not to work.
115 119
116 120 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
117 121
118 122 * IPython/iplib.py (_should_recompile): Small fix, closes
119 123 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
120 124
121 125 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
122 126
123 127 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
124 128 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
125 129 Moad for help with tracking it down.
126 130
127 131 * IPython/iplib.py (handle_auto): fix autocall handling for
128 132 objects which support BOTH __getitem__ and __call__ (so that f [x]
129 133 is left alone, instead of becoming f([x]) automatically).
130 134
131 135 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
132 136 Ville's patch.
133 137
134 138 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
135 139
136 140 * IPython/iplib.py (handle_auto): changed autocall semantics to
137 141 include 'smart' mode, where the autocall transformation is NOT
138 142 applied if there are no arguments on the line. This allows you to
139 143 just type 'foo' if foo is a callable to see its internal form,
140 144 instead of having it called with no arguments (typically a
141 145 mistake). The old 'full' autocall still exists: for that, you
142 146 need to set the 'autocall' parameter to 2 in your ipythonrc file.
143 147
144 148 * IPython/completer.py (Completer.attr_matches): add
145 149 tab-completion support for Enthoughts' traits. After a report by
146 150 Arnd and a patch by Prabhu.
147 151
148 152 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
149 153
150 154 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
151 155 Schmolck's patch to fix inspect.getinnerframes().
152 156
153 157 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
154 158 for embedded instances, regarding handling of namespaces and items
155 159 added to the __builtin__ one. Multiple embedded instances and
156 160 recursive embeddings should work better now (though I'm not sure
157 161 I've got all the corner cases fixed, that code is a bit of a brain
158 162 twister).
159 163
160 164 * IPython/Magic.py (magic_edit): added support to edit in-memory
161 165 macros (automatically creates the necessary temp files). %edit
162 166 also doesn't return the file contents anymore, it's just noise.
163 167
164 168 * IPython/completer.py (Completer.attr_matches): revert change to
165 169 complete only on attributes listed in __all__. I realized it
166 170 cripples the tab-completion system as a tool for exploring the
167 171 internals of unknown libraries (it renders any non-__all__
168 172 attribute off-limits). I got bit by this when trying to see
169 173 something inside the dis module.
170 174
171 175 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
172 176
173 177 * IPython/iplib.py (InteractiveShell.__init__): add .meta
174 178 namespace for users and extension writers to hold data in. This
175 179 follows the discussion in
176 180 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
177 181
178 182 * IPython/completer.py (IPCompleter.complete): small patch to help
179 183 tab-completion under Emacs, after a suggestion by John Barnard
180 184 <barnarj-AT-ccf.org>.
181 185
182 186 * IPython/Magic.py (Magic.extract_input_slices): added support for
183 187 the slice notation in magics to use N-M to represent numbers N...M
184 188 (closed endpoints). This is used by %macro and %save.
185 189
186 190 * IPython/completer.py (Completer.attr_matches): for modules which
187 191 define __all__, complete only on those. After a patch by Jeffrey
188 192 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
189 193 speed up this routine.
190 194
191 195 * IPython/Logger.py (Logger.log): fix a history handling bug. I
192 196 don't know if this is the end of it, but the behavior now is
193 197 certainly much more correct. Note that coupled with macros,
194 198 slightly surprising (at first) behavior may occur: a macro will in
195 199 general expand to multiple lines of input, so upon exiting, the
196 200 in/out counters will both be bumped by the corresponding amount
197 201 (as if the macro's contents had been typed interactively). Typing
198 202 %hist will reveal the intermediate (silently processed) lines.
199 203
200 204 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
201 205 pickle to fail (%run was overwriting __main__ and not restoring
202 206 it, but pickle relies on __main__ to operate).
203 207
204 208 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
205 209 using properties, but forgot to make the main InteractiveShell
206 210 class a new-style class. Properties fail silently, and
207 211 misteriously, with old-style class (getters work, but
208 212 setters don't do anything).
209 213
210 214 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
211 215
212 216 * IPython/Magic.py (magic_history): fix history reporting bug (I
213 217 know some nasties are still there, I just can't seem to find a
214 218 reproducible test case to track them down; the input history is
215 219 falling out of sync...)
216 220
217 221 * IPython/iplib.py (handle_shell_escape): fix bug where both
218 222 aliases and system accesses where broken for indented code (such
219 223 as loops).
220 224
221 225 * IPython/genutils.py (shell): fix small but critical bug for
222 226 win32 system access.
223 227
224 228 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
225 229
226 230 * IPython/iplib.py (showtraceback): remove use of the
227 231 sys.last_{type/value/traceback} structures, which are non
228 232 thread-safe.
229 233 (_prefilter): change control flow to ensure that we NEVER
230 234 introspect objects when autocall is off. This will guarantee that
231 235 having an input line of the form 'x.y', where access to attribute
232 236 'y' has side effects, doesn't trigger the side effect TWICE. It
233 237 is important to note that, with autocall on, these side effects
234 238 can still happen.
235 239 (ipsystem): new builtin, to complete the ip{magic/alias/system}
236 240 trio. IPython offers these three kinds of special calls which are
237 241 not python code, and it's a good thing to have their call method
238 242 be accessible as pure python functions (not just special syntax at
239 243 the command line). It gives us a better internal implementation
240 244 structure, as well as exposing these for user scripting more
241 245 cleanly.
242 246
243 247 * IPython/macro.py (Macro.__init__): moved macros to a standalone
244 248 file. Now that they'll be more likely to be used with the
245 249 persistance system (%store), I want to make sure their module path
246 250 doesn't change in the future, so that we don't break things for
247 251 users' persisted data.
248 252
249 253 * IPython/iplib.py (autoindent_update): move indentation
250 254 management into the _text_ processing loop, not the keyboard
251 255 interactive one. This is necessary to correctly process non-typed
252 256 multiline input (such as macros).
253 257
254 258 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
255 259 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
256 260 which was producing problems in the resulting manual.
257 261 (magic_whos): improve reporting of instances (show their class,
258 262 instead of simply printing 'instance' which isn't terribly
259 263 informative).
260 264
261 265 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
262 266 (minor mods) to support network shares under win32.
263 267
264 268 * IPython/winconsole.py (get_console_size): add new winconsole
265 269 module and fixes to page_dumb() to improve its behavior under
266 270 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
267 271
268 272 * IPython/Magic.py (Macro): simplified Macro class to just
269 273 subclass list. We've had only 2.2 compatibility for a very long
270 274 time, yet I was still avoiding subclassing the builtin types. No
271 275 more (I'm also starting to use properties, though I won't shift to
272 276 2.3-specific features quite yet).
273 277 (magic_store): added Ville's patch for lightweight variable
274 278 persistence, after a request on the user list by Matt Wilkie
275 279 <maphew-AT-gmail.com>. The new %store magic's docstring has full
276 280 details.
277 281
278 282 * IPython/iplib.py (InteractiveShell.post_config_initialization):
279 283 changed the default logfile name from 'ipython.log' to
280 284 'ipython_log.py'. These logs are real python files, and now that
281 285 we have much better multiline support, people are more likely to
282 286 want to use them as such. Might as well name them correctly.
283 287
284 288 * IPython/Magic.py: substantial cleanup. While we can't stop
285 289 using magics as mixins, due to the existing customizations 'out
286 290 there' which rely on the mixin naming conventions, at least I
287 291 cleaned out all cross-class name usage. So once we are OK with
288 292 breaking compatibility, the two systems can be separated.
289 293
290 294 * IPython/Logger.py: major cleanup. This one is NOT a mixin
291 295 anymore, and the class is a fair bit less hideous as well. New
292 296 features were also introduced: timestamping of input, and logging
293 297 of output results. These are user-visible with the -t and -o
294 298 options to %logstart. Closes
295 299 http://www.scipy.net/roundup/ipython/issue11 and a request by
296 300 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
297 301
298 302 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
299 303
300 304 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
301 305 better hadnle backslashes in paths. See the thread 'More Windows
302 306 questions part 2 - \/ characters revisited' on the iypthon user
303 307 list:
304 308 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
305 309
306 310 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
307 311
308 312 (InteractiveShell.__init__): change threaded shells to not use the
309 313 ipython crash handler. This was causing more problems than not,
310 314 as exceptions in the main thread (GUI code, typically) would
311 315 always show up as a 'crash', when they really weren't.
312 316
313 317 The colors and exception mode commands (%colors/%xmode) have been
314 318 synchronized to also take this into account, so users can get
315 319 verbose exceptions for their threaded code as well. I also added
316 320 support for activating pdb inside this exception handler as well,
317 321 so now GUI authors can use IPython's enhanced pdb at runtime.
318 322
319 323 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
320 324 true by default, and add it to the shipped ipythonrc file. Since
321 325 this asks the user before proceeding, I think it's OK to make it
322 326 true by default.
323 327
324 328 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
325 329 of the previous special-casing of input in the eval loop. I think
326 330 this is cleaner, as they really are commands and shouldn't have
327 331 a special role in the middle of the core code.
328 332
329 333 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
330 334
331 335 * IPython/iplib.py (edit_syntax_error): added support for
332 336 automatically reopening the editor if the file had a syntax error
333 337 in it. Thanks to scottt who provided the patch at:
334 338 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
335 339 version committed).
336 340
337 341 * IPython/iplib.py (handle_normal): add suport for multi-line
338 342 input with emtpy lines. This fixes
339 343 http://www.scipy.net/roundup/ipython/issue43 and a similar
340 344 discussion on the user list.
341 345
342 346 WARNING: a behavior change is necessarily introduced to support
343 347 blank lines: now a single blank line with whitespace does NOT
344 348 break the input loop, which means that when autoindent is on, by
345 349 default hitting return on the next (indented) line does NOT exit.
346 350
347 351 Instead, to exit a multiline input you can either have:
348 352
349 353 - TWO whitespace lines (just hit return again), or
350 354 - a single whitespace line of a different length than provided
351 355 by the autoindent (add or remove a space).
352 356
353 357 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
354 358 module to better organize all readline-related functionality.
355 359 I've deleted FlexCompleter and put all completion clases here.
356 360
357 361 * IPython/iplib.py (raw_input): improve indentation management.
358 362 It is now possible to paste indented code with autoindent on, and
359 363 the code is interpreted correctly (though it still looks bad on
360 364 screen, due to the line-oriented nature of ipython).
361 365 (MagicCompleter.complete): change behavior so that a TAB key on an
362 366 otherwise empty line actually inserts a tab, instead of completing
363 367 on the entire global namespace. This makes it easier to use the
364 368 TAB key for indentation. After a request by Hans Meine
365 369 <hans_meine-AT-gmx.net>
366 370 (_prefilter): add support so that typing plain 'exit' or 'quit'
367 371 does a sensible thing. Originally I tried to deviate as little as
368 372 possible from the default python behavior, but even that one may
369 373 change in this direction (thread on python-dev to that effect).
370 374 Regardless, ipython should do the right thing even if CPython's
371 375 '>>>' prompt doesn't.
372 376 (InteractiveShell): removed subclassing code.InteractiveConsole
373 377 class. By now we'd overridden just about all of its methods: I've
374 378 copied the remaining two over, and now ipython is a standalone
375 379 class. This will provide a clearer picture for the chainsaw
376 380 branch refactoring.
377 381
378 382 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
379 383
380 384 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
381 385 failures for objects which break when dir() is called on them.
382 386
383 387 * IPython/FlexCompleter.py (Completer.__init__): Added support for
384 388 distinct local and global namespaces in the completer API. This
385 389 change allows us top properly handle completion with distinct
386 390 scopes, including in embedded instances (this had never really
387 391 worked correctly).
388 392
389 393 Note: this introduces a change in the constructor for
390 394 MagicCompleter, as a new global_namespace parameter is now the
391 395 second argument (the others were bumped one position).
392 396
393 397 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
394 398
395 399 * IPython/iplib.py (embed_mainloop): fix tab-completion in
396 400 embedded instances (which can be done now thanks to Vivian's
397 401 frame-handling fixes for pdb).
398 402 (InteractiveShell.__init__): Fix namespace handling problem in
399 403 embedded instances. We were overwriting __main__ unconditionally,
400 404 and this should only be done for 'full' (non-embedded) IPython;
401 405 embedded instances must respect the caller's __main__. Thanks to
402 406 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
403 407
404 408 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
405 409
406 410 * setup.py: added download_url to setup(). This registers the
407 411 download address at PyPI, which is not only useful to humans
408 412 browsing the site, but is also picked up by setuptools (the Eggs
409 413 machinery). Thanks to Ville and R. Kern for the info/discussion
410 414 on this.
411 415
412 416 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
413 417
414 418 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
415 419 This brings a lot of nice functionality to the pdb mode, which now
416 420 has tab-completion, syntax highlighting, and better stack handling
417 421 than before. Many thanks to Vivian De Smedt
418 422 <vivian-AT-vdesmedt.com> for the original patches.
419 423
420 424 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
421 425
422 426 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
423 427 sequence to consistently accept the banner argument. The
424 428 inconsistency was tripping SAGE, thanks to Gary Zablackis
425 429 <gzabl-AT-yahoo.com> for the report.
426 430
427 431 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
428 432
429 433 * IPython/iplib.py (InteractiveShell.post_config_initialization):
430 434 Fix bug where a naked 'alias' call in the ipythonrc file would
431 435 cause a crash. Bug reported by Jorgen Stenarson.
432 436
433 437 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
434 438
435 439 * IPython/ipmaker.py (make_IPython): cleanups which should improve
436 440 startup time.
437 441
438 442 * IPython/iplib.py (runcode): my globals 'fix' for embedded
439 443 instances had introduced a bug with globals in normal code. Now
440 444 it's working in all cases.
441 445
442 446 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
443 447 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
444 448 has been introduced to set the default case sensitivity of the
445 449 searches. Users can still select either mode at runtime on a
446 450 per-search basis.
447 451
448 452 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
449 453
450 454 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
451 455 attributes in wildcard searches for subclasses. Modified version
452 456 of a patch by Jorgen.
453 457
454 458 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
455 459
456 460 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
457 461 embedded instances. I added a user_global_ns attribute to the
458 462 InteractiveShell class to handle this.
459 463
460 464 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
461 465
462 466 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
463 467 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
464 468 (reported under win32, but may happen also in other platforms).
465 469 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
466 470
467 471 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
468 472
469 473 * IPython/Magic.py (magic_psearch): new support for wildcard
470 474 patterns. Now, typing ?a*b will list all names which begin with a
471 475 and end in b, for example. The %psearch magic has full
472 476 docstrings. Many thanks to JΓΆrgen Stenarson
473 477 <jorgen.stenarson-AT-bostream.nu>, author of the patches
474 478 implementing this functionality.
475 479
476 480 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
477 481
478 482 * Manual: fixed long-standing annoyance of double-dashes (as in
479 483 --prefix=~, for example) being stripped in the HTML version. This
480 484 is a latex2html bug, but a workaround was provided. Many thanks
481 485 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
482 486 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
483 487 rolling. This seemingly small issue had tripped a number of users
484 488 when first installing, so I'm glad to see it gone.
485 489
486 490 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
487 491
488 492 * IPython/Extensions/numeric_formats.py: fix missing import,
489 493 reported by Stephen Walton.
490 494
491 495 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
492 496
493 497 * IPython/demo.py: finish demo module, fully documented now.
494 498
495 499 * IPython/genutils.py (file_read): simple little utility to read a
496 500 file and ensure it's closed afterwards.
497 501
498 502 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
499 503
500 504 * IPython/demo.py (Demo.__init__): added support for individually
501 505 tagging blocks for automatic execution.
502 506
503 507 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
504 508 syntax-highlighted python sources, requested by John.
505 509
506 510 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
507 511
508 512 * IPython/demo.py (Demo.again): fix bug where again() blocks after
509 513 finishing.
510 514
511 515 * IPython/genutils.py (shlex_split): moved from Magic to here,
512 516 where all 2.2 compatibility stuff lives. I needed it for demo.py.
513 517
514 518 * IPython/demo.py (Demo.__init__): added support for silent
515 519 blocks, improved marks as regexps, docstrings written.
516 520 (Demo.__init__): better docstring, added support for sys.argv.
517 521
518 522 * IPython/genutils.py (marquee): little utility used by the demo
519 523 code, handy in general.
520 524
521 525 * IPython/demo.py (Demo.__init__): new class for interactive
522 526 demos. Not documented yet, I just wrote it in a hurry for
523 527 scipy'05. Will docstring later.
524 528
525 529 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
526 530
527 531 * IPython/Shell.py (sigint_handler): Drastic simplification which
528 532 also seems to make Ctrl-C work correctly across threads! This is
529 533 so simple, that I can't beleive I'd missed it before. Needs more
530 534 testing, though.
531 535 (KBINT): Never mind, revert changes. I'm sure I'd tried something
532 536 like this before...
533 537
534 538 * IPython/genutils.py (get_home_dir): add protection against
535 539 non-dirs in win32 registry.
536 540
537 541 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
538 542 bug where dict was mutated while iterating (pysh crash).
539 543
540 544 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
541 545
542 546 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
543 547 spurious newlines added by this routine. After a report by
544 548 F. Mantegazza.
545 549
546 550 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
547 551
548 552 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
549 553 calls. These were a leftover from the GTK 1.x days, and can cause
550 554 problems in certain cases (after a report by John Hunter).
551 555
552 556 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
553 557 os.getcwd() fails at init time. Thanks to patch from David Remahl
554 558 <chmod007-AT-mac.com>.
555 559 (InteractiveShell.__init__): prevent certain special magics from
556 560 being shadowed by aliases. Closes
557 561 http://www.scipy.net/roundup/ipython/issue41.
558 562
559 563 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
560 564
561 565 * IPython/iplib.py (InteractiveShell.complete): Added new
562 566 top-level completion method to expose the completion mechanism
563 567 beyond readline-based environments.
564 568
565 569 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
566 570
567 571 * tools/ipsvnc (svnversion): fix svnversion capture.
568 572
569 573 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
570 574 attribute to self, which was missing. Before, it was set by a
571 575 routine which in certain cases wasn't being called, so the
572 576 instance could end up missing the attribute. This caused a crash.
573 577 Closes http://www.scipy.net/roundup/ipython/issue40.
574 578
575 579 2005-08-16 Fernando Perez <fperez@colorado.edu>
576 580
577 581 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
578 582 contains non-string attribute. Closes
579 583 http://www.scipy.net/roundup/ipython/issue38.
580 584
581 585 2005-08-14 Fernando Perez <fperez@colorado.edu>
582 586
583 587 * tools/ipsvnc: Minor improvements, to add changeset info.
584 588
585 589 2005-08-12 Fernando Perez <fperez@colorado.edu>
586 590
587 591 * IPython/iplib.py (runsource): remove self.code_to_run_src
588 592 attribute. I realized this is nothing more than
589 593 '\n'.join(self.buffer), and having the same data in two different
590 594 places is just asking for synchronization bugs. This may impact
591 595 people who have custom exception handlers, so I need to warn
592 596 ipython-dev about it (F. Mantegazza may use them).
593 597
594 598 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
595 599
596 600 * IPython/genutils.py: fix 2.2 compatibility (generators)
597 601
598 602 2005-07-18 Fernando Perez <fperez@colorado.edu>
599 603
600 604 * IPython/genutils.py (get_home_dir): fix to help users with
601 605 invalid $HOME under win32.
602 606
603 607 2005-07-17 Fernando Perez <fperez@colorado.edu>
604 608
605 609 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
606 610 some old hacks and clean up a bit other routines; code should be
607 611 simpler and a bit faster.
608 612
609 613 * IPython/iplib.py (interact): removed some last-resort attempts
610 614 to survive broken stdout/stderr. That code was only making it
611 615 harder to abstract out the i/o (necessary for gui integration),
612 616 and the crashes it could prevent were extremely rare in practice
613 617 (besides being fully user-induced in a pretty violent manner).
614 618
615 619 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
616 620 Nothing major yet, but the code is simpler to read; this should
617 621 make it easier to do more serious modifications in the future.
618 622
619 623 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
620 624 which broke in .15 (thanks to a report by Ville).
621 625
622 626 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
623 627 be quite correct, I know next to nothing about unicode). This
624 628 will allow unicode strings to be used in prompts, amongst other
625 629 cases. It also will prevent ipython from crashing when unicode
626 630 shows up unexpectedly in many places. If ascii encoding fails, we
627 631 assume utf_8. Currently the encoding is not a user-visible
628 632 setting, though it could be made so if there is demand for it.
629 633
630 634 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
631 635
632 636 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
633 637
634 638 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
635 639
636 640 * IPython/genutils.py: Add 2.2 compatibility here, so all other
637 641 code can work transparently for 2.2/2.3.
638 642
639 643 2005-07-16 Fernando Perez <fperez@colorado.edu>
640 644
641 645 * IPython/ultraTB.py (ExceptionColors): Make a global variable
642 646 out of the color scheme table used for coloring exception
643 647 tracebacks. This allows user code to add new schemes at runtime.
644 648 This is a minimally modified version of the patch at
645 649 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
646 650 for the contribution.
647 651
648 652 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
649 653 slightly modified version of the patch in
650 654 http://www.scipy.net/roundup/ipython/issue34, which also allows me
651 655 to remove the previous try/except solution (which was costlier).
652 656 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
653 657
654 658 2005-06-08 Fernando Perez <fperez@colorado.edu>
655 659
656 660 * IPython/iplib.py (write/write_err): Add methods to abstract all
657 661 I/O a bit more.
658 662
659 663 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
660 664 warning, reported by Aric Hagberg, fix by JD Hunter.
661 665
662 666 2005-06-02 *** Released version 0.6.15
663 667
664 668 2005-06-01 Fernando Perez <fperez@colorado.edu>
665 669
666 670 * IPython/iplib.py (MagicCompleter.file_matches): Fix
667 671 tab-completion of filenames within open-quoted strings. Note that
668 672 this requires that in ~/.ipython/ipythonrc, users change the
669 673 readline delimiters configuration to read:
670 674
671 675 readline_remove_delims -/~
672 676
673 677
674 678 2005-05-31 *** Released version 0.6.14
675 679
676 680 2005-05-29 Fernando Perez <fperez@colorado.edu>
677 681
678 682 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
679 683 with files not on the filesystem. Reported by Eliyahu Sandler
680 684 <eli@gondolin.net>
681 685
682 686 2005-05-22 Fernando Perez <fperez@colorado.edu>
683 687
684 688 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
685 689 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
686 690
687 691 2005-05-19 Fernando Perez <fperez@colorado.edu>
688 692
689 693 * IPython/iplib.py (safe_execfile): close a file which could be
690 694 left open (causing problems in win32, which locks open files).
691 695 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
692 696
693 697 2005-05-18 Fernando Perez <fperez@colorado.edu>
694 698
695 699 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
696 700 keyword arguments correctly to safe_execfile().
697 701
698 702 2005-05-13 Fernando Perez <fperez@colorado.edu>
699 703
700 704 * ipython.1: Added info about Qt to manpage, and threads warning
701 705 to usage page (invoked with --help).
702 706
703 707 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
704 708 new matcher (it goes at the end of the priority list) to do
705 709 tab-completion on named function arguments. Submitted by George
706 710 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
707 711 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
708 712 for more details.
709 713
710 714 * IPython/Magic.py (magic_run): Added new -e flag to ignore
711 715 SystemExit exceptions in the script being run. Thanks to a report
712 716 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
713 717 producing very annoying behavior when running unit tests.
714 718
715 719 2005-05-12 Fernando Perez <fperez@colorado.edu>
716 720
717 721 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
718 722 which I'd broken (again) due to a changed regexp. In the process,
719 723 added ';' as an escape to auto-quote the whole line without
720 724 splitting its arguments. Thanks to a report by Jerry McRae
721 725 <qrs0xyc02-AT-sneakemail.com>.
722 726
723 727 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
724 728 possible crashes caused by a TokenError. Reported by Ed Schofield
725 729 <schofield-AT-ftw.at>.
726 730
727 731 2005-05-06 Fernando Perez <fperez@colorado.edu>
728 732
729 733 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
730 734
731 735 2005-04-29 Fernando Perez <fperez@colorado.edu>
732 736
733 737 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
734 738 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
735 739 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
736 740 which provides support for Qt interactive usage (similar to the
737 741 existing one for WX and GTK). This had been often requested.
738 742
739 743 2005-04-14 *** Released version 0.6.13
740 744
741 745 2005-04-08 Fernando Perez <fperez@colorado.edu>
742 746
743 747 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
744 748 from _ofind, which gets called on almost every input line. Now,
745 749 we only try to get docstrings if they are actually going to be
746 750 used (the overhead of fetching unnecessary docstrings can be
747 751 noticeable for certain objects, such as Pyro proxies).
748 752
749 753 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
750 754 for completers. For some reason I had been passing them the state
751 755 variable, which completers never actually need, and was in
752 756 conflict with the rlcompleter API. Custom completers ONLY need to
753 757 take the text parameter.
754 758
755 759 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
756 760 work correctly in pysh. I've also moved all the logic which used
757 761 to be in pysh.py here, which will prevent problems with future
758 762 upgrades. However, this time I must warn users to update their
759 763 pysh profile to include the line
760 764
761 765 import_all IPython.Extensions.InterpreterExec
762 766
763 767 because otherwise things won't work for them. They MUST also
764 768 delete pysh.py and the line
765 769
766 770 execfile pysh.py
767 771
768 772 from their ipythonrc-pysh.
769 773
770 774 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
771 775 robust in the face of objects whose dir() returns non-strings
772 776 (which it shouldn't, but some broken libs like ITK do). Thanks to
773 777 a patch by John Hunter (implemented differently, though). Also
774 778 minor improvements by using .extend instead of + on lists.
775 779
776 780 * pysh.py:
777 781
778 782 2005-04-06 Fernando Perez <fperez@colorado.edu>
779 783
780 784 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
781 785 by default, so that all users benefit from it. Those who don't
782 786 want it can still turn it off.
783 787
784 788 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
785 789 config file, I'd forgotten about this, so users were getting it
786 790 off by default.
787 791
788 792 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
789 793 consistency. Now magics can be called in multiline statements,
790 794 and python variables can be expanded in magic calls via $var.
791 795 This makes the magic system behave just like aliases or !system
792 796 calls.
793 797
794 798 2005-03-28 Fernando Perez <fperez@colorado.edu>
795 799
796 800 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
797 801 expensive string additions for building command. Add support for
798 802 trailing ';' when autocall is used.
799 803
800 804 2005-03-26 Fernando Perez <fperez@colorado.edu>
801 805
802 806 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
803 807 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
804 808 ipython.el robust against prompts with any number of spaces
805 809 (including 0) after the ':' character.
806 810
807 811 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
808 812 continuation prompt, which misled users to think the line was
809 813 already indented. Closes debian Bug#300847, reported to me by
810 814 Norbert Tretkowski <tretkowski-AT-inittab.de>.
811 815
812 816 2005-03-23 Fernando Perez <fperez@colorado.edu>
813 817
814 818 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
815 819 properly aligned if they have embedded newlines.
816 820
817 821 * IPython/iplib.py (runlines): Add a public method to expose
818 822 IPython's code execution machinery, so that users can run strings
819 823 as if they had been typed at the prompt interactively.
820 824 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
821 825 methods which can call the system shell, but with python variable
822 826 expansion. The three such methods are: __IPYTHON__.system,
823 827 .getoutput and .getoutputerror. These need to be documented in a
824 828 'public API' section (to be written) of the manual.
825 829
826 830 2005-03-20 Fernando Perez <fperez@colorado.edu>
827 831
828 832 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
829 833 for custom exception handling. This is quite powerful, and it
830 834 allows for user-installable exception handlers which can trap
831 835 custom exceptions at runtime and treat them separately from
832 836 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
833 837 Mantegazza <mantegazza-AT-ill.fr>.
834 838 (InteractiveShell.set_custom_completer): public API function to
835 839 add new completers at runtime.
836 840
837 841 2005-03-19 Fernando Perez <fperez@colorado.edu>
838 842
839 843 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
840 844 allow objects which provide their docstrings via non-standard
841 845 mechanisms (like Pyro proxies) to still be inspected by ipython's
842 846 ? system.
843 847
844 848 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
845 849 automatic capture system. I tried quite hard to make it work
846 850 reliably, and simply failed. I tried many combinations with the
847 851 subprocess module, but eventually nothing worked in all needed
848 852 cases (not blocking stdin for the child, duplicating stdout
849 853 without blocking, etc). The new %sc/%sx still do capture to these
850 854 magical list/string objects which make shell use much more
851 855 conveninent, so not all is lost.
852 856
853 857 XXX - FIX MANUAL for the change above!
854 858
855 859 (runsource): I copied code.py's runsource() into ipython to modify
856 860 it a bit. Now the code object and source to be executed are
857 861 stored in ipython. This makes this info accessible to third-party
858 862 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
859 863 Mantegazza <mantegazza-AT-ill.fr>.
860 864
861 865 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
862 866 history-search via readline (like C-p/C-n). I'd wanted this for a
863 867 long time, but only recently found out how to do it. For users
864 868 who already have their ipythonrc files made and want this, just
865 869 add:
866 870
867 871 readline_parse_and_bind "\e[A": history-search-backward
868 872 readline_parse_and_bind "\e[B": history-search-forward
869 873
870 874 2005-03-18 Fernando Perez <fperez@colorado.edu>
871 875
872 876 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
873 877 LSString and SList classes which allow transparent conversions
874 878 between list mode and whitespace-separated string.
875 879 (magic_r): Fix recursion problem in %r.
876 880
877 881 * IPython/genutils.py (LSString): New class to be used for
878 882 automatic storage of the results of all alias/system calls in _o
879 883 and _e (stdout/err). These provide a .l/.list attribute which
880 884 does automatic splitting on newlines. This means that for most
881 885 uses, you'll never need to do capturing of output with %sc/%sx
882 886 anymore, since ipython keeps this always done for you. Note that
883 887 only the LAST results are stored, the _o/e variables are
884 888 overwritten on each call. If you need to save their contents
885 889 further, simply bind them to any other name.
886 890
887 891 2005-03-17 Fernando Perez <fperez@colorado.edu>
888 892
889 893 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
890 894 prompt namespace handling.
891 895
892 896 2005-03-16 Fernando Perez <fperez@colorado.edu>
893 897
894 898 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
895 899 classic prompts to be '>>> ' (final space was missing, and it
896 900 trips the emacs python mode).
897 901 (BasePrompt.__str__): Added safe support for dynamic prompt
898 902 strings. Now you can set your prompt string to be '$x', and the
899 903 value of x will be printed from your interactive namespace. The
900 904 interpolation syntax includes the full Itpl support, so
901 905 ${foo()+x+bar()} is a valid prompt string now, and the function
902 906 calls will be made at runtime.
903 907
904 908 2005-03-15 Fernando Perez <fperez@colorado.edu>
905 909
906 910 * IPython/Magic.py (magic_history): renamed %hist to %history, to
907 911 avoid name clashes in pylab. %hist still works, it just forwards
908 912 the call to %history.
909 913
910 914 2005-03-02 *** Released version 0.6.12
911 915
912 916 2005-03-02 Fernando Perez <fperez@colorado.edu>
913 917
914 918 * IPython/iplib.py (handle_magic): log magic calls properly as
915 919 ipmagic() function calls.
916 920
917 921 * IPython/Magic.py (magic_time): Improved %time to support
918 922 statements and provide wall-clock as well as CPU time.
919 923
920 924 2005-02-27 Fernando Perez <fperez@colorado.edu>
921 925
922 926 * IPython/hooks.py: New hooks module, to expose user-modifiable
923 927 IPython functionality in a clean manner. For now only the editor
924 928 hook is actually written, and other thigns which I intend to turn
925 929 into proper hooks aren't yet there. The display and prefilter
926 930 stuff, for example, should be hooks. But at least now the
927 931 framework is in place, and the rest can be moved here with more
928 932 time later. IPython had had a .hooks variable for a long time for
929 933 this purpose, but I'd never actually used it for anything.
930 934
931 935 2005-02-26 Fernando Perez <fperez@colorado.edu>
932 936
933 937 * IPython/ipmaker.py (make_IPython): make the default ipython
934 938 directory be called _ipython under win32, to follow more the
935 939 naming peculiarities of that platform (where buggy software like
936 940 Visual Sourcesafe breaks with .named directories). Reported by
937 941 Ville Vainio.
938 942
939 943 2005-02-23 Fernando Perez <fperez@colorado.edu>
940 944
941 945 * IPython/iplib.py (InteractiveShell.__init__): removed a few
942 946 auto_aliases for win32 which were causing problems. Users can
943 947 define the ones they personally like.
944 948
945 949 2005-02-21 Fernando Perez <fperez@colorado.edu>
946 950
947 951 * IPython/Magic.py (magic_time): new magic to time execution of
948 952 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
949 953
950 954 2005-02-19 Fernando Perez <fperez@colorado.edu>
951 955
952 956 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
953 957 into keys (for prompts, for example).
954 958
955 959 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
956 960 prompts in case users want them. This introduces a small behavior
957 961 change: ipython does not automatically add a space to all prompts
958 962 anymore. To get the old prompts with a space, users should add it
959 963 manually to their ipythonrc file, so for example prompt_in1 should
960 964 now read 'In [\#]: ' instead of 'In [\#]:'.
961 965 (BasePrompt.__init__): New option prompts_pad_left (only in rc
962 966 file) to control left-padding of secondary prompts.
963 967
964 968 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
965 969 the profiler can't be imported. Fix for Debian, which removed
966 970 profile.py because of License issues. I applied a slightly
967 971 modified version of the original Debian patch at
968 972 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
969 973
970 974 2005-02-17 Fernando Perez <fperez@colorado.edu>
971 975
972 976 * IPython/genutils.py (native_line_ends): Fix bug which would
973 977 cause improper line-ends under win32 b/c I was not opening files
974 978 in binary mode. Bug report and fix thanks to Ville.
975 979
976 980 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
977 981 trying to catch spurious foo[1] autocalls. My fix actually broke
978 982 ',/' autoquote/call with explicit escape (bad regexp).
979 983
980 984 2005-02-15 *** Released version 0.6.11
981 985
982 986 2005-02-14 Fernando Perez <fperez@colorado.edu>
983 987
984 988 * IPython/background_jobs.py: New background job management
985 989 subsystem. This is implemented via a new set of classes, and
986 990 IPython now provides a builtin 'jobs' object for background job
987 991 execution. A convenience %bg magic serves as a lightweight
988 992 frontend for starting the more common type of calls. This was
989 993 inspired by discussions with B. Granger and the BackgroundCommand
990 994 class described in the book Python Scripting for Computational
991 995 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
992 996 (although ultimately no code from this text was used, as IPython's
993 997 system is a separate implementation).
994 998
995 999 * IPython/iplib.py (MagicCompleter.python_matches): add new option
996 1000 to control the completion of single/double underscore names
997 1001 separately. As documented in the example ipytonrc file, the
998 1002 readline_omit__names variable can now be set to 2, to omit even
999 1003 single underscore names. Thanks to a patch by Brian Wong
1000 1004 <BrianWong-AT-AirgoNetworks.Com>.
1001 1005 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1002 1006 be autocalled as foo([1]) if foo were callable. A problem for
1003 1007 things which are both callable and implement __getitem__.
1004 1008 (init_readline): Fix autoindentation for win32. Thanks to a patch
1005 1009 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1006 1010
1007 1011 2005-02-12 Fernando Perez <fperez@colorado.edu>
1008 1012
1009 1013 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1010 1014 which I had written long ago to sort out user error messages which
1011 1015 may occur during startup. This seemed like a good idea initially,
1012 1016 but it has proven a disaster in retrospect. I don't want to
1013 1017 change much code for now, so my fix is to set the internal 'debug'
1014 1018 flag to true everywhere, whose only job was precisely to control
1015 1019 this subsystem. This closes issue 28 (as well as avoiding all
1016 1020 sorts of strange hangups which occur from time to time).
1017 1021
1018 1022 2005-02-07 Fernando Perez <fperez@colorado.edu>
1019 1023
1020 1024 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1021 1025 previous call produced a syntax error.
1022 1026
1023 1027 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1024 1028 classes without constructor.
1025 1029
1026 1030 2005-02-06 Fernando Perez <fperez@colorado.edu>
1027 1031
1028 1032 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1029 1033 completions with the results of each matcher, so we return results
1030 1034 to the user from all namespaces. This breaks with ipython
1031 1035 tradition, but I think it's a nicer behavior. Now you get all
1032 1036 possible completions listed, from all possible namespaces (python,
1033 1037 filesystem, magics...) After a request by John Hunter
1034 1038 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1035 1039
1036 1040 2005-02-05 Fernando Perez <fperez@colorado.edu>
1037 1041
1038 1042 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1039 1043 the call had quote characters in it (the quotes were stripped).
1040 1044
1041 1045 2005-01-31 Fernando Perez <fperez@colorado.edu>
1042 1046
1043 1047 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1044 1048 Itpl.itpl() to make the code more robust against psyco
1045 1049 optimizations.
1046 1050
1047 1051 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1048 1052 of causing an exception. Quicker, cleaner.
1049 1053
1050 1054 2005-01-28 Fernando Perez <fperez@colorado.edu>
1051 1055
1052 1056 * scripts/ipython_win_post_install.py (install): hardcode
1053 1057 sys.prefix+'python.exe' as the executable path. It turns out that
1054 1058 during the post-installation run, sys.executable resolves to the
1055 1059 name of the binary installer! I should report this as a distutils
1056 1060 bug, I think. I updated the .10 release with this tiny fix, to
1057 1061 avoid annoying the lists further.
1058 1062
1059 1063 2005-01-27 *** Released version 0.6.10
1060 1064
1061 1065 2005-01-27 Fernando Perez <fperez@colorado.edu>
1062 1066
1063 1067 * IPython/numutils.py (norm): Added 'inf' as optional name for
1064 1068 L-infinity norm, included references to mathworld.com for vector
1065 1069 norm definitions.
1066 1070 (amin/amax): added amin/amax for array min/max. Similar to what
1067 1071 pylab ships with after the recent reorganization of names.
1068 1072 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1069 1073
1070 1074 * ipython.el: committed Alex's recent fixes and improvements.
1071 1075 Tested with python-mode from CVS, and it looks excellent. Since
1072 1076 python-mode hasn't released anything in a while, I'm temporarily
1073 1077 putting a copy of today's CVS (v 4.70) of python-mode in:
1074 1078 http://ipython.scipy.org/tmp/python-mode.el
1075 1079
1076 1080 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1077 1081 sys.executable for the executable name, instead of assuming it's
1078 1082 called 'python.exe' (the post-installer would have produced broken
1079 1083 setups on systems with a differently named python binary).
1080 1084
1081 1085 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1082 1086 references to os.linesep, to make the code more
1083 1087 platform-independent. This is also part of the win32 coloring
1084 1088 fixes.
1085 1089
1086 1090 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1087 1091 lines, which actually cause coloring bugs because the length of
1088 1092 the line is very difficult to correctly compute with embedded
1089 1093 escapes. This was the source of all the coloring problems under
1090 1094 Win32. I think that _finally_, Win32 users have a properly
1091 1095 working ipython in all respects. This would never have happened
1092 1096 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1093 1097
1094 1098 2005-01-26 *** Released version 0.6.9
1095 1099
1096 1100 2005-01-25 Fernando Perez <fperez@colorado.edu>
1097 1101
1098 1102 * setup.py: finally, we have a true Windows installer, thanks to
1099 1103 the excellent work of Viktor Ransmayr
1100 1104 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1101 1105 Windows users. The setup routine is quite a bit cleaner thanks to
1102 1106 this, and the post-install script uses the proper functions to
1103 1107 allow a clean de-installation using the standard Windows Control
1104 1108 Panel.
1105 1109
1106 1110 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1107 1111 environment variable under all OSes (including win32) if
1108 1112 available. This will give consistency to win32 users who have set
1109 1113 this variable for any reason. If os.environ['HOME'] fails, the
1110 1114 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1111 1115
1112 1116 2005-01-24 Fernando Perez <fperez@colorado.edu>
1113 1117
1114 1118 * IPython/numutils.py (empty_like): add empty_like(), similar to
1115 1119 zeros_like() but taking advantage of the new empty() Numeric routine.
1116 1120
1117 1121 2005-01-23 *** Released version 0.6.8
1118 1122
1119 1123 2005-01-22 Fernando Perez <fperez@colorado.edu>
1120 1124
1121 1125 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1122 1126 automatic show() calls. After discussing things with JDH, it
1123 1127 turns out there are too many corner cases where this can go wrong.
1124 1128 It's best not to try to be 'too smart', and simply have ipython
1125 1129 reproduce as much as possible the default behavior of a normal
1126 1130 python shell.
1127 1131
1128 1132 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1129 1133 line-splitting regexp and _prefilter() to avoid calling getattr()
1130 1134 on assignments. This closes
1131 1135 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1132 1136 readline uses getattr(), so a simple <TAB> keypress is still
1133 1137 enough to trigger getattr() calls on an object.
1134 1138
1135 1139 2005-01-21 Fernando Perez <fperez@colorado.edu>
1136 1140
1137 1141 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1138 1142 docstring under pylab so it doesn't mask the original.
1139 1143
1140 1144 2005-01-21 *** Released version 0.6.7
1141 1145
1142 1146 2005-01-21 Fernando Perez <fperez@colorado.edu>
1143 1147
1144 1148 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1145 1149 signal handling for win32 users in multithreaded mode.
1146 1150
1147 1151 2005-01-17 Fernando Perez <fperez@colorado.edu>
1148 1152
1149 1153 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1150 1154 instances with no __init__. After a crash report by Norbert Nemec
1151 1155 <Norbert-AT-nemec-online.de>.
1152 1156
1153 1157 2005-01-14 Fernando Perez <fperez@colorado.edu>
1154 1158
1155 1159 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1156 1160 names for verbose exceptions, when multiple dotted names and the
1157 1161 'parent' object were present on the same line.
1158 1162
1159 1163 2005-01-11 Fernando Perez <fperez@colorado.edu>
1160 1164
1161 1165 * IPython/genutils.py (flag_calls): new utility to trap and flag
1162 1166 calls in functions. I need it to clean up matplotlib support.
1163 1167 Also removed some deprecated code in genutils.
1164 1168
1165 1169 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1166 1170 that matplotlib scripts called with %run, which don't call show()
1167 1171 themselves, still have their plotting windows open.
1168 1172
1169 1173 2005-01-05 Fernando Perez <fperez@colorado.edu>
1170 1174
1171 1175 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1172 1176 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1173 1177
1174 1178 2004-12-19 Fernando Perez <fperez@colorado.edu>
1175 1179
1176 1180 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1177 1181 parent_runcode, which was an eyesore. The same result can be
1178 1182 obtained with Python's regular superclass mechanisms.
1179 1183
1180 1184 2004-12-17 Fernando Perez <fperez@colorado.edu>
1181 1185
1182 1186 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1183 1187 reported by Prabhu.
1184 1188 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1185 1189 sys.stderr) instead of explicitly calling sys.stderr. This helps
1186 1190 maintain our I/O abstractions clean, for future GUI embeddings.
1187 1191
1188 1192 * IPython/genutils.py (info): added new utility for sys.stderr
1189 1193 unified info message handling (thin wrapper around warn()).
1190 1194
1191 1195 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1192 1196 composite (dotted) names on verbose exceptions.
1193 1197 (VerboseTB.nullrepr): harden against another kind of errors which
1194 1198 Python's inspect module can trigger, and which were crashing
1195 1199 IPython. Thanks to a report by Marco Lombardi
1196 1200 <mlombard-AT-ma010192.hq.eso.org>.
1197 1201
1198 1202 2004-12-13 *** Released version 0.6.6
1199 1203
1200 1204 2004-12-12 Fernando Perez <fperez@colorado.edu>
1201 1205
1202 1206 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1203 1207 generated by pygtk upon initialization if it was built without
1204 1208 threads (for matplotlib users). After a crash reported by
1205 1209 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1206 1210
1207 1211 * IPython/ipmaker.py (make_IPython): fix small bug in the
1208 1212 import_some parameter for multiple imports.
1209 1213
1210 1214 * IPython/iplib.py (ipmagic): simplified the interface of
1211 1215 ipmagic() to take a single string argument, just as it would be
1212 1216 typed at the IPython cmd line.
1213 1217 (ipalias): Added new ipalias() with an interface identical to
1214 1218 ipmagic(). This completes exposing a pure python interface to the
1215 1219 alias and magic system, which can be used in loops or more complex
1216 1220 code where IPython's automatic line mangling is not active.
1217 1221
1218 1222 * IPython/genutils.py (timing): changed interface of timing to
1219 1223 simply run code once, which is the most common case. timings()
1220 1224 remains unchanged, for the cases where you want multiple runs.
1221 1225
1222 1226 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1223 1227 bug where Python2.2 crashes with exec'ing code which does not end
1224 1228 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1225 1229 before.
1226 1230
1227 1231 2004-12-10 Fernando Perez <fperez@colorado.edu>
1228 1232
1229 1233 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1230 1234 -t to -T, to accomodate the new -t flag in %run (the %run and
1231 1235 %prun options are kind of intermixed, and it's not easy to change
1232 1236 this with the limitations of python's getopt).
1233 1237
1234 1238 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1235 1239 the execution of scripts. It's not as fine-tuned as timeit.py,
1236 1240 but it works from inside ipython (and under 2.2, which lacks
1237 1241 timeit.py). Optionally a number of runs > 1 can be given for
1238 1242 timing very short-running code.
1239 1243
1240 1244 * IPython/genutils.py (uniq_stable): new routine which returns a
1241 1245 list of unique elements in any iterable, but in stable order of
1242 1246 appearance. I needed this for the ultraTB fixes, and it's a handy
1243 1247 utility.
1244 1248
1245 1249 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1246 1250 dotted names in Verbose exceptions. This had been broken since
1247 1251 the very start, now x.y will properly be printed in a Verbose
1248 1252 traceback, instead of x being shown and y appearing always as an
1249 1253 'undefined global'. Getting this to work was a bit tricky,
1250 1254 because by default python tokenizers are stateless. Saved by
1251 1255 python's ability to easily add a bit of state to an arbitrary
1252 1256 function (without needing to build a full-blown callable object).
1253 1257
1254 1258 Also big cleanup of this code, which had horrendous runtime
1255 1259 lookups of zillions of attributes for colorization. Moved all
1256 1260 this code into a few templates, which make it cleaner and quicker.
1257 1261
1258 1262 Printout quality was also improved for Verbose exceptions: one
1259 1263 variable per line, and memory addresses are printed (this can be
1260 1264 quite handy in nasty debugging situations, which is what Verbose
1261 1265 is for).
1262 1266
1263 1267 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1264 1268 the command line as scripts to be loaded by embedded instances.
1265 1269 Doing so has the potential for an infinite recursion if there are
1266 1270 exceptions thrown in the process. This fixes a strange crash
1267 1271 reported by Philippe MULLER <muller-AT-irit.fr>.
1268 1272
1269 1273 2004-12-09 Fernando Perez <fperez@colorado.edu>
1270 1274
1271 1275 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1272 1276 to reflect new names in matplotlib, which now expose the
1273 1277 matlab-compatible interface via a pylab module instead of the
1274 1278 'matlab' name. The new code is backwards compatible, so users of
1275 1279 all matplotlib versions are OK. Patch by J. Hunter.
1276 1280
1277 1281 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1278 1282 of __init__ docstrings for instances (class docstrings are already
1279 1283 automatically printed). Instances with customized docstrings
1280 1284 (indep. of the class) are also recognized and all 3 separate
1281 1285 docstrings are printed (instance, class, constructor). After some
1282 1286 comments/suggestions by J. Hunter.
1283 1287
1284 1288 2004-12-05 Fernando Perez <fperez@colorado.edu>
1285 1289
1286 1290 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1287 1291 warnings when tab-completion fails and triggers an exception.
1288 1292
1289 1293 2004-12-03 Fernando Perez <fperez@colorado.edu>
1290 1294
1291 1295 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1292 1296 be triggered when using 'run -p'. An incorrect option flag was
1293 1297 being set ('d' instead of 'D').
1294 1298 (manpage): fix missing escaped \- sign.
1295 1299
1296 1300 2004-11-30 *** Released version 0.6.5
1297 1301
1298 1302 2004-11-30 Fernando Perez <fperez@colorado.edu>
1299 1303
1300 1304 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1301 1305 setting with -d option.
1302 1306
1303 1307 * setup.py (docfiles): Fix problem where the doc glob I was using
1304 1308 was COMPLETELY BROKEN. It was giving the right files by pure
1305 1309 accident, but failed once I tried to include ipython.el. Note:
1306 1310 glob() does NOT allow you to do exclusion on multiple endings!
1307 1311
1308 1312 2004-11-29 Fernando Perez <fperez@colorado.edu>
1309 1313
1310 1314 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1311 1315 the manpage as the source. Better formatting & consistency.
1312 1316
1313 1317 * IPython/Magic.py (magic_run): Added new -d option, to run
1314 1318 scripts under the control of the python pdb debugger. Note that
1315 1319 this required changing the %prun option -d to -D, to avoid a clash
1316 1320 (since %run must pass options to %prun, and getopt is too dumb to
1317 1321 handle options with string values with embedded spaces). Thanks
1318 1322 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1319 1323 (magic_who_ls): added type matching to %who and %whos, so that one
1320 1324 can filter their output to only include variables of certain
1321 1325 types. Another suggestion by Matthew.
1322 1326 (magic_whos): Added memory summaries in kb and Mb for arrays.
1323 1327 (magic_who): Improve formatting (break lines every 9 vars).
1324 1328
1325 1329 2004-11-28 Fernando Perez <fperez@colorado.edu>
1326 1330
1327 1331 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1328 1332 cache when empty lines were present.
1329 1333
1330 1334 2004-11-24 Fernando Perez <fperez@colorado.edu>
1331 1335
1332 1336 * IPython/usage.py (__doc__): document the re-activated threading
1333 1337 options for WX and GTK.
1334 1338
1335 1339 2004-11-23 Fernando Perez <fperez@colorado.edu>
1336 1340
1337 1341 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1338 1342 the -wthread and -gthread options, along with a new -tk one to try
1339 1343 and coordinate Tk threading with wx/gtk. The tk support is very
1340 1344 platform dependent, since it seems to require Tcl and Tk to be
1341 1345 built with threads (Fedora1/2 appears NOT to have it, but in
1342 1346 Prabhu's Debian boxes it works OK). But even with some Tk
1343 1347 limitations, this is a great improvement.
1344 1348
1345 1349 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1346 1350 info in user prompts. Patch by Prabhu.
1347 1351
1348 1352 2004-11-18 Fernando Perez <fperez@colorado.edu>
1349 1353
1350 1354 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1351 1355 EOFErrors and bail, to avoid infinite loops if a non-terminating
1352 1356 file is fed into ipython. Patch submitted in issue 19 by user,
1353 1357 many thanks.
1354 1358
1355 1359 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1356 1360 autoquote/parens in continuation prompts, which can cause lots of
1357 1361 problems. Closes roundup issue 20.
1358 1362
1359 1363 2004-11-17 Fernando Perez <fperez@colorado.edu>
1360 1364
1361 1365 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1362 1366 reported as debian bug #280505. I'm not sure my local changelog
1363 1367 entry has the proper debian format (Jack?).
1364 1368
1365 1369 2004-11-08 *** Released version 0.6.4
1366 1370
1367 1371 2004-11-08 Fernando Perez <fperez@colorado.edu>
1368 1372
1369 1373 * IPython/iplib.py (init_readline): Fix exit message for Windows
1370 1374 when readline is active. Thanks to a report by Eric Jones
1371 1375 <eric-AT-enthought.com>.
1372 1376
1373 1377 2004-11-07 Fernando Perez <fperez@colorado.edu>
1374 1378
1375 1379 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1376 1380 sometimes seen by win2k/cygwin users.
1377 1381
1378 1382 2004-11-06 Fernando Perez <fperez@colorado.edu>
1379 1383
1380 1384 * IPython/iplib.py (interact): Change the handling of %Exit from
1381 1385 trying to propagate a SystemExit to an internal ipython flag.
1382 1386 This is less elegant than using Python's exception mechanism, but
1383 1387 I can't get that to work reliably with threads, so under -pylab
1384 1388 %Exit was hanging IPython. Cross-thread exception handling is
1385 1389 really a bitch. Thaks to a bug report by Stephen Walton
1386 1390 <stephen.walton-AT-csun.edu>.
1387 1391
1388 1392 2004-11-04 Fernando Perez <fperez@colorado.edu>
1389 1393
1390 1394 * IPython/iplib.py (raw_input_original): store a pointer to the
1391 1395 true raw_input to harden against code which can modify it
1392 1396 (wx.py.PyShell does this and would otherwise crash ipython).
1393 1397 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1394 1398
1395 1399 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1396 1400 Ctrl-C problem, which does not mess up the input line.
1397 1401
1398 1402 2004-11-03 Fernando Perez <fperez@colorado.edu>
1399 1403
1400 1404 * IPython/Release.py: Changed licensing to BSD, in all files.
1401 1405 (name): lowercase name for tarball/RPM release.
1402 1406
1403 1407 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1404 1408 use throughout ipython.
1405 1409
1406 1410 * IPython/Magic.py (Magic._ofind): Switch to using the new
1407 1411 OInspect.getdoc() function.
1408 1412
1409 1413 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1410 1414 of the line currently being canceled via Ctrl-C. It's extremely
1411 1415 ugly, but I don't know how to do it better (the problem is one of
1412 1416 handling cross-thread exceptions).
1413 1417
1414 1418 2004-10-28 Fernando Perez <fperez@colorado.edu>
1415 1419
1416 1420 * IPython/Shell.py (signal_handler): add signal handlers to trap
1417 1421 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1418 1422 report by Francesc Alted.
1419 1423
1420 1424 2004-10-21 Fernando Perez <fperez@colorado.edu>
1421 1425
1422 1426 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1423 1427 to % for pysh syntax extensions.
1424 1428
1425 1429 2004-10-09 Fernando Perez <fperez@colorado.edu>
1426 1430
1427 1431 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1428 1432 arrays to print a more useful summary, without calling str(arr).
1429 1433 This avoids the problem of extremely lengthy computations which
1430 1434 occur if arr is large, and appear to the user as a system lockup
1431 1435 with 100% cpu activity. After a suggestion by Kristian Sandberg
1432 1436 <Kristian.Sandberg@colorado.edu>.
1433 1437 (Magic.__init__): fix bug in global magic escapes not being
1434 1438 correctly set.
1435 1439
1436 1440 2004-10-08 Fernando Perez <fperez@colorado.edu>
1437 1441
1438 1442 * IPython/Magic.py (__license__): change to absolute imports of
1439 1443 ipython's own internal packages, to start adapting to the absolute
1440 1444 import requirement of PEP-328.
1441 1445
1442 1446 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1443 1447 files, and standardize author/license marks through the Release
1444 1448 module instead of having per/file stuff (except for files with
1445 1449 particular licenses, like the MIT/PSF-licensed codes).
1446 1450
1447 1451 * IPython/Debugger.py: remove dead code for python 2.1
1448 1452
1449 1453 2004-10-04 Fernando Perez <fperez@colorado.edu>
1450 1454
1451 1455 * IPython/iplib.py (ipmagic): New function for accessing magics
1452 1456 via a normal python function call.
1453 1457
1454 1458 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1455 1459 from '@' to '%', to accomodate the new @decorator syntax of python
1456 1460 2.4.
1457 1461
1458 1462 2004-09-29 Fernando Perez <fperez@colorado.edu>
1459 1463
1460 1464 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1461 1465 matplotlib.use to prevent running scripts which try to switch
1462 1466 interactive backends from within ipython. This will just crash
1463 1467 the python interpreter, so we can't allow it (but a detailed error
1464 1468 is given to the user).
1465 1469
1466 1470 2004-09-28 Fernando Perez <fperez@colorado.edu>
1467 1471
1468 1472 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1469 1473 matplotlib-related fixes so that using @run with non-matplotlib
1470 1474 scripts doesn't pop up spurious plot windows. This requires
1471 1475 matplotlib >= 0.63, where I had to make some changes as well.
1472 1476
1473 1477 * IPython/ipmaker.py (make_IPython): update version requirement to
1474 1478 python 2.2.
1475 1479
1476 1480 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1477 1481 banner arg for embedded customization.
1478 1482
1479 1483 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1480 1484 explicit uses of __IP as the IPython's instance name. Now things
1481 1485 are properly handled via the shell.name value. The actual code
1482 1486 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1483 1487 is much better than before. I'll clean things completely when the
1484 1488 magic stuff gets a real overhaul.
1485 1489
1486 1490 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1487 1491 minor changes to debian dir.
1488 1492
1489 1493 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1490 1494 pointer to the shell itself in the interactive namespace even when
1491 1495 a user-supplied dict is provided. This is needed for embedding
1492 1496 purposes (found by tests with Michel Sanner).
1493 1497
1494 1498 2004-09-27 Fernando Perez <fperez@colorado.edu>
1495 1499
1496 1500 * IPython/UserConfig/ipythonrc: remove []{} from
1497 1501 readline_remove_delims, so that things like [modname.<TAB> do
1498 1502 proper completion. This disables [].TAB, but that's a less common
1499 1503 case than module names in list comprehensions, for example.
1500 1504 Thanks to a report by Andrea Riciputi.
1501 1505
1502 1506 2004-09-09 Fernando Perez <fperez@colorado.edu>
1503 1507
1504 1508 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1505 1509 blocking problems in win32 and osx. Fix by John.
1506 1510
1507 1511 2004-09-08 Fernando Perez <fperez@colorado.edu>
1508 1512
1509 1513 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1510 1514 for Win32 and OSX. Fix by John Hunter.
1511 1515
1512 1516 2004-08-30 *** Released version 0.6.3
1513 1517
1514 1518 2004-08-30 Fernando Perez <fperez@colorado.edu>
1515 1519
1516 1520 * setup.py (isfile): Add manpages to list of dependent files to be
1517 1521 updated.
1518 1522
1519 1523 2004-08-27 Fernando Perez <fperez@colorado.edu>
1520 1524
1521 1525 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1522 1526 for now. They don't really work with standalone WX/GTK code
1523 1527 (though matplotlib IS working fine with both of those backends).
1524 1528 This will neeed much more testing. I disabled most things with
1525 1529 comments, so turning it back on later should be pretty easy.
1526 1530
1527 1531 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1528 1532 autocalling of expressions like r'foo', by modifying the line
1529 1533 split regexp. Closes
1530 1534 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1531 1535 Riley <ipythonbugs-AT-sabi.net>.
1532 1536 (InteractiveShell.mainloop): honor --nobanner with banner
1533 1537 extensions.
1534 1538
1535 1539 * IPython/Shell.py: Significant refactoring of all classes, so
1536 1540 that we can really support ALL matplotlib backends and threading
1537 1541 models (John spotted a bug with Tk which required this). Now we
1538 1542 should support single-threaded, WX-threads and GTK-threads, both
1539 1543 for generic code and for matplotlib.
1540 1544
1541 1545 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1542 1546 -pylab, to simplify things for users. Will also remove the pylab
1543 1547 profile, since now all of matplotlib configuration is directly
1544 1548 handled here. This also reduces startup time.
1545 1549
1546 1550 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1547 1551 shell wasn't being correctly called. Also in IPShellWX.
1548 1552
1549 1553 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1550 1554 fine-tune banner.
1551 1555
1552 1556 * IPython/numutils.py (spike): Deprecate these spike functions,
1553 1557 delete (long deprecated) gnuplot_exec handler.
1554 1558
1555 1559 2004-08-26 Fernando Perez <fperez@colorado.edu>
1556 1560
1557 1561 * ipython.1: Update for threading options, plus some others which
1558 1562 were missing.
1559 1563
1560 1564 * IPython/ipmaker.py (__call__): Added -wthread option for
1561 1565 wxpython thread handling. Make sure threading options are only
1562 1566 valid at the command line.
1563 1567
1564 1568 * scripts/ipython: moved shell selection into a factory function
1565 1569 in Shell.py, to keep the starter script to a minimum.
1566 1570
1567 1571 2004-08-25 Fernando Perez <fperez@colorado.edu>
1568 1572
1569 1573 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1570 1574 John. Along with some recent changes he made to matplotlib, the
1571 1575 next versions of both systems should work very well together.
1572 1576
1573 1577 2004-08-24 Fernando Perez <fperez@colorado.edu>
1574 1578
1575 1579 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1576 1580 tried to switch the profiling to using hotshot, but I'm getting
1577 1581 strange errors from prof.runctx() there. I may be misreading the
1578 1582 docs, but it looks weird. For now the profiling code will
1579 1583 continue to use the standard profiler.
1580 1584
1581 1585 2004-08-23 Fernando Perez <fperez@colorado.edu>
1582 1586
1583 1587 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1584 1588 threaded shell, by John Hunter. It's not quite ready yet, but
1585 1589 close.
1586 1590
1587 1591 2004-08-22 Fernando Perez <fperez@colorado.edu>
1588 1592
1589 1593 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1590 1594 in Magic and ultraTB.
1591 1595
1592 1596 * ipython.1: document threading options in manpage.
1593 1597
1594 1598 * scripts/ipython: Changed name of -thread option to -gthread,
1595 1599 since this is GTK specific. I want to leave the door open for a
1596 1600 -wthread option for WX, which will most likely be necessary. This
1597 1601 change affects usage and ipmaker as well.
1598 1602
1599 1603 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1600 1604 handle the matplotlib shell issues. Code by John Hunter
1601 1605 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1602 1606 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1603 1607 broken (and disabled for end users) for now, but it puts the
1604 1608 infrastructure in place.
1605 1609
1606 1610 2004-08-21 Fernando Perez <fperez@colorado.edu>
1607 1611
1608 1612 * ipythonrc-pylab: Add matplotlib support.
1609 1613
1610 1614 * matplotlib_config.py: new files for matplotlib support, part of
1611 1615 the pylab profile.
1612 1616
1613 1617 * IPython/usage.py (__doc__): documented the threading options.
1614 1618
1615 1619 2004-08-20 Fernando Perez <fperez@colorado.edu>
1616 1620
1617 1621 * ipython: Modified the main calling routine to handle the -thread
1618 1622 and -mpthread options. This needs to be done as a top-level hack,
1619 1623 because it determines which class to instantiate for IPython
1620 1624 itself.
1621 1625
1622 1626 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1623 1627 classes to support multithreaded GTK operation without blocking,
1624 1628 and matplotlib with all backends. This is a lot of still very
1625 1629 experimental code, and threads are tricky. So it may still have a
1626 1630 few rough edges... This code owes a lot to
1627 1631 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1628 1632 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1629 1633 to John Hunter for all the matplotlib work.
1630 1634
1631 1635 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1632 1636 options for gtk thread and matplotlib support.
1633 1637
1634 1638 2004-08-16 Fernando Perez <fperez@colorado.edu>
1635 1639
1636 1640 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1637 1641 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1638 1642 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1639 1643
1640 1644 2004-08-11 Fernando Perez <fperez@colorado.edu>
1641 1645
1642 1646 * setup.py (isfile): Fix build so documentation gets updated for
1643 1647 rpms (it was only done for .tgz builds).
1644 1648
1645 1649 2004-08-10 Fernando Perez <fperez@colorado.edu>
1646 1650
1647 1651 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1648 1652
1649 1653 * iplib.py : Silence syntax error exceptions in tab-completion.
1650 1654
1651 1655 2004-08-05 Fernando Perez <fperez@colorado.edu>
1652 1656
1653 1657 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1654 1658 'color off' mark for continuation prompts. This was causing long
1655 1659 continuation lines to mis-wrap.
1656 1660
1657 1661 2004-08-01 Fernando Perez <fperez@colorado.edu>
1658 1662
1659 1663 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1660 1664 for building ipython to be a parameter. All this is necessary
1661 1665 right now to have a multithreaded version, but this insane
1662 1666 non-design will be cleaned up soon. For now, it's a hack that
1663 1667 works.
1664 1668
1665 1669 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1666 1670 args in various places. No bugs so far, but it's a dangerous
1667 1671 practice.
1668 1672
1669 1673 2004-07-31 Fernando Perez <fperez@colorado.edu>
1670 1674
1671 1675 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1672 1676 fix completion of files with dots in their names under most
1673 1677 profiles (pysh was OK because the completion order is different).
1674 1678
1675 1679 2004-07-27 Fernando Perez <fperez@colorado.edu>
1676 1680
1677 1681 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1678 1682 keywords manually, b/c the one in keyword.py was removed in python
1679 1683 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1680 1684 This is NOT a bug under python 2.3 and earlier.
1681 1685
1682 1686 2004-07-26 Fernando Perez <fperez@colorado.edu>
1683 1687
1684 1688 * IPython/ultraTB.py (VerboseTB.text): Add another
1685 1689 linecache.checkcache() call to try to prevent inspect.py from
1686 1690 crashing under python 2.3. I think this fixes
1687 1691 http://www.scipy.net/roundup/ipython/issue17.
1688 1692
1689 1693 2004-07-26 *** Released version 0.6.2
1690 1694
1691 1695 2004-07-26 Fernando Perez <fperez@colorado.edu>
1692 1696
1693 1697 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1694 1698 fail for any number.
1695 1699 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1696 1700 empty bookmarks.
1697 1701
1698 1702 2004-07-26 *** Released version 0.6.1
1699 1703
1700 1704 2004-07-26 Fernando Perez <fperez@colorado.edu>
1701 1705
1702 1706 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1703 1707
1704 1708 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1705 1709 escaping '()[]{}' in filenames.
1706 1710
1707 1711 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1708 1712 Python 2.2 users who lack a proper shlex.split.
1709 1713
1710 1714 2004-07-19 Fernando Perez <fperez@colorado.edu>
1711 1715
1712 1716 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1713 1717 for reading readline's init file. I follow the normal chain:
1714 1718 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1715 1719 report by Mike Heeter. This closes
1716 1720 http://www.scipy.net/roundup/ipython/issue16.
1717 1721
1718 1722 2004-07-18 Fernando Perez <fperez@colorado.edu>
1719 1723
1720 1724 * IPython/iplib.py (__init__): Add better handling of '\' under
1721 1725 Win32 for filenames. After a patch by Ville.
1722 1726
1723 1727 2004-07-17 Fernando Perez <fperez@colorado.edu>
1724 1728
1725 1729 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1726 1730 autocalling would be triggered for 'foo is bar' if foo is
1727 1731 callable. I also cleaned up the autocall detection code to use a
1728 1732 regexp, which is faster. Bug reported by Alexander Schmolck.
1729 1733
1730 1734 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1731 1735 '?' in them would confuse the help system. Reported by Alex
1732 1736 Schmolck.
1733 1737
1734 1738 2004-07-16 Fernando Perez <fperez@colorado.edu>
1735 1739
1736 1740 * IPython/GnuplotInteractive.py (__all__): added plot2.
1737 1741
1738 1742 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1739 1743 plotting dictionaries, lists or tuples of 1d arrays.
1740 1744
1741 1745 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1742 1746 optimizations.
1743 1747
1744 1748 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1745 1749 the information which was there from Janko's original IPP code:
1746 1750
1747 1751 03.05.99 20:53 porto.ifm.uni-kiel.de
1748 1752 --Started changelog.
1749 1753 --make clear do what it say it does
1750 1754 --added pretty output of lines from inputcache
1751 1755 --Made Logger a mixin class, simplifies handling of switches
1752 1756 --Added own completer class. .string<TAB> expands to last history
1753 1757 line which starts with string. The new expansion is also present
1754 1758 with Ctrl-r from the readline library. But this shows, who this
1755 1759 can be done for other cases.
1756 1760 --Added convention that all shell functions should accept a
1757 1761 parameter_string This opens the door for different behaviour for
1758 1762 each function. @cd is a good example of this.
1759 1763
1760 1764 04.05.99 12:12 porto.ifm.uni-kiel.de
1761 1765 --added logfile rotation
1762 1766 --added new mainloop method which freezes first the namespace
1763 1767
1764 1768 07.05.99 21:24 porto.ifm.uni-kiel.de
1765 1769 --added the docreader classes. Now there is a help system.
1766 1770 -This is only a first try. Currently it's not easy to put new
1767 1771 stuff in the indices. But this is the way to go. Info would be
1768 1772 better, but HTML is every where and not everybody has an info
1769 1773 system installed and it's not so easy to change html-docs to info.
1770 1774 --added global logfile option
1771 1775 --there is now a hook for object inspection method pinfo needs to
1772 1776 be provided for this. Can be reached by two '??'.
1773 1777
1774 1778 08.05.99 20:51 porto.ifm.uni-kiel.de
1775 1779 --added a README
1776 1780 --bug in rc file. Something has changed so functions in the rc
1777 1781 file need to reference the shell and not self. Not clear if it's a
1778 1782 bug or feature.
1779 1783 --changed rc file for new behavior
1780 1784
1781 1785 2004-07-15 Fernando Perez <fperez@colorado.edu>
1782 1786
1783 1787 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1784 1788 cache was falling out of sync in bizarre manners when multi-line
1785 1789 input was present. Minor optimizations and cleanup.
1786 1790
1787 1791 (Logger): Remove old Changelog info for cleanup. This is the
1788 1792 information which was there from Janko's original code:
1789 1793
1790 1794 Changes to Logger: - made the default log filename a parameter
1791 1795
1792 1796 - put a check for lines beginning with !@? in log(). Needed
1793 1797 (even if the handlers properly log their lines) for mid-session
1794 1798 logging activation to work properly. Without this, lines logged
1795 1799 in mid session, which get read from the cache, would end up
1796 1800 'bare' (with !@? in the open) in the log. Now they are caught
1797 1801 and prepended with a #.
1798 1802
1799 1803 * IPython/iplib.py (InteractiveShell.init_readline): added check
1800 1804 in case MagicCompleter fails to be defined, so we don't crash.
1801 1805
1802 1806 2004-07-13 Fernando Perez <fperez@colorado.edu>
1803 1807
1804 1808 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1805 1809 of EPS if the requested filename ends in '.eps'.
1806 1810
1807 1811 2004-07-04 Fernando Perez <fperez@colorado.edu>
1808 1812
1809 1813 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1810 1814 escaping of quotes when calling the shell.
1811 1815
1812 1816 2004-07-02 Fernando Perez <fperez@colorado.edu>
1813 1817
1814 1818 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1815 1819 gettext not working because we were clobbering '_'. Fixes
1816 1820 http://www.scipy.net/roundup/ipython/issue6.
1817 1821
1818 1822 2004-07-01 Fernando Perez <fperez@colorado.edu>
1819 1823
1820 1824 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1821 1825 into @cd. Patch by Ville.
1822 1826
1823 1827 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1824 1828 new function to store things after ipmaker runs. Patch by Ville.
1825 1829 Eventually this will go away once ipmaker is removed and the class
1826 1830 gets cleaned up, but for now it's ok. Key functionality here is
1827 1831 the addition of the persistent storage mechanism, a dict for
1828 1832 keeping data across sessions (for now just bookmarks, but more can
1829 1833 be implemented later).
1830 1834
1831 1835 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1832 1836 persistent across sections. Patch by Ville, I modified it
1833 1837 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1834 1838 added a '-l' option to list all bookmarks.
1835 1839
1836 1840 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1837 1841 center for cleanup. Registered with atexit.register(). I moved
1838 1842 here the old exit_cleanup(). After a patch by Ville.
1839 1843
1840 1844 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1841 1845 characters in the hacked shlex_split for python 2.2.
1842 1846
1843 1847 * IPython/iplib.py (file_matches): more fixes to filenames with
1844 1848 whitespace in them. It's not perfect, but limitations in python's
1845 1849 readline make it impossible to go further.
1846 1850
1847 1851 2004-06-29 Fernando Perez <fperez@colorado.edu>
1848 1852
1849 1853 * IPython/iplib.py (file_matches): escape whitespace correctly in
1850 1854 filename completions. Bug reported by Ville.
1851 1855
1852 1856 2004-06-28 Fernando Perez <fperez@colorado.edu>
1853 1857
1854 1858 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1855 1859 the history file will be called 'history-PROFNAME' (or just
1856 1860 'history' if no profile is loaded). I was getting annoyed at
1857 1861 getting my Numerical work history clobbered by pysh sessions.
1858 1862
1859 1863 * IPython/iplib.py (InteractiveShell.__init__): Internal
1860 1864 getoutputerror() function so that we can honor the system_verbose
1861 1865 flag for _all_ system calls. I also added escaping of #
1862 1866 characters here to avoid confusing Itpl.
1863 1867
1864 1868 * IPython/Magic.py (shlex_split): removed call to shell in
1865 1869 parse_options and replaced it with shlex.split(). The annoying
1866 1870 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1867 1871 to backport it from 2.3, with several frail hacks (the shlex
1868 1872 module is rather limited in 2.2). Thanks to a suggestion by Ville
1869 1873 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1870 1874 problem.
1871 1875
1872 1876 (Magic.magic_system_verbose): new toggle to print the actual
1873 1877 system calls made by ipython. Mainly for debugging purposes.
1874 1878
1875 1879 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1876 1880 doesn't support persistence. Reported (and fix suggested) by
1877 1881 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1878 1882
1879 1883 2004-06-26 Fernando Perez <fperez@colorado.edu>
1880 1884
1881 1885 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1882 1886 continue prompts.
1883 1887
1884 1888 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1885 1889 function (basically a big docstring) and a few more things here to
1886 1890 speedup startup. pysh.py is now very lightweight. We want because
1887 1891 it gets execfile'd, while InterpreterExec gets imported, so
1888 1892 byte-compilation saves time.
1889 1893
1890 1894 2004-06-25 Fernando Perez <fperez@colorado.edu>
1891 1895
1892 1896 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1893 1897 -NUM', which was recently broken.
1894 1898
1895 1899 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1896 1900 in multi-line input (but not !!, which doesn't make sense there).
1897 1901
1898 1902 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1899 1903 It's just too useful, and people can turn it off in the less
1900 1904 common cases where it's a problem.
1901 1905
1902 1906 2004-06-24 Fernando Perez <fperez@colorado.edu>
1903 1907
1904 1908 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1905 1909 special syntaxes (like alias calling) is now allied in multi-line
1906 1910 input. This is still _very_ experimental, but it's necessary for
1907 1911 efficient shell usage combining python looping syntax with system
1908 1912 calls. For now it's restricted to aliases, I don't think it
1909 1913 really even makes sense to have this for magics.
1910 1914
1911 1915 2004-06-23 Fernando Perez <fperez@colorado.edu>
1912 1916
1913 1917 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1914 1918 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1915 1919
1916 1920 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1917 1921 extensions under Windows (after code sent by Gary Bishop). The
1918 1922 extensions considered 'executable' are stored in IPython's rc
1919 1923 structure as win_exec_ext.
1920 1924
1921 1925 * IPython/genutils.py (shell): new function, like system() but
1922 1926 without return value. Very useful for interactive shell work.
1923 1927
1924 1928 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1925 1929 delete aliases.
1926 1930
1927 1931 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1928 1932 sure that the alias table doesn't contain python keywords.
1929 1933
1930 1934 2004-06-21 Fernando Perez <fperez@colorado.edu>
1931 1935
1932 1936 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1933 1937 non-existent items are found in $PATH. Reported by Thorsten.
1934 1938
1935 1939 2004-06-20 Fernando Perez <fperez@colorado.edu>
1936 1940
1937 1941 * IPython/iplib.py (complete): modified the completer so that the
1938 1942 order of priorities can be easily changed at runtime.
1939 1943
1940 1944 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1941 1945 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1942 1946
1943 1947 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1944 1948 expand Python variables prepended with $ in all system calls. The
1945 1949 same was done to InteractiveShell.handle_shell_escape. Now all
1946 1950 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1947 1951 expansion of python variables and expressions according to the
1948 1952 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1949 1953
1950 1954 Though PEP-215 has been rejected, a similar (but simpler) one
1951 1955 seems like it will go into Python 2.4, PEP-292 -
1952 1956 http://www.python.org/peps/pep-0292.html.
1953 1957
1954 1958 I'll keep the full syntax of PEP-215, since IPython has since the
1955 1959 start used Ka-Ping Yee's reference implementation discussed there
1956 1960 (Itpl), and I actually like the powerful semantics it offers.
1957 1961
1958 1962 In order to access normal shell variables, the $ has to be escaped
1959 1963 via an extra $. For example:
1960 1964
1961 1965 In [7]: PATH='a python variable'
1962 1966
1963 1967 In [8]: !echo $PATH
1964 1968 a python variable
1965 1969
1966 1970 In [9]: !echo $$PATH
1967 1971 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1968 1972
1969 1973 (Magic.parse_options): escape $ so the shell doesn't evaluate
1970 1974 things prematurely.
1971 1975
1972 1976 * IPython/iplib.py (InteractiveShell.call_alias): added the
1973 1977 ability for aliases to expand python variables via $.
1974 1978
1975 1979 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1976 1980 system, now there's a @rehash/@rehashx pair of magics. These work
1977 1981 like the csh rehash command, and can be invoked at any time. They
1978 1982 build a table of aliases to everything in the user's $PATH
1979 1983 (@rehash uses everything, @rehashx is slower but only adds
1980 1984 executable files). With this, the pysh.py-based shell profile can
1981 1985 now simply call rehash upon startup, and full access to all
1982 1986 programs in the user's path is obtained.
1983 1987
1984 1988 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1985 1989 functionality is now fully in place. I removed the old dynamic
1986 1990 code generation based approach, in favor of a much lighter one
1987 1991 based on a simple dict. The advantage is that this allows me to
1988 1992 now have thousands of aliases with negligible cost (unthinkable
1989 1993 with the old system).
1990 1994
1991 1995 2004-06-19 Fernando Perez <fperez@colorado.edu>
1992 1996
1993 1997 * IPython/iplib.py (__init__): extended MagicCompleter class to
1994 1998 also complete (last in priority) on user aliases.
1995 1999
1996 2000 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1997 2001 call to eval.
1998 2002 (ItplNS.__init__): Added a new class which functions like Itpl,
1999 2003 but allows configuring the namespace for the evaluation to occur
2000 2004 in.
2001 2005
2002 2006 2004-06-18 Fernando Perez <fperez@colorado.edu>
2003 2007
2004 2008 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2005 2009 better message when 'exit' or 'quit' are typed (a common newbie
2006 2010 confusion).
2007 2011
2008 2012 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2009 2013 check for Windows users.
2010 2014
2011 2015 * IPython/iplib.py (InteractiveShell.user_setup): removed
2012 2016 disabling of colors for Windows. I'll test at runtime and issue a
2013 2017 warning if Gary's readline isn't found, as to nudge users to
2014 2018 download it.
2015 2019
2016 2020 2004-06-16 Fernando Perez <fperez@colorado.edu>
2017 2021
2018 2022 * IPython/genutils.py (Stream.__init__): changed to print errors
2019 2023 to sys.stderr. I had a circular dependency here. Now it's
2020 2024 possible to run ipython as IDLE's shell (consider this pre-alpha,
2021 2025 since true stdout things end up in the starting terminal instead
2022 2026 of IDLE's out).
2023 2027
2024 2028 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2025 2029 users who haven't # updated their prompt_in2 definitions. Remove
2026 2030 eventually.
2027 2031 (multiple_replace): added credit to original ASPN recipe.
2028 2032
2029 2033 2004-06-15 Fernando Perez <fperez@colorado.edu>
2030 2034
2031 2035 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2032 2036 list of auto-defined aliases.
2033 2037
2034 2038 2004-06-13 Fernando Perez <fperez@colorado.edu>
2035 2039
2036 2040 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2037 2041 install was really requested (so setup.py can be used for other
2038 2042 things under Windows).
2039 2043
2040 2044 2004-06-10 Fernando Perez <fperez@colorado.edu>
2041 2045
2042 2046 * IPython/Logger.py (Logger.create_log): Manually remove any old
2043 2047 backup, since os.remove may fail under Windows. Fixes bug
2044 2048 reported by Thorsten.
2045 2049
2046 2050 2004-06-09 Fernando Perez <fperez@colorado.edu>
2047 2051
2048 2052 * examples/example-embed.py: fixed all references to %n (replaced
2049 2053 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2050 2054 for all examples and the manual as well.
2051 2055
2052 2056 2004-06-08 Fernando Perez <fperez@colorado.edu>
2053 2057
2054 2058 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2055 2059 alignment and color management. All 3 prompt subsystems now
2056 2060 inherit from BasePrompt.
2057 2061
2058 2062 * tools/release: updates for windows installer build and tag rpms
2059 2063 with python version (since paths are fixed).
2060 2064
2061 2065 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2062 2066 which will become eventually obsolete. Also fixed the default
2063 2067 prompt_in2 to use \D, so at least new users start with the correct
2064 2068 defaults.
2065 2069 WARNING: Users with existing ipythonrc files will need to apply
2066 2070 this fix manually!
2067 2071
2068 2072 * setup.py: make windows installer (.exe). This is finally the
2069 2073 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2070 2074 which I hadn't included because it required Python 2.3 (or recent
2071 2075 distutils).
2072 2076
2073 2077 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2074 2078 usage of new '\D' escape.
2075 2079
2076 2080 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2077 2081 lacks os.getuid())
2078 2082 (CachedOutput.set_colors): Added the ability to turn coloring
2079 2083 on/off with @colors even for manually defined prompt colors. It
2080 2084 uses a nasty global, but it works safely and via the generic color
2081 2085 handling mechanism.
2082 2086 (Prompt2.__init__): Introduced new escape '\D' for continuation
2083 2087 prompts. It represents the counter ('\#') as dots.
2084 2088 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2085 2089 need to update their ipythonrc files and replace '%n' with '\D' in
2086 2090 their prompt_in2 settings everywhere. Sorry, but there's
2087 2091 otherwise no clean way to get all prompts to properly align. The
2088 2092 ipythonrc shipped with IPython has been updated.
2089 2093
2090 2094 2004-06-07 Fernando Perez <fperez@colorado.edu>
2091 2095
2092 2096 * setup.py (isfile): Pass local_icons option to latex2html, so the
2093 2097 resulting HTML file is self-contained. Thanks to
2094 2098 dryice-AT-liu.com.cn for the tip.
2095 2099
2096 2100 * pysh.py: I created a new profile 'shell', which implements a
2097 2101 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2098 2102 system shell, nor will it become one anytime soon. It's mainly
2099 2103 meant to illustrate the use of the new flexible bash-like prompts.
2100 2104 I guess it could be used by hardy souls for true shell management,
2101 2105 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2102 2106 profile. This uses the InterpreterExec extension provided by
2103 2107 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2104 2108
2105 2109 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2106 2110 auto-align itself with the length of the previous input prompt
2107 2111 (taking into account the invisible color escapes).
2108 2112 (CachedOutput.__init__): Large restructuring of this class. Now
2109 2113 all three prompts (primary1, primary2, output) are proper objects,
2110 2114 managed by the 'parent' CachedOutput class. The code is still a
2111 2115 bit hackish (all prompts share state via a pointer to the cache),
2112 2116 but it's overall far cleaner than before.
2113 2117
2114 2118 * IPython/genutils.py (getoutputerror): modified to add verbose,
2115 2119 debug and header options. This makes the interface of all getout*
2116 2120 functions uniform.
2117 2121 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2118 2122
2119 2123 * IPython/Magic.py (Magic.default_option): added a function to
2120 2124 allow registering default options for any magic command. This
2121 2125 makes it easy to have profiles which customize the magics globally
2122 2126 for a certain use. The values set through this function are
2123 2127 picked up by the parse_options() method, which all magics should
2124 2128 use to parse their options.
2125 2129
2126 2130 * IPython/genutils.py (warn): modified the warnings framework to
2127 2131 use the Term I/O class. I'm trying to slowly unify all of
2128 2132 IPython's I/O operations to pass through Term.
2129 2133
2130 2134 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2131 2135 the secondary prompt to correctly match the length of the primary
2132 2136 one for any prompt. Now multi-line code will properly line up
2133 2137 even for path dependent prompts, such as the new ones available
2134 2138 via the prompt_specials.
2135 2139
2136 2140 2004-06-06 Fernando Perez <fperez@colorado.edu>
2137 2141
2138 2142 * IPython/Prompts.py (prompt_specials): Added the ability to have
2139 2143 bash-like special sequences in the prompts, which get
2140 2144 automatically expanded. Things like hostname, current working
2141 2145 directory and username are implemented already, but it's easy to
2142 2146 add more in the future. Thanks to a patch by W.J. van der Laan
2143 2147 <gnufnork-AT-hetdigitalegat.nl>
2144 2148 (prompt_specials): Added color support for prompt strings, so
2145 2149 users can define arbitrary color setups for their prompts.
2146 2150
2147 2151 2004-06-05 Fernando Perez <fperez@colorado.edu>
2148 2152
2149 2153 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2150 2154 code to load Gary Bishop's readline and configure it
2151 2155 automatically. Thanks to Gary for help on this.
2152 2156
2153 2157 2004-06-01 Fernando Perez <fperez@colorado.edu>
2154 2158
2155 2159 * IPython/Logger.py (Logger.create_log): fix bug for logging
2156 2160 with no filename (previous fix was incomplete).
2157 2161
2158 2162 2004-05-25 Fernando Perez <fperez@colorado.edu>
2159 2163
2160 2164 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2161 2165 parens would get passed to the shell.
2162 2166
2163 2167 2004-05-20 Fernando Perez <fperez@colorado.edu>
2164 2168
2165 2169 * IPython/Magic.py (Magic.magic_prun): changed default profile
2166 2170 sort order to 'time' (the more common profiling need).
2167 2171
2168 2172 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2169 2173 so that source code shown is guaranteed in sync with the file on
2170 2174 disk (also changed in psource). Similar fix to the one for
2171 2175 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2172 2176 <yann.ledu-AT-noos.fr>.
2173 2177
2174 2178 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2175 2179 with a single option would not be correctly parsed. Closes
2176 2180 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2177 2181 introduced in 0.6.0 (on 2004-05-06).
2178 2182
2179 2183 2004-05-13 *** Released version 0.6.0
2180 2184
2181 2185 2004-05-13 Fernando Perez <fperez@colorado.edu>
2182 2186
2183 2187 * debian/: Added debian/ directory to CVS, so that debian support
2184 2188 is publicly accessible. The debian package is maintained by Jack
2185 2189 Moffit <jack-AT-xiph.org>.
2186 2190
2187 2191 * Documentation: included the notes about an ipython-based system
2188 2192 shell (the hypothetical 'pysh') into the new_design.pdf document,
2189 2193 so that these ideas get distributed to users along with the
2190 2194 official documentation.
2191 2195
2192 2196 2004-05-10 Fernando Perez <fperez@colorado.edu>
2193 2197
2194 2198 * IPython/Logger.py (Logger.create_log): fix recently introduced
2195 2199 bug (misindented line) where logstart would fail when not given an
2196 2200 explicit filename.
2197 2201
2198 2202 2004-05-09 Fernando Perez <fperez@colorado.edu>
2199 2203
2200 2204 * IPython/Magic.py (Magic.parse_options): skip system call when
2201 2205 there are no options to look for. Faster, cleaner for the common
2202 2206 case.
2203 2207
2204 2208 * Documentation: many updates to the manual: describing Windows
2205 2209 support better, Gnuplot updates, credits, misc small stuff. Also
2206 2210 updated the new_design doc a bit.
2207 2211
2208 2212 2004-05-06 *** Released version 0.6.0.rc1
2209 2213
2210 2214 2004-05-06 Fernando Perez <fperez@colorado.edu>
2211 2215
2212 2216 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2213 2217 operations to use the vastly more efficient list/''.join() method.
2214 2218 (FormattedTB.text): Fix
2215 2219 http://www.scipy.net/roundup/ipython/issue12 - exception source
2216 2220 extract not updated after reload. Thanks to Mike Salib
2217 2221 <msalib-AT-mit.edu> for pinning the source of the problem.
2218 2222 Fortunately, the solution works inside ipython and doesn't require
2219 2223 any changes to python proper.
2220 2224
2221 2225 * IPython/Magic.py (Magic.parse_options): Improved to process the
2222 2226 argument list as a true shell would (by actually using the
2223 2227 underlying system shell). This way, all @magics automatically get
2224 2228 shell expansion for variables. Thanks to a comment by Alex
2225 2229 Schmolck.
2226 2230
2227 2231 2004-04-04 Fernando Perez <fperez@colorado.edu>
2228 2232
2229 2233 * IPython/iplib.py (InteractiveShell.interact): Added a special
2230 2234 trap for a debugger quit exception, which is basically impossible
2231 2235 to handle by normal mechanisms, given what pdb does to the stack.
2232 2236 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2233 2237
2234 2238 2004-04-03 Fernando Perez <fperez@colorado.edu>
2235 2239
2236 2240 * IPython/genutils.py (Term): Standardized the names of the Term
2237 2241 class streams to cin/cout/cerr, following C++ naming conventions
2238 2242 (I can't use in/out/err because 'in' is not a valid attribute
2239 2243 name).
2240 2244
2241 2245 * IPython/iplib.py (InteractiveShell.interact): don't increment
2242 2246 the prompt if there's no user input. By Daniel 'Dang' Griffith
2243 2247 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2244 2248 Francois Pinard.
2245 2249
2246 2250 2004-04-02 Fernando Perez <fperez@colorado.edu>
2247 2251
2248 2252 * IPython/genutils.py (Stream.__init__): Modified to survive at
2249 2253 least importing in contexts where stdin/out/err aren't true file
2250 2254 objects, such as PyCrust (they lack fileno() and mode). However,
2251 2255 the recovery facilities which rely on these things existing will
2252 2256 not work.
2253 2257
2254 2258 2004-04-01 Fernando Perez <fperez@colorado.edu>
2255 2259
2256 2260 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2257 2261 use the new getoutputerror() function, so it properly
2258 2262 distinguishes stdout/err.
2259 2263
2260 2264 * IPython/genutils.py (getoutputerror): added a function to
2261 2265 capture separately the standard output and error of a command.
2262 2266 After a comment from dang on the mailing lists. This code is
2263 2267 basically a modified version of commands.getstatusoutput(), from
2264 2268 the standard library.
2265 2269
2266 2270 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2267 2271 '!!' as a special syntax (shorthand) to access @sx.
2268 2272
2269 2273 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2270 2274 command and return its output as a list split on '\n'.
2271 2275
2272 2276 2004-03-31 Fernando Perez <fperez@colorado.edu>
2273 2277
2274 2278 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2275 2279 method to dictionaries used as FakeModule instances if they lack
2276 2280 it. At least pydoc in python2.3 breaks for runtime-defined
2277 2281 functions without this hack. At some point I need to _really_
2278 2282 understand what FakeModule is doing, because it's a gross hack.
2279 2283 But it solves Arnd's problem for now...
2280 2284
2281 2285 2004-02-27 Fernando Perez <fperez@colorado.edu>
2282 2286
2283 2287 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2284 2288 mode would behave erratically. Also increased the number of
2285 2289 possible logs in rotate mod to 999. Thanks to Rod Holland
2286 2290 <rhh@StructureLABS.com> for the report and fixes.
2287 2291
2288 2292 2004-02-26 Fernando Perez <fperez@colorado.edu>
2289 2293
2290 2294 * IPython/genutils.py (page): Check that the curses module really
2291 2295 has the initscr attribute before trying to use it. For some
2292 2296 reason, the Solaris curses module is missing this. I think this
2293 2297 should be considered a Solaris python bug, but I'm not sure.
2294 2298
2295 2299 2004-01-17 Fernando Perez <fperez@colorado.edu>
2296 2300
2297 2301 * IPython/genutils.py (Stream.__init__): Changes to try to make
2298 2302 ipython robust against stdin/out/err being closed by the user.
2299 2303 This is 'user error' (and blocks a normal python session, at least
2300 2304 the stdout case). However, Ipython should be able to survive such
2301 2305 instances of abuse as gracefully as possible. To simplify the
2302 2306 coding and maintain compatibility with Gary Bishop's Term
2303 2307 contributions, I've made use of classmethods for this. I think
2304 2308 this introduces a dependency on python 2.2.
2305 2309
2306 2310 2004-01-13 Fernando Perez <fperez@colorado.edu>
2307 2311
2308 2312 * IPython/numutils.py (exp_safe): simplified the code a bit and
2309 2313 removed the need for importing the kinds module altogether.
2310 2314
2311 2315 2004-01-06 Fernando Perez <fperez@colorado.edu>
2312 2316
2313 2317 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2314 2318 a magic function instead, after some community feedback. No
2315 2319 special syntax will exist for it, but its name is deliberately
2316 2320 very short.
2317 2321
2318 2322 2003-12-20 Fernando Perez <fperez@colorado.edu>
2319 2323
2320 2324 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2321 2325 new functionality, to automagically assign the result of a shell
2322 2326 command to a variable. I'll solicit some community feedback on
2323 2327 this before making it permanent.
2324 2328
2325 2329 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2326 2330 requested about callables for which inspect couldn't obtain a
2327 2331 proper argspec. Thanks to a crash report sent by Etienne
2328 2332 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2329 2333
2330 2334 2003-12-09 Fernando Perez <fperez@colorado.edu>
2331 2335
2332 2336 * IPython/genutils.py (page): patch for the pager to work across
2333 2337 various versions of Windows. By Gary Bishop.
2334 2338
2335 2339 2003-12-04 Fernando Perez <fperez@colorado.edu>
2336 2340
2337 2341 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2338 2342 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2339 2343 While I tested this and it looks ok, there may still be corner
2340 2344 cases I've missed.
2341 2345
2342 2346 2003-12-01 Fernando Perez <fperez@colorado.edu>
2343 2347
2344 2348 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2345 2349 where a line like 'p,q=1,2' would fail because the automagic
2346 2350 system would be triggered for @p.
2347 2351
2348 2352 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2349 2353 cleanups, code unmodified.
2350 2354
2351 2355 * IPython/genutils.py (Term): added a class for IPython to handle
2352 2356 output. In most cases it will just be a proxy for stdout/err, but
2353 2357 having this allows modifications to be made for some platforms,
2354 2358 such as handling color escapes under Windows. All of this code
2355 2359 was contributed by Gary Bishop, with minor modifications by me.
2356 2360 The actual changes affect many files.
2357 2361
2358 2362 2003-11-30 Fernando Perez <fperez@colorado.edu>
2359 2363
2360 2364 * IPython/iplib.py (file_matches): new completion code, courtesy
2361 2365 of Jeff Collins. This enables filename completion again under
2362 2366 python 2.3, which disabled it at the C level.
2363 2367
2364 2368 2003-11-11 Fernando Perez <fperez@colorado.edu>
2365 2369
2366 2370 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2367 2371 for Numeric.array(map(...)), but often convenient.
2368 2372
2369 2373 2003-11-05 Fernando Perez <fperez@colorado.edu>
2370 2374
2371 2375 * IPython/numutils.py (frange): Changed a call from int() to
2372 2376 int(round()) to prevent a problem reported with arange() in the
2373 2377 numpy list.
2374 2378
2375 2379 2003-10-06 Fernando Perez <fperez@colorado.edu>
2376 2380
2377 2381 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2378 2382 prevent crashes if sys lacks an argv attribute (it happens with
2379 2383 embedded interpreters which build a bare-bones sys module).
2380 2384 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2381 2385
2382 2386 2003-09-24 Fernando Perez <fperez@colorado.edu>
2383 2387
2384 2388 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2385 2389 to protect against poorly written user objects where __getattr__
2386 2390 raises exceptions other than AttributeError. Thanks to a bug
2387 2391 report by Oliver Sander <osander-AT-gmx.de>.
2388 2392
2389 2393 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2390 2394 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2391 2395
2392 2396 2003-09-09 Fernando Perez <fperez@colorado.edu>
2393 2397
2394 2398 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2395 2399 unpacking a list whith a callable as first element would
2396 2400 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2397 2401 Collins.
2398 2402
2399 2403 2003-08-25 *** Released version 0.5.0
2400 2404
2401 2405 2003-08-22 Fernando Perez <fperez@colorado.edu>
2402 2406
2403 2407 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2404 2408 improperly defined user exceptions. Thanks to feedback from Mark
2405 2409 Russell <mrussell-AT-verio.net>.
2406 2410
2407 2411 2003-08-20 Fernando Perez <fperez@colorado.edu>
2408 2412
2409 2413 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2410 2414 printing so that it would print multi-line string forms starting
2411 2415 with a new line. This way the formatting is better respected for
2412 2416 objects which work hard to make nice string forms.
2413 2417
2414 2418 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2415 2419 autocall would overtake data access for objects with both
2416 2420 __getitem__ and __call__.
2417 2421
2418 2422 2003-08-19 *** Released version 0.5.0-rc1
2419 2423
2420 2424 2003-08-19 Fernando Perez <fperez@colorado.edu>
2421 2425
2422 2426 * IPython/deep_reload.py (load_tail): single tiny change here
2423 2427 seems to fix the long-standing bug of dreload() failing to work
2424 2428 for dotted names. But this module is pretty tricky, so I may have
2425 2429 missed some subtlety. Needs more testing!.
2426 2430
2427 2431 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2428 2432 exceptions which have badly implemented __str__ methods.
2429 2433 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2430 2434 which I've been getting reports about from Python 2.3 users. I
2431 2435 wish I had a simple test case to reproduce the problem, so I could
2432 2436 either write a cleaner workaround or file a bug report if
2433 2437 necessary.
2434 2438
2435 2439 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2436 2440 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2437 2441 a bug report by Tjabo Kloppenburg.
2438 2442
2439 2443 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2440 2444 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2441 2445 seems rather unstable. Thanks to a bug report by Tjabo
2442 2446 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2443 2447
2444 2448 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2445 2449 this out soon because of the critical fixes in the inner loop for
2446 2450 generators.
2447 2451
2448 2452 * IPython/Magic.py (Magic.getargspec): removed. This (and
2449 2453 _get_def) have been obsoleted by OInspect for a long time, I
2450 2454 hadn't noticed that they were dead code.
2451 2455 (Magic._ofind): restored _ofind functionality for a few literals
2452 2456 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2453 2457 for things like "hello".capitalize?, since that would require a
2454 2458 potentially dangerous eval() again.
2455 2459
2456 2460 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2457 2461 logic a bit more to clean up the escapes handling and minimize the
2458 2462 use of _ofind to only necessary cases. The interactive 'feel' of
2459 2463 IPython should have improved quite a bit with the changes in
2460 2464 _prefilter and _ofind (besides being far safer than before).
2461 2465
2462 2466 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2463 2467 obscure, never reported). Edit would fail to find the object to
2464 2468 edit under some circumstances.
2465 2469 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2466 2470 which were causing double-calling of generators. Those eval calls
2467 2471 were _very_ dangerous, since code with side effects could be
2468 2472 triggered. As they say, 'eval is evil'... These were the
2469 2473 nastiest evals in IPython. Besides, _ofind is now far simpler,
2470 2474 and it should also be quite a bit faster. Its use of inspect is
2471 2475 also safer, so perhaps some of the inspect-related crashes I've
2472 2476 seen lately with Python 2.3 might be taken care of. That will
2473 2477 need more testing.
2474 2478
2475 2479 2003-08-17 Fernando Perez <fperez@colorado.edu>
2476 2480
2477 2481 * IPython/iplib.py (InteractiveShell._prefilter): significant
2478 2482 simplifications to the logic for handling user escapes. Faster
2479 2483 and simpler code.
2480 2484
2481 2485 2003-08-14 Fernando Perez <fperez@colorado.edu>
2482 2486
2483 2487 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2484 2488 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2485 2489 but it should be quite a bit faster. And the recursive version
2486 2490 generated O(log N) intermediate storage for all rank>1 arrays,
2487 2491 even if they were contiguous.
2488 2492 (l1norm): Added this function.
2489 2493 (norm): Added this function for arbitrary norms (including
2490 2494 l-infinity). l1 and l2 are still special cases for convenience
2491 2495 and speed.
2492 2496
2493 2497 2003-08-03 Fernando Perez <fperez@colorado.edu>
2494 2498
2495 2499 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2496 2500 exceptions, which now raise PendingDeprecationWarnings in Python
2497 2501 2.3. There were some in Magic and some in Gnuplot2.
2498 2502
2499 2503 2003-06-30 Fernando Perez <fperez@colorado.edu>
2500 2504
2501 2505 * IPython/genutils.py (page): modified to call curses only for
2502 2506 terminals where TERM=='xterm'. After problems under many other
2503 2507 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2504 2508
2505 2509 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2506 2510 would be triggered when readline was absent. This was just an old
2507 2511 debugging statement I'd forgotten to take out.
2508 2512
2509 2513 2003-06-20 Fernando Perez <fperez@colorado.edu>
2510 2514
2511 2515 * IPython/genutils.py (clock): modified to return only user time
2512 2516 (not counting system time), after a discussion on scipy. While
2513 2517 system time may be a useful quantity occasionally, it may much
2514 2518 more easily be skewed by occasional swapping or other similar
2515 2519 activity.
2516 2520
2517 2521 2003-06-05 Fernando Perez <fperez@colorado.edu>
2518 2522
2519 2523 * IPython/numutils.py (identity): new function, for building
2520 2524 arbitrary rank Kronecker deltas (mostly backwards compatible with
2521 2525 Numeric.identity)
2522 2526
2523 2527 2003-06-03 Fernando Perez <fperez@colorado.edu>
2524 2528
2525 2529 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2526 2530 arguments passed to magics with spaces, to allow trailing '\' to
2527 2531 work normally (mainly for Windows users).
2528 2532
2529 2533 2003-05-29 Fernando Perez <fperez@colorado.edu>
2530 2534
2531 2535 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2532 2536 instead of pydoc.help. This fixes a bizarre behavior where
2533 2537 printing '%s' % locals() would trigger the help system. Now
2534 2538 ipython behaves like normal python does.
2535 2539
2536 2540 Note that if one does 'from pydoc import help', the bizarre
2537 2541 behavior returns, but this will also happen in normal python, so
2538 2542 it's not an ipython bug anymore (it has to do with how pydoc.help
2539 2543 is implemented).
2540 2544
2541 2545 2003-05-22 Fernando Perez <fperez@colorado.edu>
2542 2546
2543 2547 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2544 2548 return [] instead of None when nothing matches, also match to end
2545 2549 of line. Patch by Gary Bishop.
2546 2550
2547 2551 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2548 2552 protection as before, for files passed on the command line. This
2549 2553 prevents the CrashHandler from kicking in if user files call into
2550 2554 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2551 2555 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2552 2556
2553 2557 2003-05-20 *** Released version 0.4.0
2554 2558
2555 2559 2003-05-20 Fernando Perez <fperez@colorado.edu>
2556 2560
2557 2561 * setup.py: added support for manpages. It's a bit hackish b/c of
2558 2562 a bug in the way the bdist_rpm distutils target handles gzipped
2559 2563 manpages, but it works. After a patch by Jack.
2560 2564
2561 2565 2003-05-19 Fernando Perez <fperez@colorado.edu>
2562 2566
2563 2567 * IPython/numutils.py: added a mockup of the kinds module, since
2564 2568 it was recently removed from Numeric. This way, numutils will
2565 2569 work for all users even if they are missing kinds.
2566 2570
2567 2571 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2568 2572 failure, which can occur with SWIG-wrapped extensions. After a
2569 2573 crash report from Prabhu.
2570 2574
2571 2575 2003-05-16 Fernando Perez <fperez@colorado.edu>
2572 2576
2573 2577 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2574 2578 protect ipython from user code which may call directly
2575 2579 sys.excepthook (this looks like an ipython crash to the user, even
2576 2580 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2577 2581 This is especially important to help users of WxWindows, but may
2578 2582 also be useful in other cases.
2579 2583
2580 2584 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2581 2585 an optional tb_offset to be specified, and to preserve exception
2582 2586 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2583 2587
2584 2588 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2585 2589
2586 2590 2003-05-15 Fernando Perez <fperez@colorado.edu>
2587 2591
2588 2592 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2589 2593 installing for a new user under Windows.
2590 2594
2591 2595 2003-05-12 Fernando Perez <fperez@colorado.edu>
2592 2596
2593 2597 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2594 2598 handler for Emacs comint-based lines. Currently it doesn't do
2595 2599 much (but importantly, it doesn't update the history cache). In
2596 2600 the future it may be expanded if Alex needs more functionality
2597 2601 there.
2598 2602
2599 2603 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2600 2604 info to crash reports.
2601 2605
2602 2606 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2603 2607 just like Python's -c. Also fixed crash with invalid -color
2604 2608 option value at startup. Thanks to Will French
2605 2609 <wfrench-AT-bestweb.net> for the bug report.
2606 2610
2607 2611 2003-05-09 Fernando Perez <fperez@colorado.edu>
2608 2612
2609 2613 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2610 2614 to EvalDict (it's a mapping, after all) and simplified its code
2611 2615 quite a bit, after a nice discussion on c.l.py where Gustavo
2612 2616 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2613 2617
2614 2618 2003-04-30 Fernando Perez <fperez@colorado.edu>
2615 2619
2616 2620 * IPython/genutils.py (timings_out): modified it to reduce its
2617 2621 overhead in the common reps==1 case.
2618 2622
2619 2623 2003-04-29 Fernando Perez <fperez@colorado.edu>
2620 2624
2621 2625 * IPython/genutils.py (timings_out): Modified to use the resource
2622 2626 module, which avoids the wraparound problems of time.clock().
2623 2627
2624 2628 2003-04-17 *** Released version 0.2.15pre4
2625 2629
2626 2630 2003-04-17 Fernando Perez <fperez@colorado.edu>
2627 2631
2628 2632 * setup.py (scriptfiles): Split windows-specific stuff over to a
2629 2633 separate file, in an attempt to have a Windows GUI installer.
2630 2634 That didn't work, but part of the groundwork is done.
2631 2635
2632 2636 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2633 2637 indent/unindent with 4 spaces. Particularly useful in combination
2634 2638 with the new auto-indent option.
2635 2639
2636 2640 2003-04-16 Fernando Perez <fperez@colorado.edu>
2637 2641
2638 2642 * IPython/Magic.py: various replacements of self.rc for
2639 2643 self.shell.rc. A lot more remains to be done to fully disentangle
2640 2644 this class from the main Shell class.
2641 2645
2642 2646 * IPython/GnuplotRuntime.py: added checks for mouse support so
2643 2647 that we don't try to enable it if the current gnuplot doesn't
2644 2648 really support it. Also added checks so that we don't try to
2645 2649 enable persist under Windows (where Gnuplot doesn't recognize the
2646 2650 option).
2647 2651
2648 2652 * IPython/iplib.py (InteractiveShell.interact): Added optional
2649 2653 auto-indenting code, after a patch by King C. Shu
2650 2654 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2651 2655 get along well with pasting indented code. If I ever figure out
2652 2656 how to make that part go well, it will become on by default.
2653 2657
2654 2658 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2655 2659 crash ipython if there was an unmatched '%' in the user's prompt
2656 2660 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2657 2661
2658 2662 * IPython/iplib.py (InteractiveShell.interact): removed the
2659 2663 ability to ask the user whether he wants to crash or not at the
2660 2664 'last line' exception handler. Calling functions at that point
2661 2665 changes the stack, and the error reports would have incorrect
2662 2666 tracebacks.
2663 2667
2664 2668 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2665 2669 pass through a peger a pretty-printed form of any object. After a
2666 2670 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2667 2671
2668 2672 2003-04-14 Fernando Perez <fperez@colorado.edu>
2669 2673
2670 2674 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2671 2675 all files in ~ would be modified at first install (instead of
2672 2676 ~/.ipython). This could be potentially disastrous, as the
2673 2677 modification (make line-endings native) could damage binary files.
2674 2678
2675 2679 2003-04-10 Fernando Perez <fperez@colorado.edu>
2676 2680
2677 2681 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2678 2682 handle only lines which are invalid python. This now means that
2679 2683 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2680 2684 for the bug report.
2681 2685
2682 2686 2003-04-01 Fernando Perez <fperez@colorado.edu>
2683 2687
2684 2688 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2685 2689 where failing to set sys.last_traceback would crash pdb.pm().
2686 2690 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2687 2691 report.
2688 2692
2689 2693 2003-03-25 Fernando Perez <fperez@colorado.edu>
2690 2694
2691 2695 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2692 2696 before printing it (it had a lot of spurious blank lines at the
2693 2697 end).
2694 2698
2695 2699 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2696 2700 output would be sent 21 times! Obviously people don't use this
2697 2701 too often, or I would have heard about it.
2698 2702
2699 2703 2003-03-24 Fernando Perez <fperez@colorado.edu>
2700 2704
2701 2705 * setup.py (scriptfiles): renamed the data_files parameter from
2702 2706 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2703 2707 for the patch.
2704 2708
2705 2709 2003-03-20 Fernando Perez <fperez@colorado.edu>
2706 2710
2707 2711 * IPython/genutils.py (error): added error() and fatal()
2708 2712 functions.
2709 2713
2710 2714 2003-03-18 *** Released version 0.2.15pre3
2711 2715
2712 2716 2003-03-18 Fernando Perez <fperez@colorado.edu>
2713 2717
2714 2718 * setupext/install_data_ext.py
2715 2719 (install_data_ext.initialize_options): Class contributed by Jack
2716 2720 Moffit for fixing the old distutils hack. He is sending this to
2717 2721 the distutils folks so in the future we may not need it as a
2718 2722 private fix.
2719 2723
2720 2724 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2721 2725 changes for Debian packaging. See his patch for full details.
2722 2726 The old distutils hack of making the ipythonrc* files carry a
2723 2727 bogus .py extension is gone, at last. Examples were moved to a
2724 2728 separate subdir under doc/, and the separate executable scripts
2725 2729 now live in their own directory. Overall a great cleanup. The
2726 2730 manual was updated to use the new files, and setup.py has been
2727 2731 fixed for this setup.
2728 2732
2729 2733 * IPython/PyColorize.py (Parser.usage): made non-executable and
2730 2734 created a pycolor wrapper around it to be included as a script.
2731 2735
2732 2736 2003-03-12 *** Released version 0.2.15pre2
2733 2737
2734 2738 2003-03-12 Fernando Perez <fperez@colorado.edu>
2735 2739
2736 2740 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2737 2741 long-standing problem with garbage characters in some terminals.
2738 2742 The issue was really that the \001 and \002 escapes must _only_ be
2739 2743 passed to input prompts (which call readline), but _never_ to
2740 2744 normal text to be printed on screen. I changed ColorANSI to have
2741 2745 two classes: TermColors and InputTermColors, each with the
2742 2746 appropriate escapes for input prompts or normal text. The code in
2743 2747 Prompts.py got slightly more complicated, but this very old and
2744 2748 annoying bug is finally fixed.
2745 2749
2746 2750 All the credit for nailing down the real origin of this problem
2747 2751 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2748 2752 *Many* thanks to him for spending quite a bit of effort on this.
2749 2753
2750 2754 2003-03-05 *** Released version 0.2.15pre1
2751 2755
2752 2756 2003-03-03 Fernando Perez <fperez@colorado.edu>
2753 2757
2754 2758 * IPython/FakeModule.py: Moved the former _FakeModule to a
2755 2759 separate file, because it's also needed by Magic (to fix a similar
2756 2760 pickle-related issue in @run).
2757 2761
2758 2762 2003-03-02 Fernando Perez <fperez@colorado.edu>
2759 2763
2760 2764 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2761 2765 the autocall option at runtime.
2762 2766 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2763 2767 across Magic.py to start separating Magic from InteractiveShell.
2764 2768 (Magic._ofind): Fixed to return proper namespace for dotted
2765 2769 names. Before, a dotted name would always return 'not currently
2766 2770 defined', because it would find the 'parent'. s.x would be found,
2767 2771 but since 'x' isn't defined by itself, it would get confused.
2768 2772 (Magic.magic_run): Fixed pickling problems reported by Ralf
2769 2773 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2770 2774 that I'd used when Mike Heeter reported similar issues at the
2771 2775 top-level, but now for @run. It boils down to injecting the
2772 2776 namespace where code is being executed with something that looks
2773 2777 enough like a module to fool pickle.dump(). Since a pickle stores
2774 2778 a named reference to the importing module, we need this for
2775 2779 pickles to save something sensible.
2776 2780
2777 2781 * IPython/ipmaker.py (make_IPython): added an autocall option.
2778 2782
2779 2783 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2780 2784 the auto-eval code. Now autocalling is an option, and the code is
2781 2785 also vastly safer. There is no more eval() involved at all.
2782 2786
2783 2787 2003-03-01 Fernando Perez <fperez@colorado.edu>
2784 2788
2785 2789 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2786 2790 dict with named keys instead of a tuple.
2787 2791
2788 2792 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2789 2793
2790 2794 * setup.py (make_shortcut): Fixed message about directories
2791 2795 created during Windows installation (the directories were ok, just
2792 2796 the printed message was misleading). Thanks to Chris Liechti
2793 2797 <cliechti-AT-gmx.net> for the heads up.
2794 2798
2795 2799 2003-02-21 Fernando Perez <fperez@colorado.edu>
2796 2800
2797 2801 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2798 2802 of ValueError exception when checking for auto-execution. This
2799 2803 one is raised by things like Numeric arrays arr.flat when the
2800 2804 array is non-contiguous.
2801 2805
2802 2806 2003-01-31 Fernando Perez <fperez@colorado.edu>
2803 2807
2804 2808 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2805 2809 not return any value at all (even though the command would get
2806 2810 executed).
2807 2811 (xsys): Flush stdout right after printing the command to ensure
2808 2812 proper ordering of commands and command output in the total
2809 2813 output.
2810 2814 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2811 2815 system/getoutput as defaults. The old ones are kept for
2812 2816 compatibility reasons, so no code which uses this library needs
2813 2817 changing.
2814 2818
2815 2819 2003-01-27 *** Released version 0.2.14
2816 2820
2817 2821 2003-01-25 Fernando Perez <fperez@colorado.edu>
2818 2822
2819 2823 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2820 2824 functions defined in previous edit sessions could not be re-edited
2821 2825 (because the temp files were immediately removed). Now temp files
2822 2826 are removed only at IPython's exit.
2823 2827 (Magic.magic_run): Improved @run to perform shell-like expansions
2824 2828 on its arguments (~users and $VARS). With this, @run becomes more
2825 2829 like a normal command-line.
2826 2830
2827 2831 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2828 2832 bugs related to embedding and cleaned up that code. A fairly
2829 2833 important one was the impossibility to access the global namespace
2830 2834 through the embedded IPython (only local variables were visible).
2831 2835
2832 2836 2003-01-14 Fernando Perez <fperez@colorado.edu>
2833 2837
2834 2838 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2835 2839 auto-calling to be a bit more conservative. Now it doesn't get
2836 2840 triggered if any of '!=()<>' are in the rest of the input line, to
2837 2841 allow comparing callables. Thanks to Alex for the heads up.
2838 2842
2839 2843 2003-01-07 Fernando Perez <fperez@colorado.edu>
2840 2844
2841 2845 * IPython/genutils.py (page): fixed estimation of the number of
2842 2846 lines in a string to be paged to simply count newlines. This
2843 2847 prevents over-guessing due to embedded escape sequences. A better
2844 2848 long-term solution would involve stripping out the control chars
2845 2849 for the count, but it's potentially so expensive I just don't
2846 2850 think it's worth doing.
2847 2851
2848 2852 2002-12-19 *** Released version 0.2.14pre50
2849 2853
2850 2854 2002-12-19 Fernando Perez <fperez@colorado.edu>
2851 2855
2852 2856 * tools/release (version): Changed release scripts to inform
2853 2857 Andrea and build a NEWS file with a list of recent changes.
2854 2858
2855 2859 * IPython/ColorANSI.py (__all__): changed terminal detection
2856 2860 code. Seems to work better for xterms without breaking
2857 2861 konsole. Will need more testing to determine if WinXP and Mac OSX
2858 2862 also work ok.
2859 2863
2860 2864 2002-12-18 *** Released version 0.2.14pre49
2861 2865
2862 2866 2002-12-18 Fernando Perez <fperez@colorado.edu>
2863 2867
2864 2868 * Docs: added new info about Mac OSX, from Andrea.
2865 2869
2866 2870 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2867 2871 allow direct plotting of python strings whose format is the same
2868 2872 of gnuplot data files.
2869 2873
2870 2874 2002-12-16 Fernando Perez <fperez@colorado.edu>
2871 2875
2872 2876 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2873 2877 value of exit question to be acknowledged.
2874 2878
2875 2879 2002-12-03 Fernando Perez <fperez@colorado.edu>
2876 2880
2877 2881 * IPython/ipmaker.py: removed generators, which had been added
2878 2882 by mistake in an earlier debugging run. This was causing trouble
2879 2883 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2880 2884 for pointing this out.
2881 2885
2882 2886 2002-11-17 Fernando Perez <fperez@colorado.edu>
2883 2887
2884 2888 * Manual: updated the Gnuplot section.
2885 2889
2886 2890 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2887 2891 a much better split of what goes in Runtime and what goes in
2888 2892 Interactive.
2889 2893
2890 2894 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2891 2895 being imported from iplib.
2892 2896
2893 2897 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2894 2898 for command-passing. Now the global Gnuplot instance is called
2895 2899 'gp' instead of 'g', which was really a far too fragile and
2896 2900 common name.
2897 2901
2898 2902 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2899 2903 bounding boxes generated by Gnuplot for square plots.
2900 2904
2901 2905 * IPython/genutils.py (popkey): new function added. I should
2902 2906 suggest this on c.l.py as a dict method, it seems useful.
2903 2907
2904 2908 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2905 2909 to transparently handle PostScript generation. MUCH better than
2906 2910 the previous plot_eps/replot_eps (which I removed now). The code
2907 2911 is also fairly clean and well documented now (including
2908 2912 docstrings).
2909 2913
2910 2914 2002-11-13 Fernando Perez <fperez@colorado.edu>
2911 2915
2912 2916 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2913 2917 (inconsistent with options).
2914 2918
2915 2919 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2916 2920 manually disabled, I don't know why. Fixed it.
2917 2921 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2918 2922 eps output.
2919 2923
2920 2924 2002-11-12 Fernando Perez <fperez@colorado.edu>
2921 2925
2922 2926 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2923 2927 don't propagate up to caller. Fixes crash reported by François
2924 2928 Pinard.
2925 2929
2926 2930 2002-11-09 Fernando Perez <fperez@colorado.edu>
2927 2931
2928 2932 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2929 2933 history file for new users.
2930 2934 (make_IPython): fixed bug where initial install would leave the
2931 2935 user running in the .ipython dir.
2932 2936 (make_IPython): fixed bug where config dir .ipython would be
2933 2937 created regardless of the given -ipythondir option. Thanks to Cory
2934 2938 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2935 2939
2936 2940 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2937 2941 type confirmations. Will need to use it in all of IPython's code
2938 2942 consistently.
2939 2943
2940 2944 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2941 2945 context to print 31 lines instead of the default 5. This will make
2942 2946 the crash reports extremely detailed in case the problem is in
2943 2947 libraries I don't have access to.
2944 2948
2945 2949 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2946 2950 line of defense' code to still crash, but giving users fair
2947 2951 warning. I don't want internal errors to go unreported: if there's
2948 2952 an internal problem, IPython should crash and generate a full
2949 2953 report.
2950 2954
2951 2955 2002-11-08 Fernando Perez <fperez@colorado.edu>
2952 2956
2953 2957 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2954 2958 otherwise uncaught exceptions which can appear if people set
2955 2959 sys.stdout to something badly broken. Thanks to a crash report
2956 2960 from henni-AT-mail.brainbot.com.
2957 2961
2958 2962 2002-11-04 Fernando Perez <fperez@colorado.edu>
2959 2963
2960 2964 * IPython/iplib.py (InteractiveShell.interact): added
2961 2965 __IPYTHON__active to the builtins. It's a flag which goes on when
2962 2966 the interaction starts and goes off again when it stops. This
2963 2967 allows embedding code to detect being inside IPython. Before this
2964 2968 was done via __IPYTHON__, but that only shows that an IPython
2965 2969 instance has been created.
2966 2970
2967 2971 * IPython/Magic.py (Magic.magic_env): I realized that in a
2968 2972 UserDict, instance.data holds the data as a normal dict. So I
2969 2973 modified @env to return os.environ.data instead of rebuilding a
2970 2974 dict by hand.
2971 2975
2972 2976 2002-11-02 Fernando Perez <fperez@colorado.edu>
2973 2977
2974 2978 * IPython/genutils.py (warn): changed so that level 1 prints no
2975 2979 header. Level 2 is now the default (with 'WARNING' header, as
2976 2980 before). I think I tracked all places where changes were needed in
2977 2981 IPython, but outside code using the old level numbering may have
2978 2982 broken.
2979 2983
2980 2984 * IPython/iplib.py (InteractiveShell.runcode): added this to
2981 2985 handle the tracebacks in SystemExit traps correctly. The previous
2982 2986 code (through interact) was printing more of the stack than
2983 2987 necessary, showing IPython internal code to the user.
2984 2988
2985 2989 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2986 2990 default. Now that the default at the confirmation prompt is yes,
2987 2991 it's not so intrusive. François' argument that ipython sessions
2988 2992 tend to be complex enough not to lose them from an accidental C-d,
2989 2993 is a valid one.
2990 2994
2991 2995 * IPython/iplib.py (InteractiveShell.interact): added a
2992 2996 showtraceback() call to the SystemExit trap, and modified the exit
2993 2997 confirmation to have yes as the default.
2994 2998
2995 2999 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2996 3000 this file. It's been gone from the code for a long time, this was
2997 3001 simply leftover junk.
2998 3002
2999 3003 2002-11-01 Fernando Perez <fperez@colorado.edu>
3000 3004
3001 3005 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3002 3006 added. If set, IPython now traps EOF and asks for
3003 3007 confirmation. After a request by François Pinard.
3004 3008
3005 3009 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3006 3010 of @abort, and with a new (better) mechanism for handling the
3007 3011 exceptions.
3008 3012
3009 3013 2002-10-27 Fernando Perez <fperez@colorado.edu>
3010 3014
3011 3015 * IPython/usage.py (__doc__): updated the --help information and
3012 3016 the ipythonrc file to indicate that -log generates
3013 3017 ./ipython.log. Also fixed the corresponding info in @logstart.
3014 3018 This and several other fixes in the manuals thanks to reports by
3015 3019 François Pinard <pinard-AT-iro.umontreal.ca>.
3016 3020
3017 3021 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3018 3022 refer to @logstart (instead of @log, which doesn't exist).
3019 3023
3020 3024 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3021 3025 AttributeError crash. Thanks to Christopher Armstrong
3022 3026 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3023 3027 introduced recently (in 0.2.14pre37) with the fix to the eval
3024 3028 problem mentioned below.
3025 3029
3026 3030 2002-10-17 Fernando Perez <fperez@colorado.edu>
3027 3031
3028 3032 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3029 3033 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3030 3034
3031 3035 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3032 3036 this function to fix a problem reported by Alex Schmolck. He saw
3033 3037 it with list comprehensions and generators, which were getting
3034 3038 called twice. The real problem was an 'eval' call in testing for
3035 3039 automagic which was evaluating the input line silently.
3036 3040
3037 3041 This is a potentially very nasty bug, if the input has side
3038 3042 effects which must not be repeated. The code is much cleaner now,
3039 3043 without any blanket 'except' left and with a regexp test for
3040 3044 actual function names.
3041 3045
3042 3046 But an eval remains, which I'm not fully comfortable with. I just
3043 3047 don't know how to find out if an expression could be a callable in
3044 3048 the user's namespace without doing an eval on the string. However
3045 3049 that string is now much more strictly checked so that no code
3046 3050 slips by, so the eval should only happen for things that can
3047 3051 really be only function/method names.
3048 3052
3049 3053 2002-10-15 Fernando Perez <fperez@colorado.edu>
3050 3054
3051 3055 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3052 3056 OSX information to main manual, removed README_Mac_OSX file from
3053 3057 distribution. Also updated credits for recent additions.
3054 3058
3055 3059 2002-10-10 Fernando Perez <fperez@colorado.edu>
3056 3060
3057 3061 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3058 3062 terminal-related issues. Many thanks to Andrea Riciputi
3059 3063 <andrea.riciputi-AT-libero.it> for writing it.
3060 3064
3061 3065 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3062 3066 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3063 3067
3064 3068 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3065 3069 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3066 3070 <syver-en-AT-online.no> who both submitted patches for this problem.
3067 3071
3068 3072 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3069 3073 global embedding to make sure that things don't overwrite user
3070 3074 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3071 3075
3072 3076 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3073 3077 compatibility. Thanks to Hayden Callow
3074 3078 <h.callow-AT-elec.canterbury.ac.nz>
3075 3079
3076 3080 2002-10-04 Fernando Perez <fperez@colorado.edu>
3077 3081
3078 3082 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3079 3083 Gnuplot.File objects.
3080 3084
3081 3085 2002-07-23 Fernando Perez <fperez@colorado.edu>
3082 3086
3083 3087 * IPython/genutils.py (timing): Added timings() and timing() for
3084 3088 quick access to the most commonly needed data, the execution
3085 3089 times. Old timing() renamed to timings_out().
3086 3090
3087 3091 2002-07-18 Fernando Perez <fperez@colorado.edu>
3088 3092
3089 3093 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3090 3094 bug with nested instances disrupting the parent's tab completion.
3091 3095
3092 3096 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3093 3097 all_completions code to begin the emacs integration.
3094 3098
3095 3099 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3096 3100 argument to allow titling individual arrays when plotting.
3097 3101
3098 3102 2002-07-15 Fernando Perez <fperez@colorado.edu>
3099 3103
3100 3104 * setup.py (make_shortcut): changed to retrieve the value of
3101 3105 'Program Files' directory from the registry (this value changes in
3102 3106 non-english versions of Windows). Thanks to Thomas Fanslau
3103 3107 <tfanslau-AT-gmx.de> for the report.
3104 3108
3105 3109 2002-07-10 Fernando Perez <fperez@colorado.edu>
3106 3110
3107 3111 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3108 3112 a bug in pdb, which crashes if a line with only whitespace is
3109 3113 entered. Bug report submitted to sourceforge.
3110 3114
3111 3115 2002-07-09 Fernando Perez <fperez@colorado.edu>
3112 3116
3113 3117 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3114 3118 reporting exceptions (it's a bug in inspect.py, I just set a
3115 3119 workaround).
3116 3120
3117 3121 2002-07-08 Fernando Perez <fperez@colorado.edu>
3118 3122
3119 3123 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3120 3124 __IPYTHON__ in __builtins__ to show up in user_ns.
3121 3125
3122 3126 2002-07-03 Fernando Perez <fperez@colorado.edu>
3123 3127
3124 3128 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3125 3129 name from @gp_set_instance to @gp_set_default.
3126 3130
3127 3131 * IPython/ipmaker.py (make_IPython): default editor value set to
3128 3132 '0' (a string), to match the rc file. Otherwise will crash when
3129 3133 .strip() is called on it.
3130 3134
3131 3135
3132 3136 2002-06-28 Fernando Perez <fperez@colorado.edu>
3133 3137
3134 3138 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3135 3139 of files in current directory when a file is executed via
3136 3140 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3137 3141
3138 3142 * setup.py (manfiles): fix for rpm builds, submitted by RA
3139 3143 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3140 3144
3141 3145 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3142 3146 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3143 3147 string!). A. Schmolck caught this one.
3144 3148
3145 3149 2002-06-27 Fernando Perez <fperez@colorado.edu>
3146 3150
3147 3151 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3148 3152 defined files at the cmd line. __name__ wasn't being set to
3149 3153 __main__.
3150 3154
3151 3155 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3152 3156 regular lists and tuples besides Numeric arrays.
3153 3157
3154 3158 * IPython/Prompts.py (CachedOutput.__call__): Added output
3155 3159 supression for input ending with ';'. Similar to Mathematica and
3156 3160 Matlab. The _* vars and Out[] list are still updated, just like
3157 3161 Mathematica behaves.
3158 3162
3159 3163 2002-06-25 Fernando Perez <fperez@colorado.edu>
3160 3164
3161 3165 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3162 3166 .ini extensions for profiels under Windows.
3163 3167
3164 3168 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3165 3169 string form. Fix contributed by Alexander Schmolck
3166 3170 <a.schmolck-AT-gmx.net>
3167 3171
3168 3172 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3169 3173 pre-configured Gnuplot instance.
3170 3174
3171 3175 2002-06-21 Fernando Perez <fperez@colorado.edu>
3172 3176
3173 3177 * IPython/numutils.py (exp_safe): new function, works around the
3174 3178 underflow problems in Numeric.
3175 3179 (log2): New fn. Safe log in base 2: returns exact integer answer
3176 3180 for exact integer powers of 2.
3177 3181
3178 3182 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3179 3183 properly.
3180 3184
3181 3185 2002-06-20 Fernando Perez <fperez@colorado.edu>
3182 3186
3183 3187 * IPython/genutils.py (timing): new function like
3184 3188 Mathematica's. Similar to time_test, but returns more info.
3185 3189
3186 3190 2002-06-18 Fernando Perez <fperez@colorado.edu>
3187 3191
3188 3192 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3189 3193 according to Mike Heeter's suggestions.
3190 3194
3191 3195 2002-06-16 Fernando Perez <fperez@colorado.edu>
3192 3196
3193 3197 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3194 3198 system. GnuplotMagic is gone as a user-directory option. New files
3195 3199 make it easier to use all the gnuplot stuff both from external
3196 3200 programs as well as from IPython. Had to rewrite part of
3197 3201 hardcopy() b/c of a strange bug: often the ps files simply don't
3198 3202 get created, and require a repeat of the command (often several
3199 3203 times).
3200 3204
3201 3205 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3202 3206 resolve output channel at call time, so that if sys.stderr has
3203 3207 been redirected by user this gets honored.
3204 3208
3205 3209 2002-06-13 Fernando Perez <fperez@colorado.edu>
3206 3210
3207 3211 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3208 3212 IPShell. Kept a copy with the old names to avoid breaking people's
3209 3213 embedded code.
3210 3214
3211 3215 * IPython/ipython: simplified it to the bare minimum after
3212 3216 Holger's suggestions. Added info about how to use it in
3213 3217 PYTHONSTARTUP.
3214 3218
3215 3219 * IPython/Shell.py (IPythonShell): changed the options passing
3216 3220 from a string with funky %s replacements to a straight list. Maybe
3217 3221 a bit more typing, but it follows sys.argv conventions, so there's
3218 3222 less special-casing to remember.
3219 3223
3220 3224 2002-06-12 Fernando Perez <fperez@colorado.edu>
3221 3225
3222 3226 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3223 3227 command. Thanks to a suggestion by Mike Heeter.
3224 3228 (Magic.magic_pfile): added behavior to look at filenames if given
3225 3229 arg is not a defined object.
3226 3230 (Magic.magic_save): New @save function to save code snippets. Also
3227 3231 a Mike Heeter idea.
3228 3232
3229 3233 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3230 3234 plot() and replot(). Much more convenient now, especially for
3231 3235 interactive use.
3232 3236
3233 3237 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3234 3238 filenames.
3235 3239
3236 3240 2002-06-02 Fernando Perez <fperez@colorado.edu>
3237 3241
3238 3242 * IPython/Struct.py (Struct.__init__): modified to admit
3239 3243 initialization via another struct.
3240 3244
3241 3245 * IPython/genutils.py (SystemExec.__init__): New stateful
3242 3246 interface to xsys and bq. Useful for writing system scripts.
3243 3247
3244 3248 2002-05-30 Fernando Perez <fperez@colorado.edu>
3245 3249
3246 3250 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3247 3251 documents. This will make the user download smaller (it's getting
3248 3252 too big).
3249 3253
3250 3254 2002-05-29 Fernando Perez <fperez@colorado.edu>
3251 3255
3252 3256 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3253 3257 fix problems with shelve and pickle. Seems to work, but I don't
3254 3258 know if corner cases break it. Thanks to Mike Heeter
3255 3259 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3256 3260
3257 3261 2002-05-24 Fernando Perez <fperez@colorado.edu>
3258 3262
3259 3263 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3260 3264 macros having broken.
3261 3265
3262 3266 2002-05-21 Fernando Perez <fperez@colorado.edu>
3263 3267
3264 3268 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3265 3269 introduced logging bug: all history before logging started was
3266 3270 being written one character per line! This came from the redesign
3267 3271 of the input history as a special list which slices to strings,
3268 3272 not to lists.
3269 3273
3270 3274 2002-05-20 Fernando Perez <fperez@colorado.edu>
3271 3275
3272 3276 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3273 3277 be an attribute of all classes in this module. The design of these
3274 3278 classes needs some serious overhauling.
3275 3279
3276 3280 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3277 3281 which was ignoring '_' in option names.
3278 3282
3279 3283 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3280 3284 'Verbose_novars' to 'Context' and made it the new default. It's a
3281 3285 bit more readable and also safer than verbose.
3282 3286
3283 3287 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3284 3288 triple-quoted strings.
3285 3289
3286 3290 * IPython/OInspect.py (__all__): new module exposing the object
3287 3291 introspection facilities. Now the corresponding magics are dummy
3288 3292 wrappers around this. Having this module will make it much easier
3289 3293 to put these functions into our modified pdb.
3290 3294 This new object inspector system uses the new colorizing module,
3291 3295 so source code and other things are nicely syntax highlighted.
3292 3296
3293 3297 2002-05-18 Fernando Perez <fperez@colorado.edu>
3294 3298
3295 3299 * IPython/ColorANSI.py: Split the coloring tools into a separate
3296 3300 module so I can use them in other code easier (they were part of
3297 3301 ultraTB).
3298 3302
3299 3303 2002-05-17 Fernando Perez <fperez@colorado.edu>
3300 3304
3301 3305 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3302 3306 fixed it to set the global 'g' also to the called instance, as
3303 3307 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3304 3308 user's 'g' variables).
3305 3309
3306 3310 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3307 3311 global variables (aliases to _ih,_oh) so that users which expect
3308 3312 In[5] or Out[7] to work aren't unpleasantly surprised.
3309 3313 (InputList.__getslice__): new class to allow executing slices of
3310 3314 input history directly. Very simple class, complements the use of
3311 3315 macros.
3312 3316
3313 3317 2002-05-16 Fernando Perez <fperez@colorado.edu>
3314 3318
3315 3319 * setup.py (docdirbase): make doc directory be just doc/IPython
3316 3320 without version numbers, it will reduce clutter for users.
3317 3321
3318 3322 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3319 3323 execfile call to prevent possible memory leak. See for details:
3320 3324 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3321 3325
3322 3326 2002-05-15 Fernando Perez <fperez@colorado.edu>
3323 3327
3324 3328 * IPython/Magic.py (Magic.magic_psource): made the object
3325 3329 introspection names be more standard: pdoc, pdef, pfile and
3326 3330 psource. They all print/page their output, and it makes
3327 3331 remembering them easier. Kept old names for compatibility as
3328 3332 aliases.
3329 3333
3330 3334 2002-05-14 Fernando Perez <fperez@colorado.edu>
3331 3335
3332 3336 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3333 3337 what the mouse problem was. The trick is to use gnuplot with temp
3334 3338 files and NOT with pipes (for data communication), because having
3335 3339 both pipes and the mouse on is bad news.
3336 3340
3337 3341 2002-05-13 Fernando Perez <fperez@colorado.edu>
3338 3342
3339 3343 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3340 3344 bug. Information would be reported about builtins even when
3341 3345 user-defined functions overrode them.
3342 3346
3343 3347 2002-05-11 Fernando Perez <fperez@colorado.edu>
3344 3348
3345 3349 * IPython/__init__.py (__all__): removed FlexCompleter from
3346 3350 __all__ so that things don't fail in platforms without readline.
3347 3351
3348 3352 2002-05-10 Fernando Perez <fperez@colorado.edu>
3349 3353
3350 3354 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3351 3355 it requires Numeric, effectively making Numeric a dependency for
3352 3356 IPython.
3353 3357
3354 3358 * Released 0.2.13
3355 3359
3356 3360 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3357 3361 profiler interface. Now all the major options from the profiler
3358 3362 module are directly supported in IPython, both for single
3359 3363 expressions (@prun) and for full programs (@run -p).
3360 3364
3361 3365 2002-05-09 Fernando Perez <fperez@colorado.edu>
3362 3366
3363 3367 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3364 3368 magic properly formatted for screen.
3365 3369
3366 3370 * setup.py (make_shortcut): Changed things to put pdf version in
3367 3371 doc/ instead of doc/manual (had to change lyxport a bit).
3368 3372
3369 3373 * IPython/Magic.py (Profile.string_stats): made profile runs go
3370 3374 through pager (they are long and a pager allows searching, saving,
3371 3375 etc.)
3372 3376
3373 3377 2002-05-08 Fernando Perez <fperez@colorado.edu>
3374 3378
3375 3379 * Released 0.2.12
3376 3380
3377 3381 2002-05-06 Fernando Perez <fperez@colorado.edu>
3378 3382
3379 3383 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3380 3384 introduced); 'hist n1 n2' was broken.
3381 3385 (Magic.magic_pdb): added optional on/off arguments to @pdb
3382 3386 (Magic.magic_run): added option -i to @run, which executes code in
3383 3387 the IPython namespace instead of a clean one. Also added @irun as
3384 3388 an alias to @run -i.
3385 3389
3386 3390 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3387 3391 fixed (it didn't really do anything, the namespaces were wrong).
3388 3392
3389 3393 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3390 3394
3391 3395 * IPython/__init__.py (__all__): Fixed package namespace, now
3392 3396 'import IPython' does give access to IPython.<all> as
3393 3397 expected. Also renamed __release__ to Release.
3394 3398
3395 3399 * IPython/Debugger.py (__license__): created new Pdb class which
3396 3400 functions like a drop-in for the normal pdb.Pdb but does NOT
3397 3401 import readline by default. This way it doesn't muck up IPython's
3398 3402 readline handling, and now tab-completion finally works in the
3399 3403 debugger -- sort of. It completes things globally visible, but the
3400 3404 completer doesn't track the stack as pdb walks it. That's a bit
3401 3405 tricky, and I'll have to implement it later.
3402 3406
3403 3407 2002-05-05 Fernando Perez <fperez@colorado.edu>
3404 3408
3405 3409 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3406 3410 magic docstrings when printed via ? (explicit \'s were being
3407 3411 printed).
3408 3412
3409 3413 * IPython/ipmaker.py (make_IPython): fixed namespace
3410 3414 identification bug. Now variables loaded via logs or command-line
3411 3415 files are recognized in the interactive namespace by @who.
3412 3416
3413 3417 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3414 3418 log replay system stemming from the string form of Structs.
3415 3419
3416 3420 * IPython/Magic.py (Macro.__init__): improved macros to properly
3417 3421 handle magic commands in them.
3418 3422 (Magic.magic_logstart): usernames are now expanded so 'logstart
3419 3423 ~/mylog' now works.
3420 3424
3421 3425 * IPython/iplib.py (complete): fixed bug where paths starting with
3422 3426 '/' would be completed as magic names.
3423 3427
3424 3428 2002-05-04 Fernando Perez <fperez@colorado.edu>
3425 3429
3426 3430 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3427 3431 allow running full programs under the profiler's control.
3428 3432
3429 3433 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3430 3434 mode to report exceptions verbosely but without formatting
3431 3435 variables. This addresses the issue of ipython 'freezing' (it's
3432 3436 not frozen, but caught in an expensive formatting loop) when huge
3433 3437 variables are in the context of an exception.
3434 3438 (VerboseTB.text): Added '--->' markers at line where exception was
3435 3439 triggered. Much clearer to read, especially in NoColor modes.
3436 3440
3437 3441 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3438 3442 implemented in reverse when changing to the new parse_options().
3439 3443
3440 3444 2002-05-03 Fernando Perez <fperez@colorado.edu>
3441 3445
3442 3446 * IPython/Magic.py (Magic.parse_options): new function so that
3443 3447 magics can parse options easier.
3444 3448 (Magic.magic_prun): new function similar to profile.run(),
3445 3449 suggested by Chris Hart.
3446 3450 (Magic.magic_cd): fixed behavior so that it only changes if
3447 3451 directory actually is in history.
3448 3452
3449 3453 * IPython/usage.py (__doc__): added information about potential
3450 3454 slowness of Verbose exception mode when there are huge data
3451 3455 structures to be formatted (thanks to Archie Paulson).
3452 3456
3453 3457 * IPython/ipmaker.py (make_IPython): Changed default logging
3454 3458 (when simply called with -log) to use curr_dir/ipython.log in
3455 3459 rotate mode. Fixed crash which was occuring with -log before
3456 3460 (thanks to Jim Boyle).
3457 3461
3458 3462 2002-05-01 Fernando Perez <fperez@colorado.edu>
3459 3463
3460 3464 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3461 3465 was nasty -- though somewhat of a corner case).
3462 3466
3463 3467 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3464 3468 text (was a bug).
3465 3469
3466 3470 2002-04-30 Fernando Perez <fperez@colorado.edu>
3467 3471
3468 3472 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3469 3473 a print after ^D or ^C from the user so that the In[] prompt
3470 3474 doesn't over-run the gnuplot one.
3471 3475
3472 3476 2002-04-29 Fernando Perez <fperez@colorado.edu>
3473 3477
3474 3478 * Released 0.2.10
3475 3479
3476 3480 * IPython/__release__.py (version): get date dynamically.
3477 3481
3478 3482 * Misc. documentation updates thanks to Arnd's comments. Also ran
3479 3483 a full spellcheck on the manual (hadn't been done in a while).
3480 3484
3481 3485 2002-04-27 Fernando Perez <fperez@colorado.edu>
3482 3486
3483 3487 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3484 3488 starting a log in mid-session would reset the input history list.
3485 3489
3486 3490 2002-04-26 Fernando Perez <fperez@colorado.edu>
3487 3491
3488 3492 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3489 3493 all files were being included in an update. Now anything in
3490 3494 UserConfig that matches [A-Za-z]*.py will go (this excludes
3491 3495 __init__.py)
3492 3496
3493 3497 2002-04-25 Fernando Perez <fperez@colorado.edu>
3494 3498
3495 3499 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3496 3500 to __builtins__ so that any form of embedded or imported code can
3497 3501 test for being inside IPython.
3498 3502
3499 3503 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3500 3504 changed to GnuplotMagic because it's now an importable module,
3501 3505 this makes the name follow that of the standard Gnuplot module.
3502 3506 GnuplotMagic can now be loaded at any time in mid-session.
3503 3507
3504 3508 2002-04-24 Fernando Perez <fperez@colorado.edu>
3505 3509
3506 3510 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3507 3511 the globals (IPython has its own namespace) and the
3508 3512 PhysicalQuantity stuff is much better anyway.
3509 3513
3510 3514 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3511 3515 embedding example to standard user directory for
3512 3516 distribution. Also put it in the manual.
3513 3517
3514 3518 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3515 3519 instance as first argument (so it doesn't rely on some obscure
3516 3520 hidden global).
3517 3521
3518 3522 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3519 3523 delimiters. While it prevents ().TAB from working, it allows
3520 3524 completions in open (... expressions. This is by far a more common
3521 3525 case.
3522 3526
3523 3527 2002-04-23 Fernando Perez <fperez@colorado.edu>
3524 3528
3525 3529 * IPython/Extensions/InterpreterPasteInput.py: new
3526 3530 syntax-processing module for pasting lines with >>> or ... at the
3527 3531 start.
3528 3532
3529 3533 * IPython/Extensions/PhysicalQ_Interactive.py
3530 3534 (PhysicalQuantityInteractive.__int__): fixed to work with either
3531 3535 Numeric or math.
3532 3536
3533 3537 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3534 3538 provided profiles. Now we have:
3535 3539 -math -> math module as * and cmath with its own namespace.
3536 3540 -numeric -> Numeric as *, plus gnuplot & grace
3537 3541 -physics -> same as before
3538 3542
3539 3543 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3540 3544 user-defined magics wouldn't be found by @magic if they were
3541 3545 defined as class methods. Also cleaned up the namespace search
3542 3546 logic and the string building (to use %s instead of many repeated
3543 3547 string adds).
3544 3548
3545 3549 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3546 3550 of user-defined magics to operate with class methods (cleaner, in
3547 3551 line with the gnuplot code).
3548 3552
3549 3553 2002-04-22 Fernando Perez <fperez@colorado.edu>
3550 3554
3551 3555 * setup.py: updated dependency list so that manual is updated when
3552 3556 all included files change.
3553 3557
3554 3558 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3555 3559 the delimiter removal option (the fix is ugly right now).
3556 3560
3557 3561 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3558 3562 all of the math profile (quicker loading, no conflict between
3559 3563 g-9.8 and g-gnuplot).
3560 3564
3561 3565 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3562 3566 name of post-mortem files to IPython_crash_report.txt.
3563 3567
3564 3568 * Cleanup/update of the docs. Added all the new readline info and
3565 3569 formatted all lists as 'real lists'.
3566 3570
3567 3571 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3568 3572 tab-completion options, since the full readline parse_and_bind is
3569 3573 now accessible.
3570 3574
3571 3575 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3572 3576 handling of readline options. Now users can specify any string to
3573 3577 be passed to parse_and_bind(), as well as the delimiters to be
3574 3578 removed.
3575 3579 (InteractiveShell.__init__): Added __name__ to the global
3576 3580 namespace so that things like Itpl which rely on its existence
3577 3581 don't crash.
3578 3582 (InteractiveShell._prefilter): Defined the default with a _ so
3579 3583 that prefilter() is easier to override, while the default one
3580 3584 remains available.
3581 3585
3582 3586 2002-04-18 Fernando Perez <fperez@colorado.edu>
3583 3587
3584 3588 * Added information about pdb in the docs.
3585 3589
3586 3590 2002-04-17 Fernando Perez <fperez@colorado.edu>
3587 3591
3588 3592 * IPython/ipmaker.py (make_IPython): added rc_override option to
3589 3593 allow passing config options at creation time which may override
3590 3594 anything set in the config files or command line. This is
3591 3595 particularly useful for configuring embedded instances.
3592 3596
3593 3597 2002-04-15 Fernando Perez <fperez@colorado.edu>
3594 3598
3595 3599 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3596 3600 crash embedded instances because of the input cache falling out of
3597 3601 sync with the output counter.
3598 3602
3599 3603 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3600 3604 mode which calls pdb after an uncaught exception in IPython itself.
3601 3605
3602 3606 2002-04-14 Fernando Perez <fperez@colorado.edu>
3603 3607
3604 3608 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3605 3609 readline, fix it back after each call.
3606 3610
3607 3611 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3608 3612 method to force all access via __call__(), which guarantees that
3609 3613 traceback references are properly deleted.
3610 3614
3611 3615 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3612 3616 improve printing when pprint is in use.
3613 3617
3614 3618 2002-04-13 Fernando Perez <fperez@colorado.edu>
3615 3619
3616 3620 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3617 3621 exceptions aren't caught anymore. If the user triggers one, he
3618 3622 should know why he's doing it and it should go all the way up,
3619 3623 just like any other exception. So now @abort will fully kill the
3620 3624 embedded interpreter and the embedding code (unless that happens
3621 3625 to catch SystemExit).
3622 3626
3623 3627 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3624 3628 and a debugger() method to invoke the interactive pdb debugger
3625 3629 after printing exception information. Also added the corresponding
3626 3630 -pdb option and @pdb magic to control this feature, and updated
3627 3631 the docs. After a suggestion from Christopher Hart
3628 3632 (hart-AT-caltech.edu).
3629 3633
3630 3634 2002-04-12 Fernando Perez <fperez@colorado.edu>
3631 3635
3632 3636 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3633 3637 the exception handlers defined by the user (not the CrashHandler)
3634 3638 so that user exceptions don't trigger an ipython bug report.
3635 3639
3636 3640 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3637 3641 configurable (it should have always been so).
3638 3642
3639 3643 2002-03-26 Fernando Perez <fperez@colorado.edu>
3640 3644
3641 3645 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3642 3646 and there to fix embedding namespace issues. This should all be
3643 3647 done in a more elegant way.
3644 3648
3645 3649 2002-03-25 Fernando Perez <fperez@colorado.edu>
3646 3650
3647 3651 * IPython/genutils.py (get_home_dir): Try to make it work under
3648 3652 win9x also.
3649 3653
3650 3654 2002-03-20 Fernando Perez <fperez@colorado.edu>
3651 3655
3652 3656 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3653 3657 sys.displayhook untouched upon __init__.
3654 3658
3655 3659 2002-03-19 Fernando Perez <fperez@colorado.edu>
3656 3660
3657 3661 * Released 0.2.9 (for embedding bug, basically).
3658 3662
3659 3663 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3660 3664 exceptions so that enclosing shell's state can be restored.
3661 3665
3662 3666 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3663 3667 naming conventions in the .ipython/ dir.
3664 3668
3665 3669 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3666 3670 from delimiters list so filenames with - in them get expanded.
3667 3671
3668 3672 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3669 3673 sys.displayhook not being properly restored after an embedded call.
3670 3674
3671 3675 2002-03-18 Fernando Perez <fperez@colorado.edu>
3672 3676
3673 3677 * Released 0.2.8
3674 3678
3675 3679 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3676 3680 some files weren't being included in a -upgrade.
3677 3681 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3678 3682 on' so that the first tab completes.
3679 3683 (InteractiveShell.handle_magic): fixed bug with spaces around
3680 3684 quotes breaking many magic commands.
3681 3685
3682 3686 * setup.py: added note about ignoring the syntax error messages at
3683 3687 installation.
3684 3688
3685 3689 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3686 3690 streamlining the gnuplot interface, now there's only one magic @gp.
3687 3691
3688 3692 2002-03-17 Fernando Perez <fperez@colorado.edu>
3689 3693
3690 3694 * IPython/UserConfig/magic_gnuplot.py: new name for the
3691 3695 example-magic_pm.py file. Much enhanced system, now with a shell
3692 3696 for communicating directly with gnuplot, one command at a time.
3693 3697
3694 3698 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3695 3699 setting __name__=='__main__'.
3696 3700
3697 3701 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3698 3702 mini-shell for accessing gnuplot from inside ipython. Should
3699 3703 extend it later for grace access too. Inspired by Arnd's
3700 3704 suggestion.
3701 3705
3702 3706 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3703 3707 calling magic functions with () in their arguments. Thanks to Arnd
3704 3708 Baecker for pointing this to me.
3705 3709
3706 3710 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3707 3711 infinitely for integer or complex arrays (only worked with floats).
3708 3712
3709 3713 2002-03-16 Fernando Perez <fperez@colorado.edu>
3710 3714
3711 3715 * setup.py: Merged setup and setup_windows into a single script
3712 3716 which properly handles things for windows users.
3713 3717
3714 3718 2002-03-15 Fernando Perez <fperez@colorado.edu>
3715 3719
3716 3720 * Big change to the manual: now the magics are all automatically
3717 3721 documented. This information is generated from their docstrings
3718 3722 and put in a latex file included by the manual lyx file. This way
3719 3723 we get always up to date information for the magics. The manual
3720 3724 now also has proper version information, also auto-synced.
3721 3725
3722 3726 For this to work, an undocumented --magic_docstrings option was added.
3723 3727
3724 3728 2002-03-13 Fernando Perez <fperez@colorado.edu>
3725 3729
3726 3730 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3727 3731 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3728 3732
3729 3733 2002-03-12 Fernando Perez <fperez@colorado.edu>
3730 3734
3731 3735 * IPython/ultraTB.py (TermColors): changed color escapes again to
3732 3736 fix the (old, reintroduced) line-wrapping bug. Basically, if
3733 3737 \001..\002 aren't given in the color escapes, lines get wrapped
3734 3738 weirdly. But giving those screws up old xterms and emacs terms. So
3735 3739 I added some logic for emacs terms to be ok, but I can't identify old
3736 3740 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3737 3741
3738 3742 2002-03-10 Fernando Perez <fperez@colorado.edu>
3739 3743
3740 3744 * IPython/usage.py (__doc__): Various documentation cleanups and
3741 3745 updates, both in usage docstrings and in the manual.
3742 3746
3743 3747 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3744 3748 handling of caching. Set minimum acceptabe value for having a
3745 3749 cache at 20 values.
3746 3750
3747 3751 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3748 3752 install_first_time function to a method, renamed it and added an
3749 3753 'upgrade' mode. Now people can update their config directory with
3750 3754 a simple command line switch (-upgrade, also new).
3751 3755
3752 3756 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3753 3757 @file (convenient for automagic users under Python >= 2.2).
3754 3758 Removed @files (it seemed more like a plural than an abbrev. of
3755 3759 'file show').
3756 3760
3757 3761 * IPython/iplib.py (install_first_time): Fixed crash if there were
3758 3762 backup files ('~') in .ipython/ install directory.
3759 3763
3760 3764 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3761 3765 system. Things look fine, but these changes are fairly
3762 3766 intrusive. Test them for a few days.
3763 3767
3764 3768 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3765 3769 the prompts system. Now all in/out prompt strings are user
3766 3770 controllable. This is particularly useful for embedding, as one
3767 3771 can tag embedded instances with particular prompts.
3768 3772
3769 3773 Also removed global use of sys.ps1/2, which now allows nested
3770 3774 embeddings without any problems. Added command-line options for
3771 3775 the prompt strings.
3772 3776
3773 3777 2002-03-08 Fernando Perez <fperez@colorado.edu>
3774 3778
3775 3779 * IPython/UserConfig/example-embed-short.py (ipshell): added
3776 3780 example file with the bare minimum code for embedding.
3777 3781
3778 3782 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3779 3783 functionality for the embeddable shell to be activated/deactivated
3780 3784 either globally or at each call.
3781 3785
3782 3786 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3783 3787 rewriting the prompt with '--->' for auto-inputs with proper
3784 3788 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3785 3789 this is handled by the prompts class itself, as it should.
3786 3790
3787 3791 2002-03-05 Fernando Perez <fperez@colorado.edu>
3788 3792
3789 3793 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3790 3794 @logstart to avoid name clashes with the math log function.
3791 3795
3792 3796 * Big updates to X/Emacs section of the manual.
3793 3797
3794 3798 * Removed ipython_emacs. Milan explained to me how to pass
3795 3799 arguments to ipython through Emacs. Some day I'm going to end up
3796 3800 learning some lisp...
3797 3801
3798 3802 2002-03-04 Fernando Perez <fperez@colorado.edu>
3799 3803
3800 3804 * IPython/ipython_emacs: Created script to be used as the
3801 3805 py-python-command Emacs variable so we can pass IPython
3802 3806 parameters. I can't figure out how to tell Emacs directly to pass
3803 3807 parameters to IPython, so a dummy shell script will do it.
3804 3808
3805 3809 Other enhancements made for things to work better under Emacs'
3806 3810 various types of terminals. Many thanks to Milan Zamazal
3807 3811 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3808 3812
3809 3813 2002-03-01 Fernando Perez <fperez@colorado.edu>
3810 3814
3811 3815 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3812 3816 that loading of readline is now optional. This gives better
3813 3817 control to emacs users.
3814 3818
3815 3819 * IPython/ultraTB.py (__date__): Modified color escape sequences
3816 3820 and now things work fine under xterm and in Emacs' term buffers
3817 3821 (though not shell ones). Well, in emacs you get colors, but all
3818 3822 seem to be 'light' colors (no difference between dark and light
3819 3823 ones). But the garbage chars are gone, and also in xterms. It
3820 3824 seems that now I'm using 'cleaner' ansi sequences.
3821 3825
3822 3826 2002-02-21 Fernando Perez <fperez@colorado.edu>
3823 3827
3824 3828 * Released 0.2.7 (mainly to publish the scoping fix).
3825 3829
3826 3830 * IPython/Logger.py (Logger.logstate): added. A corresponding
3827 3831 @logstate magic was created.
3828 3832
3829 3833 * IPython/Magic.py: fixed nested scoping problem under Python
3830 3834 2.1.x (automagic wasn't working).
3831 3835
3832 3836 2002-02-20 Fernando Perez <fperez@colorado.edu>
3833 3837
3834 3838 * Released 0.2.6.
3835 3839
3836 3840 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3837 3841 option so that logs can come out without any headers at all.
3838 3842
3839 3843 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3840 3844 SciPy.
3841 3845
3842 3846 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3843 3847 that embedded IPython calls don't require vars() to be explicitly
3844 3848 passed. Now they are extracted from the caller's frame (code
3845 3849 snatched from Eric Jones' weave). Added better documentation to
3846 3850 the section on embedding and the example file.
3847 3851
3848 3852 * IPython/genutils.py (page): Changed so that under emacs, it just
3849 3853 prints the string. You can then page up and down in the emacs
3850 3854 buffer itself. This is how the builtin help() works.
3851 3855
3852 3856 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3853 3857 macro scoping: macros need to be executed in the user's namespace
3854 3858 to work as if they had been typed by the user.
3855 3859
3856 3860 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3857 3861 execute automatically (no need to type 'exec...'). They then
3858 3862 behave like 'true macros'. The printing system was also modified
3859 3863 for this to work.
3860 3864
3861 3865 2002-02-19 Fernando Perez <fperez@colorado.edu>
3862 3866
3863 3867 * IPython/genutils.py (page_file): new function for paging files
3864 3868 in an OS-independent way. Also necessary for file viewing to work
3865 3869 well inside Emacs buffers.
3866 3870 (page): Added checks for being in an emacs buffer.
3867 3871 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3868 3872 same bug in iplib.
3869 3873
3870 3874 2002-02-18 Fernando Perez <fperez@colorado.edu>
3871 3875
3872 3876 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3873 3877 of readline so that IPython can work inside an Emacs buffer.
3874 3878
3875 3879 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3876 3880 method signatures (they weren't really bugs, but it looks cleaner
3877 3881 and keeps PyChecker happy).
3878 3882
3879 3883 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3880 3884 for implementing various user-defined hooks. Currently only
3881 3885 display is done.
3882 3886
3883 3887 * IPython/Prompts.py (CachedOutput._display): changed display
3884 3888 functions so that they can be dynamically changed by users easily.
3885 3889
3886 3890 * IPython/Extensions/numeric_formats.py (num_display): added an
3887 3891 extension for printing NumPy arrays in flexible manners. It
3888 3892 doesn't do anything yet, but all the structure is in
3889 3893 place. Ultimately the plan is to implement output format control
3890 3894 like in Octave.
3891 3895
3892 3896 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3893 3897 methods are found at run-time by all the automatic machinery.
3894 3898
3895 3899 2002-02-17 Fernando Perez <fperez@colorado.edu>
3896 3900
3897 3901 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3898 3902 whole file a little.
3899 3903
3900 3904 * ToDo: closed this document. Now there's a new_design.lyx
3901 3905 document for all new ideas. Added making a pdf of it for the
3902 3906 end-user distro.
3903 3907
3904 3908 * IPython/Logger.py (Logger.switch_log): Created this to replace
3905 3909 logon() and logoff(). It also fixes a nasty crash reported by
3906 3910 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3907 3911
3908 3912 * IPython/iplib.py (complete): got auto-completion to work with
3909 3913 automagic (I had wanted this for a long time).
3910 3914
3911 3915 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3912 3916 to @file, since file() is now a builtin and clashes with automagic
3913 3917 for @file.
3914 3918
3915 3919 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3916 3920 of this was previously in iplib, which had grown to more than 2000
3917 3921 lines, way too long. No new functionality, but it makes managing
3918 3922 the code a bit easier.
3919 3923
3920 3924 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3921 3925 information to crash reports.
3922 3926
3923 3927 2002-02-12 Fernando Perez <fperez@colorado.edu>
3924 3928
3925 3929 * Released 0.2.5.
3926 3930
3927 3931 2002-02-11 Fernando Perez <fperez@colorado.edu>
3928 3932
3929 3933 * Wrote a relatively complete Windows installer. It puts
3930 3934 everything in place, creates Start Menu entries and fixes the
3931 3935 color issues. Nothing fancy, but it works.
3932 3936
3933 3937 2002-02-10 Fernando Perez <fperez@colorado.edu>
3934 3938
3935 3939 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3936 3940 os.path.expanduser() call so that we can type @run ~/myfile.py and
3937 3941 have thigs work as expected.
3938 3942
3939 3943 * IPython/genutils.py (page): fixed exception handling so things
3940 3944 work both in Unix and Windows correctly. Quitting a pager triggers
3941 3945 an IOError/broken pipe in Unix, and in windows not finding a pager
3942 3946 is also an IOError, so I had to actually look at the return value
3943 3947 of the exception, not just the exception itself. Should be ok now.
3944 3948
3945 3949 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3946 3950 modified to allow case-insensitive color scheme changes.
3947 3951
3948 3952 2002-02-09 Fernando Perez <fperez@colorado.edu>
3949 3953
3950 3954 * IPython/genutils.py (native_line_ends): new function to leave
3951 3955 user config files with os-native line-endings.
3952 3956
3953 3957 * README and manual updates.
3954 3958
3955 3959 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3956 3960 instead of StringType to catch Unicode strings.
3957 3961
3958 3962 * IPython/genutils.py (filefind): fixed bug for paths with
3959 3963 embedded spaces (very common in Windows).
3960 3964
3961 3965 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3962 3966 files under Windows, so that they get automatically associated
3963 3967 with a text editor. Windows makes it a pain to handle
3964 3968 extension-less files.
3965 3969
3966 3970 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3967 3971 warning about readline only occur for Posix. In Windows there's no
3968 3972 way to get readline, so why bother with the warning.
3969 3973
3970 3974 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3971 3975 for __str__ instead of dir(self), since dir() changed in 2.2.
3972 3976
3973 3977 * Ported to Windows! Tested on XP, I suspect it should work fine
3974 3978 on NT/2000, but I don't think it will work on 98 et al. That
3975 3979 series of Windows is such a piece of junk anyway that I won't try
3976 3980 porting it there. The XP port was straightforward, showed a few
3977 3981 bugs here and there (fixed all), in particular some string
3978 3982 handling stuff which required considering Unicode strings (which
3979 3983 Windows uses). This is good, but hasn't been too tested :) No
3980 3984 fancy installer yet, I'll put a note in the manual so people at
3981 3985 least make manually a shortcut.
3982 3986
3983 3987 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3984 3988 into a single one, "colors". This now controls both prompt and
3985 3989 exception color schemes, and can be changed both at startup
3986 3990 (either via command-line switches or via ipythonrc files) and at
3987 3991 runtime, with @colors.
3988 3992 (Magic.magic_run): renamed @prun to @run and removed the old
3989 3993 @run. The two were too similar to warrant keeping both.
3990 3994
3991 3995 2002-02-03 Fernando Perez <fperez@colorado.edu>
3992 3996
3993 3997 * IPython/iplib.py (install_first_time): Added comment on how to
3994 3998 configure the color options for first-time users. Put a <return>
3995 3999 request at the end so that small-terminal users get a chance to
3996 4000 read the startup info.
3997 4001
3998 4002 2002-01-23 Fernando Perez <fperez@colorado.edu>
3999 4003
4000 4004 * IPython/iplib.py (CachedOutput.update): Changed output memory
4001 4005 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4002 4006 input history we still use _i. Did this b/c these variable are
4003 4007 very commonly used in interactive work, so the less we need to
4004 4008 type the better off we are.
4005 4009 (Magic.magic_prun): updated @prun to better handle the namespaces
4006 4010 the file will run in, including a fix for __name__ not being set
4007 4011 before.
4008 4012
4009 4013 2002-01-20 Fernando Perez <fperez@colorado.edu>
4010 4014
4011 4015 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4012 4016 extra garbage for Python 2.2. Need to look more carefully into
4013 4017 this later.
4014 4018
4015 4019 2002-01-19 Fernando Perez <fperez@colorado.edu>
4016 4020
4017 4021 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4018 4022 display SyntaxError exceptions properly formatted when they occur
4019 4023 (they can be triggered by imported code).
4020 4024
4021 4025 2002-01-18 Fernando Perez <fperez@colorado.edu>
4022 4026
4023 4027 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4024 4028 SyntaxError exceptions are reported nicely formatted, instead of
4025 4029 spitting out only offset information as before.
4026 4030 (Magic.magic_prun): Added the @prun function for executing
4027 4031 programs with command line args inside IPython.
4028 4032
4029 4033 2002-01-16 Fernando Perez <fperez@colorado.edu>
4030 4034
4031 4035 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4032 4036 to *not* include the last item given in a range. This brings their
4033 4037 behavior in line with Python's slicing:
4034 4038 a[n1:n2] -> a[n1]...a[n2-1]
4035 4039 It may be a bit less convenient, but I prefer to stick to Python's
4036 4040 conventions *everywhere*, so users never have to wonder.
4037 4041 (Magic.magic_macro): Added @macro function to ease the creation of
4038 4042 macros.
4039 4043
4040 4044 2002-01-05 Fernando Perez <fperez@colorado.edu>
4041 4045
4042 4046 * Released 0.2.4.
4043 4047
4044 4048 * IPython/iplib.py (Magic.magic_pdef):
4045 4049 (InteractiveShell.safe_execfile): report magic lines and error
4046 4050 lines without line numbers so one can easily copy/paste them for
4047 4051 re-execution.
4048 4052
4049 4053 * Updated manual with recent changes.
4050 4054
4051 4055 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4052 4056 docstring printing when class? is called. Very handy for knowing
4053 4057 how to create class instances (as long as __init__ is well
4054 4058 documented, of course :)
4055 4059 (Magic.magic_doc): print both class and constructor docstrings.
4056 4060 (Magic.magic_pdef): give constructor info if passed a class and
4057 4061 __call__ info for callable object instances.
4058 4062
4059 4063 2002-01-04 Fernando Perez <fperez@colorado.edu>
4060 4064
4061 4065 * Made deep_reload() off by default. It doesn't always work
4062 4066 exactly as intended, so it's probably safer to have it off. It's
4063 4067 still available as dreload() anyway, so nothing is lost.
4064 4068
4065 4069 2002-01-02 Fernando Perez <fperez@colorado.edu>
4066 4070
4067 4071 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4068 4072 so I wanted an updated release).
4069 4073
4070 4074 2001-12-27 Fernando Perez <fperez@colorado.edu>
4071 4075
4072 4076 * IPython/iplib.py (InteractiveShell.interact): Added the original
4073 4077 code from 'code.py' for this module in order to change the
4074 4078 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4075 4079 the history cache would break when the user hit Ctrl-C, and
4076 4080 interact() offers no way to add any hooks to it.
4077 4081
4078 4082 2001-12-23 Fernando Perez <fperez@colorado.edu>
4079 4083
4080 4084 * setup.py: added check for 'MANIFEST' before trying to remove
4081 4085 it. Thanks to Sean Reifschneider.
4082 4086
4083 4087 2001-12-22 Fernando Perez <fperez@colorado.edu>
4084 4088
4085 4089 * Released 0.2.2.
4086 4090
4087 4091 * Finished (reasonably) writing the manual. Later will add the
4088 4092 python-standard navigation stylesheets, but for the time being
4089 4093 it's fairly complete. Distribution will include html and pdf
4090 4094 versions.
4091 4095
4092 4096 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4093 4097 (MayaVi author).
4094 4098
4095 4099 2001-12-21 Fernando Perez <fperez@colorado.edu>
4096 4100
4097 4101 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4098 4102 good public release, I think (with the manual and the distutils
4099 4103 installer). The manual can use some work, but that can go
4100 4104 slowly. Otherwise I think it's quite nice for end users. Next
4101 4105 summer, rewrite the guts of it...
4102 4106
4103 4107 * Changed format of ipythonrc files to use whitespace as the
4104 4108 separator instead of an explicit '='. Cleaner.
4105 4109
4106 4110 2001-12-20 Fernando Perez <fperez@colorado.edu>
4107 4111
4108 4112 * Started a manual in LyX. For now it's just a quick merge of the
4109 4113 various internal docstrings and READMEs. Later it may grow into a
4110 4114 nice, full-blown manual.
4111 4115
4112 4116 * Set up a distutils based installer. Installation should now be
4113 4117 trivially simple for end-users.
4114 4118
4115 4119 2001-12-11 Fernando Perez <fperez@colorado.edu>
4116 4120
4117 4121 * Released 0.2.0. First public release, announced it at
4118 4122 comp.lang.python. From now on, just bugfixes...
4119 4123
4120 4124 * Went through all the files, set copyright/license notices and
4121 4125 cleaned up things. Ready for release.
4122 4126
4123 4127 2001-12-10 Fernando Perez <fperez@colorado.edu>
4124 4128
4125 4129 * Changed the first-time installer not to use tarfiles. It's more
4126 4130 robust now and less unix-dependent. Also makes it easier for
4127 4131 people to later upgrade versions.
4128 4132
4129 4133 * Changed @exit to @abort to reflect the fact that it's pretty
4130 4134 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4131 4135 becomes significant only when IPyhton is embedded: in that case,
4132 4136 C-D closes IPython only, but @abort kills the enclosing program
4133 4137 too (unless it had called IPython inside a try catching
4134 4138 SystemExit).
4135 4139
4136 4140 * Created Shell module which exposes the actuall IPython Shell
4137 4141 classes, currently the normal and the embeddable one. This at
4138 4142 least offers a stable interface we won't need to change when
4139 4143 (later) the internals are rewritten. That rewrite will be confined
4140 4144 to iplib and ipmaker, but the Shell interface should remain as is.
4141 4145
4142 4146 * Added embed module which offers an embeddable IPShell object,
4143 4147 useful to fire up IPython *inside* a running program. Great for
4144 4148 debugging or dynamical data analysis.
4145 4149
4146 4150 2001-12-08 Fernando Perez <fperez@colorado.edu>
4147 4151
4148 4152 * Fixed small bug preventing seeing info from methods of defined
4149 4153 objects (incorrect namespace in _ofind()).
4150 4154
4151 4155 * Documentation cleanup. Moved the main usage docstrings to a
4152 4156 separate file, usage.py (cleaner to maintain, and hopefully in the
4153 4157 future some perlpod-like way of producing interactive, man and
4154 4158 html docs out of it will be found).
4155 4159
4156 4160 * Added @profile to see your profile at any time.
4157 4161
4158 4162 * Added @p as an alias for 'print'. It's especially convenient if
4159 4163 using automagic ('p x' prints x).
4160 4164
4161 4165 * Small cleanups and fixes after a pychecker run.
4162 4166
4163 4167 * Changed the @cd command to handle @cd - and @cd -<n> for
4164 4168 visiting any directory in _dh.
4165 4169
4166 4170 * Introduced _dh, a history of visited directories. @dhist prints
4167 4171 it out with numbers.
4168 4172
4169 4173 2001-12-07 Fernando Perez <fperez@colorado.edu>
4170 4174
4171 4175 * Released 0.1.22
4172 4176
4173 4177 * Made initialization a bit more robust against invalid color
4174 4178 options in user input (exit, not traceback-crash).
4175 4179
4176 4180 * Changed the bug crash reporter to write the report only in the
4177 4181 user's .ipython directory. That way IPython won't litter people's
4178 4182 hard disks with crash files all over the place. Also print on
4179 4183 screen the necessary mail command.
4180 4184
4181 4185 * With the new ultraTB, implemented LightBG color scheme for light
4182 4186 background terminals. A lot of people like white backgrounds, so I
4183 4187 guess we should at least give them something readable.
4184 4188
4185 4189 2001-12-06 Fernando Perez <fperez@colorado.edu>
4186 4190
4187 4191 * Modified the structure of ultraTB. Now there's a proper class
4188 4192 for tables of color schemes which allow adding schemes easily and
4189 4193 switching the active scheme without creating a new instance every
4190 4194 time (which was ridiculous). The syntax for creating new schemes
4191 4195 is also cleaner. I think ultraTB is finally done, with a clean
4192 4196 class structure. Names are also much cleaner (now there's proper
4193 4197 color tables, no need for every variable to also have 'color' in
4194 4198 its name).
4195 4199
4196 4200 * Broke down genutils into separate files. Now genutils only
4197 4201 contains utility functions, and classes have been moved to their
4198 4202 own files (they had enough independent functionality to warrant
4199 4203 it): ConfigLoader, OutputTrap, Struct.
4200 4204
4201 4205 2001-12-05 Fernando Perez <fperez@colorado.edu>
4202 4206
4203 4207 * IPython turns 21! Released version 0.1.21, as a candidate for
4204 4208 public consumption. If all goes well, release in a few days.
4205 4209
4206 4210 * Fixed path bug (files in Extensions/ directory wouldn't be found
4207 4211 unless IPython/ was explicitly in sys.path).
4208 4212
4209 4213 * Extended the FlexCompleter class as MagicCompleter to allow
4210 4214 completion of @-starting lines.
4211 4215
4212 4216 * Created __release__.py file as a central repository for release
4213 4217 info that other files can read from.
4214 4218
4215 4219 * Fixed small bug in logging: when logging was turned on in
4216 4220 mid-session, old lines with special meanings (!@?) were being
4217 4221 logged without the prepended comment, which is necessary since
4218 4222 they are not truly valid python syntax. This should make session
4219 4223 restores produce less errors.
4220 4224
4221 4225 * The namespace cleanup forced me to make a FlexCompleter class
4222 4226 which is nothing but a ripoff of rlcompleter, but with selectable
4223 4227 namespace (rlcompleter only works in __main__.__dict__). I'll try
4224 4228 to submit a note to the authors to see if this change can be
4225 4229 incorporated in future rlcompleter releases (Dec.6: done)
4226 4230
4227 4231 * More fixes to namespace handling. It was a mess! Now all
4228 4232 explicit references to __main__.__dict__ are gone (except when
4229 4233 really needed) and everything is handled through the namespace
4230 4234 dicts in the IPython instance. We seem to be getting somewhere
4231 4235 with this, finally...
4232 4236
4233 4237 * Small documentation updates.
4234 4238
4235 4239 * Created the Extensions directory under IPython (with an
4236 4240 __init__.py). Put the PhysicalQ stuff there. This directory should
4237 4241 be used for all special-purpose extensions.
4238 4242
4239 4243 * File renaming:
4240 4244 ipythonlib --> ipmaker
4241 4245 ipplib --> iplib
4242 4246 This makes a bit more sense in terms of what these files actually do.
4243 4247
4244 4248 * Moved all the classes and functions in ipythonlib to ipplib, so
4245 4249 now ipythonlib only has make_IPython(). This will ease up its
4246 4250 splitting in smaller functional chunks later.
4247 4251
4248 4252 * Cleaned up (done, I think) output of @whos. Better column
4249 4253 formatting, and now shows str(var) for as much as it can, which is
4250 4254 typically what one gets with a 'print var'.
4251 4255
4252 4256 2001-12-04 Fernando Perez <fperez@colorado.edu>
4253 4257
4254 4258 * Fixed namespace problems. Now builtin/IPyhton/user names get
4255 4259 properly reported in their namespace. Internal namespace handling
4256 4260 is finally getting decent (not perfect yet, but much better than
4257 4261 the ad-hoc mess we had).
4258 4262
4259 4263 * Removed -exit option. If people just want to run a python
4260 4264 script, that's what the normal interpreter is for. Less
4261 4265 unnecessary options, less chances for bugs.
4262 4266
4263 4267 * Added a crash handler which generates a complete post-mortem if
4264 4268 IPython crashes. This will help a lot in tracking bugs down the
4265 4269 road.
4266 4270
4267 4271 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4268 4272 which were boud to functions being reassigned would bypass the
4269 4273 logger, breaking the sync of _il with the prompt counter. This
4270 4274 would then crash IPython later when a new line was logged.
4271 4275
4272 4276 2001-12-02 Fernando Perez <fperez@colorado.edu>
4273 4277
4274 4278 * Made IPython a package. This means people don't have to clutter
4275 4279 their sys.path with yet another directory. Changed the INSTALL
4276 4280 file accordingly.
4277 4281
4278 4282 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4279 4283 sorts its output (so @who shows it sorted) and @whos formats the
4280 4284 table according to the width of the first column. Nicer, easier to
4281 4285 read. Todo: write a generic table_format() which takes a list of
4282 4286 lists and prints it nicely formatted, with optional row/column
4283 4287 separators and proper padding and justification.
4284 4288
4285 4289 * Released 0.1.20
4286 4290
4287 4291 * Fixed bug in @log which would reverse the inputcache list (a
4288 4292 copy operation was missing).
4289 4293
4290 4294 * Code cleanup. @config was changed to use page(). Better, since
4291 4295 its output is always quite long.
4292 4296
4293 4297 * Itpl is back as a dependency. I was having too many problems
4294 4298 getting the parametric aliases to work reliably, and it's just
4295 4299 easier to code weird string operations with it than playing %()s
4296 4300 games. It's only ~6k, so I don't think it's too big a deal.
4297 4301
4298 4302 * Found (and fixed) a very nasty bug with history. !lines weren't
4299 4303 getting cached, and the out of sync caches would crash
4300 4304 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4301 4305 division of labor a bit better. Bug fixed, cleaner structure.
4302 4306
4303 4307 2001-12-01 Fernando Perez <fperez@colorado.edu>
4304 4308
4305 4309 * Released 0.1.19
4306 4310
4307 4311 * Added option -n to @hist to prevent line number printing. Much
4308 4312 easier to copy/paste code this way.
4309 4313
4310 4314 * Created global _il to hold the input list. Allows easy
4311 4315 re-execution of blocks of code by slicing it (inspired by Janko's
4312 4316 comment on 'macros').
4313 4317
4314 4318 * Small fixes and doc updates.
4315 4319
4316 4320 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4317 4321 much too fragile with automagic. Handles properly multi-line
4318 4322 statements and takes parameters.
4319 4323
4320 4324 2001-11-30 Fernando Perez <fperez@colorado.edu>
4321 4325
4322 4326 * Version 0.1.18 released.
4323 4327
4324 4328 * Fixed nasty namespace bug in initial module imports.
4325 4329
4326 4330 * Added copyright/license notes to all code files (except
4327 4331 DPyGetOpt). For the time being, LGPL. That could change.
4328 4332
4329 4333 * Rewrote a much nicer README, updated INSTALL, cleaned up
4330 4334 ipythonrc-* samples.
4331 4335
4332 4336 * Overall code/documentation cleanup. Basically ready for
4333 4337 release. Only remaining thing: licence decision (LGPL?).
4334 4338
4335 4339 * Converted load_config to a class, ConfigLoader. Now recursion
4336 4340 control is better organized. Doesn't include the same file twice.
4337 4341
4338 4342 2001-11-29 Fernando Perez <fperez@colorado.edu>
4339 4343
4340 4344 * Got input history working. Changed output history variables from
4341 4345 _p to _o so that _i is for input and _o for output. Just cleaner
4342 4346 convention.
4343 4347
4344 4348 * Implemented parametric aliases. This pretty much allows the
4345 4349 alias system to offer full-blown shell convenience, I think.
4346 4350
4347 4351 * Version 0.1.17 released, 0.1.18 opened.
4348 4352
4349 4353 * dot_ipython/ipythonrc (alias): added documentation.
4350 4354 (xcolor): Fixed small bug (xcolors -> xcolor)
4351 4355
4352 4356 * Changed the alias system. Now alias is a magic command to define
4353 4357 aliases just like the shell. Rationale: the builtin magics should
4354 4358 be there for things deeply connected to IPython's
4355 4359 architecture. And this is a much lighter system for what I think
4356 4360 is the really important feature: allowing users to define quickly
4357 4361 magics that will do shell things for them, so they can customize
4358 4362 IPython easily to match their work habits. If someone is really
4359 4363 desperate to have another name for a builtin alias, they can
4360 4364 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4361 4365 works.
4362 4366
4363 4367 2001-11-28 Fernando Perez <fperez@colorado.edu>
4364 4368
4365 4369 * Changed @file so that it opens the source file at the proper
4366 4370 line. Since it uses less, if your EDITOR environment is
4367 4371 configured, typing v will immediately open your editor of choice
4368 4372 right at the line where the object is defined. Not as quick as
4369 4373 having a direct @edit command, but for all intents and purposes it
4370 4374 works. And I don't have to worry about writing @edit to deal with
4371 4375 all the editors, less does that.
4372 4376
4373 4377 * Version 0.1.16 released, 0.1.17 opened.
4374 4378
4375 4379 * Fixed some nasty bugs in the page/page_dumb combo that could
4376 4380 crash IPython.
4377 4381
4378 4382 2001-11-27 Fernando Perez <fperez@colorado.edu>
4379 4383
4380 4384 * Version 0.1.15 released, 0.1.16 opened.
4381 4385
4382 4386 * Finally got ? and ?? to work for undefined things: now it's
4383 4387 possible to type {}.get? and get information about the get method
4384 4388 of dicts, or os.path? even if only os is defined (so technically
4385 4389 os.path isn't). Works at any level. For example, after import os,
4386 4390 os?, os.path?, os.path.abspath? all work. This is great, took some
4387 4391 work in _ofind.
4388 4392
4389 4393 * Fixed more bugs with logging. The sanest way to do it was to add
4390 4394 to @log a 'mode' parameter. Killed two in one shot (this mode
4391 4395 option was a request of Janko's). I think it's finally clean
4392 4396 (famous last words).
4393 4397
4394 4398 * Added a page_dumb() pager which does a decent job of paging on
4395 4399 screen, if better things (like less) aren't available. One less
4396 4400 unix dependency (someday maybe somebody will port this to
4397 4401 windows).
4398 4402
4399 4403 * Fixed problem in magic_log: would lock of logging out if log
4400 4404 creation failed (because it would still think it had succeeded).
4401 4405
4402 4406 * Improved the page() function using curses to auto-detect screen
4403 4407 size. Now it can make a much better decision on whether to print
4404 4408 or page a string. Option screen_length was modified: a value 0
4405 4409 means auto-detect, and that's the default now.
4406 4410
4407 4411 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4408 4412 go out. I'll test it for a few days, then talk to Janko about
4409 4413 licences and announce it.
4410 4414
4411 4415 * Fixed the length of the auto-generated ---> prompt which appears
4412 4416 for auto-parens and auto-quotes. Getting this right isn't trivial,
4413 4417 with all the color escapes, different prompt types and optional
4414 4418 separators. But it seems to be working in all the combinations.
4415 4419
4416 4420 2001-11-26 Fernando Perez <fperez@colorado.edu>
4417 4421
4418 4422 * Wrote a regexp filter to get option types from the option names
4419 4423 string. This eliminates the need to manually keep two duplicate
4420 4424 lists.
4421 4425
4422 4426 * Removed the unneeded check_option_names. Now options are handled
4423 4427 in a much saner manner and it's easy to visually check that things
4424 4428 are ok.
4425 4429
4426 4430 * Updated version numbers on all files I modified to carry a
4427 4431 notice so Janko and Nathan have clear version markers.
4428 4432
4429 4433 * Updated docstring for ultraTB with my changes. I should send
4430 4434 this to Nathan.
4431 4435
4432 4436 * Lots of small fixes. Ran everything through pychecker again.
4433 4437
4434 4438 * Made loading of deep_reload an cmd line option. If it's not too
4435 4439 kosher, now people can just disable it. With -nodeep_reload it's
4436 4440 still available as dreload(), it just won't overwrite reload().
4437 4441
4438 4442 * Moved many options to the no| form (-opt and -noopt
4439 4443 accepted). Cleaner.
4440 4444
4441 4445 * Changed magic_log so that if called with no parameters, it uses
4442 4446 'rotate' mode. That way auto-generated logs aren't automatically
4443 4447 over-written. For normal logs, now a backup is made if it exists
4444 4448 (only 1 level of backups). A new 'backup' mode was added to the
4445 4449 Logger class to support this. This was a request by Janko.
4446 4450
4447 4451 * Added @logoff/@logon to stop/restart an active log.
4448 4452
4449 4453 * Fixed a lot of bugs in log saving/replay. It was pretty
4450 4454 broken. Now special lines (!@,/) appear properly in the command
4451 4455 history after a log replay.
4452 4456
4453 4457 * Tried and failed to implement full session saving via pickle. My
4454 4458 idea was to pickle __main__.__dict__, but modules can't be
4455 4459 pickled. This would be a better alternative to replaying logs, but
4456 4460 seems quite tricky to get to work. Changed -session to be called
4457 4461 -logplay, which more accurately reflects what it does. And if we
4458 4462 ever get real session saving working, -session is now available.
4459 4463
4460 4464 * Implemented color schemes for prompts also. As for tracebacks,
4461 4465 currently only NoColor and Linux are supported. But now the
4462 4466 infrastructure is in place, based on a generic ColorScheme
4463 4467 class. So writing and activating new schemes both for the prompts
4464 4468 and the tracebacks should be straightforward.
4465 4469
4466 4470 * Version 0.1.13 released, 0.1.14 opened.
4467 4471
4468 4472 * Changed handling of options for output cache. Now counter is
4469 4473 hardwired starting at 1 and one specifies the maximum number of
4470 4474 entries *in the outcache* (not the max prompt counter). This is
4471 4475 much better, since many statements won't increase the cache
4472 4476 count. It also eliminated some confusing options, now there's only
4473 4477 one: cache_size.
4474 4478
4475 4479 * Added 'alias' magic function and magic_alias option in the
4476 4480 ipythonrc file. Now the user can easily define whatever names he
4477 4481 wants for the magic functions without having to play weird
4478 4482 namespace games. This gives IPython a real shell-like feel.
4479 4483
4480 4484 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4481 4485 @ or not).
4482 4486
4483 4487 This was one of the last remaining 'visible' bugs (that I know
4484 4488 of). I think if I can clean up the session loading so it works
4485 4489 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4486 4490 about licensing).
4487 4491
4488 4492 2001-11-25 Fernando Perez <fperez@colorado.edu>
4489 4493
4490 4494 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4491 4495 there's a cleaner distinction between what ? and ?? show.
4492 4496
4493 4497 * Added screen_length option. Now the user can define his own
4494 4498 screen size for page() operations.
4495 4499
4496 4500 * Implemented magic shell-like functions with automatic code
4497 4501 generation. Now adding another function is just a matter of adding
4498 4502 an entry to a dict, and the function is dynamically generated at
4499 4503 run-time. Python has some really cool features!
4500 4504
4501 4505 * Renamed many options to cleanup conventions a little. Now all
4502 4506 are lowercase, and only underscores where needed. Also in the code
4503 4507 option name tables are clearer.
4504 4508
4505 4509 * Changed prompts a little. Now input is 'In [n]:' instead of
4506 4510 'In[n]:='. This allows it the numbers to be aligned with the
4507 4511 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4508 4512 Python (it was a Mathematica thing). The '...' continuation prompt
4509 4513 was also changed a little to align better.
4510 4514
4511 4515 * Fixed bug when flushing output cache. Not all _p<n> variables
4512 4516 exist, so their deletion needs to be wrapped in a try:
4513 4517
4514 4518 * Figured out how to properly use inspect.formatargspec() (it
4515 4519 requires the args preceded by *). So I removed all the code from
4516 4520 _get_pdef in Magic, which was just replicating that.
4517 4521
4518 4522 * Added test to prefilter to allow redefining magic function names
4519 4523 as variables. This is ok, since the @ form is always available,
4520 4524 but whe should allow the user to define a variable called 'ls' if
4521 4525 he needs it.
4522 4526
4523 4527 * Moved the ToDo information from README into a separate ToDo.
4524 4528
4525 4529 * General code cleanup and small bugfixes. I think it's close to a
4526 4530 state where it can be released, obviously with a big 'beta'
4527 4531 warning on it.
4528 4532
4529 4533 * Got the magic function split to work. Now all magics are defined
4530 4534 in a separate class. It just organizes things a bit, and now
4531 4535 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4532 4536 was too long).
4533 4537
4534 4538 * Changed @clear to @reset to avoid potential confusions with
4535 4539 the shell command clear. Also renamed @cl to @clear, which does
4536 4540 exactly what people expect it to from their shell experience.
4537 4541
4538 4542 Added a check to the @reset command (since it's so
4539 4543 destructive, it's probably a good idea to ask for confirmation).
4540 4544 But now reset only works for full namespace resetting. Since the
4541 4545 del keyword is already there for deleting a few specific
4542 4546 variables, I don't see the point of having a redundant magic
4543 4547 function for the same task.
4544 4548
4545 4549 2001-11-24 Fernando Perez <fperez@colorado.edu>
4546 4550
4547 4551 * Updated the builtin docs (esp. the ? ones).
4548 4552
4549 4553 * Ran all the code through pychecker. Not terribly impressed with
4550 4554 it: lots of spurious warnings and didn't really find anything of
4551 4555 substance (just a few modules being imported and not used).
4552 4556
4553 4557 * Implemented the new ultraTB functionality into IPython. New
4554 4558 option: xcolors. This chooses color scheme. xmode now only selects
4555 4559 between Plain and Verbose. Better orthogonality.
4556 4560
4557 4561 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4558 4562 mode and color scheme for the exception handlers. Now it's
4559 4563 possible to have the verbose traceback with no coloring.
4560 4564
4561 4565 2001-11-23 Fernando Perez <fperez@colorado.edu>
4562 4566
4563 4567 * Version 0.1.12 released, 0.1.13 opened.
4564 4568
4565 4569 * Removed option to set auto-quote and auto-paren escapes by
4566 4570 user. The chances of breaking valid syntax are just too high. If
4567 4571 someone *really* wants, they can always dig into the code.
4568 4572
4569 4573 * Made prompt separators configurable.
4570 4574
4571 4575 2001-11-22 Fernando Perez <fperez@colorado.edu>
4572 4576
4573 4577 * Small bugfixes in many places.
4574 4578
4575 4579 * Removed the MyCompleter class from ipplib. It seemed redundant
4576 4580 with the C-p,C-n history search functionality. Less code to
4577 4581 maintain.
4578 4582
4579 4583 * Moved all the original ipython.py code into ipythonlib.py. Right
4580 4584 now it's just one big dump into a function called make_IPython, so
4581 4585 no real modularity has been gained. But at least it makes the
4582 4586 wrapper script tiny, and since ipythonlib is a module, it gets
4583 4587 compiled and startup is much faster.
4584 4588
4585 4589 This is a reasobably 'deep' change, so we should test it for a
4586 4590 while without messing too much more with the code.
4587 4591
4588 4592 2001-11-21 Fernando Perez <fperez@colorado.edu>
4589 4593
4590 4594 * Version 0.1.11 released, 0.1.12 opened for further work.
4591 4595
4592 4596 * Removed dependency on Itpl. It was only needed in one place. It
4593 4597 would be nice if this became part of python, though. It makes life
4594 4598 *a lot* easier in some cases.
4595 4599
4596 4600 * Simplified the prefilter code a bit. Now all handlers are
4597 4601 expected to explicitly return a value (at least a blank string).
4598 4602
4599 4603 * Heavy edits in ipplib. Removed the help system altogether. Now
4600 4604 obj?/?? is used for inspecting objects, a magic @doc prints
4601 4605 docstrings, and full-blown Python help is accessed via the 'help'
4602 4606 keyword. This cleans up a lot of code (less to maintain) and does
4603 4607 the job. Since 'help' is now a standard Python component, might as
4604 4608 well use it and remove duplicate functionality.
4605 4609
4606 4610 Also removed the option to use ipplib as a standalone program. By
4607 4611 now it's too dependent on other parts of IPython to function alone.
4608 4612
4609 4613 * Fixed bug in genutils.pager. It would crash if the pager was
4610 4614 exited immediately after opening (broken pipe).
4611 4615
4612 4616 * Trimmed down the VerboseTB reporting a little. The header is
4613 4617 much shorter now and the repeated exception arguments at the end
4614 4618 have been removed. For interactive use the old header seemed a bit
4615 4619 excessive.
4616 4620
4617 4621 * Fixed small bug in output of @whos for variables with multi-word
4618 4622 types (only first word was displayed).
4619 4623
4620 4624 2001-11-17 Fernando Perez <fperez@colorado.edu>
4621 4625
4622 4626 * Version 0.1.10 released, 0.1.11 opened for further work.
4623 4627
4624 4628 * Modified dirs and friends. dirs now *returns* the stack (not
4625 4629 prints), so one can manipulate it as a variable. Convenient to
4626 4630 travel along many directories.
4627 4631
4628 4632 * Fixed bug in magic_pdef: would only work with functions with
4629 4633 arguments with default values.
4630 4634
4631 4635 2001-11-14 Fernando Perez <fperez@colorado.edu>
4632 4636
4633 4637 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4634 4638 example with IPython. Various other minor fixes and cleanups.
4635 4639
4636 4640 * Version 0.1.9 released, 0.1.10 opened for further work.
4637 4641
4638 4642 * Added sys.path to the list of directories searched in the
4639 4643 execfile= option. It used to be the current directory and the
4640 4644 user's IPYTHONDIR only.
4641 4645
4642 4646 2001-11-13 Fernando Perez <fperez@colorado.edu>
4643 4647
4644 4648 * Reinstated the raw_input/prefilter separation that Janko had
4645 4649 initially. This gives a more convenient setup for extending the
4646 4650 pre-processor from the outside: raw_input always gets a string,
4647 4651 and prefilter has to process it. We can then redefine prefilter
4648 4652 from the outside and implement extensions for special
4649 4653 purposes.
4650 4654
4651 4655 Today I got one for inputting PhysicalQuantity objects
4652 4656 (from Scientific) without needing any function calls at
4653 4657 all. Extremely convenient, and it's all done as a user-level
4654 4658 extension (no IPython code was touched). Now instead of:
4655 4659 a = PhysicalQuantity(4.2,'m/s**2')
4656 4660 one can simply say
4657 4661 a = 4.2 m/s**2
4658 4662 or even
4659 4663 a = 4.2 m/s^2
4660 4664
4661 4665 I use this, but it's also a proof of concept: IPython really is
4662 4666 fully user-extensible, even at the level of the parsing of the
4663 4667 command line. It's not trivial, but it's perfectly doable.
4664 4668
4665 4669 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4666 4670 the problem of modules being loaded in the inverse order in which
4667 4671 they were defined in
4668 4672
4669 4673 * Version 0.1.8 released, 0.1.9 opened for further work.
4670 4674
4671 4675 * Added magics pdef, source and file. They respectively show the
4672 4676 definition line ('prototype' in C), source code and full python
4673 4677 file for any callable object. The object inspector oinfo uses
4674 4678 these to show the same information.
4675 4679
4676 4680 * Version 0.1.7 released, 0.1.8 opened for further work.
4677 4681
4678 4682 * Separated all the magic functions into a class called Magic. The
4679 4683 InteractiveShell class was becoming too big for Xemacs to handle
4680 4684 (de-indenting a line would lock it up for 10 seconds while it
4681 4685 backtracked on the whole class!)
4682 4686
4683 4687 FIXME: didn't work. It can be done, but right now namespaces are
4684 4688 all messed up. Do it later (reverted it for now, so at least
4685 4689 everything works as before).
4686 4690
4687 4691 * Got the object introspection system (magic_oinfo) working! I
4688 4692 think this is pretty much ready for release to Janko, so he can
4689 4693 test it for a while and then announce it. Pretty much 100% of what
4690 4694 I wanted for the 'phase 1' release is ready. Happy, tired.
4691 4695
4692 4696 2001-11-12 Fernando Perez <fperez@colorado.edu>
4693 4697
4694 4698 * Version 0.1.6 released, 0.1.7 opened for further work.
4695 4699
4696 4700 * Fixed bug in printing: it used to test for truth before
4697 4701 printing, so 0 wouldn't print. Now checks for None.
4698 4702
4699 4703 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4700 4704 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4701 4705 reaches by hand into the outputcache. Think of a better way to do
4702 4706 this later.
4703 4707
4704 4708 * Various small fixes thanks to Nathan's comments.
4705 4709
4706 4710 * Changed magic_pprint to magic_Pprint. This way it doesn't
4707 4711 collide with pprint() and the name is consistent with the command
4708 4712 line option.
4709 4713
4710 4714 * Changed prompt counter behavior to be fully like
4711 4715 Mathematica's. That is, even input that doesn't return a result
4712 4716 raises the prompt counter. The old behavior was kind of confusing
4713 4717 (getting the same prompt number several times if the operation
4714 4718 didn't return a result).
4715 4719
4716 4720 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4717 4721
4718 4722 * Fixed -Classic mode (wasn't working anymore).
4719 4723
4720 4724 * Added colored prompts using Nathan's new code. Colors are
4721 4725 currently hardwired, they can be user-configurable. For
4722 4726 developers, they can be chosen in file ipythonlib.py, at the
4723 4727 beginning of the CachedOutput class def.
4724 4728
4725 4729 2001-11-11 Fernando Perez <fperez@colorado.edu>
4726 4730
4727 4731 * Version 0.1.5 released, 0.1.6 opened for further work.
4728 4732
4729 4733 * Changed magic_env to *return* the environment as a dict (not to
4730 4734 print it). This way it prints, but it can also be processed.
4731 4735
4732 4736 * Added Verbose exception reporting to interactive
4733 4737 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4734 4738 traceback. Had to make some changes to the ultraTB file. This is
4735 4739 probably the last 'big' thing in my mental todo list. This ties
4736 4740 in with the next entry:
4737 4741
4738 4742 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4739 4743 has to specify is Plain, Color or Verbose for all exception
4740 4744 handling.
4741 4745
4742 4746 * Removed ShellServices option. All this can really be done via
4743 4747 the magic system. It's easier to extend, cleaner and has automatic
4744 4748 namespace protection and documentation.
4745 4749
4746 4750 2001-11-09 Fernando Perez <fperez@colorado.edu>
4747 4751
4748 4752 * Fixed bug in output cache flushing (missing parameter to
4749 4753 __init__). Other small bugs fixed (found using pychecker).
4750 4754
4751 4755 * Version 0.1.4 opened for bugfixing.
4752 4756
4753 4757 2001-11-07 Fernando Perez <fperez@colorado.edu>
4754 4758
4755 4759 * Version 0.1.3 released, mainly because of the raw_input bug.
4756 4760
4757 4761 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4758 4762 and when testing for whether things were callable, a call could
4759 4763 actually be made to certain functions. They would get called again
4760 4764 once 'really' executed, with a resulting double call. A disaster
4761 4765 in many cases (list.reverse() would never work!).
4762 4766
4763 4767 * Removed prefilter() function, moved its code to raw_input (which
4764 4768 after all was just a near-empty caller for prefilter). This saves
4765 4769 a function call on every prompt, and simplifies the class a tiny bit.
4766 4770
4767 4771 * Fix _ip to __ip name in magic example file.
4768 4772
4769 4773 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4770 4774 work with non-gnu versions of tar.
4771 4775
4772 4776 2001-11-06 Fernando Perez <fperez@colorado.edu>
4773 4777
4774 4778 * Version 0.1.2. Just to keep track of the recent changes.
4775 4779
4776 4780 * Fixed nasty bug in output prompt routine. It used to check 'if
4777 4781 arg != None...'. Problem is, this fails if arg implements a
4778 4782 special comparison (__cmp__) which disallows comparing to
4779 4783 None. Found it when trying to use the PhysicalQuantity module from
4780 4784 ScientificPython.
4781 4785
4782 4786 2001-11-05 Fernando Perez <fperez@colorado.edu>
4783 4787
4784 4788 * Also added dirs. Now the pushd/popd/dirs family functions
4785 4789 basically like the shell, with the added convenience of going home
4786 4790 when called with no args.
4787 4791
4788 4792 * pushd/popd slightly modified to mimic shell behavior more
4789 4793 closely.
4790 4794
4791 4795 * Added env,pushd,popd from ShellServices as magic functions. I
4792 4796 think the cleanest will be to port all desired functions from
4793 4797 ShellServices as magics and remove ShellServices altogether. This
4794 4798 will provide a single, clean way of adding functionality
4795 4799 (shell-type or otherwise) to IP.
4796 4800
4797 4801 2001-11-04 Fernando Perez <fperez@colorado.edu>
4798 4802
4799 4803 * Added .ipython/ directory to sys.path. This way users can keep
4800 4804 customizations there and access them via import.
4801 4805
4802 4806 2001-11-03 Fernando Perez <fperez@colorado.edu>
4803 4807
4804 4808 * Opened version 0.1.1 for new changes.
4805 4809
4806 4810 * Changed version number to 0.1.0: first 'public' release, sent to
4807 4811 Nathan and Janko.
4808 4812
4809 4813 * Lots of small fixes and tweaks.
4810 4814
4811 4815 * Minor changes to whos format. Now strings are shown, snipped if
4812 4816 too long.
4813 4817
4814 4818 * Changed ShellServices to work on __main__ so they show up in @who
4815 4819
4816 4820 * Help also works with ? at the end of a line:
4817 4821 ?sin and sin?
4818 4822 both produce the same effect. This is nice, as often I use the
4819 4823 tab-complete to find the name of a method, but I used to then have
4820 4824 to go to the beginning of the line to put a ? if I wanted more
4821 4825 info. Now I can just add the ? and hit return. Convenient.
4822 4826
4823 4827 2001-11-02 Fernando Perez <fperez@colorado.edu>
4824 4828
4825 4829 * Python version check (>=2.1) added.
4826 4830
4827 4831 * Added LazyPython documentation. At this point the docs are quite
4828 4832 a mess. A cleanup is in order.
4829 4833
4830 4834 * Auto-installer created. For some bizarre reason, the zipfiles
4831 4835 module isn't working on my system. So I made a tar version
4832 4836 (hopefully the command line options in various systems won't kill
4833 4837 me).
4834 4838
4835 4839 * Fixes to Struct in genutils. Now all dictionary-like methods are
4836 4840 protected (reasonably).
4837 4841
4838 4842 * Added pager function to genutils and changed ? to print usage
4839 4843 note through it (it was too long).
4840 4844
4841 4845 * Added the LazyPython functionality. Works great! I changed the
4842 4846 auto-quote escape to ';', it's on home row and next to '. But
4843 4847 both auto-quote and auto-paren (still /) escapes are command-line
4844 4848 parameters.
4845 4849
4846 4850
4847 4851 2001-11-01 Fernando Perez <fperez@colorado.edu>
4848 4852
4849 4853 * Version changed to 0.0.7. Fairly large change: configuration now
4850 4854 is all stored in a directory, by default .ipython. There, all
4851 4855 config files have normal looking names (not .names)
4852 4856
4853 4857 * Version 0.0.6 Released first to Lucas and Archie as a test
4854 4858 run. Since it's the first 'semi-public' release, change version to
4855 4859 > 0.0.6 for any changes now.
4856 4860
4857 4861 * Stuff I had put in the ipplib.py changelog:
4858 4862
4859 4863 Changes to InteractiveShell:
4860 4864
4861 4865 - Made the usage message a parameter.
4862 4866
4863 4867 - Require the name of the shell variable to be given. It's a bit
4864 4868 of a hack, but allows the name 'shell' not to be hardwire in the
4865 4869 magic (@) handler, which is problematic b/c it requires
4866 4870 polluting the global namespace with 'shell'. This in turn is
4867 4871 fragile: if a user redefines a variable called shell, things
4868 4872 break.
4869 4873
4870 4874 - magic @: all functions available through @ need to be defined
4871 4875 as magic_<name>, even though they can be called simply as
4872 4876 @<name>. This allows the special command @magic to gather
4873 4877 information automatically about all existing magic functions,
4874 4878 even if they are run-time user extensions, by parsing the shell
4875 4879 instance __dict__ looking for special magic_ names.
4876 4880
4877 4881 - mainloop: added *two* local namespace parameters. This allows
4878 4882 the class to differentiate between parameters which were there
4879 4883 before and after command line initialization was processed. This
4880 4884 way, later @who can show things loaded at startup by the
4881 4885 user. This trick was necessary to make session saving/reloading
4882 4886 really work: ideally after saving/exiting/reloading a session,
4883 4887 *everythin* should look the same, including the output of @who. I
4884 4888 was only able to make this work with this double namespace
4885 4889 trick.
4886 4890
4887 4891 - added a header to the logfile which allows (almost) full
4888 4892 session restoring.
4889 4893
4890 4894 - prepend lines beginning with @ or !, with a and log
4891 4895 them. Why? !lines: may be useful to know what you did @lines:
4892 4896 they may affect session state. So when restoring a session, at
4893 4897 least inform the user of their presence. I couldn't quite get
4894 4898 them to properly re-execute, but at least the user is warned.
4895 4899
4896 4900 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now