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