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