##// END OF EJS Templates
SList.grep()
vivainio -
Show More
@@ -1,1896 +1,1911 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 2661 2007-08-22 20:43:34Z vivainio $"""
8 $Id: genutils.py 2726 2007-09-07 15:07:17Z vivainio $"""
9 9
10 10 #*****************************************************************************
11 11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 12 #
13 13 # Distributed under the terms of the BSD License. The full license is in
14 14 # the file COPYING, distributed as part of this software.
15 15 #*****************************************************************************
16 16
17 17 from 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 shlex
28 28 import shutil
29 29 import sys
30 30 import tempfile
31 31 import time
32 32 import types
33 33 import warnings
34 34
35 35 # Other IPython utilities
36 36 import IPython
37 37 from IPython.Itpl import Itpl,itpl,printpl
38 38 from IPython import DPyGetOpt, platutils
39 39 from IPython.generics import result_display
40 40 from path import path
41 41 if os.name == "nt":
42 42 from IPython.winconsole import get_console_size
43 43
44 44 #****************************************************************************
45 45 # Exceptions
46 46 class Error(Exception):
47 47 """Base class for exceptions in this module."""
48 48 pass
49 49
50 50 #----------------------------------------------------------------------------
51 51 class IOStream:
52 52 def __init__(self,stream,fallback):
53 53 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
54 54 stream = fallback
55 55 self.stream = stream
56 56 self._swrite = stream.write
57 57 self.flush = stream.flush
58 58
59 59 def write(self,data):
60 60 try:
61 61 self._swrite(data)
62 62 except:
63 63 try:
64 64 # print handles some unicode issues which may trip a plain
65 65 # write() call. Attempt to emulate write() by using a
66 66 # trailing comma
67 67 print >> self.stream, data,
68 68 except:
69 69 # if we get here, something is seriously broken.
70 70 print >> sys.stderr, \
71 71 'ERROR - failed to write data to stream:', self.stream
72 72
73 73 def close(self):
74 74 pass
75 75
76 76
77 77 class IOTerm:
78 78 """ Term holds the file or file-like objects for handling I/O operations.
79 79
80 80 These are normally just sys.stdin, sys.stdout and sys.stderr but for
81 81 Windows they can can replaced to allow editing the strings before they are
82 82 displayed."""
83 83
84 84 # In the future, having IPython channel all its I/O operations through
85 85 # this class will make it easier to embed it into other environments which
86 86 # are not a normal terminal (such as a GUI-based shell)
87 87 def __init__(self,cin=None,cout=None,cerr=None):
88 88 self.cin = IOStream(cin,sys.stdin)
89 89 self.cout = IOStream(cout,sys.stdout)
90 90 self.cerr = IOStream(cerr,sys.stderr)
91 91
92 92 # Global variable to be used for all I/O
93 93 Term = IOTerm()
94 94
95 95 import IPython.rlineimpl as readline
96 96 # Remake Term to use the readline i/o facilities
97 97 if sys.platform == 'win32' and readline.have_readline:
98 98
99 99 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
100 100
101 101
102 102 #****************************************************************************
103 103 # Generic warning/error printer, used by everything else
104 104 def warn(msg,level=2,exit_val=1):
105 105 """Standard warning printer. Gives formatting consistency.
106 106
107 107 Output is sent to Term.cerr (sys.stderr by default).
108 108
109 109 Options:
110 110
111 111 -level(2): allows finer control:
112 112 0 -> Do nothing, dummy function.
113 113 1 -> Print message.
114 114 2 -> Print 'WARNING:' + message. (Default level).
115 115 3 -> Print 'ERROR:' + message.
116 116 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
117 117
118 118 -exit_val (1): exit value returned by sys.exit() for a level 4
119 119 warning. Ignored for all other levels."""
120 120
121 121 if level>0:
122 122 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
123 123 print >> Term.cerr, '%s%s' % (header[level],msg)
124 124 if level == 4:
125 125 print >> Term.cerr,'Exiting.\n'
126 126 sys.exit(exit_val)
127 127
128 128 def info(msg):
129 129 """Equivalent to warn(msg,level=1)."""
130 130
131 131 warn(msg,level=1)
132 132
133 133 def error(msg):
134 134 """Equivalent to warn(msg,level=3)."""
135 135
136 136 warn(msg,level=3)
137 137
138 138 def fatal(msg,exit_val=1):
139 139 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
140 140
141 141 warn(msg,exit_val=exit_val,level=4)
142 142
143 143 #---------------------------------------------------------------------------
144 144 # Debugging routines
145 145 #
146 146 def debugx(expr,pre_msg=''):
147 147 """Print the value of an expression from the caller's frame.
148 148
149 149 Takes an expression, evaluates it in the caller's frame and prints both
150 150 the given expression and the resulting value (as well as a debug mark
151 151 indicating the name of the calling function. The input must be of a form
152 152 suitable for eval().
153 153
154 154 An optional message can be passed, which will be prepended to the printed
155 155 expr->value pair."""
156 156
157 157 cf = sys._getframe(1)
158 158 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
159 159 eval(expr,cf.f_globals,cf.f_locals))
160 160
161 161 # deactivate it by uncommenting the following line, which makes it a no-op
162 162 #def debugx(expr,pre_msg=''): pass
163 163
164 164 #----------------------------------------------------------------------------
165 165 StringTypes = types.StringTypes
166 166
167 167 # Basic timing functionality
168 168
169 169 # If possible (Unix), use the resource module instead of time.clock()
170 170 try:
171 171 import resource
172 172 def clocku():
173 173 """clocku() -> floating point number
174 174
175 175 Return the *USER* CPU time in seconds since the start of the process.
176 176 This is done via a call to resource.getrusage, so it avoids the
177 177 wraparound problems in time.clock()."""
178 178
179 179 return resource.getrusage(resource.RUSAGE_SELF)[0]
180 180
181 181 def clocks():
182 182 """clocks() -> floating point number
183 183
184 184 Return the *SYSTEM* CPU time in seconds since the start of the process.
185 185 This is done via a call to resource.getrusage, so it avoids the
186 186 wraparound problems in time.clock()."""
187 187
188 188 return resource.getrusage(resource.RUSAGE_SELF)[1]
189 189
190 190 def clock():
191 191 """clock() -> floating point number
192 192
193 193 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
194 194 the process. This is done via a call to resource.getrusage, so it
195 195 avoids the wraparound problems in time.clock()."""
196 196
197 197 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
198 198 return u+s
199 199
200 200 def clock2():
201 201 """clock2() -> (t_user,t_system)
202 202
203 203 Similar to clock(), but return a tuple of user/system times."""
204 204 return resource.getrusage(resource.RUSAGE_SELF)[:2]
205 205
206 206 except ImportError:
207 207 # There is no distinction of user/system time under windows, so we just use
208 208 # time.clock() for everything...
209 209 clocku = clocks = clock = time.clock
210 210 def clock2():
211 211 """Under windows, system CPU time can't be measured.
212 212
213 213 This just returns clock() and zero."""
214 214 return time.clock(),0.0
215 215
216 216 def timings_out(reps,func,*args,**kw):
217 217 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
218 218
219 219 Execute a function reps times, return a tuple with the elapsed total
220 220 CPU time in seconds, the time per call and the function's output.
221 221
222 222 Under Unix, the return value is the sum of user+system time consumed by
223 223 the process, computed via the resource module. This prevents problems
224 224 related to the wraparound effect which the time.clock() function has.
225 225
226 226 Under Windows the return value is in wall clock seconds. See the
227 227 documentation for the time module for more details."""
228 228
229 229 reps = int(reps)
230 230 assert reps >=1, 'reps must be >= 1'
231 231 if reps==1:
232 232 start = clock()
233 233 out = func(*args,**kw)
234 234 tot_time = clock()-start
235 235 else:
236 236 rng = xrange(reps-1) # the last time is executed separately to store output
237 237 start = clock()
238 238 for dummy in rng: func(*args,**kw)
239 239 out = func(*args,**kw) # one last time
240 240 tot_time = clock()-start
241 241 av_time = tot_time / reps
242 242 return tot_time,av_time,out
243 243
244 244 def timings(reps,func,*args,**kw):
245 245 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
246 246
247 247 Execute a function reps times, return a tuple with the elapsed total CPU
248 248 time in seconds and the time per call. These are just the first two values
249 249 in timings_out()."""
250 250
251 251 return timings_out(reps,func,*args,**kw)[0:2]
252 252
253 253 def timing(func,*args,**kw):
254 254 """timing(func,*args,**kw) -> t_total
255 255
256 256 Execute a function once, return the elapsed total CPU time in
257 257 seconds. This is just the first value in timings_out()."""
258 258
259 259 return timings_out(1,func,*args,**kw)[0]
260 260
261 261 #****************************************************************************
262 262 # file and system
263 263
264 264 def arg_split(s,posix=False):
265 265 """Split a command line's arguments in a shell-like manner.
266 266
267 267 This is a modified version of the standard library's shlex.split()
268 268 function, but with a default of posix=False for splitting, so that quotes
269 269 in inputs are respected."""
270 270
271 271 # XXX - there may be unicode-related problems here!!! I'm not sure that
272 272 # shlex is truly unicode-safe, so it might be necessary to do
273 273 #
274 274 # s = s.encode(sys.stdin.encoding)
275 275 #
276 276 # first, to ensure that shlex gets a normal string. Input from anyone who
277 277 # knows more about unicode and shlex than I would be good to have here...
278 278 lex = shlex.shlex(s, posix=posix)
279 279 lex.whitespace_split = True
280 280 return list(lex)
281 281
282 282 def system(cmd,verbose=0,debug=0,header=''):
283 283 """Execute a system command, return its exit status.
284 284
285 285 Options:
286 286
287 287 - verbose (0): print the command to be executed.
288 288
289 289 - debug (0): only print, do not actually execute.
290 290
291 291 - header (''): Header to print on screen prior to the executed command (it
292 292 is only prepended to the command, no newlines are added).
293 293
294 294 Note: a stateful version of this function is available through the
295 295 SystemExec class."""
296 296
297 297 stat = 0
298 298 if verbose or debug: print header+cmd
299 299 sys.stdout.flush()
300 300 if not debug: stat = os.system(cmd)
301 301 return stat
302 302
303 303 def abbrev_cwd():
304 304 """ Return abbreviated version of cwd, e.g. d:mydir """
305 305 cwd = os.getcwd()
306 306 drivepart = ''
307 307 if sys.platform == 'win32':
308 308 if len(cwd) < 4:
309 309 return cwd
310 310 drivepart = os.path.splitdrive(cwd)[0]
311 311 return (drivepart + (
312 312 cwd == '/' and '/' or \
313 313 os.path.basename(cwd)))
314 314
315 315
316 316 # This function is used by ipython in a lot of places to make system calls.
317 317 # We need it to be slightly different under win32, due to the vagaries of
318 318 # 'network shares'. A win32 override is below.
319 319
320 320 def shell(cmd,verbose=0,debug=0,header=''):
321 321 """Execute a command in the system shell, always return None.
322 322
323 323 Options:
324 324
325 325 - verbose (0): print the command to be executed.
326 326
327 327 - debug (0): only print, do not actually execute.
328 328
329 329 - header (''): Header to print on screen prior to the executed command (it
330 330 is only prepended to the command, no newlines are added).
331 331
332 332 Note: this is similar to genutils.system(), but it returns None so it can
333 333 be conveniently used in interactive loops without getting the return value
334 334 (typically 0) printed many times."""
335 335
336 336 stat = 0
337 337 if verbose or debug: print header+cmd
338 338 # flush stdout so we don't mangle python's buffering
339 339 sys.stdout.flush()
340 340
341 341 if not debug:
342 342 platutils.set_term_title("IPy " + cmd)
343 343 os.system(cmd)
344 344 platutils.set_term_title("IPy " + abbrev_cwd())
345 345
346 346 # override shell() for win32 to deal with network shares
347 347 if os.name in ('nt','dos'):
348 348
349 349 shell_ori = shell
350 350
351 351 def shell(cmd,verbose=0,debug=0,header=''):
352 352 if os.getcwd().startswith(r"\\"):
353 353 path = os.getcwd()
354 354 # change to c drive (cannot be on UNC-share when issuing os.system,
355 355 # as cmd.exe cannot handle UNC addresses)
356 356 os.chdir("c:")
357 357 # issue pushd to the UNC-share and then run the command
358 358 try:
359 359 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
360 360 finally:
361 361 os.chdir(path)
362 362 else:
363 363 shell_ori(cmd,verbose,debug,header)
364 364
365 365 shell.__doc__ = shell_ori.__doc__
366 366
367 367 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
368 368 """Dummy substitute for perl's backquotes.
369 369
370 370 Executes a command and returns the output.
371 371
372 372 Accepts the same arguments as system(), plus:
373 373
374 374 - split(0): if true, the output is returned as a list split on newlines.
375 375
376 376 Note: a stateful version of this function is available through the
377 377 SystemExec class.
378 378
379 379 This is pretty much deprecated and rarely used,
380 380 genutils.getoutputerror may be what you need.
381 381
382 382 """
383 383
384 384 if verbose or debug: print header+cmd
385 385 if not debug:
386 386 output = os.popen(cmd).read()
387 387 # stipping last \n is here for backwards compat.
388 388 if output.endswith('\n'):
389 389 output = output[:-1]
390 390 if split:
391 391 return output.split('\n')
392 392 else:
393 393 return output
394 394
395 395 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
396 396 """Return (standard output,standard error) of executing cmd in a shell.
397 397
398 398 Accepts the same arguments as system(), plus:
399 399
400 400 - split(0): if true, each of stdout/err is returned as a list split on
401 401 newlines.
402 402
403 403 Note: a stateful version of this function is available through the
404 404 SystemExec class."""
405 405
406 406 if verbose or debug: print header+cmd
407 407 if not cmd:
408 408 if split:
409 409 return [],[]
410 410 else:
411 411 return '',''
412 412 if not debug:
413 413 pin,pout,perr = os.popen3(cmd)
414 414 tout = pout.read().rstrip()
415 415 terr = perr.read().rstrip()
416 416 pin.close()
417 417 pout.close()
418 418 perr.close()
419 419 if split:
420 420 return tout.split('\n'),terr.split('\n')
421 421 else:
422 422 return tout,terr
423 423
424 424 # for compatibility with older naming conventions
425 425 xsys = system
426 426 bq = getoutput
427 427
428 428 class SystemExec:
429 429 """Access the system and getoutput functions through a stateful interface.
430 430
431 431 Note: here we refer to the system and getoutput functions from this
432 432 library, not the ones from the standard python library.
433 433
434 434 This class offers the system and getoutput functions as methods, but the
435 435 verbose, debug and header parameters can be set for the instance (at
436 436 creation time or later) so that they don't need to be specified on each
437 437 call.
438 438
439 439 For efficiency reasons, there's no way to override the parameters on a
440 440 per-call basis other than by setting instance attributes. If you need
441 441 local overrides, it's best to directly call system() or getoutput().
442 442
443 443 The following names are provided as alternate options:
444 444 - xsys: alias to system
445 445 - bq: alias to getoutput
446 446
447 447 An instance can then be created as:
448 448 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
449 449
450 450 And used as:
451 451 >>> sysexec.xsys('pwd')
452 452 >>> dirlist = sysexec.bq('ls -l')
453 453 """
454 454
455 455 def __init__(self,verbose=0,debug=0,header='',split=0):
456 456 """Specify the instance's values for verbose, debug and header."""
457 457 setattr_list(self,'verbose debug header split')
458 458
459 459 def system(self,cmd):
460 460 """Stateful interface to system(), with the same keyword parameters."""
461 461
462 462 system(cmd,self.verbose,self.debug,self.header)
463 463
464 464 def shell(self,cmd):
465 465 """Stateful interface to shell(), with the same keyword parameters."""
466 466
467 467 shell(cmd,self.verbose,self.debug,self.header)
468 468
469 469 xsys = system # alias
470 470
471 471 def getoutput(self,cmd):
472 472 """Stateful interface to getoutput()."""
473 473
474 474 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
475 475
476 476 def getoutputerror(self,cmd):
477 477 """Stateful interface to getoutputerror()."""
478 478
479 479 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
480 480
481 481 bq = getoutput # alias
482 482
483 483 #-----------------------------------------------------------------------------
484 484 def mutex_opts(dict,ex_op):
485 485 """Check for presence of mutually exclusive keys in a dict.
486 486
487 487 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
488 488 for op1,op2 in ex_op:
489 489 if op1 in dict and op2 in dict:
490 490 raise ValueError,'\n*** ERROR in Arguments *** '\
491 491 'Options '+op1+' and '+op2+' are mutually exclusive.'
492 492
493 493 #-----------------------------------------------------------------------------
494 494 def get_py_filename(name):
495 495 """Return a valid python filename in the current directory.
496 496
497 497 If the given name is not a file, it adds '.py' and searches again.
498 498 Raises IOError with an informative message if the file isn't found."""
499 499
500 500 name = os.path.expanduser(name)
501 501 if not os.path.isfile(name) and not name.endswith('.py'):
502 502 name += '.py'
503 503 if os.path.isfile(name):
504 504 return name
505 505 else:
506 506 raise IOError,'File `%s` not found.' % name
507 507
508 508 #-----------------------------------------------------------------------------
509 509 def filefind(fname,alt_dirs = None):
510 510 """Return the given filename either in the current directory, if it
511 511 exists, or in a specified list of directories.
512 512
513 513 ~ expansion is done on all file and directory names.
514 514
515 515 Upon an unsuccessful search, raise an IOError exception."""
516 516
517 517 if alt_dirs is None:
518 518 try:
519 519 alt_dirs = get_home_dir()
520 520 except HomeDirError:
521 521 alt_dirs = os.getcwd()
522 522 search = [fname] + list_strings(alt_dirs)
523 523 search = map(os.path.expanduser,search)
524 524 #print 'search list for',fname,'list:',search # dbg
525 525 fname = search[0]
526 526 if os.path.isfile(fname):
527 527 return fname
528 528 for direc in search[1:]:
529 529 testname = os.path.join(direc,fname)
530 530 #print 'testname',testname # dbg
531 531 if os.path.isfile(testname):
532 532 return testname
533 533 raise IOError,'File' + `fname` + \
534 534 ' not found in current or supplied directories:' + `alt_dirs`
535 535
536 536 #----------------------------------------------------------------------------
537 537 def file_read(filename):
538 538 """Read a file and close it. Returns the file source."""
539 539 fobj = open(filename,'r');
540 540 source = fobj.read();
541 541 fobj.close()
542 542 return source
543 543
544 544 def file_readlines(filename):
545 545 """Read a file and close it. Returns the file source using readlines()."""
546 546 fobj = open(filename,'r');
547 547 lines = fobj.readlines();
548 548 fobj.close()
549 549 return lines
550 550
551 551 #----------------------------------------------------------------------------
552 552 def target_outdated(target,deps):
553 553 """Determine whether a target is out of date.
554 554
555 555 target_outdated(target,deps) -> 1/0
556 556
557 557 deps: list of filenames which MUST exist.
558 558 target: single filename which may or may not exist.
559 559
560 560 If target doesn't exist or is older than any file listed in deps, return
561 561 true, otherwise return false.
562 562 """
563 563 try:
564 564 target_time = os.path.getmtime(target)
565 565 except os.error:
566 566 return 1
567 567 for dep in deps:
568 568 dep_time = os.path.getmtime(dep)
569 569 if dep_time > target_time:
570 570 #print "For target",target,"Dep failed:",dep # dbg
571 571 #print "times (dep,tar):",dep_time,target_time # dbg
572 572 return 1
573 573 return 0
574 574
575 575 #-----------------------------------------------------------------------------
576 576 def target_update(target,deps,cmd):
577 577 """Update a target with a given command given a list of dependencies.
578 578
579 579 target_update(target,deps,cmd) -> runs cmd if target is outdated.
580 580
581 581 This is just a wrapper around target_outdated() which calls the given
582 582 command if target is outdated."""
583 583
584 584 if target_outdated(target,deps):
585 585 xsys(cmd)
586 586
587 587 #----------------------------------------------------------------------------
588 588 def unquote_ends(istr):
589 589 """Remove a single pair of quotes from the endpoints of a string."""
590 590
591 591 if not istr:
592 592 return istr
593 593 if (istr[0]=="'" and istr[-1]=="'") or \
594 594 (istr[0]=='"' and istr[-1]=='"'):
595 595 return istr[1:-1]
596 596 else:
597 597 return istr
598 598
599 599 #----------------------------------------------------------------------------
600 600 def process_cmdline(argv,names=[],defaults={},usage=''):
601 601 """ Process command-line options and arguments.
602 602
603 603 Arguments:
604 604
605 605 - argv: list of arguments, typically sys.argv.
606 606
607 607 - names: list of option names. See DPyGetOpt docs for details on options
608 608 syntax.
609 609
610 610 - defaults: dict of default values.
611 611
612 612 - usage: optional usage notice to print if a wrong argument is passed.
613 613
614 614 Return a dict of options and a list of free arguments."""
615 615
616 616 getopt = DPyGetOpt.DPyGetOpt()
617 617 getopt.setIgnoreCase(0)
618 618 getopt.parseConfiguration(names)
619 619
620 620 try:
621 621 getopt.processArguments(argv)
622 622 except:
623 623 print usage
624 624 warn(`sys.exc_value`,level=4)
625 625
626 626 defaults.update(getopt.optionValues)
627 627 args = getopt.freeValues
628 628
629 629 return defaults,args
630 630
631 631 #----------------------------------------------------------------------------
632 632 def optstr2types(ostr):
633 633 """Convert a string of option names to a dict of type mappings.
634 634
635 635 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
636 636
637 637 This is used to get the types of all the options in a string formatted
638 638 with the conventions of DPyGetOpt. The 'type' None is used for options
639 639 which are strings (they need no further conversion). This function's main
640 640 use is to get a typemap for use with read_dict().
641 641 """
642 642
643 643 typeconv = {None:'',int:'',float:''}
644 644 typemap = {'s':None,'i':int,'f':float}
645 645 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
646 646
647 647 for w in ostr.split():
648 648 oname,alias,otype = opt_re.match(w).groups()
649 649 if otype == '' or alias == '!': # simple switches are integers too
650 650 otype = 'i'
651 651 typeconv[typemap[otype]] += oname + ' '
652 652 return typeconv
653 653
654 654 #----------------------------------------------------------------------------
655 655 def read_dict(filename,type_conv=None,**opt):
656 656
657 657 """Read a dictionary of key=value pairs from an input file, optionally
658 658 performing conversions on the resulting values.
659 659
660 660 read_dict(filename,type_conv,**opt) -> dict
661 661
662 662 Only one value per line is accepted, the format should be
663 663 # optional comments are ignored
664 664 key value\n
665 665
666 666 Args:
667 667
668 668 - type_conv: A dictionary specifying which keys need to be converted to
669 669 which types. By default all keys are read as strings. This dictionary
670 670 should have as its keys valid conversion functions for strings
671 671 (int,long,float,complex, or your own). The value for each key
672 672 (converter) should be a whitespace separated string containing the names
673 673 of all the entries in the file to be converted using that function. For
674 674 keys to be left alone, use None as the conversion function (only needed
675 675 with purge=1, see below).
676 676
677 677 - opt: dictionary with extra options as below (default in parens)
678 678
679 679 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
680 680 of the dictionary to be returned. If purge is going to be used, the
681 681 set of keys to be left as strings also has to be explicitly specified
682 682 using the (non-existent) conversion function None.
683 683
684 684 fs(None): field separator. This is the key/value separator to be used
685 685 when parsing the file. The None default means any whitespace [behavior
686 686 of string.split()].
687 687
688 688 strip(0): if 1, strip string values of leading/trailinig whitespace.
689 689
690 690 warn(1): warning level if requested keys are not found in file.
691 691 - 0: silently ignore.
692 692 - 1: inform but proceed.
693 693 - 2: raise KeyError exception.
694 694
695 695 no_empty(0): if 1, remove keys with whitespace strings as a value.
696 696
697 697 unique([]): list of keys (or space separated string) which can't be
698 698 repeated. If one such key is found in the file, each new instance
699 699 overwrites the previous one. For keys not listed here, the behavior is
700 700 to make a list of all appearances.
701 701
702 702 Example:
703 703 If the input file test.ini has:
704 704 i 3
705 705 x 4.5
706 706 y 5.5
707 707 s hi ho
708 708 Then:
709 709
710 710 >>> type_conv={int:'i',float:'x',None:'s'}
711 711 >>> read_dict('test.ini')
712 712 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
713 713 >>> read_dict('test.ini',type_conv)
714 714 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
715 715 >>> read_dict('test.ini',type_conv,purge=1)
716 716 {'i': 3, 's': 'hi ho', 'x': 4.5}
717 717 """
718 718
719 719 # starting config
720 720 opt.setdefault('purge',0)
721 721 opt.setdefault('fs',None) # field sep defaults to any whitespace
722 722 opt.setdefault('strip',0)
723 723 opt.setdefault('warn',1)
724 724 opt.setdefault('no_empty',0)
725 725 opt.setdefault('unique','')
726 726 if type(opt['unique']) in StringTypes:
727 727 unique_keys = qw(opt['unique'])
728 728 elif type(opt['unique']) in (types.TupleType,types.ListType):
729 729 unique_keys = opt['unique']
730 730 else:
731 731 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
732 732
733 733 dict = {}
734 734 # first read in table of values as strings
735 735 file = open(filename,'r')
736 736 for line in file.readlines():
737 737 line = line.strip()
738 738 if len(line) and line[0]=='#': continue
739 739 if len(line)>0:
740 740 lsplit = line.split(opt['fs'],1)
741 741 try:
742 742 key,val = lsplit
743 743 except ValueError:
744 744 key,val = lsplit[0],''
745 745 key = key.strip()
746 746 if opt['strip']: val = val.strip()
747 747 if val == "''" or val == '""': val = ''
748 748 if opt['no_empty'] and (val=='' or val.isspace()):
749 749 continue
750 750 # if a key is found more than once in the file, build a list
751 751 # unless it's in the 'unique' list. In that case, last found in file
752 752 # takes precedence. User beware.
753 753 try:
754 754 if dict[key] and key in unique_keys:
755 755 dict[key] = val
756 756 elif type(dict[key]) is types.ListType:
757 757 dict[key].append(val)
758 758 else:
759 759 dict[key] = [dict[key],val]
760 760 except KeyError:
761 761 dict[key] = val
762 762 # purge if requested
763 763 if opt['purge']:
764 764 accepted_keys = qwflat(type_conv.values())
765 765 for key in dict.keys():
766 766 if key in accepted_keys: continue
767 767 del(dict[key])
768 768 # now convert if requested
769 769 if type_conv==None: return dict
770 770 conversions = type_conv.keys()
771 771 try: conversions.remove(None)
772 772 except: pass
773 773 for convert in conversions:
774 774 for val in qw(type_conv[convert]):
775 775 try:
776 776 dict[val] = convert(dict[val])
777 777 except KeyError,e:
778 778 if opt['warn'] == 0:
779 779 pass
780 780 elif opt['warn'] == 1:
781 781 print >>sys.stderr, 'Warning: key',val,\
782 782 'not found in file',filename
783 783 elif opt['warn'] == 2:
784 784 raise KeyError,e
785 785 else:
786 786 raise ValueError,'Warning level must be 0,1 or 2'
787 787
788 788 return dict
789 789
790 790 #----------------------------------------------------------------------------
791 791 def flag_calls(func):
792 792 """Wrap a function to detect and flag when it gets called.
793 793
794 794 This is a decorator which takes a function and wraps it in a function with
795 795 a 'called' attribute. wrapper.called is initialized to False.
796 796
797 797 The wrapper.called attribute is set to False right before each call to the
798 798 wrapped function, so if the call fails it remains False. After the call
799 799 completes, wrapper.called is set to True and the output is returned.
800 800
801 801 Testing for truth in wrapper.called allows you to determine if a call to
802 802 func() was attempted and succeeded."""
803 803
804 804 def wrapper(*args,**kw):
805 805 wrapper.called = False
806 806 out = func(*args,**kw)
807 807 wrapper.called = True
808 808 return out
809 809
810 810 wrapper.called = False
811 811 wrapper.__doc__ = func.__doc__
812 812 return wrapper
813 813
814 814 #----------------------------------------------------------------------------
815 815 def dhook_wrap(func,*a,**k):
816 816 """Wrap a function call in a sys.displayhook controller.
817 817
818 818 Returns a wrapper around func which calls func, with all its arguments and
819 819 keywords unmodified, using the default sys.displayhook. Since IPython
820 820 modifies sys.displayhook, it breaks the behavior of certain systems that
821 821 rely on the default behavior, notably doctest.
822 822 """
823 823
824 824 def f(*a,**k):
825 825
826 826 dhook_s = sys.displayhook
827 827 sys.displayhook = sys.__displayhook__
828 828 try:
829 829 out = func(*a,**k)
830 830 finally:
831 831 sys.displayhook = dhook_s
832 832
833 833 return out
834 834
835 835 f.__doc__ = func.__doc__
836 836 return f
837 837
838 838 #----------------------------------------------------------------------------
839 839 class HomeDirError(Error):
840 840 pass
841 841
842 842 def get_home_dir():
843 843 """Return the closest possible equivalent to a 'home' directory.
844 844
845 845 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
846 846
847 847 Currently only Posix and NT are implemented, a HomeDirError exception is
848 848 raised for all other OSes. """
849 849
850 850 isdir = os.path.isdir
851 851 env = os.environ
852 852
853 853 # first, check py2exe distribution root directory for _ipython.
854 854 # This overrides all. Normally does not exist.
855 855
856 856 if '\\library.zip\\' in IPython.__file__.lower():
857 857 root, rest = IPython.__file__.lower().split('library.zip')
858 858 if isdir(root + '_ipython'):
859 859 os.environ["IPYKITROOT"] = root.rstrip('\\')
860 860 return root
861 861
862 862 try:
863 863 homedir = env['HOME']
864 864 if not isdir(homedir):
865 865 # in case a user stuck some string which does NOT resolve to a
866 866 # valid path, it's as good as if we hadn't foud it
867 867 raise KeyError
868 868 return homedir
869 869 except KeyError:
870 870 if os.name == 'posix':
871 871 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
872 872 elif os.name == 'nt':
873 873 # For some strange reason, win9x returns 'nt' for os.name.
874 874 try:
875 875 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
876 876 if not isdir(homedir):
877 877 homedir = os.path.join(env['USERPROFILE'])
878 878 if not isdir(homedir):
879 879 raise HomeDirError
880 880 return homedir
881 881 except:
882 882 try:
883 883 # Use the registry to get the 'My Documents' folder.
884 884 import _winreg as wreg
885 885 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
886 886 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
887 887 homedir = wreg.QueryValueEx(key,'Personal')[0]
888 888 key.Close()
889 889 if not isdir(homedir):
890 890 e = ('Invalid "Personal" folder registry key '
891 891 'typically "My Documents".\n'
892 892 'Value: %s\n'
893 893 'This is not a valid directory on your system.' %
894 894 homedir)
895 895 raise HomeDirError(e)
896 896 return homedir
897 897 except HomeDirError:
898 898 raise
899 899 except:
900 900 return 'C:\\'
901 901 elif os.name == 'dos':
902 902 # Desperate, may do absurd things in classic MacOS. May work under DOS.
903 903 return 'C:\\'
904 904 else:
905 905 raise HomeDirError,'support for your operating system not implemented.'
906 906
907 907 #****************************************************************************
908 908 # strings and text
909 909
910 910 class LSString(str):
911 911 """String derivative with a special access attributes.
912 912
913 913 These are normal strings, but with the special attributes:
914 914
915 915 .l (or .list) : value as list (split on newlines).
916 916 .n (or .nlstr): original value (the string itself).
917 917 .s (or .spstr): value as whitespace-separated string.
918 918 .p (or .paths): list of path objects
919 919
920 920 Any values which require transformations are computed only once and
921 921 cached.
922 922
923 923 Such strings are very useful to efficiently interact with the shell, which
924 924 typically only understands whitespace-separated options for commands."""
925 925
926 926 def get_list(self):
927 927 try:
928 928 return self.__list
929 929 except AttributeError:
930 930 self.__list = self.split('\n')
931 931 return self.__list
932 932
933 933 l = list = property(get_list)
934 934
935 935 def get_spstr(self):
936 936 try:
937 937 return self.__spstr
938 938 except AttributeError:
939 939 self.__spstr = self.replace('\n',' ')
940 940 return self.__spstr
941 941
942 942 s = spstr = property(get_spstr)
943 943
944 944 def get_nlstr(self):
945 945 return self
946 946
947 947 n = nlstr = property(get_nlstr)
948 948
949 949 def get_paths(self):
950 950 try:
951 951 return self.__paths
952 952 except AttributeError:
953 953 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
954 954 return self.__paths
955 955
956 956 p = paths = property(get_paths)
957 957
958 958 def print_lsstring(arg):
959 959 """ Prettier (non-repr-like) and more informative printer for LSString """
960 960 print "LSString (.p, .n, .l, .s available). Value:"
961 961 print arg
962 962
963 963 print_lsstring = result_display.when_type(LSString)(print_lsstring)
964 964
965 965 #----------------------------------------------------------------------------
966 966 class SList(list):
967 967 """List derivative with a special access attributes.
968 968
969 969 These are normal lists, but with the special attributes:
970 970
971 971 .l (or .list) : value as list (the list itself).
972 972 .n (or .nlstr): value as a string, joined on newlines.
973 973 .s (or .spstr): value as a string, joined on spaces.
974 974 .p (or .paths): list of path objects
975 975
976 976 Any values which require transformations are computed only once and
977 977 cached."""
978 978
979 979 def get_list(self):
980 980 return self
981 981
982 982 l = list = property(get_list)
983 983
984 984 def get_spstr(self):
985 985 try:
986 986 return self.__spstr
987 987 except AttributeError:
988 988 self.__spstr = ' '.join(self)
989 989 return self.__spstr
990 990
991 991 s = spstr = property(get_spstr)
992 992
993 993 def get_nlstr(self):
994 994 try:
995 995 return self.__nlstr
996 996 except AttributeError:
997 997 self.__nlstr = '\n'.join(self)
998 998 return self.__nlstr
999 999
1000 1000 n = nlstr = property(get_nlstr)
1001 1001
1002 1002 def get_paths(self):
1003 1003 try:
1004 1004 return self.__paths
1005 1005 except AttributeError:
1006 1006 self.__paths = [path(p) for p in self if os.path.exists(p)]
1007 1007 return self.__paths
1008 1008
1009 1009 p = paths = property(get_paths)
1010 1010
1011 def grep(self, pattern, prune = False):
1012 """ Return all strings matching 'pattern' (a regex or callable)
1013
1014 This is case-insensitive. If prune is true, return all items
1015 NOT matching the pattern.
1016 """
1017 if isinstance(pattern, basestring):
1018 pred = lambda x : re.search(pattern, x, re.IGNORECASE)
1019 else:
1020 pred = pattern
1021 if not prune:
1022 return SList([el for el in self if pred(el)])
1023 else:
1024 return SList([el for el in self if not pred(el)])
1025
1011 1026 def print_slist(arg):
1012 1027 """ Prettier (non-repr-like) and more informative printer for SList """
1013 print "SList (.p, .n, .l, .s available). Value:"
1028 print "SList (.p, .n, .l, .s, .grep() available). Value:"
1014 1029 nlprint(arg)
1015 1030
1016 1031 print_slist = result_display.when_type(SList)(print_slist)
1017 1032
1018 1033
1019 1034
1020 1035 #----------------------------------------------------------------------------
1021 1036 def esc_quotes(strng):
1022 1037 """Return the input string with single and double quotes escaped out"""
1023 1038
1024 1039 return strng.replace('"','\\"').replace("'","\\'")
1025 1040
1026 1041 #----------------------------------------------------------------------------
1027 1042 def make_quoted_expr(s):
1028 1043 """Return string s in appropriate quotes, using raw string if possible.
1029 1044
1030 1045 Effectively this turns string: cd \ao\ao\
1031 1046 to: r"cd \ao\ao\_"[:-1]
1032 1047
1033 1048 Note the use of raw string and padding at the end to allow trailing backslash.
1034 1049
1035 1050 """
1036 1051
1037 1052 tail = ''
1038 1053 tailpadding = ''
1039 1054 raw = ''
1040 1055 if "\\" in s:
1041 1056 raw = 'r'
1042 1057 if s.endswith('\\'):
1043 1058 tail = '[:-1]'
1044 1059 tailpadding = '_'
1045 1060 if '"' not in s:
1046 1061 quote = '"'
1047 1062 elif "'" not in s:
1048 1063 quote = "'"
1049 1064 elif '"""' not in s and not s.endswith('"'):
1050 1065 quote = '"""'
1051 1066 elif "'''" not in s and not s.endswith("'"):
1052 1067 quote = "'''"
1053 1068 else:
1054 1069 # give up, backslash-escaped string will do
1055 1070 return '"%s"' % esc_quotes(s)
1056 1071 res = itpl("$raw$quote$s$tailpadding$quote$tail")
1057 1072 return res
1058 1073
1059 1074
1060 1075 #----------------------------------------------------------------------------
1061 1076 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
1062 1077 """Take multiple lines of input.
1063 1078
1064 1079 A list with each line of input as a separate element is returned when a
1065 1080 termination string is entered (defaults to a single '.'). Input can also
1066 1081 terminate via EOF (^D in Unix, ^Z-RET in Windows).
1067 1082
1068 1083 Lines of input which end in \\ are joined into single entries (and a
1069 1084 secondary continuation prompt is issued as long as the user terminates
1070 1085 lines with \\). This allows entering very long strings which are still
1071 1086 meant to be treated as single entities.
1072 1087 """
1073 1088
1074 1089 try:
1075 1090 if header:
1076 1091 header += '\n'
1077 1092 lines = [raw_input(header + ps1)]
1078 1093 except EOFError:
1079 1094 return []
1080 1095 terminate = [terminate_str]
1081 1096 try:
1082 1097 while lines[-1:] != terminate:
1083 1098 new_line = raw_input(ps1)
1084 1099 while new_line.endswith('\\'):
1085 1100 new_line = new_line[:-1] + raw_input(ps2)
1086 1101 lines.append(new_line)
1087 1102
1088 1103 return lines[:-1] # don't return the termination command
1089 1104 except EOFError:
1090 1105 print
1091 1106 return lines
1092 1107
1093 1108 #----------------------------------------------------------------------------
1094 1109 def raw_input_ext(prompt='', ps2='... '):
1095 1110 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1096 1111
1097 1112 line = raw_input(prompt)
1098 1113 while line.endswith('\\'):
1099 1114 line = line[:-1] + raw_input(ps2)
1100 1115 return line
1101 1116
1102 1117 #----------------------------------------------------------------------------
1103 1118 def ask_yes_no(prompt,default=None):
1104 1119 """Asks a question and returns a boolean (y/n) answer.
1105 1120
1106 1121 If default is given (one of 'y','n'), it is used if the user input is
1107 1122 empty. Otherwise the question is repeated until an answer is given.
1108 1123
1109 1124 An EOF is treated as the default answer. If there is no default, an
1110 1125 exception is raised to prevent infinite loops.
1111 1126
1112 1127 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1113 1128
1114 1129 answers = {'y':True,'n':False,'yes':True,'no':False}
1115 1130 ans = None
1116 1131 while ans not in answers.keys():
1117 1132 try:
1118 1133 ans = raw_input(prompt+' ').lower()
1119 1134 if not ans: # response was an empty string
1120 1135 ans = default
1121 1136 except KeyboardInterrupt:
1122 1137 pass
1123 1138 except EOFError:
1124 1139 if default in answers.keys():
1125 1140 ans = default
1126 1141 print
1127 1142 else:
1128 1143 raise
1129 1144
1130 1145 return answers[ans]
1131 1146
1132 1147 #----------------------------------------------------------------------------
1133 1148 def marquee(txt='',width=78,mark='*'):
1134 1149 """Return the input string centered in a 'marquee'."""
1135 1150 if not txt:
1136 1151 return (mark*width)[:width]
1137 1152 nmark = (width-len(txt)-2)/len(mark)/2
1138 1153 if nmark < 0: nmark =0
1139 1154 marks = mark*nmark
1140 1155 return '%s %s %s' % (marks,txt,marks)
1141 1156
1142 1157 #----------------------------------------------------------------------------
1143 1158 class EvalDict:
1144 1159 """
1145 1160 Emulate a dict which evaluates its contents in the caller's frame.
1146 1161
1147 1162 Usage:
1148 1163 >>>number = 19
1149 1164 >>>text = "python"
1150 1165 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1151 1166 """
1152 1167
1153 1168 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1154 1169 # modified (shorter) version of:
1155 1170 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1156 1171 # Skip Montanaro (skip@pobox.com).
1157 1172
1158 1173 def __getitem__(self, name):
1159 1174 frame = sys._getframe(1)
1160 1175 return eval(name, frame.f_globals, frame.f_locals)
1161 1176
1162 1177 EvalString = EvalDict # for backwards compatibility
1163 1178 #----------------------------------------------------------------------------
1164 1179 def qw(words,flat=0,sep=None,maxsplit=-1):
1165 1180 """Similar to Perl's qw() operator, but with some more options.
1166 1181
1167 1182 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1168 1183
1169 1184 words can also be a list itself, and with flat=1, the output will be
1170 1185 recursively flattened. Examples:
1171 1186
1172 1187 >>> qw('1 2')
1173 1188 ['1', '2']
1174 1189 >>> qw(['a b','1 2',['m n','p q']])
1175 1190 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1176 1191 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1177 1192 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1178 1193
1179 1194 if type(words) in StringTypes:
1180 1195 return [word.strip() for word in words.split(sep,maxsplit)
1181 1196 if word and not word.isspace() ]
1182 1197 if flat:
1183 1198 return flatten(map(qw,words,[1]*len(words)))
1184 1199 return map(qw,words)
1185 1200
1186 1201 #----------------------------------------------------------------------------
1187 1202 def qwflat(words,sep=None,maxsplit=-1):
1188 1203 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1189 1204 return qw(words,1,sep,maxsplit)
1190 1205
1191 1206 #----------------------------------------------------------------------------
1192 1207 def qw_lol(indata):
1193 1208 """qw_lol('a b') -> [['a','b']],
1194 1209 otherwise it's just a call to qw().
1195 1210
1196 1211 We need this to make sure the modules_some keys *always* end up as a
1197 1212 list of lists."""
1198 1213
1199 1214 if type(indata) in StringTypes:
1200 1215 return [qw(indata)]
1201 1216 else:
1202 1217 return qw(indata)
1203 1218
1204 1219 #-----------------------------------------------------------------------------
1205 1220 def list_strings(arg):
1206 1221 """Always return a list of strings, given a string or list of strings
1207 1222 as input."""
1208 1223
1209 1224 if type(arg) in StringTypes: return [arg]
1210 1225 else: return arg
1211 1226
1212 1227 #----------------------------------------------------------------------------
1213 1228 def grep(pat,list,case=1):
1214 1229 """Simple minded grep-like function.
1215 1230 grep(pat,list) returns occurrences of pat in list, None on failure.
1216 1231
1217 1232 It only does simple string matching, with no support for regexps. Use the
1218 1233 option case=0 for case-insensitive matching."""
1219 1234
1220 1235 # This is pretty crude. At least it should implement copying only references
1221 1236 # to the original data in case it's big. Now it copies the data for output.
1222 1237 out=[]
1223 1238 if case:
1224 1239 for term in list:
1225 1240 if term.find(pat)>-1: out.append(term)
1226 1241 else:
1227 1242 lpat=pat.lower()
1228 1243 for term in list:
1229 1244 if term.lower().find(lpat)>-1: out.append(term)
1230 1245
1231 1246 if len(out): return out
1232 1247 else: return None
1233 1248
1234 1249 #----------------------------------------------------------------------------
1235 1250 def dgrep(pat,*opts):
1236 1251 """Return grep() on dir()+dir(__builtins__).
1237 1252
1238 1253 A very common use of grep() when working interactively."""
1239 1254
1240 1255 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1241 1256
1242 1257 #----------------------------------------------------------------------------
1243 1258 def idgrep(pat):
1244 1259 """Case-insensitive dgrep()"""
1245 1260
1246 1261 return dgrep(pat,0)
1247 1262
1248 1263 #----------------------------------------------------------------------------
1249 1264 def igrep(pat,list):
1250 1265 """Synonym for case-insensitive grep."""
1251 1266
1252 1267 return grep(pat,list,case=0)
1253 1268
1254 1269 #----------------------------------------------------------------------------
1255 1270 def indent(str,nspaces=4,ntabs=0):
1256 1271 """Indent a string a given number of spaces or tabstops.
1257 1272
1258 1273 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1259 1274 """
1260 1275 if str is None:
1261 1276 return
1262 1277 ind = '\t'*ntabs+' '*nspaces
1263 1278 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1264 1279 if outstr.endswith(os.linesep+ind):
1265 1280 return outstr[:-len(ind)]
1266 1281 else:
1267 1282 return outstr
1268 1283
1269 1284 #-----------------------------------------------------------------------------
1270 1285 def native_line_ends(filename,backup=1):
1271 1286 """Convert (in-place) a file to line-ends native to the current OS.
1272 1287
1273 1288 If the optional backup argument is given as false, no backup of the
1274 1289 original file is left. """
1275 1290
1276 1291 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1277 1292
1278 1293 bak_filename = filename + backup_suffixes[os.name]
1279 1294
1280 1295 original = open(filename).read()
1281 1296 shutil.copy2(filename,bak_filename)
1282 1297 try:
1283 1298 new = open(filename,'wb')
1284 1299 new.write(os.linesep.join(original.splitlines()))
1285 1300 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1286 1301 new.close()
1287 1302 except:
1288 1303 os.rename(bak_filename,filename)
1289 1304 if not backup:
1290 1305 try:
1291 1306 os.remove(bak_filename)
1292 1307 except:
1293 1308 pass
1294 1309
1295 1310 #----------------------------------------------------------------------------
1296 1311 def get_pager_cmd(pager_cmd = None):
1297 1312 """Return a pager command.
1298 1313
1299 1314 Makes some attempts at finding an OS-correct one."""
1300 1315
1301 1316 if os.name == 'posix':
1302 1317 default_pager_cmd = 'less -r' # -r for color control sequences
1303 1318 elif os.name in ['nt','dos']:
1304 1319 default_pager_cmd = 'type'
1305 1320
1306 1321 if pager_cmd is None:
1307 1322 try:
1308 1323 pager_cmd = os.environ['PAGER']
1309 1324 except:
1310 1325 pager_cmd = default_pager_cmd
1311 1326 return pager_cmd
1312 1327
1313 1328 #-----------------------------------------------------------------------------
1314 1329 def get_pager_start(pager,start):
1315 1330 """Return the string for paging files with an offset.
1316 1331
1317 1332 This is the '+N' argument which less and more (under Unix) accept.
1318 1333 """
1319 1334
1320 1335 if pager in ['less','more']:
1321 1336 if start:
1322 1337 start_string = '+' + str(start)
1323 1338 else:
1324 1339 start_string = ''
1325 1340 else:
1326 1341 start_string = ''
1327 1342 return start_string
1328 1343
1329 1344 #----------------------------------------------------------------------------
1330 1345 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1331 1346 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1332 1347 import msvcrt
1333 1348 def page_more():
1334 1349 """ Smart pausing between pages
1335 1350
1336 1351 @return: True if need print more lines, False if quit
1337 1352 """
1338 1353 Term.cout.write('---Return to continue, q to quit--- ')
1339 1354 ans = msvcrt.getch()
1340 1355 if ans in ("q", "Q"):
1341 1356 result = False
1342 1357 else:
1343 1358 result = True
1344 1359 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1345 1360 return result
1346 1361 else:
1347 1362 def page_more():
1348 1363 ans = raw_input('---Return to continue, q to quit--- ')
1349 1364 if ans.lower().startswith('q'):
1350 1365 return False
1351 1366 else:
1352 1367 return True
1353 1368
1354 1369 esc_re = re.compile(r"(\x1b[^m]+m)")
1355 1370
1356 1371 def page_dumb(strng,start=0,screen_lines=25):
1357 1372 """Very dumb 'pager' in Python, for when nothing else works.
1358 1373
1359 1374 Only moves forward, same interface as page(), except for pager_cmd and
1360 1375 mode."""
1361 1376
1362 1377 out_ln = strng.splitlines()[start:]
1363 1378 screens = chop(out_ln,screen_lines-1)
1364 1379 if len(screens) == 1:
1365 1380 print >>Term.cout, os.linesep.join(screens[0])
1366 1381 else:
1367 1382 last_escape = ""
1368 1383 for scr in screens[0:-1]:
1369 1384 hunk = os.linesep.join(scr)
1370 1385 print >>Term.cout, last_escape + hunk
1371 1386 if not page_more():
1372 1387 return
1373 1388 esc_list = esc_re.findall(hunk)
1374 1389 if len(esc_list) > 0:
1375 1390 last_escape = esc_list[-1]
1376 1391 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1377 1392
1378 1393 #----------------------------------------------------------------------------
1379 1394 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1380 1395 """Print a string, piping through a pager after a certain length.
1381 1396
1382 1397 The screen_lines parameter specifies the number of *usable* lines of your
1383 1398 terminal screen (total lines minus lines you need to reserve to show other
1384 1399 information).
1385 1400
1386 1401 If you set screen_lines to a number <=0, page() will try to auto-determine
1387 1402 your screen size and will only use up to (screen_size+screen_lines) for
1388 1403 printing, paging after that. That is, if you want auto-detection but need
1389 1404 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1390 1405 auto-detection without any lines reserved simply use screen_lines = 0.
1391 1406
1392 1407 If a string won't fit in the allowed lines, it is sent through the
1393 1408 specified pager command. If none given, look for PAGER in the environment,
1394 1409 and ultimately default to less.
1395 1410
1396 1411 If no system pager works, the string is sent through a 'dumb pager'
1397 1412 written in python, very simplistic.
1398 1413 """
1399 1414
1400 1415 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1401 1416 TERM = os.environ.get('TERM','dumb')
1402 1417 if TERM in ['dumb','emacs'] and os.name != 'nt':
1403 1418 print strng
1404 1419 return
1405 1420 # chop off the topmost part of the string we don't want to see
1406 1421 str_lines = strng.split(os.linesep)[start:]
1407 1422 str_toprint = os.linesep.join(str_lines)
1408 1423 num_newlines = len(str_lines)
1409 1424 len_str = len(str_toprint)
1410 1425
1411 1426 # Dumb heuristics to guesstimate number of on-screen lines the string
1412 1427 # takes. Very basic, but good enough for docstrings in reasonable
1413 1428 # terminals. If someone later feels like refining it, it's not hard.
1414 1429 numlines = max(num_newlines,int(len_str/80)+1)
1415 1430
1416 1431 if os.name == "nt":
1417 1432 screen_lines_def = get_console_size(defaulty=25)[1]
1418 1433 else:
1419 1434 screen_lines_def = 25 # default value if we can't auto-determine
1420 1435
1421 1436 # auto-determine screen size
1422 1437 if screen_lines <= 0:
1423 1438 if TERM=='xterm':
1424 1439 try:
1425 1440 import curses
1426 1441 if hasattr(curses,'initscr'):
1427 1442 use_curses = 1
1428 1443 else:
1429 1444 use_curses = 0
1430 1445 except ImportError:
1431 1446 use_curses = 0
1432 1447 else:
1433 1448 # curses causes problems on many terminals other than xterm.
1434 1449 use_curses = 0
1435 1450 if use_curses:
1436 1451 scr = curses.initscr()
1437 1452 screen_lines_real,screen_cols = scr.getmaxyx()
1438 1453 curses.endwin()
1439 1454 screen_lines += screen_lines_real
1440 1455 #print '***Screen size:',screen_lines_real,'lines x',\
1441 1456 #screen_cols,'columns.' # dbg
1442 1457 else:
1443 1458 screen_lines += screen_lines_def
1444 1459
1445 1460 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1446 1461 if numlines <= screen_lines :
1447 1462 #print '*** normal print' # dbg
1448 1463 print >>Term.cout, str_toprint
1449 1464 else:
1450 1465 # Try to open pager and default to internal one if that fails.
1451 1466 # All failure modes are tagged as 'retval=1', to match the return
1452 1467 # value of a failed system command. If any intermediate attempt
1453 1468 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1454 1469 pager_cmd = get_pager_cmd(pager_cmd)
1455 1470 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1456 1471 if os.name == 'nt':
1457 1472 if pager_cmd.startswith('type'):
1458 1473 # The default WinXP 'type' command is failing on complex strings.
1459 1474 retval = 1
1460 1475 else:
1461 1476 tmpname = tempfile.mktemp('.txt')
1462 1477 tmpfile = file(tmpname,'wt')
1463 1478 tmpfile.write(strng)
1464 1479 tmpfile.close()
1465 1480 cmd = "%s < %s" % (pager_cmd,tmpname)
1466 1481 if os.system(cmd):
1467 1482 retval = 1
1468 1483 else:
1469 1484 retval = None
1470 1485 os.remove(tmpname)
1471 1486 else:
1472 1487 try:
1473 1488 retval = None
1474 1489 # if I use popen4, things hang. No idea why.
1475 1490 #pager,shell_out = os.popen4(pager_cmd)
1476 1491 pager = os.popen(pager_cmd,'w')
1477 1492 pager.write(strng)
1478 1493 pager.close()
1479 1494 retval = pager.close() # success returns None
1480 1495 except IOError,msg: # broken pipe when user quits
1481 1496 if msg.args == (32,'Broken pipe'):
1482 1497 retval = None
1483 1498 else:
1484 1499 retval = 1
1485 1500 except OSError:
1486 1501 # Other strange problems, sometimes seen in Win2k/cygwin
1487 1502 retval = 1
1488 1503 if retval is not None:
1489 1504 page_dumb(strng,screen_lines=screen_lines)
1490 1505
1491 1506 #----------------------------------------------------------------------------
1492 1507 def page_file(fname,start = 0, pager_cmd = None):
1493 1508 """Page a file, using an optional pager command and starting line.
1494 1509 """
1495 1510
1496 1511 pager_cmd = get_pager_cmd(pager_cmd)
1497 1512 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1498 1513
1499 1514 try:
1500 1515 if os.environ['TERM'] in ['emacs','dumb']:
1501 1516 raise EnvironmentError
1502 1517 xsys(pager_cmd + ' ' + fname)
1503 1518 except:
1504 1519 try:
1505 1520 if start > 0:
1506 1521 start -= 1
1507 1522 page(open(fname).read(),start)
1508 1523 except:
1509 1524 print 'Unable to show file',`fname`
1510 1525
1511 1526 #----------------------------------------------------------------------------
1512 1527 def snip_print(str,width = 75,print_full = 0,header = ''):
1513 1528 """Print a string snipping the midsection to fit in width.
1514 1529
1515 1530 print_full: mode control:
1516 1531 - 0: only snip long strings
1517 1532 - 1: send to page() directly.
1518 1533 - 2: snip long strings and ask for full length viewing with page()
1519 1534 Return 1 if snipping was necessary, 0 otherwise."""
1520 1535
1521 1536 if print_full == 1:
1522 1537 page(header+str)
1523 1538 return 0
1524 1539
1525 1540 print header,
1526 1541 if len(str) < width:
1527 1542 print str
1528 1543 snip = 0
1529 1544 else:
1530 1545 whalf = int((width -5)/2)
1531 1546 print str[:whalf] + ' <...> ' + str[-whalf:]
1532 1547 snip = 1
1533 1548 if snip and print_full == 2:
1534 1549 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1535 1550 page(str)
1536 1551 return snip
1537 1552
1538 1553 #****************************************************************************
1539 1554 # lists, dicts and structures
1540 1555
1541 1556 def belong(candidates,checklist):
1542 1557 """Check whether a list of items appear in a given list of options.
1543 1558
1544 1559 Returns a list of 1 and 0, one for each candidate given."""
1545 1560
1546 1561 return [x in checklist for x in candidates]
1547 1562
1548 1563 #----------------------------------------------------------------------------
1549 1564 def uniq_stable(elems):
1550 1565 """uniq_stable(elems) -> list
1551 1566
1552 1567 Return from an iterable, a list of all the unique elements in the input,
1553 1568 but maintaining the order in which they first appear.
1554 1569
1555 1570 A naive solution to this problem which just makes a dictionary with the
1556 1571 elements as keys fails to respect the stability condition, since
1557 1572 dictionaries are unsorted by nature.
1558 1573
1559 1574 Note: All elements in the input must be valid dictionary keys for this
1560 1575 routine to work, as it internally uses a dictionary for efficiency
1561 1576 reasons."""
1562 1577
1563 1578 unique = []
1564 1579 unique_dict = {}
1565 1580 for nn in elems:
1566 1581 if nn not in unique_dict:
1567 1582 unique.append(nn)
1568 1583 unique_dict[nn] = None
1569 1584 return unique
1570 1585
1571 1586 #----------------------------------------------------------------------------
1572 1587 class NLprinter:
1573 1588 """Print an arbitrarily nested list, indicating index numbers.
1574 1589
1575 1590 An instance of this class called nlprint is available and callable as a
1576 1591 function.
1577 1592
1578 1593 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1579 1594 and using 'sep' to separate the index from the value. """
1580 1595
1581 1596 def __init__(self):
1582 1597 self.depth = 0
1583 1598
1584 1599 def __call__(self,lst,pos='',**kw):
1585 1600 """Prints the nested list numbering levels."""
1586 1601 kw.setdefault('indent',' ')
1587 1602 kw.setdefault('sep',': ')
1588 1603 kw.setdefault('start',0)
1589 1604 kw.setdefault('stop',len(lst))
1590 1605 # we need to remove start and stop from kw so they don't propagate
1591 1606 # into a recursive call for a nested list.
1592 1607 start = kw['start']; del kw['start']
1593 1608 stop = kw['stop']; del kw['stop']
1594 1609 if self.depth == 0 and 'header' in kw.keys():
1595 1610 print kw['header']
1596 1611
1597 1612 for idx in range(start,stop):
1598 1613 elem = lst[idx]
1599 1614 if type(elem)==type([]):
1600 1615 self.depth += 1
1601 1616 self.__call__(elem,itpl('$pos$idx,'),**kw)
1602 1617 self.depth -= 1
1603 1618 else:
1604 1619 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1605 1620
1606 1621 nlprint = NLprinter()
1607 1622 #----------------------------------------------------------------------------
1608 1623 def all_belong(candidates,checklist):
1609 1624 """Check whether a list of items ALL appear in a given list of options.
1610 1625
1611 1626 Returns a single 1 or 0 value."""
1612 1627
1613 1628 return 1-(0 in [x in checklist for x in candidates])
1614 1629
1615 1630 #----------------------------------------------------------------------------
1616 1631 def sort_compare(lst1,lst2,inplace = 1):
1617 1632 """Sort and compare two lists.
1618 1633
1619 1634 By default it does it in place, thus modifying the lists. Use inplace = 0
1620 1635 to avoid that (at the cost of temporary copy creation)."""
1621 1636 if not inplace:
1622 1637 lst1 = lst1[:]
1623 1638 lst2 = lst2[:]
1624 1639 lst1.sort(); lst2.sort()
1625 1640 return lst1 == lst2
1626 1641
1627 1642 #----------------------------------------------------------------------------
1628 1643 def mkdict(**kwargs):
1629 1644 """Return a dict from a keyword list.
1630 1645
1631 1646 It's just syntactic sugar for making ditcionary creation more convenient:
1632 1647 # the standard way
1633 1648 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1634 1649 # a cleaner way
1635 1650 >>>data = dict(red=1, green=2, blue=3)
1636 1651
1637 1652 If you need more than this, look at the Struct() class."""
1638 1653
1639 1654 return kwargs
1640 1655
1641 1656 #----------------------------------------------------------------------------
1642 1657 def list2dict(lst):
1643 1658 """Takes a list of (key,value) pairs and turns it into a dict."""
1644 1659
1645 1660 dic = {}
1646 1661 for k,v in lst: dic[k] = v
1647 1662 return dic
1648 1663
1649 1664 #----------------------------------------------------------------------------
1650 1665 def list2dict2(lst,default=''):
1651 1666 """Takes a list and turns it into a dict.
1652 1667 Much slower than list2dict, but more versatile. This version can take
1653 1668 lists with sublists of arbitrary length (including sclars)."""
1654 1669
1655 1670 dic = {}
1656 1671 for elem in lst:
1657 1672 if type(elem) in (types.ListType,types.TupleType):
1658 1673 size = len(elem)
1659 1674 if size == 0:
1660 1675 pass
1661 1676 elif size == 1:
1662 1677 dic[elem] = default
1663 1678 else:
1664 1679 k,v = elem[0], elem[1:]
1665 1680 if len(v) == 1: v = v[0]
1666 1681 dic[k] = v
1667 1682 else:
1668 1683 dic[elem] = default
1669 1684 return dic
1670 1685
1671 1686 #----------------------------------------------------------------------------
1672 1687 def flatten(seq):
1673 1688 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1674 1689
1675 1690 return [x for subseq in seq for x in subseq]
1676 1691
1677 1692 #----------------------------------------------------------------------------
1678 1693 def get_slice(seq,start=0,stop=None,step=1):
1679 1694 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1680 1695 if stop == None:
1681 1696 stop = len(seq)
1682 1697 item = lambda i: seq[i]
1683 1698 return map(item,xrange(start,stop,step))
1684 1699
1685 1700 #----------------------------------------------------------------------------
1686 1701 def chop(seq,size):
1687 1702 """Chop a sequence into chunks of the given size."""
1688 1703 chunk = lambda i: seq[i:i+size]
1689 1704 return map(chunk,xrange(0,len(seq),size))
1690 1705
1691 1706 #----------------------------------------------------------------------------
1692 1707 # with is a keyword as of python 2.5, so this function is renamed to withobj
1693 1708 # from its old 'with' name.
1694 1709 def with_obj(object, **args):
1695 1710 """Set multiple attributes for an object, similar to Pascal's with.
1696 1711
1697 1712 Example:
1698 1713 with_obj(jim,
1699 1714 born = 1960,
1700 1715 haircolour = 'Brown',
1701 1716 eyecolour = 'Green')
1702 1717
1703 1718 Credit: Greg Ewing, in
1704 1719 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1705 1720
1706 1721 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1707 1722 has become a keyword for Python 2.5, so we had to rename it."""
1708 1723
1709 1724 object.__dict__.update(args)
1710 1725
1711 1726 #----------------------------------------------------------------------------
1712 1727 def setattr_list(obj,alist,nspace = None):
1713 1728 """Set a list of attributes for an object taken from a namespace.
1714 1729
1715 1730 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1716 1731 alist with their values taken from nspace, which must be a dict (something
1717 1732 like locals() will often do) If nspace isn't given, locals() of the
1718 1733 *caller* is used, so in most cases you can omit it.
1719 1734
1720 1735 Note that alist can be given as a string, which will be automatically
1721 1736 split into a list on whitespace. If given as a list, it must be a list of
1722 1737 *strings* (the variable names themselves), not of variables."""
1723 1738
1724 1739 # this grabs the local variables from the *previous* call frame -- that is
1725 1740 # the locals from the function that called setattr_list().
1726 1741 # - snipped from weave.inline()
1727 1742 if nspace is None:
1728 1743 call_frame = sys._getframe().f_back
1729 1744 nspace = call_frame.f_locals
1730 1745
1731 1746 if type(alist) in StringTypes:
1732 1747 alist = alist.split()
1733 1748 for attr in alist:
1734 1749 val = eval(attr,nspace)
1735 1750 setattr(obj,attr,val)
1736 1751
1737 1752 #----------------------------------------------------------------------------
1738 1753 def getattr_list(obj,alist,*args):
1739 1754 """getattr_list(obj,alist[, default]) -> attribute list.
1740 1755
1741 1756 Get a list of named attributes for an object. When a default argument is
1742 1757 given, it is returned when the attribute doesn't exist; without it, an
1743 1758 exception is raised in that case.
1744 1759
1745 1760 Note that alist can be given as a string, which will be automatically
1746 1761 split into a list on whitespace. If given as a list, it must be a list of
1747 1762 *strings* (the variable names themselves), not of variables."""
1748 1763
1749 1764 if type(alist) in StringTypes:
1750 1765 alist = alist.split()
1751 1766 if args:
1752 1767 if len(args)==1:
1753 1768 default = args[0]
1754 1769 return map(lambda attr: getattr(obj,attr,default),alist)
1755 1770 else:
1756 1771 raise ValueError,'getattr_list() takes only one optional argument'
1757 1772 else:
1758 1773 return map(lambda attr: getattr(obj,attr),alist)
1759 1774
1760 1775 #----------------------------------------------------------------------------
1761 1776 def map_method(method,object_list,*argseq,**kw):
1762 1777 """map_method(method,object_list,*args,**kw) -> list
1763 1778
1764 1779 Return a list of the results of applying the methods to the items of the
1765 1780 argument sequence(s). If more than one sequence is given, the method is
1766 1781 called with an argument list consisting of the corresponding item of each
1767 1782 sequence. All sequences must be of the same length.
1768 1783
1769 1784 Keyword arguments are passed verbatim to all objects called.
1770 1785
1771 1786 This is Python code, so it's not nearly as fast as the builtin map()."""
1772 1787
1773 1788 out_list = []
1774 1789 idx = 0
1775 1790 for object in object_list:
1776 1791 try:
1777 1792 handler = getattr(object, method)
1778 1793 except AttributeError:
1779 1794 out_list.append(None)
1780 1795 else:
1781 1796 if argseq:
1782 1797 args = map(lambda lst:lst[idx],argseq)
1783 1798 #print 'ob',object,'hand',handler,'ar',args # dbg
1784 1799 out_list.append(handler(args,**kw))
1785 1800 else:
1786 1801 out_list.append(handler(**kw))
1787 1802 idx += 1
1788 1803 return out_list
1789 1804
1790 1805 #----------------------------------------------------------------------------
1791 1806 def get_class_members(cls):
1792 1807 ret = dir(cls)
1793 1808 if hasattr(cls,'__bases__'):
1794 1809 for base in cls.__bases__:
1795 1810 ret.extend(get_class_members(base))
1796 1811 return ret
1797 1812
1798 1813 #----------------------------------------------------------------------------
1799 1814 def dir2(obj):
1800 1815 """dir2(obj) -> list of strings
1801 1816
1802 1817 Extended version of the Python builtin dir(), which does a few extra
1803 1818 checks, and supports common objects with unusual internals that confuse
1804 1819 dir(), such as Traits and PyCrust.
1805 1820
1806 1821 This version is guaranteed to return only a list of true strings, whereas
1807 1822 dir() returns anything that objects inject into themselves, even if they
1808 1823 are later not really valid for attribute access (many extension libraries
1809 1824 have such bugs).
1810 1825 """
1811 1826
1812 1827 # Start building the attribute list via dir(), and then complete it
1813 1828 # with a few extra special-purpose calls.
1814 1829 words = dir(obj)
1815 1830
1816 1831 if hasattr(obj,'__class__'):
1817 1832 words.append('__class__')
1818 1833 words.extend(get_class_members(obj.__class__))
1819 1834 #if '__base__' in words: 1/0
1820 1835
1821 1836 # Some libraries (such as traits) may introduce duplicates, we want to
1822 1837 # track and clean this up if it happens
1823 1838 may_have_dupes = False
1824 1839
1825 1840 # this is the 'dir' function for objects with Enthought's traits
1826 1841 if hasattr(obj, 'trait_names'):
1827 1842 try:
1828 1843 words.extend(obj.trait_names())
1829 1844 may_have_dupes = True
1830 1845 except TypeError:
1831 1846 # This will happen if `obj` is a class and not an instance.
1832 1847 pass
1833 1848
1834 1849 # Support for PyCrust-style _getAttributeNames magic method.
1835 1850 if hasattr(obj, '_getAttributeNames'):
1836 1851 try:
1837 1852 words.extend(obj._getAttributeNames())
1838 1853 may_have_dupes = True
1839 1854 except TypeError:
1840 1855 # `obj` is a class and not an instance. Ignore
1841 1856 # this error.
1842 1857 pass
1843 1858
1844 1859 if may_have_dupes:
1845 1860 # eliminate possible duplicates, as some traits may also
1846 1861 # appear as normal attributes in the dir() call.
1847 1862 words = list(set(words))
1848 1863 words.sort()
1849 1864
1850 1865 # filter out non-string attributes which may be stuffed by dir() calls
1851 1866 # and poor coding in third-party modules
1852 1867 return [w for w in words if isinstance(w, basestring)]
1853 1868
1854 1869 #----------------------------------------------------------------------------
1855 1870 def import_fail_info(mod_name,fns=None):
1856 1871 """Inform load failure for a module."""
1857 1872
1858 1873 if fns == None:
1859 1874 warn("Loading of %s failed.\n" % (mod_name,))
1860 1875 else:
1861 1876 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1862 1877
1863 1878 #----------------------------------------------------------------------------
1864 1879 # Proposed popitem() extension, written as a method
1865 1880
1866 1881
1867 1882 class NotGiven: pass
1868 1883
1869 1884 def popkey(dct,key,default=NotGiven):
1870 1885 """Return dct[key] and delete dct[key].
1871 1886
1872 1887 If default is given, return it if dct[key] doesn't exist, otherwise raise
1873 1888 KeyError. """
1874 1889
1875 1890 try:
1876 1891 val = dct[key]
1877 1892 except KeyError:
1878 1893 if default is NotGiven:
1879 1894 raise
1880 1895 else:
1881 1896 return default
1882 1897 else:
1883 1898 del dct[key]
1884 1899 return val
1885 1900
1886 1901 def wrap_deprecated(func, suggest = '<nothing>'):
1887 1902 def newFunc(*args, **kwargs):
1888 1903 warnings.warn("Call to deprecated function %s, use %s instead" %
1889 1904 ( func.__name__, suggest),
1890 1905 category=DeprecationWarning,
1891 1906 stacklevel = 2)
1892 1907 return func(*args, **kwargs)
1893 1908 return newFunc
1894 1909
1895 1910 #*************************** end of file <genutils.py> **********************
1896 1911
@@ -1,7144 +1,7146 b''
1 1 2007-09-07 Ville Vainio <vivainio@gmail.com>
2 2
3 3 * iplib.py: do not auto-alias "dir", it screws up other dir auto
4 4 aliases.
5
6 * genutils.py: SList.grep() implemented.
5 7
6 8 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
7 9
8 10 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
9 11 preventing source display in certain cases. In reality I think
10 12 the problem is with Ubuntu's Python build, but this change works
11 13 around the issue in some cases (not in all, unfortunately). I'd
12 14 filed a Python bug on this with more details, but in the change of
13 15 bug trackers it seems to have been lost.
14 16
15 17 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
16 18 not the same, it's not self-documenting, doesn't allow range
17 19 selection, and sorts alphabetically instead of numerically.
18 20 (magic_r): restore %r. No, "up + enter. One char magic" is not
19 21 the same thing, since %r takes parameters to allow fast retrieval
20 22 of old commands. I've received emails from users who use this a
21 23 LOT, so it stays.
22 24 (magic_automagic): restore %automagic. "use _ip.option.automagic"
23 25 is not a valid replacement b/c it doesn't provide an complete
24 26 explanation (which the automagic docstring does).
25 27 (magic_autocall): restore %autocall, with improved docstring.
26 28 Same argument as for others, "use _ip.options.autocall" is not a
27 29 valid replacement.
28 30 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
29 31 tutorials and online docs.
30 32
31 33 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
32 34
33 35 * IPython/usage.py (quick_reference): mention magics in quickref,
34 36 modified main banner to mention %quickref.
35 37
36 38 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
37 39
38 40 2007-09-06 Ville Vainio <vivainio@gmail.com>
39 41
40 42 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
41 43 Callable aliases now pass the _ip as first arg. This breaks
42 44 compatibility with earlier 0.8.2.svn series! (though they should
43 45 not have been in use yet outside these few extensions)
44 46
45 47 2007-09-05 Ville Vainio <vivainio@gmail.com>
46 48
47 49 * external/mglob.py: expand('dirname') => ['dirname'], instead
48 50 of ['dirname/foo','dirname/bar', ...].
49 51
50 52 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
51 53 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
52 54 is useful for others as well).
53 55
54 56 * iplib.py: on callable aliases (as opposed to old style aliases),
55 57 do var_expand() immediately, and use make_quoted_expr instead
56 58 of hardcoded r"""
57 59
58 60 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
59 61 if not available load ipy_fsops.py for cp, mv, etc. replacements
60 62
61 63 * OInspect.py, ipy_which.py: improve %which and obj? for callable
62 64 aliases
63 65
64 66 2007-09-04 Ville Vainio <vivainio@gmail.com>
65 67
66 68 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
67 69 Relicensed under BSD with the authors approval.
68 70
69 71 * ipmaker.py, usage.py: Remove %magic from default banner, improve
70 72 %quickref
71 73
72 74 2007-09-03 Ville Vainio <vivainio@gmail.com>
73 75
74 76 * Magic.py: %time now passes expression through prefilter,
75 77 allowing IPython syntax.
76 78
77 79 2007-09-01 Ville Vainio <vivainio@gmail.com>
78 80
79 81 * ipmaker.py: Always show full traceback when newstyle config fails
80 82
81 83 2007-08-27 Ville Vainio <vivainio@gmail.com>
82 84
83 85 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
84 86
85 87 2007-08-26 Ville Vainio <vivainio@gmail.com>
86 88
87 89 * ipmaker.py: Command line args have the highest priority again
88 90
89 91 * iplib.py, ipmaker.py: -i command line argument now behaves as in
90 92 normal python, i.e. leaves the IPython session running after -c
91 93 command or running a batch file from command line.
92 94
93 95 2007-08-22 Ville Vainio <vivainio@gmail.com>
94 96
95 97 * iplib.py: no extra empty (last) line in raw hist w/ multiline
96 98 statements
97 99
98 100 * logger.py: Fix bug where blank lines in history were not
99 101 added until AFTER adding the current line; translated and raw
100 102 history should finally be in sync with prompt now.
101 103
102 104 * ipy_completers.py: quick_completer now makes it easy to create
103 105 trivial custom completers
104 106
105 107 * clearcmd.py: shadow history compression & erasing, fixed input hist
106 108 clearing.
107 109
108 110 * envpersist.py, history.py: %env (sh profile only), %hist completers
109 111
110 112 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
111 113 term title now include the drive letter, and always use / instead of
112 114 os.sep (as per recommended approach for win32 ipython in general).
113 115
114 116 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
115 117 plain python scripts from ipykit command line by running
116 118 "py myscript.py", even w/o installed python.
117 119
118 120 2007-08-21 Ville Vainio <vivainio@gmail.com>
119 121
120 122 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
121 123 (for backwards compatibility)
122 124
123 125 * history.py: switch back to %hist -t from %hist -r as default.
124 126 At least until raw history is fixed for good.
125 127
126 128 2007-08-20 Ville Vainio <vivainio@gmail.com>
127 129
128 130 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
129 131 locate alias redeclarations etc. Also, avoid handling
130 132 _ip.IP.alias_table directly, prefer using _ip.defalias.
131 133
132 134
133 135 2007-08-15 Ville Vainio <vivainio@gmail.com>
134 136
135 137 * prefilter.py: ! is now always served first
136 138
137 139 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
138 140
139 141 * IPython/iplib.py (safe_execfile): fix the SystemExit
140 142 auto-suppression code to work in Python2.4 (the internal structure
141 143 of that exception changed and I'd only tested the code with 2.5).
142 144 Bug reported by a SciPy attendee.
143 145
144 146 2007-08-13 Ville Vainio <vivainio@gmail.com>
145 147
146 148 * prefilter.py: reverted !c:/bin/foo fix, made % in
147 149 multiline specials work again
148 150
149 151 2007-08-13 Ville Vainio <vivainio@gmail.com>
150 152
151 153 * prefilter.py: Take more care to special-case !, so that
152 154 !c:/bin/foo.exe works.
153 155
154 156 * setup.py: if we are building eggs, strip all docs and
155 157 examples (it doesn't make sense to bytecompile examples,
156 158 and docs would be in an awkward place anyway).
157 159
158 160 * Ryan Krauss' patch fixes start menu shortcuts when IPython
159 161 is installed into a directory that has spaces in the name.
160 162
161 163 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
162 164
163 165 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
164 166 doctest profile and %doctest_mode, so they actually generate the
165 167 blank lines needed by doctest to separate individual tests.
166 168
167 169 * IPython/iplib.py (safe_execfile): modify so that running code
168 170 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
169 171 doesn't get a printed traceback. Any other value in sys.exit(),
170 172 including the empty call, still generates a traceback. This
171 173 enables use of %run without having to pass '-e' for codes that
172 174 correctly set the exit status flag.
173 175
174 176 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
175 177
176 178 * IPython/iplib.py (InteractiveShell.post_config_initialization):
177 179 fix problems with doctests failing when run inside IPython due to
178 180 IPython's modifications of sys.displayhook.
179 181
180 182 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
181 183
182 184 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
183 185 a string with names.
184 186
185 187 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
186 188
187 189 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
188 190 magic to toggle on/off the doctest pasting support without having
189 191 to leave a session to switch to a separate profile.
190 192
191 193 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
192 194
193 195 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
194 196 introduce a blank line between inputs, to conform to doctest
195 197 requirements.
196 198
197 199 * IPython/OInspect.py (Inspector.pinfo): fix another part where
198 200 auto-generated docstrings for new-style classes were showing up.
199 201
200 202 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
201 203
202 204 * api_changes: Add new file to track backward-incompatible
203 205 user-visible changes.
204 206
205 207 2007-08-06 Ville Vainio <vivainio@gmail.com>
206 208
207 209 * ipmaker.py: fix bug where user_config_ns didn't exist at all
208 210 before all the config files were handled.
209 211
210 212 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
211 213
212 214 * IPython/irunner.py (RunnerFactory): Add new factory class for
213 215 creating reusable runners based on filenames.
214 216
215 217 * IPython/Extensions/ipy_profile_doctest.py: New profile for
216 218 doctest support. It sets prompts/exceptions as similar to
217 219 standard Python as possible, so that ipython sessions in this
218 220 profile can be easily pasted as doctests with minimal
219 221 modifications. It also enables pasting of doctests from external
220 222 sources (even if they have leading whitespace), so that you can
221 223 rerun doctests from existing sources.
222 224
223 225 * IPython/iplib.py (_prefilter): fix a buglet where after entering
224 226 some whitespace, the prompt would become a continuation prompt
225 227 with no way of exiting it other than Ctrl-C. This fix brings us
226 228 into conformity with how the default python prompt works.
227 229
228 230 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
229 231 Add support for pasting not only lines that start with '>>>', but
230 232 also with ' >>>'. That is, arbitrary whitespace can now precede
231 233 the prompts. This makes the system useful for pasting doctests
232 234 from docstrings back into a normal session.
233 235
234 236 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
235 237
236 238 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
237 239 r1357, which had killed multiple invocations of an embedded
238 240 ipython (this means that example-embed has been broken for over 1
239 241 year!!!). Rather than possibly breaking the batch stuff for which
240 242 the code in iplib.py/interact was introduced, I worked around the
241 243 problem in the embedding class in Shell.py. We really need a
242 244 bloody test suite for this code, I'm sick of finding stuff that
243 245 used to work breaking left and right every time I use an old
244 246 feature I hadn't touched in a few months.
245 247 (kill_embedded): Add a new magic that only shows up in embedded
246 248 mode, to allow users to permanently deactivate an embedded instance.
247 249
248 250 2007-08-01 Ville Vainio <vivainio@gmail.com>
249 251
250 252 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
251 253 history gets out of sync on runlines (e.g. when running macros).
252 254
253 255 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
254 256
255 257 * IPython/Magic.py (magic_colors): fix win32-related error message
256 258 that could appear under *nix when readline was missing. Patch by
257 259 Scott Jackson, closes #175.
258 260
259 261 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
260 262
261 263 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
262 264 completer that it traits-aware, so that traits objects don't show
263 265 all of their internal attributes all the time.
264 266
265 267 * IPython/genutils.py (dir2): moved this code from inside
266 268 completer.py to expose it publicly, so I could use it in the
267 269 wildcards bugfix.
268 270
269 271 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
270 272 Stefan with Traits.
271 273
272 274 * IPython/completer.py (Completer.attr_matches): change internal
273 275 var name from 'object' to 'obj', since 'object' is now a builtin
274 276 and this can lead to weird bugs if reusing this code elsewhere.
275 277
276 278 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
277 279
278 280 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
279 281 'foo?' and update the code to prevent printing of default
280 282 docstrings that started appearing after I added support for
281 283 new-style classes. The approach I'm using isn't ideal (I just
282 284 special-case those strings) but I'm not sure how to more robustly
283 285 differentiate between truly user-written strings and Python's
284 286 automatic ones.
285 287
286 288 2007-07-09 Ville Vainio <vivainio@gmail.com>
287 289
288 290 * completer.py: Applied Matthew Neeley's patch:
289 291 Dynamic attributes from trait_names and _getAttributeNames are added
290 292 to the list of tab completions, but when this happens, the attribute
291 293 list is turned into a set, so the attributes are unordered when
292 294 printed, which makes it hard to find the right completion. This patch
293 295 turns this set back into a list and sort it.
294 296
295 297 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
296 298
297 299 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
298 300 classes in various inspector functions.
299 301
300 302 2007-06-28 Ville Vainio <vivainio@gmail.com>
301 303
302 304 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
303 305 Implement "shadow" namespace, and callable aliases that reside there.
304 306 Use them by:
305 307
306 308 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
307 309
308 310 foo hello world
309 311 (gets translated to:)
310 312 _sh.foo(r"""hello world""")
311 313
312 314 In practice, this kind of alias can take the role of a magic function
313 315
314 316 * New generic inspect_object, called on obj? and obj??
315 317
316 318 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
317 319
318 320 * IPython/ultraTB.py (findsource): fix a problem with
319 321 inspect.getfile that can cause crashes during traceback construction.
320 322
321 323 2007-06-14 Ville Vainio <vivainio@gmail.com>
322 324
323 325 * iplib.py (handle_auto): Try to use ascii for printing "--->"
324 326 autocall rewrite indication, becausesometimes unicode fails to print
325 327 properly (and you get ' - - - '). Use plain uncoloured ---> for
326 328 unicode.
327 329
328 330 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
329 331
330 332 . pickleshare 'hash' commands (hget, hset, hcompress,
331 333 hdict) for efficient shadow history storage.
332 334
333 335 2007-06-13 Ville Vainio <vivainio@gmail.com>
334 336
335 337 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
336 338 Added kw arg 'interactive', tell whether vars should be visible
337 339 with %whos.
338 340
339 341 2007-06-11 Ville Vainio <vivainio@gmail.com>
340 342
341 343 * pspersistence.py, Magic.py, iplib.py: directory history now saved
342 344 to db
343 345
344 346 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
345 347 Also, it exits IPython immediately after evaluating the command (just like
346 348 std python)
347 349
348 350 2007-06-05 Walter Doerwald <walter@livinglogic.de>
349 351
350 352 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
351 353 Python string and captures the output. (Idea and original patch by
352 354 Stefan van der Walt)
353 355
354 356 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
355 357
356 358 * IPython/ultraTB.py (VerboseTB.text): update printing of
357 359 exception types for Python 2.5 (now all exceptions in the stdlib
358 360 are new-style classes).
359 361
360 362 2007-05-31 Walter Doerwald <walter@livinglogic.de>
361 363
362 364 * IPython/Extensions/igrid.py: Add new commands refresh and
363 365 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
364 366 the iterator once (refresh) or after every x seconds (refresh_timer).
365 367 Add a working implementation of "searchexpression", where the text
366 368 entered is not the text to search for, but an expression that must
367 369 be true. Added display of shortcuts to the menu. Added commands "pickinput"
368 370 and "pickinputattr" that put the object or attribute under the cursor
369 371 in the input line. Split the statusbar to be able to display the currently
370 372 active refresh interval. (Patch by Nik Tautenhahn)
371 373
372 374 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
373 375
374 376 * fixing set_term_title to use ctypes as default
375 377
376 378 * fixing set_term_title fallback to work when curent dir
377 379 is on a windows network share
378 380
379 381 2007-05-28 Ville Vainio <vivainio@gmail.com>
380 382
381 383 * %cpaste: strip + with > from left (diffs).
382 384
383 385 * iplib.py: Fix crash when readline not installed
384 386
385 387 2007-05-26 Ville Vainio <vivainio@gmail.com>
386 388
387 389 * generics.py: intruduce easy to extend result_display generic
388 390 function (using simplegeneric.py).
389 391
390 392 * Fixed the append functionality of %set.
391 393
392 394 2007-05-25 Ville Vainio <vivainio@gmail.com>
393 395
394 396 * New magic: %rep (fetch / run old commands from history)
395 397
396 398 * New extension: mglob (%mglob magic), for powerful glob / find /filter
397 399 like functionality
398 400
399 401 % maghistory.py: %hist -g PATTERM greps the history for pattern
400 402
401 403 2007-05-24 Walter Doerwald <walter@livinglogic.de>
402 404
403 405 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
404 406 browse the IPython input history
405 407
406 408 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
407 409 (mapped to "i") can be used to put the object under the curser in the input
408 410 line. pickinputattr (mapped to "I") does the same for the attribute under
409 411 the cursor.
410 412
411 413 2007-05-24 Ville Vainio <vivainio@gmail.com>
412 414
413 415 * Grand magic cleansing (changeset [2380]):
414 416
415 417 * Introduce ipy_legacy.py where the following magics were
416 418 moved:
417 419
418 420 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
419 421
420 422 If you need them, either use default profile or "import ipy_legacy"
421 423 in your ipy_user_conf.py
422 424
423 425 * Move sh and scipy profile to Extensions from UserConfig. this implies
424 426 you should not edit them, but you don't need to run %upgrade when
425 427 upgrading IPython anymore.
426 428
427 429 * %hist/%history now operates in "raw" mode by default. To get the old
428 430 behaviour, run '%hist -n' (native mode).
429 431
430 432 * split ipy_stock_completers.py to ipy_stock_completers.py and
431 433 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
432 434 installed as default.
433 435
434 436 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
435 437 handling.
436 438
437 439 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
438 440 input if readline is available.
439 441
440 442 2007-05-23 Ville Vainio <vivainio@gmail.com>
441 443
442 444 * macro.py: %store uses __getstate__ properly
443 445
444 446 * exesetup.py: added new setup script for creating
445 447 standalone IPython executables with py2exe (i.e.
446 448 no python installation required).
447 449
448 450 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
449 451 its place.
450 452
451 453 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
452 454
453 455 2007-05-21 Ville Vainio <vivainio@gmail.com>
454 456
455 457 * platutil_win32.py (set_term_title): handle
456 458 failure of 'title' system call properly.
457 459
458 460 2007-05-17 Walter Doerwald <walter@livinglogic.de>
459 461
460 462 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
461 463 (Bug detected by Paul Mueller).
462 464
463 465 2007-05-16 Ville Vainio <vivainio@gmail.com>
464 466
465 467 * ipy_profile_sci.py, ipython_win_post_install.py: Create
466 468 new "sci" profile, effectively a modern version of the old
467 469 "scipy" profile (which is now slated for deprecation).
468 470
469 471 2007-05-15 Ville Vainio <vivainio@gmail.com>
470 472
471 473 * pycolorize.py, pycolor.1: Paul Mueller's patches that
472 474 make pycolorize read input from stdin when run without arguments.
473 475
474 476 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
475 477
476 478 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
477 479 it in sh profile (instead of ipy_system_conf.py).
478 480
479 481 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
480 482 aliases are now lower case on windows (MyCommand.exe => mycommand).
481 483
482 484 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
483 485 Macros are now callable objects that inherit from ipapi.IPyAutocall,
484 486 i.e. get autocalled regardless of system autocall setting.
485 487
486 488 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
487 489
488 490 * IPython/rlineimpl.py: check for clear_history in readline and
489 491 make it a dummy no-op if not available. This function isn't
490 492 guaranteed to be in the API and appeared in Python 2.4, so we need
491 493 to check it ourselves. Also, clean up this file quite a bit.
492 494
493 495 * ipython.1: update man page and full manual with information
494 496 about threads (remove outdated warning). Closes #151.
495 497
496 498 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
497 499
498 500 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
499 501 in trunk (note that this made it into the 0.8.1 release already,
500 502 but the changelogs didn't get coordinated). Many thanks to Gael
501 503 Varoquaux <gael.varoquaux-AT-normalesup.org>
502 504
503 505 2007-05-09 *** Released version 0.8.1
504 506
505 507 2007-05-10 Walter Doerwald <walter@livinglogic.de>
506 508
507 509 * IPython/Extensions/igrid.py: Incorporate html help into
508 510 the module, so we don't have to search for the file.
509 511
510 512 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
511 513
512 514 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
513 515
514 516 2007-04-30 Ville Vainio <vivainio@gmail.com>
515 517
516 518 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
517 519 user has illegal (non-ascii) home directory name
518 520
519 521 2007-04-27 Ville Vainio <vivainio@gmail.com>
520 522
521 523 * platutils_win32.py: implement set_term_title for windows
522 524
523 525 * Update version number
524 526
525 527 * ipy_profile_sh.py: more informative prompt (2 dir levels)
526 528
527 529 2007-04-26 Walter Doerwald <walter@livinglogic.de>
528 530
529 531 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
530 532 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
531 533 bug discovered by Ville).
532 534
533 535 2007-04-26 Ville Vainio <vivainio@gmail.com>
534 536
535 537 * Extensions/ipy_completers.py: Olivier's module completer now
536 538 saves the list of root modules if it takes > 4 secs on the first run.
537 539
538 540 * Magic.py (%rehashx): %rehashx now clears the completer cache
539 541
540 542
541 543 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
542 544
543 545 * ipython.el: fix incorrect color scheme, reported by Stefan.
544 546 Closes #149.
545 547
546 548 * IPython/PyColorize.py (Parser.format2): fix state-handling
547 549 logic. I still don't like how that code handles state, but at
548 550 least now it should be correct, if inelegant. Closes #146.
549 551
550 552 2007-04-25 Ville Vainio <vivainio@gmail.com>
551 553
552 554 * Extensions/ipy_which.py: added extension for %which magic, works
553 555 a lot like unix 'which' but also finds and expands aliases, and
554 556 allows wildcards.
555 557
556 558 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
557 559 as opposed to returning nothing.
558 560
559 561 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
560 562 ipy_stock_completers on default profile, do import on sh profile.
561 563
562 564 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
563 565
564 566 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
565 567 like ipython.py foo.py which raised a IndexError.
566 568
567 569 2007-04-21 Ville Vainio <vivainio@gmail.com>
568 570
569 571 * Extensions/ipy_extutil.py: added extension to manage other ipython
570 572 extensions. Now only supports 'ls' == list extensions.
571 573
572 574 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
573 575
574 576 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
575 577 would prevent use of the exception system outside of a running
576 578 IPython instance.
577 579
578 580 2007-04-20 Ville Vainio <vivainio@gmail.com>
579 581
580 582 * Extensions/ipy_render.py: added extension for easy
581 583 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
582 584 'Iptl' template notation,
583 585
584 586 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
585 587 safer & faster 'import' completer.
586 588
587 589 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
588 590 and _ip.defalias(name, command).
589 591
590 592 * Extensions/ipy_exportdb.py: New extension for exporting all the
591 593 %store'd data in a portable format (normal ipapi calls like
592 594 defmacro() etc.)
593 595
594 596 2007-04-19 Ville Vainio <vivainio@gmail.com>
595 597
596 598 * upgrade_dir.py: skip junk files like *.pyc
597 599
598 600 * Release.py: version number to 0.8.1
599 601
600 602 2007-04-18 Ville Vainio <vivainio@gmail.com>
601 603
602 604 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
603 605 and later on win32.
604 606
605 607 2007-04-16 Ville Vainio <vivainio@gmail.com>
606 608
607 609 * iplib.py (showtraceback): Do not crash when running w/o readline.
608 610
609 611 2007-04-12 Walter Doerwald <walter@livinglogic.de>
610 612
611 613 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
612 614 sorted (case sensitive with files and dirs mixed).
613 615
614 616 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
615 617
616 618 * IPython/Release.py (version): Open trunk for 0.8.1 development.
617 619
618 620 2007-04-10 *** Released version 0.8.0
619 621
620 622 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
621 623
622 624 * Tag 0.8.0 for release.
623 625
624 626 * IPython/iplib.py (reloadhist): add API function to cleanly
625 627 reload the readline history, which was growing inappropriately on
626 628 every %run call.
627 629
628 630 * win32_manual_post_install.py (run): apply last part of Nicolas
629 631 Pernetty's patch (I'd accidentally applied it in a different
630 632 directory and this particular file didn't get patched).
631 633
632 634 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
633 635
634 636 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
635 637 find the main thread id and use the proper API call. Thanks to
636 638 Stefan for the fix.
637 639
638 640 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
639 641 unit tests to reflect fixed ticket #52, and add more tests sent by
640 642 him.
641 643
642 644 * IPython/iplib.py (raw_input): restore the readline completer
643 645 state on every input, in case third-party code messed it up.
644 646 (_prefilter): revert recent addition of early-escape checks which
645 647 prevent many valid alias calls from working.
646 648
647 649 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
648 650 flag for sigint handler so we don't run a full signal() call on
649 651 each runcode access.
650 652
651 653 * IPython/Magic.py (magic_whos): small improvement to diagnostic
652 654 message.
653 655
654 656 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
655 657
656 658 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
657 659 asynchronous exceptions working, i.e., Ctrl-C can actually
658 660 interrupt long-running code in the multithreaded shells.
659 661
660 662 This is using Tomer Filiba's great ctypes-based trick:
661 663 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
662 664 this in the past, but hadn't been able to make it work before. So
663 665 far it looks like it's actually running, but this needs more
664 666 testing. If it really works, I'll be *very* happy, and we'll owe
665 667 a huge thank you to Tomer. My current implementation is ugly,
666 668 hackish and uses nasty globals, but I don't want to try and clean
667 669 anything up until we know if it actually works.
668 670
669 671 NOTE: this feature needs ctypes to work. ctypes is included in
670 672 Python2.5, but 2.4 users will need to manually install it. This
671 673 feature makes multi-threaded shells so much more usable that it's
672 674 a minor price to pay (ctypes is very easy to install, already a
673 675 requirement for win32 and available in major linux distros).
674 676
675 677 2007-04-04 Ville Vainio <vivainio@gmail.com>
676 678
677 679 * Extensions/ipy_completers.py, ipy_stock_completers.py:
678 680 Moved implementations of 'bundled' completers to ipy_completers.py,
679 681 they are only enabled in ipy_stock_completers.py.
680 682
681 683 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
682 684
683 685 * IPython/PyColorize.py (Parser.format2): Fix identation of
684 686 colorzied output and return early if color scheme is NoColor, to
685 687 avoid unnecessary and expensive tokenization. Closes #131.
686 688
687 689 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
688 690
689 691 * IPython/Debugger.py: disable the use of pydb version 1.17. It
690 692 has a critical bug (a missing import that makes post-mortem not
691 693 work at all). Unfortunately as of this time, this is the version
692 694 shipped with Ubuntu Edgy, so quite a few people have this one. I
693 695 hope Edgy will update to a more recent package.
694 696
695 697 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
696 698
697 699 * IPython/iplib.py (_prefilter): close #52, second part of a patch
698 700 set by Stefan (only the first part had been applied before).
699 701
700 702 * IPython/Extensions/ipy_stock_completers.py (module_completer):
701 703 remove usage of the dangerous pkgutil.walk_packages(). See
702 704 details in comments left in the code.
703 705
704 706 * IPython/Magic.py (magic_whos): add support for numpy arrays
705 707 similar to what we had for Numeric.
706 708
707 709 * IPython/completer.py (IPCompleter.complete): extend the
708 710 complete() call API to support completions by other mechanisms
709 711 than readline. Closes #109.
710 712
711 713 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
712 714 protect against a bug in Python's execfile(). Closes #123.
713 715
714 716 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
715 717
716 718 * IPython/iplib.py (split_user_input): ensure that when splitting
717 719 user input, the part that can be treated as a python name is pure
718 720 ascii (Python identifiers MUST be pure ascii). Part of the
719 721 ongoing Unicode support work.
720 722
721 723 * IPython/Prompts.py (prompt_specials_color): Add \N for the
722 724 actual prompt number, without any coloring. This allows users to
723 725 produce numbered prompts with their own colors. Added after a
724 726 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
725 727
726 728 2007-03-31 Walter Doerwald <walter@livinglogic.de>
727 729
728 730 * IPython/Extensions/igrid.py: Map the return key
729 731 to enter() and shift-return to enterattr().
730 732
731 733 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
732 734
733 735 * IPython/Magic.py (magic_psearch): add unicode support by
734 736 encoding to ascii the input, since this routine also only deals
735 737 with valid Python names. Fixes a bug reported by Stefan.
736 738
737 739 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
738 740
739 741 * IPython/Magic.py (_inspect): convert unicode input into ascii
740 742 before trying to evaluate it as a Python identifier. This fixes a
741 743 problem that the new unicode support had introduced when analyzing
742 744 long definition lines for functions.
743 745
744 746 2007-03-24 Walter Doerwald <walter@livinglogic.de>
745 747
746 748 * IPython/Extensions/igrid.py: Fix picking. Using
747 749 igrid with wxPython 2.6 and -wthread should work now.
748 750 igrid.display() simply tries to create a frame without
749 751 an application. Only if this fails an application is created.
750 752
751 753 2007-03-23 Walter Doerwald <walter@livinglogic.de>
752 754
753 755 * IPython/Extensions/path.py: Updated to version 2.2.
754 756
755 757 2007-03-23 Ville Vainio <vivainio@gmail.com>
756 758
757 759 * iplib.py: recursive alias expansion now works better, so that
758 760 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
759 761 doesn't trip up the process, if 'd' has been aliased to 'ls'.
760 762
761 763 * Extensions/ipy_gnuglobal.py added, provides %global magic
762 764 for users of http://www.gnu.org/software/global
763 765
764 766 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
765 767 Closes #52. Patch by Stefan van der Walt.
766 768
767 769 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
768 770
769 771 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
770 772 respect the __file__ attribute when using %run. Thanks to a bug
771 773 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
772 774
773 775 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
774 776
775 777 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
776 778 input. Patch sent by Stefan.
777 779
778 780 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
779 781 * IPython/Extensions/ipy_stock_completer.py
780 782 shlex_split, fix bug in shlex_split. len function
781 783 call was missing an if statement. Caused shlex_split to
782 784 sometimes return "" as last element.
783 785
784 786 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
785 787
786 788 * IPython/completer.py
787 789 (IPCompleter.file_matches.single_dir_expand): fix a problem
788 790 reported by Stefan, where directories containign a single subdir
789 791 would be completed too early.
790 792
791 793 * IPython/Shell.py (_load_pylab): Make the execution of 'from
792 794 pylab import *' when -pylab is given be optional. A new flag,
793 795 pylab_import_all controls this behavior, the default is True for
794 796 backwards compatibility.
795 797
796 798 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
797 799 modified) R. Bernstein's patch for fully syntax highlighted
798 800 tracebacks. The functionality is also available under ultraTB for
799 801 non-ipython users (someone using ultraTB but outside an ipython
800 802 session). They can select the color scheme by setting the
801 803 module-level global DEFAULT_SCHEME. The highlight functionality
802 804 also works when debugging.
803 805
804 806 * IPython/genutils.py (IOStream.close): small patch by
805 807 R. Bernstein for improved pydb support.
806 808
807 809 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
808 810 DaveS <davls@telus.net> to improve support of debugging under
809 811 NTEmacs, including improved pydb behavior.
810 812
811 813 * IPython/Magic.py (magic_prun): Fix saving of profile info for
812 814 Python 2.5, where the stats object API changed a little. Thanks
813 815 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
814 816
815 817 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
816 818 Pernetty's patch to improve support for (X)Emacs under Win32.
817 819
818 820 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
819 821
820 822 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
821 823 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
822 824 a report by Nik Tautenhahn.
823 825
824 826 2007-03-16 Walter Doerwald <walter@livinglogic.de>
825 827
826 828 * setup.py: Add the igrid help files to the list of data files
827 829 to be installed alongside igrid.
828 830 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
829 831 Show the input object of the igrid browser as the window tile.
830 832 Show the object the cursor is on in the statusbar.
831 833
832 834 2007-03-15 Ville Vainio <vivainio@gmail.com>
833 835
834 836 * Extensions/ipy_stock_completers.py: Fixed exception
835 837 on mismatching quotes in %run completer. Patch by
836 838 Jorgen Stenarson. Closes #127.
837 839
838 840 2007-03-14 Ville Vainio <vivainio@gmail.com>
839 841
840 842 * Extensions/ext_rehashdir.py: Do not do auto_alias
841 843 in %rehashdir, it clobbers %store'd aliases.
842 844
843 845 * UserConfig/ipy_profile_sh.py: envpersist.py extension
844 846 (beefed up %env) imported for sh profile.
845 847
846 848 2007-03-10 Walter Doerwald <walter@livinglogic.de>
847 849
848 850 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
849 851 as the default browser.
850 852 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
851 853 As igrid displays all attributes it ever encounters, fetch() (which has
852 854 been renamed to _fetch()) doesn't have to recalculate the display attributes
853 855 every time a new item is fetched. This should speed up scrolling.
854 856
855 857 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
856 858
857 859 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
858 860 Schmolck's recently reported tab-completion bug (my previous one
859 861 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
860 862
861 863 2007-03-09 Walter Doerwald <walter@livinglogic.de>
862 864
863 865 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
864 866 Close help window if exiting igrid.
865 867
866 868 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
867 869
868 870 * IPython/Extensions/ipy_defaults.py: Check if readline is available
869 871 before calling functions from readline.
870 872
871 873 2007-03-02 Walter Doerwald <walter@livinglogic.de>
872 874
873 875 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
874 876 igrid is a wxPython-based display object for ipipe. If your system has
875 877 wx installed igrid will be the default display. Without wx ipipe falls
876 878 back to ibrowse (which needs curses). If no curses is installed ipipe
877 879 falls back to idump.
878 880
879 881 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
880 882
881 883 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
882 884 my changes from yesterday, they introduced bugs. Will reactivate
883 885 once I get a correct solution, which will be much easier thanks to
884 886 Dan Milstein's new prefilter test suite.
885 887
886 888 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
887 889
888 890 * IPython/iplib.py (split_user_input): fix input splitting so we
889 891 don't attempt attribute accesses on things that can't possibly be
890 892 valid Python attributes. After a bug report by Alex Schmolck.
891 893 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
892 894 %magic with explicit % prefix.
893 895
894 896 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
895 897
896 898 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
897 899 avoid a DeprecationWarning from GTK.
898 900
899 901 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
900 902
901 903 * IPython/genutils.py (clock): I modified clock() to return total
902 904 time, user+system. This is a more commonly needed metric. I also
903 905 introduced the new clocku/clocks to get only user/system time if
904 906 one wants those instead.
905 907
906 908 ***WARNING: API CHANGE*** clock() used to return only user time,
907 909 so if you want exactly the same results as before, use clocku
908 910 instead.
909 911
910 912 2007-02-22 Ville Vainio <vivainio@gmail.com>
911 913
912 914 * IPython/Extensions/ipy_p4.py: Extension for improved
913 915 p4 (perforce version control system) experience.
914 916 Adds %p4 magic with p4 command completion and
915 917 automatic -G argument (marshall output as python dict)
916 918
917 919 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
918 920
919 921 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
920 922 stop marks.
921 923 (ClearingMixin): a simple mixin to easily make a Demo class clear
922 924 the screen in between blocks and have empty marquees. The
923 925 ClearDemo and ClearIPDemo classes that use it are included.
924 926
925 927 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
926 928
927 929 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
928 930 protect against exceptions at Python shutdown time. Patch
929 931 sumbmitted to upstream.
930 932
931 933 2007-02-14 Walter Doerwald <walter@livinglogic.de>
932 934
933 935 * IPython/Extensions/ibrowse.py: If entering the first object level
934 936 (i.e. the object for which the browser has been started) fails,
935 937 now the error is raised directly (aborting the browser) instead of
936 938 running into an empty levels list later.
937 939
938 940 2007-02-03 Walter Doerwald <walter@livinglogic.de>
939 941
940 942 * IPython/Extensions/ipipe.py: Add an xrepr implementation
941 943 for the noitem object.
942 944
943 945 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
944 946
945 947 * IPython/completer.py (Completer.attr_matches): Fix small
946 948 tab-completion bug with Enthought Traits objects with units.
947 949 Thanks to a bug report by Tom Denniston
948 950 <tom.denniston-AT-alum.dartmouth.org>.
949 951
950 952 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
951 953
952 954 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
953 955 bug where only .ipy or .py would be completed. Once the first
954 956 argument to %run has been given, all completions are valid because
955 957 they are the arguments to the script, which may well be non-python
956 958 filenames.
957 959
958 960 * IPython/irunner.py (InteractiveRunner.run_source): major updates
959 961 to irunner to allow it to correctly support real doctesting of
960 962 out-of-process ipython code.
961 963
962 964 * IPython/Magic.py (magic_cd): Make the setting of the terminal
963 965 title an option (-noterm_title) because it completely breaks
964 966 doctesting.
965 967
966 968 * IPython/demo.py: fix IPythonDemo class that was not actually working.
967 969
968 970 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
969 971
970 972 * IPython/irunner.py (main): fix small bug where extensions were
971 973 not being correctly recognized.
972 974
973 975 2007-01-23 Walter Doerwald <walter@livinglogic.de>
974 976
975 977 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
976 978 a string containing a single line yields the string itself as the
977 979 only item.
978 980
979 981 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
980 982 object if it's the same as the one on the last level (This avoids
981 983 infinite recursion for one line strings).
982 984
983 985 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
984 986
985 987 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
986 988 all output streams before printing tracebacks. This ensures that
987 989 user output doesn't end up interleaved with traceback output.
988 990
989 991 2007-01-10 Ville Vainio <vivainio@gmail.com>
990 992
991 993 * Extensions/envpersist.py: Turbocharged %env that remembers
992 994 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
993 995 "%env VISUAL=jed".
994 996
995 997 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
996 998
997 999 * IPython/iplib.py (showtraceback): ensure that we correctly call
998 1000 custom handlers in all cases (some with pdb were slipping through,
999 1001 but I'm not exactly sure why).
1000 1002
1001 1003 * IPython/Debugger.py (Tracer.__init__): added new class to
1002 1004 support set_trace-like usage of IPython's enhanced debugger.
1003 1005
1004 1006 2006-12-24 Ville Vainio <vivainio@gmail.com>
1005 1007
1006 1008 * ipmaker.py: more informative message when ipy_user_conf
1007 1009 import fails (suggest running %upgrade).
1008 1010
1009 1011 * tools/run_ipy_in_profiler.py: Utility to see where
1010 1012 the time during IPython startup is spent.
1011 1013
1012 1014 2006-12-20 Ville Vainio <vivainio@gmail.com>
1013 1015
1014 1016 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1015 1017
1016 1018 * ipapi.py: Add new ipapi method, expand_alias.
1017 1019
1018 1020 * Release.py: Bump up version to 0.7.4.svn
1019 1021
1020 1022 2006-12-17 Ville Vainio <vivainio@gmail.com>
1021 1023
1022 1024 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1023 1025 to work properly on posix too
1024 1026
1025 1027 * Release.py: Update revnum (version is still just 0.7.3).
1026 1028
1027 1029 2006-12-15 Ville Vainio <vivainio@gmail.com>
1028 1030
1029 1031 * scripts/ipython_win_post_install: create ipython.py in
1030 1032 prefix + "/scripts".
1031 1033
1032 1034 * Release.py: Update version to 0.7.3.
1033 1035
1034 1036 2006-12-14 Ville Vainio <vivainio@gmail.com>
1035 1037
1036 1038 * scripts/ipython_win_post_install: Overwrite old shortcuts
1037 1039 if they already exist
1038 1040
1039 1041 * Release.py: release 0.7.3rc2
1040 1042
1041 1043 2006-12-13 Ville Vainio <vivainio@gmail.com>
1042 1044
1043 1045 * Branch and update Release.py for 0.7.3rc1
1044 1046
1045 1047 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1046 1048
1047 1049 * IPython/Shell.py (IPShellWX): update for current WX naming
1048 1050 conventions, to avoid a deprecation warning with current WX
1049 1051 versions. Thanks to a report by Danny Shevitz.
1050 1052
1051 1053 2006-12-12 Ville Vainio <vivainio@gmail.com>
1052 1054
1053 1055 * ipmaker.py: apply david cournapeau's patch to make
1054 1056 import_some work properly even when ipythonrc does
1055 1057 import_some on empty list (it was an old bug!).
1056 1058
1057 1059 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1058 1060 Add deprecation note to ipythonrc and a url to wiki
1059 1061 in ipy_user_conf.py
1060 1062
1061 1063
1062 1064 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1063 1065 as if it was typed on IPython command prompt, i.e.
1064 1066 as IPython script.
1065 1067
1066 1068 * example-magic.py, magic_grepl.py: remove outdated examples
1067 1069
1068 1070 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1069 1071
1070 1072 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1071 1073 is called before any exception has occurred.
1072 1074
1073 1075 2006-12-08 Ville Vainio <vivainio@gmail.com>
1074 1076
1075 1077 * Extensions/ipy_stock_completers.py: fix cd completer
1076 1078 to translate /'s to \'s again.
1077 1079
1078 1080 * completer.py: prevent traceback on file completions w/
1079 1081 backslash.
1080 1082
1081 1083 * Release.py: Update release number to 0.7.3b3 for release
1082 1084
1083 1085 2006-12-07 Ville Vainio <vivainio@gmail.com>
1084 1086
1085 1087 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1086 1088 while executing external code. Provides more shell-like behaviour
1087 1089 and overall better response to ctrl + C / ctrl + break.
1088 1090
1089 1091 * tools/make_tarball.py: new script to create tarball straight from svn
1090 1092 (setup.py sdist doesn't work on win32).
1091 1093
1092 1094 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1093 1095 on dirnames with spaces and use the default completer instead.
1094 1096
1095 1097 * Revision.py: Change version to 0.7.3b2 for release.
1096 1098
1097 1099 2006-12-05 Ville Vainio <vivainio@gmail.com>
1098 1100
1099 1101 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1100 1102 pydb patch 4 (rm debug printing, py 2.5 checking)
1101 1103
1102 1104 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1103 1105 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1104 1106 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1105 1107 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1106 1108 object the cursor was on before the refresh. The command "markrange" is
1107 1109 mapped to "%" now.
1108 1110 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1109 1111
1110 1112 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1111 1113
1112 1114 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1113 1115 interactive debugger on the last traceback, without having to call
1114 1116 %pdb and rerun your code. Made minor changes in various modules,
1115 1117 should automatically recognize pydb if available.
1116 1118
1117 1119 2006-11-28 Ville Vainio <vivainio@gmail.com>
1118 1120
1119 1121 * completer.py: If the text start with !, show file completions
1120 1122 properly. This helps when trying to complete command name
1121 1123 for shell escapes.
1122 1124
1123 1125 2006-11-27 Ville Vainio <vivainio@gmail.com>
1124 1126
1125 1127 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1126 1128 der Walt. Clean up svn and hg completers by using a common
1127 1129 vcs_completer.
1128 1130
1129 1131 2006-11-26 Ville Vainio <vivainio@gmail.com>
1130 1132
1131 1133 * Remove ipconfig and %config; you should use _ip.options structure
1132 1134 directly instead!
1133 1135
1134 1136 * genutils.py: add wrap_deprecated function for deprecating callables
1135 1137
1136 1138 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1137 1139 _ip.system instead. ipalias is redundant.
1138 1140
1139 1141 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1140 1142 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1141 1143 explicit.
1142 1144
1143 1145 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1144 1146 completer. Try it by entering 'hg ' and pressing tab.
1145 1147
1146 1148 * macro.py: Give Macro a useful __repr__ method
1147 1149
1148 1150 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1149 1151
1150 1152 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1151 1153 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1152 1154 we don't get a duplicate ipipe module, where registration of the xrepr
1153 1155 implementation for Text is useless.
1154 1156
1155 1157 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1156 1158
1157 1159 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1158 1160
1159 1161 2006-11-24 Ville Vainio <vivainio@gmail.com>
1160 1162
1161 1163 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1162 1164 try to use "cProfile" instead of the slower pure python
1163 1165 "profile"
1164 1166
1165 1167 2006-11-23 Ville Vainio <vivainio@gmail.com>
1166 1168
1167 1169 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1168 1170 Qt+IPython+Designer link in documentation.
1169 1171
1170 1172 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1171 1173 correct Pdb object to %pydb.
1172 1174
1173 1175
1174 1176 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1175 1177 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1176 1178 generic xrepr(), otherwise the list implementation would kick in.
1177 1179
1178 1180 2006-11-21 Ville Vainio <vivainio@gmail.com>
1179 1181
1180 1182 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1181 1183 with one from UserConfig.
1182 1184
1183 1185 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1184 1186 it was missing which broke the sh profile.
1185 1187
1186 1188 * completer.py: file completer now uses explicit '/' instead
1187 1189 of os.path.join, expansion of 'foo' was broken on win32
1188 1190 if there was one directory with name 'foobar'.
1189 1191
1190 1192 * A bunch of patches from Kirill Smelkov:
1191 1193
1192 1194 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1193 1195
1194 1196 * [patch 7/9] Implement %page -r (page in raw mode) -
1195 1197
1196 1198 * [patch 5/9] ScientificPython webpage has moved
1197 1199
1198 1200 * [patch 4/9] The manual mentions %ds, should be %dhist
1199 1201
1200 1202 * [patch 3/9] Kill old bits from %prun doc.
1201 1203
1202 1204 * [patch 1/9] Fix typos here and there.
1203 1205
1204 1206 2006-11-08 Ville Vainio <vivainio@gmail.com>
1205 1207
1206 1208 * completer.py (attr_matches): catch all exceptions raised
1207 1209 by eval of expr with dots.
1208 1210
1209 1211 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1210 1212
1211 1213 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1212 1214 input if it starts with whitespace. This allows you to paste
1213 1215 indented input from any editor without manually having to type in
1214 1216 the 'if 1:', which is convenient when working interactively.
1215 1217 Slightly modifed version of a patch by Bo Peng
1216 1218 <bpeng-AT-rice.edu>.
1217 1219
1218 1220 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1219 1221
1220 1222 * IPython/irunner.py (main): modified irunner so it automatically
1221 1223 recognizes the right runner to use based on the extension (.py for
1222 1224 python, .ipy for ipython and .sage for sage).
1223 1225
1224 1226 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1225 1227 visible in ipapi as ip.config(), to programatically control the
1226 1228 internal rc object. There's an accompanying %config magic for
1227 1229 interactive use, which has been enhanced to match the
1228 1230 funtionality in ipconfig.
1229 1231
1230 1232 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1231 1233 so it's not just a toggle, it now takes an argument. Add support
1232 1234 for a customizable header when making system calls, as the new
1233 1235 system_header variable in the ipythonrc file.
1234 1236
1235 1237 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1236 1238
1237 1239 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1238 1240 generic functions (using Philip J. Eby's simplegeneric package).
1239 1241 This makes it possible to customize the display of third-party classes
1240 1242 without having to monkeypatch them. xiter() no longer supports a mode
1241 1243 argument and the XMode class has been removed. The same functionality can
1242 1244 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1243 1245 One consequence of the switch to generic functions is that xrepr() and
1244 1246 xattrs() implementation must define the default value for the mode
1245 1247 argument themselves and xattrs() implementations must return real
1246 1248 descriptors.
1247 1249
1248 1250 * IPython/external: This new subpackage will contain all third-party
1249 1251 packages that are bundled with IPython. (The first one is simplegeneric).
1250 1252
1251 1253 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1252 1254 directory which as been dropped in r1703.
1253 1255
1254 1256 * IPython/Extensions/ipipe.py (iless): Fixed.
1255 1257
1256 1258 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1257 1259
1258 1260 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1259 1261
1260 1262 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1261 1263 handling in variable expansion so that shells and magics recognize
1262 1264 function local scopes correctly. Bug reported by Brian.
1263 1265
1264 1266 * scripts/ipython: remove the very first entry in sys.path which
1265 1267 Python auto-inserts for scripts, so that sys.path under IPython is
1266 1268 as similar as possible to that under plain Python.
1267 1269
1268 1270 * IPython/completer.py (IPCompleter.file_matches): Fix
1269 1271 tab-completion so that quotes are not closed unless the completion
1270 1272 is unambiguous. After a request by Stefan. Minor cleanups in
1271 1273 ipy_stock_completers.
1272 1274
1273 1275 2006-11-02 Ville Vainio <vivainio@gmail.com>
1274 1276
1275 1277 * ipy_stock_completers.py: Add %run and %cd completers.
1276 1278
1277 1279 * completer.py: Try running custom completer for both
1278 1280 "foo" and "%foo" if the command is just "foo". Ignore case
1279 1281 when filtering possible completions.
1280 1282
1281 1283 * UserConfig/ipy_user_conf.py: install stock completers as default
1282 1284
1283 1285 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1284 1286 simplified readline history save / restore through a wrapper
1285 1287 function
1286 1288
1287 1289
1288 1290 2006-10-31 Ville Vainio <vivainio@gmail.com>
1289 1291
1290 1292 * strdispatch.py, completer.py, ipy_stock_completers.py:
1291 1293 Allow str_key ("command") in completer hooks. Implement
1292 1294 trivial completer for 'import' (stdlib modules only). Rename
1293 1295 ipy_linux_package_managers.py to ipy_stock_completers.py.
1294 1296 SVN completer.
1295 1297
1296 1298 * Extensions/ledit.py: %magic line editor for easily and
1297 1299 incrementally manipulating lists of strings. The magic command
1298 1300 name is %led.
1299 1301
1300 1302 2006-10-30 Ville Vainio <vivainio@gmail.com>
1301 1303
1302 1304 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1303 1305 Bernsteins's patches for pydb integration.
1304 1306 http://bashdb.sourceforge.net/pydb/
1305 1307
1306 1308 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1307 1309 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1308 1310 custom completer hook to allow the users to implement their own
1309 1311 completers. See ipy_linux_package_managers.py for example. The
1310 1312 hook name is 'complete_command'.
1311 1313
1312 1314 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1313 1315
1314 1316 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1315 1317 Numeric leftovers.
1316 1318
1317 1319 * ipython.el (py-execute-region): apply Stefan's patch to fix
1318 1320 garbled results if the python shell hasn't been previously started.
1319 1321
1320 1322 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1321 1323 pretty generic function and useful for other things.
1322 1324
1323 1325 * IPython/OInspect.py (getsource): Add customizable source
1324 1326 extractor. After a request/patch form W. Stein (SAGE).
1325 1327
1326 1328 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1327 1329 window size to a more reasonable value from what pexpect does,
1328 1330 since their choice causes wrapping bugs with long input lines.
1329 1331
1330 1332 2006-10-28 Ville Vainio <vivainio@gmail.com>
1331 1333
1332 1334 * Magic.py (%run): Save and restore the readline history from
1333 1335 file around %run commands to prevent side effects from
1334 1336 %runned programs that might use readline (e.g. pydb).
1335 1337
1336 1338 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1337 1339 invoking the pydb enhanced debugger.
1338 1340
1339 1341 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1340 1342
1341 1343 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1342 1344 call the base class method and propagate the return value to
1343 1345 ifile. This is now done by path itself.
1344 1346
1345 1347 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1346 1348
1347 1349 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1348 1350 api: set_crash_handler(), to expose the ability to change the
1349 1351 internal crash handler.
1350 1352
1351 1353 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1352 1354 the various parameters of the crash handler so that apps using
1353 1355 IPython as their engine can customize crash handling. Ipmlemented
1354 1356 at the request of SAGE.
1355 1357
1356 1358 2006-10-14 Ville Vainio <vivainio@gmail.com>
1357 1359
1358 1360 * Magic.py, ipython.el: applied first "safe" part of Rocky
1359 1361 Bernstein's patch set for pydb integration.
1360 1362
1361 1363 * Magic.py (%unalias, %alias): %store'd aliases can now be
1362 1364 removed with '%unalias'. %alias w/o args now shows most
1363 1365 interesting (stored / manually defined) aliases last
1364 1366 where they catch the eye w/o scrolling.
1365 1367
1366 1368 * Magic.py (%rehashx), ext_rehashdir.py: files with
1367 1369 'py' extension are always considered executable, even
1368 1370 when not in PATHEXT environment variable.
1369 1371
1370 1372 2006-10-12 Ville Vainio <vivainio@gmail.com>
1371 1373
1372 1374 * jobctrl.py: Add new "jobctrl" extension for spawning background
1373 1375 processes with "&find /". 'import jobctrl' to try it out. Requires
1374 1376 'subprocess' module, standard in python 2.4+.
1375 1377
1376 1378 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1377 1379 so if foo -> bar and bar -> baz, then foo -> baz.
1378 1380
1379 1381 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1380 1382
1381 1383 * IPython/Magic.py (Magic.parse_options): add a new posix option
1382 1384 to allow parsing of input args in magics that doesn't strip quotes
1383 1385 (if posix=False). This also closes %timeit bug reported by
1384 1386 Stefan.
1385 1387
1386 1388 2006-10-03 Ville Vainio <vivainio@gmail.com>
1387 1389
1388 1390 * iplib.py (raw_input, interact): Return ValueError catching for
1389 1391 raw_input. Fixes infinite loop for sys.stdin.close() or
1390 1392 sys.stdout.close().
1391 1393
1392 1394 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1393 1395
1394 1396 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1395 1397 to help in handling doctests. irunner is now pretty useful for
1396 1398 running standalone scripts and simulate a full interactive session
1397 1399 in a format that can be then pasted as a doctest.
1398 1400
1399 1401 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1400 1402 on top of the default (useless) ones. This also fixes the nasty
1401 1403 way in which 2.5's Quitter() exits (reverted [1785]).
1402 1404
1403 1405 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1404 1406 2.5.
1405 1407
1406 1408 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1407 1409 color scheme is updated as well when color scheme is changed
1408 1410 interactively.
1409 1411
1410 1412 2006-09-27 Ville Vainio <vivainio@gmail.com>
1411 1413
1412 1414 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1413 1415 infinite loop and just exit. It's a hack, but will do for a while.
1414 1416
1415 1417 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1416 1418
1417 1419 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1418 1420 the constructor, this makes it possible to get a list of only directories
1419 1421 or only files.
1420 1422
1421 1423 2006-08-12 Ville Vainio <vivainio@gmail.com>
1422 1424
1423 1425 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1424 1426 they broke unittest
1425 1427
1426 1428 2006-08-11 Ville Vainio <vivainio@gmail.com>
1427 1429
1428 1430 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1429 1431 by resolving issue properly, i.e. by inheriting FakeModule
1430 1432 from types.ModuleType. Pickling ipython interactive data
1431 1433 should still work as usual (testing appreciated).
1432 1434
1433 1435 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1434 1436
1435 1437 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1436 1438 running under python 2.3 with code from 2.4 to fix a bug with
1437 1439 help(). Reported by the Debian maintainers, Norbert Tretkowski
1438 1440 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1439 1441 <afayolle-AT-debian.org>.
1440 1442
1441 1443 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1442 1444
1443 1445 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1444 1446 (which was displaying "quit" twice).
1445 1447
1446 1448 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1447 1449
1448 1450 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1449 1451 the mode argument).
1450 1452
1451 1453 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1452 1454
1453 1455 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1454 1456 not running under IPython.
1455 1457
1456 1458 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1457 1459 and make it iterable (iterating over the attribute itself). Add two new
1458 1460 magic strings for __xattrs__(): If the string starts with "-", the attribute
1459 1461 will not be displayed in ibrowse's detail view (but it can still be
1460 1462 iterated over). This makes it possible to add attributes that are large
1461 1463 lists or generator methods to the detail view. Replace magic attribute names
1462 1464 and _attrname() and _getattr() with "descriptors": For each type of magic
1463 1465 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1464 1466 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1465 1467 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1466 1468 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1467 1469 are still supported.
1468 1470
1469 1471 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1470 1472 fails in ibrowse.fetch(), the exception object is added as the last item
1471 1473 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1472 1474 a generator throws an exception midway through execution.
1473 1475
1474 1476 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1475 1477 encoding into methods.
1476 1478
1477 1479 2006-07-26 Ville Vainio <vivainio@gmail.com>
1478 1480
1479 1481 * iplib.py: history now stores multiline input as single
1480 1482 history entries. Patch by Jorgen Cederlof.
1481 1483
1482 1484 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1483 1485
1484 1486 * IPython/Extensions/ibrowse.py: Make cursor visible over
1485 1487 non existing attributes.
1486 1488
1487 1489 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1488 1490
1489 1491 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1490 1492 error output of the running command doesn't mess up the screen.
1491 1493
1492 1494 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1493 1495
1494 1496 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1495 1497 argument. This sorts the items themselves.
1496 1498
1497 1499 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1498 1500
1499 1501 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1500 1502 Compile expression strings into code objects. This should speed
1501 1503 up ifilter and friends somewhat.
1502 1504
1503 1505 2006-07-08 Ville Vainio <vivainio@gmail.com>
1504 1506
1505 1507 * Magic.py: %cpaste now strips > from the beginning of lines
1506 1508 to ease pasting quoted code from emails. Contributed by
1507 1509 Stefan van der Walt.
1508 1510
1509 1511 2006-06-29 Ville Vainio <vivainio@gmail.com>
1510 1512
1511 1513 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1512 1514 mode, patch contributed by Darren Dale. NEEDS TESTING!
1513 1515
1514 1516 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1515 1517
1516 1518 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1517 1519 a blue background. Fix fetching new display rows when the browser
1518 1520 scrolls more than a screenful (e.g. by using the goto command).
1519 1521
1520 1522 2006-06-27 Ville Vainio <vivainio@gmail.com>
1521 1523
1522 1524 * Magic.py (_inspect, _ofind) Apply David Huard's
1523 1525 patch for displaying the correct docstring for 'property'
1524 1526 attributes.
1525 1527
1526 1528 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1527 1529
1528 1530 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1529 1531 commands into the methods implementing them.
1530 1532
1531 1533 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1532 1534
1533 1535 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1534 1536 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1535 1537 autoindent support was authored by Jin Liu.
1536 1538
1537 1539 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1538 1540
1539 1541 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1540 1542 for keymaps with a custom class that simplifies handling.
1541 1543
1542 1544 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1543 1545
1544 1546 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1545 1547 resizing. This requires Python 2.5 to work.
1546 1548
1547 1549 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1548 1550
1549 1551 * IPython/Extensions/ibrowse.py: Add two new commands to
1550 1552 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1551 1553 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1552 1554 attributes again. Remapped the help command to "?". Display
1553 1555 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1554 1556 as keys for the "home" and "end" commands. Add three new commands
1555 1557 to the input mode for "find" and friends: "delend" (CTRL-K)
1556 1558 deletes to the end of line. "incsearchup" searches upwards in the
1557 1559 command history for an input that starts with the text before the cursor.
1558 1560 "incsearchdown" does the same downwards. Removed a bogus mapping of
1559 1561 the x key to "delete".
1560 1562
1561 1563 2006-06-15 Ville Vainio <vivainio@gmail.com>
1562 1564
1563 1565 * iplib.py, hooks.py: Added new generate_prompt hook that can be
1564 1566 used to create prompts dynamically, instead of the "old" way of
1565 1567 assigning "magic" strings to prompt_in1 and prompt_in2. The old
1566 1568 way still works (it's invoked by the default hook), of course.
1567 1569
1568 1570 * Prompts.py: added generate_output_prompt hook for altering output
1569 1571 prompt
1570 1572
1571 1573 * Release.py: Changed version string to 0.7.3.svn.
1572 1574
1573 1575 2006-06-15 Walter Doerwald <walter@livinglogic.de>
1574 1576
1575 1577 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
1576 1578 the call to fetch() always tries to fetch enough data for at least one
1577 1579 full screen. This makes it possible to simply call moveto(0,0,True) in
1578 1580 the constructor. Fix typos and removed the obsolete goto attribute.
1579 1581
1580 1582 2006-06-12 Ville Vainio <vivainio@gmail.com>
1581 1583
1582 1584 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
1583 1585 allowing $variable interpolation within multiline statements,
1584 1586 though so far only with "sh" profile for a testing period.
1585 1587 The patch also enables splitting long commands with \ but it
1586 1588 doesn't work properly yet.
1587 1589
1588 1590 2006-06-12 Walter Doerwald <walter@livinglogic.de>
1589 1591
1590 1592 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
1591 1593 input history and the position of the cursor in the input history for
1592 1594 the find, findbackwards and goto command.
1593 1595
1594 1596 2006-06-10 Walter Doerwald <walter@livinglogic.de>
1595 1597
1596 1598 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
1597 1599 implements the basic functionality of browser commands that require
1598 1600 input. Reimplement the goto, find and findbackwards commands as
1599 1601 subclasses of _CommandInput. Add an input history and keymaps to those
1600 1602 commands. Add "\r" as a keyboard shortcut for the enterdefault and
1601 1603 execute commands.
1602 1604
1603 1605 2006-06-07 Ville Vainio <vivainio@gmail.com>
1604 1606
1605 1607 * iplib.py: ipython mybatch.ipy exits ipython immediately after
1606 1608 running the batch files instead of leaving the session open.
1607 1609
1608 1610 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
1609 1611
1610 1612 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
1611 1613 the original fix was incomplete. Patch submitted by W. Maier.
1612 1614
1613 1615 2006-06-07 Ville Vainio <vivainio@gmail.com>
1614 1616
1615 1617 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1616 1618 Confirmation prompts can be supressed by 'quiet' option.
1617 1619 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1618 1620
1619 1621 2006-06-06 *** Released version 0.7.2
1620 1622
1621 1623 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1622 1624
1623 1625 * IPython/Release.py (version): Made 0.7.2 final for release.
1624 1626 Repo tagged and release cut.
1625 1627
1626 1628 2006-06-05 Ville Vainio <vivainio@gmail.com>
1627 1629
1628 1630 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1629 1631 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1630 1632
1631 1633 * upgrade_dir.py: try import 'path' module a bit harder
1632 1634 (for %upgrade)
1633 1635
1634 1636 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1635 1637
1636 1638 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1637 1639 instead of looping 20 times.
1638 1640
1639 1641 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1640 1642 correctly at initialization time. Bug reported by Krishna Mohan
1641 1643 Gundu <gkmohan-AT-gmail.com> on the user list.
1642 1644
1643 1645 * IPython/Release.py (version): Mark 0.7.2 version to start
1644 1646 testing for release on 06/06.
1645 1647
1646 1648 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1647 1649
1648 1650 * scripts/irunner: thin script interface so users don't have to
1649 1651 find the module and call it as an executable, since modules rarely
1650 1652 live in people's PATH.
1651 1653
1652 1654 * IPython/irunner.py (InteractiveRunner.__init__): added
1653 1655 delaybeforesend attribute to control delays with newer versions of
1654 1656 pexpect. Thanks to detailed help from pexpect's author, Noah
1655 1657 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1656 1658 correctly (it works in NoColor mode).
1657 1659
1658 1660 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1659 1661 SAGE list, from improper log() calls.
1660 1662
1661 1663 2006-05-31 Ville Vainio <vivainio@gmail.com>
1662 1664
1663 1665 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1664 1666 with args in parens to work correctly with dirs that have spaces.
1665 1667
1666 1668 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1667 1669
1668 1670 * IPython/Logger.py (Logger.logstart): add option to log raw input
1669 1671 instead of the processed one. A -r flag was added to the
1670 1672 %logstart magic used for controlling logging.
1671 1673
1672 1674 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1673 1675
1674 1676 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1675 1677 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1676 1678 recognize the option. After a bug report by Will Maier. This
1677 1679 closes #64 (will do it after confirmation from W. Maier).
1678 1680
1679 1681 * IPython/irunner.py: New module to run scripts as if manually
1680 1682 typed into an interactive environment, based on pexpect. After a
1681 1683 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1682 1684 ipython-user list. Simple unittests in the tests/ directory.
1683 1685
1684 1686 * tools/release: add Will Maier, OpenBSD port maintainer, to
1685 1687 recepients list. We are now officially part of the OpenBSD ports:
1686 1688 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1687 1689 work.
1688 1690
1689 1691 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1690 1692
1691 1693 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1692 1694 so that it doesn't break tkinter apps.
1693 1695
1694 1696 * IPython/iplib.py (_prefilter): fix bug where aliases would
1695 1697 shadow variables when autocall was fully off. Reported by SAGE
1696 1698 author William Stein.
1697 1699
1698 1700 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1699 1701 at what detail level strings are computed when foo? is requested.
1700 1702 This allows users to ask for example that the string form of an
1701 1703 object is only computed when foo?? is called, or even never, by
1702 1704 setting the object_info_string_level >= 2 in the configuration
1703 1705 file. This new option has been added and documented. After a
1704 1706 request by SAGE to be able to control the printing of very large
1705 1707 objects more easily.
1706 1708
1707 1709 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1708 1710
1709 1711 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1710 1712 from sys.argv, to be 100% consistent with how Python itself works
1711 1713 (as seen for example with python -i file.py). After a bug report
1712 1714 by Jeffrey Collins.
1713 1715
1714 1716 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1715 1717 nasty bug which was preventing custom namespaces with -pylab,
1716 1718 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1717 1719 compatibility (long gone from mpl).
1718 1720
1719 1721 * IPython/ipapi.py (make_session): name change: create->make. We
1720 1722 use make in other places (ipmaker,...), it's shorter and easier to
1721 1723 type and say, etc. I'm trying to clean things before 0.7.2 so
1722 1724 that I can keep things stable wrt to ipapi in the chainsaw branch.
1723 1725
1724 1726 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
1725 1727 python-mode recognizes our debugger mode. Add support for
1726 1728 autoindent inside (X)emacs. After a patch sent in by Jin Liu
1727 1729 <m.liu.jin-AT-gmail.com> originally written by
1728 1730 doxgen-AT-newsmth.net (with minor modifications for xemacs
1729 1731 compatibility)
1730 1732
1731 1733 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
1732 1734 tracebacks when walking the stack so that the stack tracking system
1733 1735 in emacs' python-mode can identify the frames correctly.
1734 1736
1735 1737 * IPython/ipmaker.py (make_IPython): make the internal (and
1736 1738 default config) autoedit_syntax value false by default. Too many
1737 1739 users have complained to me (both on and off-list) about problems
1738 1740 with this option being on by default, so I'm making it default to
1739 1741 off. It can still be enabled by anyone via the usual mechanisms.
1740 1742
1741 1743 * IPython/completer.py (Completer.attr_matches): add support for
1742 1744 PyCrust-style _getAttributeNames magic method. Patch contributed
1743 1745 by <mscott-AT-goldenspud.com>. Closes #50.
1744 1746
1745 1747 * IPython/iplib.py (InteractiveShell.__init__): remove the
1746 1748 deletion of exit/quit from __builtin__, which can break
1747 1749 third-party tools like the Zope debugging console. The
1748 1750 %exit/%quit magics remain. In general, it's probably a good idea
1749 1751 not to delete anything from __builtin__, since we never know what
1750 1752 that will break. In any case, python now (for 2.5) will support
1751 1753 'real' exit/quit, so this issue is moot. Closes #55.
1752 1754
1753 1755 * IPython/genutils.py (with_obj): rename the 'with' function to
1754 1756 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
1755 1757 becomes a language keyword. Closes #53.
1756 1758
1757 1759 * IPython/FakeModule.py (FakeModule.__init__): add a proper
1758 1760 __file__ attribute to this so it fools more things into thinking
1759 1761 it is a real module. Closes #59.
1760 1762
1761 1763 * IPython/Magic.py (magic_edit): add -n option to open the editor
1762 1764 at a specific line number. After a patch by Stefan van der Walt.
1763 1765
1764 1766 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
1765 1767
1766 1768 * IPython/iplib.py (edit_syntax_error): fix crash when for some
1767 1769 reason the file could not be opened. After automatic crash
1768 1770 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
1769 1771 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
1770 1772 (_should_recompile): Don't fire editor if using %bg, since there
1771 1773 is no file in the first place. From the same report as above.
1772 1774 (raw_input): protect against faulty third-party prefilters. After
1773 1775 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
1774 1776 while running under SAGE.
1775 1777
1776 1778 2006-05-23 Ville Vainio <vivainio@gmail.com>
1777 1779
1778 1780 * ipapi.py: Stripped down ip.to_user_ns() to work only as
1779 1781 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
1780 1782 now returns None (again), unless dummy is specifically allowed by
1781 1783 ipapi.get(allow_dummy=True).
1782 1784
1783 1785 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
1784 1786
1785 1787 * IPython: remove all 2.2-compatibility objects and hacks from
1786 1788 everywhere, since we only support 2.3 at this point. Docs
1787 1789 updated.
1788 1790
1789 1791 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
1790 1792 Anything requiring extra validation can be turned into a Python
1791 1793 property in the future. I used a property for the db one b/c
1792 1794 there was a nasty circularity problem with the initialization
1793 1795 order, which right now I don't have time to clean up.
1794 1796
1795 1797 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
1796 1798 another locking bug reported by Jorgen. I'm not 100% sure though,
1797 1799 so more testing is needed...
1798 1800
1799 1801 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
1800 1802
1801 1803 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1802 1804 local variables from any routine in user code (typically executed
1803 1805 with %run) directly into the interactive namespace. Very useful
1804 1806 when doing complex debugging.
1805 1807 (IPythonNotRunning): Changed the default None object to a dummy
1806 1808 whose attributes can be queried as well as called without
1807 1809 exploding, to ease writing code which works transparently both in
1808 1810 and out of ipython and uses some of this API.
1809 1811
1810 1812 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1811 1813
1812 1814 * IPython/hooks.py (result_display): Fix the fact that our display
1813 1815 hook was using str() instead of repr(), as the default python
1814 1816 console does. This had gone unnoticed b/c it only happened if
1815 1817 %Pprint was off, but the inconsistency was there.
1816 1818
1817 1819 2006-05-15 Ville Vainio <vivainio@gmail.com>
1818 1820
1819 1821 * Oinspect.py: Only show docstring for nonexisting/binary files
1820 1822 when doing object??, closing ticket #62
1821 1823
1822 1824 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1823 1825
1824 1826 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1825 1827 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1826 1828 was being released in a routine which hadn't checked if it had
1827 1829 been the one to acquire it.
1828 1830
1829 1831 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1830 1832
1831 1833 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1832 1834
1833 1835 2006-04-11 Ville Vainio <vivainio@gmail.com>
1834 1836
1835 1837 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1836 1838 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1837 1839 prefilters, allowing stuff like magics and aliases in the file.
1838 1840
1839 1841 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1840 1842 added. Supported now are "%clear in" and "%clear out" (clear input and
1841 1843 output history, respectively). Also fixed CachedOutput.flush to
1842 1844 properly flush the output cache.
1843 1845
1844 1846 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1845 1847 half-success (and fail explicitly).
1846 1848
1847 1849 2006-03-28 Ville Vainio <vivainio@gmail.com>
1848 1850
1849 1851 * iplib.py: Fix quoting of aliases so that only argless ones
1850 1852 are quoted
1851 1853
1852 1854 2006-03-28 Ville Vainio <vivainio@gmail.com>
1853 1855
1854 1856 * iplib.py: Quote aliases with spaces in the name.
1855 1857 "c:\program files\blah\bin" is now legal alias target.
1856 1858
1857 1859 * ext_rehashdir.py: Space no longer allowed as arg
1858 1860 separator, since space is legal in path names.
1859 1861
1860 1862 2006-03-16 Ville Vainio <vivainio@gmail.com>
1861 1863
1862 1864 * upgrade_dir.py: Take path.py from Extensions, correcting
1863 1865 %upgrade magic
1864 1866
1865 1867 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1866 1868
1867 1869 * hooks.py: Only enclose editor binary in quotes if legal and
1868 1870 necessary (space in the name, and is an existing file). Fixes a bug
1869 1871 reported by Zachary Pincus.
1870 1872
1871 1873 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1872 1874
1873 1875 * Manual: thanks to a tip on proper color handling for Emacs, by
1874 1876 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1875 1877
1876 1878 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1877 1879 by applying the provided patch. Thanks to Liu Jin
1878 1880 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1879 1881 XEmacs/Linux, I'm trusting the submitter that it actually helps
1880 1882 under win32/GNU Emacs. Will revisit if any problems are reported.
1881 1883
1882 1884 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1883 1885
1884 1886 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1885 1887 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1886 1888
1887 1889 2006-03-12 Ville Vainio <vivainio@gmail.com>
1888 1890
1889 1891 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1890 1892 Torsten Marek.
1891 1893
1892 1894 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1893 1895
1894 1896 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1895 1897 line ranges works again.
1896 1898
1897 1899 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1898 1900
1899 1901 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1900 1902 and friends, after a discussion with Zach Pincus on ipython-user.
1901 1903 I'm not 100% sure, but after thinking about it quite a bit, it may
1902 1904 be OK. Testing with the multithreaded shells didn't reveal any
1903 1905 problems, but let's keep an eye out.
1904 1906
1905 1907 In the process, I fixed a few things which were calling
1906 1908 self.InteractiveTB() directly (like safe_execfile), which is a
1907 1909 mistake: ALL exception reporting should be done by calling
1908 1910 self.showtraceback(), which handles state and tab-completion and
1909 1911 more.
1910 1912
1911 1913 2006-03-01 Ville Vainio <vivainio@gmail.com>
1912 1914
1913 1915 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1914 1916 To use, do "from ipipe import *".
1915 1917
1916 1918 2006-02-24 Ville Vainio <vivainio@gmail.com>
1917 1919
1918 1920 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1919 1921 "cleanly" and safely than the older upgrade mechanism.
1920 1922
1921 1923 2006-02-21 Ville Vainio <vivainio@gmail.com>
1922 1924
1923 1925 * Magic.py: %save works again.
1924 1926
1925 1927 2006-02-15 Ville Vainio <vivainio@gmail.com>
1926 1928
1927 1929 * Magic.py: %Pprint works again
1928 1930
1929 1931 * Extensions/ipy_sane_defaults.py: Provide everything provided
1930 1932 in default ipythonrc, to make it possible to have a completely empty
1931 1933 ipythonrc (and thus completely rc-file free configuration)
1932 1934
1933 1935 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1934 1936
1935 1937 * IPython/hooks.py (editor): quote the call to the editor command,
1936 1938 to allow commands with spaces in them. Problem noted by watching
1937 1939 Ian Oswald's video about textpad under win32 at
1938 1940 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1939 1941
1940 1942 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1941 1943 describing magics (we haven't used @ for a loong time).
1942 1944
1943 1945 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1944 1946 contributed by marienz to close
1945 1947 http://www.scipy.net/roundup/ipython/issue53.
1946 1948
1947 1949 2006-02-10 Ville Vainio <vivainio@gmail.com>
1948 1950
1949 1951 * genutils.py: getoutput now works in win32 too
1950 1952
1951 1953 * completer.py: alias and magic completion only invoked
1952 1954 at the first "item" in the line, to avoid "cd %store"
1953 1955 nonsense.
1954 1956
1955 1957 2006-02-09 Ville Vainio <vivainio@gmail.com>
1956 1958
1957 1959 * test/*: Added a unit testing framework (finally).
1958 1960 '%run runtests.py' to run test_*.
1959 1961
1960 1962 * ipapi.py: Exposed runlines and set_custom_exc
1961 1963
1962 1964 2006-02-07 Ville Vainio <vivainio@gmail.com>
1963 1965
1964 1966 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1965 1967 instead use "f(1 2)" as before.
1966 1968
1967 1969 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1968 1970
1969 1971 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1970 1972 facilities, for demos processed by the IPython input filter
1971 1973 (IPythonDemo), and for running a script one-line-at-a-time as a
1972 1974 demo, both for pure Python (LineDemo) and for IPython-processed
1973 1975 input (IPythonLineDemo). After a request by Dave Kohel, from the
1974 1976 SAGE team.
1975 1977 (Demo.edit): added an edit() method to the demo objects, to edit
1976 1978 the in-memory copy of the last executed block.
1977 1979
1978 1980 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1979 1981 processing to %edit, %macro and %save. These commands can now be
1980 1982 invoked on the unprocessed input as it was typed by the user
1981 1983 (without any prefilters applied). After requests by the SAGE team
1982 1984 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1983 1985
1984 1986 2006-02-01 Ville Vainio <vivainio@gmail.com>
1985 1987
1986 1988 * setup.py, eggsetup.py: easy_install ipython==dev works
1987 1989 correctly now (on Linux)
1988 1990
1989 1991 * ipy_user_conf,ipmaker: user config changes, removed spurious
1990 1992 warnings
1991 1993
1992 1994 * iplib: if rc.banner is string, use it as is.
1993 1995
1994 1996 * Magic: %pycat accepts a string argument and pages it's contents.
1995 1997
1996 1998
1997 1999 2006-01-30 Ville Vainio <vivainio@gmail.com>
1998 2000
1999 2001 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2000 2002 Now %store and bookmarks work through PickleShare, meaning that
2001 2003 concurrent access is possible and all ipython sessions see the
2002 2004 same database situation all the time, instead of snapshot of
2003 2005 the situation when the session was started. Hence, %bookmark
2004 2006 results are immediately accessible from othes sessions. The database
2005 2007 is also available for use by user extensions. See:
2006 2008 http://www.python.org/pypi/pickleshare
2007 2009
2008 2010 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2009 2011
2010 2012 * aliases can now be %store'd
2011 2013
2012 2014 * path.py moved to Extensions so that pickleshare does not need
2013 2015 IPython-specific import. Extensions added to pythonpath right
2014 2016 at __init__.
2015 2017
2016 2018 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2017 2019 called with _ip.system and the pre-transformed command string.
2018 2020
2019 2021 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2020 2022
2021 2023 * IPython/iplib.py (interact): Fix that we were not catching
2022 2024 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2023 2025 logic here had to change, but it's fixed now.
2024 2026
2025 2027 2006-01-29 Ville Vainio <vivainio@gmail.com>
2026 2028
2027 2029 * iplib.py: Try to import pyreadline on Windows.
2028 2030
2029 2031 2006-01-27 Ville Vainio <vivainio@gmail.com>
2030 2032
2031 2033 * iplib.py: Expose ipapi as _ip in builtin namespace.
2032 2034 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2033 2035 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2034 2036 syntax now produce _ip.* variant of the commands.
2035 2037
2036 2038 * "_ip.options().autoedit_syntax = 2" automatically throws
2037 2039 user to editor for syntax error correction without prompting.
2038 2040
2039 2041 2006-01-27 Ville Vainio <vivainio@gmail.com>
2040 2042
2041 2043 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2042 2044 'ipython' at argv[0]) executed through command line.
2043 2045 NOTE: this DEPRECATES calling ipython with multiple scripts
2044 2046 ("ipython a.py b.py c.py")
2045 2047
2046 2048 * iplib.py, hooks.py: Added configurable input prefilter,
2047 2049 named 'input_prefilter'. See ext_rescapture.py for example
2048 2050 usage.
2049 2051
2050 2052 * ext_rescapture.py, Magic.py: Better system command output capture
2051 2053 through 'var = !ls' (deprecates user-visible %sc). Same notation
2052 2054 applies for magics, 'var = %alias' assigns alias list to var.
2053 2055
2054 2056 * ipapi.py: added meta() for accessing extension-usable data store.
2055 2057
2056 2058 * iplib.py: added InteractiveShell.getapi(). New magics should be
2057 2059 written doing self.getapi() instead of using the shell directly.
2058 2060
2059 2061 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2060 2062 %store foo >> ~/myfoo.txt to store variables to files (in clean
2061 2063 textual form, not a restorable pickle).
2062 2064
2063 2065 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2064 2066
2065 2067 * usage.py, Magic.py: added %quickref
2066 2068
2067 2069 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2068 2070
2069 2071 * GetoptErrors when invoking magics etc. with wrong args
2070 2072 are now more helpful:
2071 2073 GetoptError: option -l not recognized (allowed: "qb" )
2072 2074
2073 2075 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2074 2076
2075 2077 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2076 2078 computationally intensive blocks don't appear to stall the demo.
2077 2079
2078 2080 2006-01-24 Ville Vainio <vivainio@gmail.com>
2079 2081
2080 2082 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2081 2083 value to manipulate resulting history entry.
2082 2084
2083 2085 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2084 2086 to instance methods of IPApi class, to make extending an embedded
2085 2087 IPython feasible. See ext_rehashdir.py for example usage.
2086 2088
2087 2089 * Merged 1071-1076 from branches/0.7.1
2088 2090
2089 2091
2090 2092 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2091 2093
2092 2094 * tools/release (daystamp): Fix build tools to use the new
2093 2095 eggsetup.py script to build lightweight eggs.
2094 2096
2095 2097 * Applied changesets 1062 and 1064 before 0.7.1 release.
2096 2098
2097 2099 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2098 2100 see the raw input history (without conversions like %ls ->
2099 2101 ipmagic("ls")). After a request from W. Stein, SAGE
2100 2102 (http://modular.ucsd.edu/sage) developer. This information is
2101 2103 stored in the input_hist_raw attribute of the IPython instance, so
2102 2104 developers can access it if needed (it's an InputList instance).
2103 2105
2104 2106 * Versionstring = 0.7.2.svn
2105 2107
2106 2108 * eggsetup.py: A separate script for constructing eggs, creates
2107 2109 proper launch scripts even on Windows (an .exe file in
2108 2110 \python24\scripts).
2109 2111
2110 2112 * ipapi.py: launch_new_instance, launch entry point needed for the
2111 2113 egg.
2112 2114
2113 2115 2006-01-23 Ville Vainio <vivainio@gmail.com>
2114 2116
2115 2117 * Added %cpaste magic for pasting python code
2116 2118
2117 2119 2006-01-22 Ville Vainio <vivainio@gmail.com>
2118 2120
2119 2121 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2120 2122
2121 2123 * Versionstring = 0.7.2.svn
2122 2124
2123 2125 * eggsetup.py: A separate script for constructing eggs, creates
2124 2126 proper launch scripts even on Windows (an .exe file in
2125 2127 \python24\scripts).
2126 2128
2127 2129 * ipapi.py: launch_new_instance, launch entry point needed for the
2128 2130 egg.
2129 2131
2130 2132 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2131 2133
2132 2134 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2133 2135 %pfile foo would print the file for foo even if it was a binary.
2134 2136 Now, extensions '.so' and '.dll' are skipped.
2135 2137
2136 2138 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2137 2139 bug, where macros would fail in all threaded modes. I'm not 100%
2138 2140 sure, so I'm going to put out an rc instead of making a release
2139 2141 today, and wait for feedback for at least a few days.
2140 2142
2141 2143 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2142 2144 it...) the handling of pasting external code with autoindent on.
2143 2145 To get out of a multiline input, the rule will appear for most
2144 2146 users unchanged: two blank lines or change the indent level
2145 2147 proposed by IPython. But there is a twist now: you can
2146 2148 add/subtract only *one or two spaces*. If you add/subtract three
2147 2149 or more (unless you completely delete the line), IPython will
2148 2150 accept that line, and you'll need to enter a second one of pure
2149 2151 whitespace. I know it sounds complicated, but I can't find a
2150 2152 different solution that covers all the cases, with the right
2151 2153 heuristics. Hopefully in actual use, nobody will really notice
2152 2154 all these strange rules and things will 'just work'.
2153 2155
2154 2156 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2155 2157
2156 2158 * IPython/iplib.py (interact): catch exceptions which can be
2157 2159 triggered asynchronously by signal handlers. Thanks to an
2158 2160 automatic crash report, submitted by Colin Kingsley
2159 2161 <tercel-AT-gentoo.org>.
2160 2162
2161 2163 2006-01-20 Ville Vainio <vivainio@gmail.com>
2162 2164
2163 2165 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2164 2166 (%rehashdir, very useful, try it out) of how to extend ipython
2165 2167 with new magics. Also added Extensions dir to pythonpath to make
2166 2168 importing extensions easy.
2167 2169
2168 2170 * %store now complains when trying to store interactively declared
2169 2171 classes / instances of those classes.
2170 2172
2171 2173 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2172 2174 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2173 2175 if they exist, and ipy_user_conf.py with some defaults is created for
2174 2176 the user.
2175 2177
2176 2178 * Startup rehashing done by the config file, not InterpreterExec.
2177 2179 This means system commands are available even without selecting the
2178 2180 pysh profile. It's the sensible default after all.
2179 2181
2180 2182 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2181 2183
2182 2184 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2183 2185 multiline code with autoindent on working. But I am really not
2184 2186 sure, so this needs more testing. Will commit a debug-enabled
2185 2187 version for now, while I test it some more, so that Ville and
2186 2188 others may also catch any problems. Also made
2187 2189 self.indent_current_str() a method, to ensure that there's no
2188 2190 chance of the indent space count and the corresponding string
2189 2191 falling out of sync. All code needing the string should just call
2190 2192 the method.
2191 2193
2192 2194 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2193 2195
2194 2196 * IPython/Magic.py (magic_edit): fix check for when users don't
2195 2197 save their output files, the try/except was in the wrong section.
2196 2198
2197 2199 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2198 2200
2199 2201 * IPython/Magic.py (magic_run): fix __file__ global missing from
2200 2202 script's namespace when executed via %run. After a report by
2201 2203 Vivian.
2202 2204
2203 2205 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2204 2206 when using python 2.4. The parent constructor changed in 2.4, and
2205 2207 we need to track it directly (we can't call it, as it messes up
2206 2208 readline and tab-completion inside our pdb would stop working).
2207 2209 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2208 2210
2209 2211 2006-01-16 Ville Vainio <vivainio@gmail.com>
2210 2212
2211 2213 * Ipython/magic.py: Reverted back to old %edit functionality
2212 2214 that returns file contents on exit.
2213 2215
2214 2216 * IPython/path.py: Added Jason Orendorff's "path" module to
2215 2217 IPython tree, http://www.jorendorff.com/articles/python/path/.
2216 2218 You can get path objects conveniently through %sc, and !!, e.g.:
2217 2219 sc files=ls
2218 2220 for p in files.paths: # or files.p
2219 2221 print p,p.mtime
2220 2222
2221 2223 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2222 2224 now work again without considering the exclusion regexp -
2223 2225 hence, things like ',foo my/path' turn to 'foo("my/path")'
2224 2226 instead of syntax error.
2225 2227
2226 2228
2227 2229 2006-01-14 Ville Vainio <vivainio@gmail.com>
2228 2230
2229 2231 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2230 2232 ipapi decorators for python 2.4 users, options() provides access to rc
2231 2233 data.
2232 2234
2233 2235 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2234 2236 as path separators (even on Linux ;-). Space character after
2235 2237 backslash (as yielded by tab completer) is still space;
2236 2238 "%cd long\ name" works as expected.
2237 2239
2238 2240 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2239 2241 as "chain of command", with priority. API stays the same,
2240 2242 TryNext exception raised by a hook function signals that
2241 2243 current hook failed and next hook should try handling it, as
2242 2244 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2243 2245 requested configurable display hook, which is now implemented.
2244 2246
2245 2247 2006-01-13 Ville Vainio <vivainio@gmail.com>
2246 2248
2247 2249 * IPython/platutils*.py: platform specific utility functions,
2248 2250 so far only set_term_title is implemented (change terminal
2249 2251 label in windowing systems). %cd now changes the title to
2250 2252 current dir.
2251 2253
2252 2254 * IPython/Release.py: Added myself to "authors" list,
2253 2255 had to create new files.
2254 2256
2255 2257 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2256 2258 shell escape; not a known bug but had potential to be one in the
2257 2259 future.
2258 2260
2259 2261 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2260 2262 extension API for IPython! See the module for usage example. Fix
2261 2263 OInspect for docstring-less magic functions.
2262 2264
2263 2265
2264 2266 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2265 2267
2266 2268 * IPython/iplib.py (raw_input): temporarily deactivate all
2267 2269 attempts at allowing pasting of code with autoindent on. It
2268 2270 introduced bugs (reported by Prabhu) and I can't seem to find a
2269 2271 robust combination which works in all cases. Will have to revisit
2270 2272 later.
2271 2273
2272 2274 * IPython/genutils.py: remove isspace() function. We've dropped
2273 2275 2.2 compatibility, so it's OK to use the string method.
2274 2276
2275 2277 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2276 2278
2277 2279 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2278 2280 matching what NOT to autocall on, to include all python binary
2279 2281 operators (including things like 'and', 'or', 'is' and 'in').
2280 2282 Prompted by a bug report on 'foo & bar', but I realized we had
2281 2283 many more potential bug cases with other operators. The regexp is
2282 2284 self.re_exclude_auto, it's fairly commented.
2283 2285
2284 2286 2006-01-12 Ville Vainio <vivainio@gmail.com>
2285 2287
2286 2288 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2287 2289 Prettified and hardened string/backslash quoting with ipsystem(),
2288 2290 ipalias() and ipmagic(). Now even \ characters are passed to
2289 2291 %magics, !shell escapes and aliases exactly as they are in the
2290 2292 ipython command line. Should improve backslash experience,
2291 2293 particularly in Windows (path delimiter for some commands that
2292 2294 won't understand '/'), but Unix benefits as well (regexps). %cd
2293 2295 magic still doesn't support backslash path delimiters, though. Also
2294 2296 deleted all pretense of supporting multiline command strings in
2295 2297 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2296 2298
2297 2299 * doc/build_doc_instructions.txt added. Documentation on how to
2298 2300 use doc/update_manual.py, added yesterday. Both files contributed
2299 2301 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2300 2302 doc/*.sh for deprecation at a later date.
2301 2303
2302 2304 * /ipython.py Added ipython.py to root directory for
2303 2305 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2304 2306 ipython.py) and development convenience (no need to keep doing
2305 2307 "setup.py install" between changes).
2306 2308
2307 2309 * Made ! and !! shell escapes work (again) in multiline expressions:
2308 2310 if 1:
2309 2311 !ls
2310 2312 !!ls
2311 2313
2312 2314 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2313 2315
2314 2316 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2315 2317 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2316 2318 module in case-insensitive installation. Was causing crashes
2317 2319 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2318 2320
2319 2321 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2320 2322 <marienz-AT-gentoo.org>, closes
2321 2323 http://www.scipy.net/roundup/ipython/issue51.
2322 2324
2323 2325 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2324 2326
2325 2327 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2326 2328 problem of excessive CPU usage under *nix and keyboard lag under
2327 2329 win32.
2328 2330
2329 2331 2006-01-10 *** Released version 0.7.0
2330 2332
2331 2333 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2332 2334
2333 2335 * IPython/Release.py (revision): tag version number to 0.7.0,
2334 2336 ready for release.
2335 2337
2336 2338 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2337 2339 it informs the user of the name of the temp. file used. This can
2338 2340 help if you decide later to reuse that same file, so you know
2339 2341 where to copy the info from.
2340 2342
2341 2343 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2342 2344
2343 2345 * setup_bdist_egg.py: little script to build an egg. Added
2344 2346 support in the release tools as well.
2345 2347
2346 2348 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2347 2349
2348 2350 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2349 2351 version selection (new -wxversion command line and ipythonrc
2350 2352 parameter). Patch contributed by Arnd Baecker
2351 2353 <arnd.baecker-AT-web.de>.
2352 2354
2353 2355 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2354 2356 embedded instances, for variables defined at the interactive
2355 2357 prompt of the embedded ipython. Reported by Arnd.
2356 2358
2357 2359 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2358 2360 it can be used as a (stateful) toggle, or with a direct parameter.
2359 2361
2360 2362 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2361 2363 could be triggered in certain cases and cause the traceback
2362 2364 printer not to work.
2363 2365
2364 2366 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2365 2367
2366 2368 * IPython/iplib.py (_should_recompile): Small fix, closes
2367 2369 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2368 2370
2369 2371 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2370 2372
2371 2373 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2372 2374 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2373 2375 Moad for help with tracking it down.
2374 2376
2375 2377 * IPython/iplib.py (handle_auto): fix autocall handling for
2376 2378 objects which support BOTH __getitem__ and __call__ (so that f [x]
2377 2379 is left alone, instead of becoming f([x]) automatically).
2378 2380
2379 2381 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2380 2382 Ville's patch.
2381 2383
2382 2384 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2383 2385
2384 2386 * IPython/iplib.py (handle_auto): changed autocall semantics to
2385 2387 include 'smart' mode, where the autocall transformation is NOT
2386 2388 applied if there are no arguments on the line. This allows you to
2387 2389 just type 'foo' if foo is a callable to see its internal form,
2388 2390 instead of having it called with no arguments (typically a
2389 2391 mistake). The old 'full' autocall still exists: for that, you
2390 2392 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2391 2393
2392 2394 * IPython/completer.py (Completer.attr_matches): add
2393 2395 tab-completion support for Enthoughts' traits. After a report by
2394 2396 Arnd and a patch by Prabhu.
2395 2397
2396 2398 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2397 2399
2398 2400 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2399 2401 Schmolck's patch to fix inspect.getinnerframes().
2400 2402
2401 2403 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2402 2404 for embedded instances, regarding handling of namespaces and items
2403 2405 added to the __builtin__ one. Multiple embedded instances and
2404 2406 recursive embeddings should work better now (though I'm not sure
2405 2407 I've got all the corner cases fixed, that code is a bit of a brain
2406 2408 twister).
2407 2409
2408 2410 * IPython/Magic.py (magic_edit): added support to edit in-memory
2409 2411 macros (automatically creates the necessary temp files). %edit
2410 2412 also doesn't return the file contents anymore, it's just noise.
2411 2413
2412 2414 * IPython/completer.py (Completer.attr_matches): revert change to
2413 2415 complete only on attributes listed in __all__. I realized it
2414 2416 cripples the tab-completion system as a tool for exploring the
2415 2417 internals of unknown libraries (it renders any non-__all__
2416 2418 attribute off-limits). I got bit by this when trying to see
2417 2419 something inside the dis module.
2418 2420
2419 2421 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2420 2422
2421 2423 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2422 2424 namespace for users and extension writers to hold data in. This
2423 2425 follows the discussion in
2424 2426 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2425 2427
2426 2428 * IPython/completer.py (IPCompleter.complete): small patch to help
2427 2429 tab-completion under Emacs, after a suggestion by John Barnard
2428 2430 <barnarj-AT-ccf.org>.
2429 2431
2430 2432 * IPython/Magic.py (Magic.extract_input_slices): added support for
2431 2433 the slice notation in magics to use N-M to represent numbers N...M
2432 2434 (closed endpoints). This is used by %macro and %save.
2433 2435
2434 2436 * IPython/completer.py (Completer.attr_matches): for modules which
2435 2437 define __all__, complete only on those. After a patch by Jeffrey
2436 2438 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2437 2439 speed up this routine.
2438 2440
2439 2441 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2440 2442 don't know if this is the end of it, but the behavior now is
2441 2443 certainly much more correct. Note that coupled with macros,
2442 2444 slightly surprising (at first) behavior may occur: a macro will in
2443 2445 general expand to multiple lines of input, so upon exiting, the
2444 2446 in/out counters will both be bumped by the corresponding amount
2445 2447 (as if the macro's contents had been typed interactively). Typing
2446 2448 %hist will reveal the intermediate (silently processed) lines.
2447 2449
2448 2450 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2449 2451 pickle to fail (%run was overwriting __main__ and not restoring
2450 2452 it, but pickle relies on __main__ to operate).
2451 2453
2452 2454 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2453 2455 using properties, but forgot to make the main InteractiveShell
2454 2456 class a new-style class. Properties fail silently, and
2455 2457 mysteriously, with old-style class (getters work, but
2456 2458 setters don't do anything).
2457 2459
2458 2460 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2459 2461
2460 2462 * IPython/Magic.py (magic_history): fix history reporting bug (I
2461 2463 know some nasties are still there, I just can't seem to find a
2462 2464 reproducible test case to track them down; the input history is
2463 2465 falling out of sync...)
2464 2466
2465 2467 * IPython/iplib.py (handle_shell_escape): fix bug where both
2466 2468 aliases and system accesses where broken for indented code (such
2467 2469 as loops).
2468 2470
2469 2471 * IPython/genutils.py (shell): fix small but critical bug for
2470 2472 win32 system access.
2471 2473
2472 2474 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2473 2475
2474 2476 * IPython/iplib.py (showtraceback): remove use of the
2475 2477 sys.last_{type/value/traceback} structures, which are non
2476 2478 thread-safe.
2477 2479 (_prefilter): change control flow to ensure that we NEVER
2478 2480 introspect objects when autocall is off. This will guarantee that
2479 2481 having an input line of the form 'x.y', where access to attribute
2480 2482 'y' has side effects, doesn't trigger the side effect TWICE. It
2481 2483 is important to note that, with autocall on, these side effects
2482 2484 can still happen.
2483 2485 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2484 2486 trio. IPython offers these three kinds of special calls which are
2485 2487 not python code, and it's a good thing to have their call method
2486 2488 be accessible as pure python functions (not just special syntax at
2487 2489 the command line). It gives us a better internal implementation
2488 2490 structure, as well as exposing these for user scripting more
2489 2491 cleanly.
2490 2492
2491 2493 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2492 2494 file. Now that they'll be more likely to be used with the
2493 2495 persistance system (%store), I want to make sure their module path
2494 2496 doesn't change in the future, so that we don't break things for
2495 2497 users' persisted data.
2496 2498
2497 2499 * IPython/iplib.py (autoindent_update): move indentation
2498 2500 management into the _text_ processing loop, not the keyboard
2499 2501 interactive one. This is necessary to correctly process non-typed
2500 2502 multiline input (such as macros).
2501 2503
2502 2504 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2503 2505 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2504 2506 which was producing problems in the resulting manual.
2505 2507 (magic_whos): improve reporting of instances (show their class,
2506 2508 instead of simply printing 'instance' which isn't terribly
2507 2509 informative).
2508 2510
2509 2511 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2510 2512 (minor mods) to support network shares under win32.
2511 2513
2512 2514 * IPython/winconsole.py (get_console_size): add new winconsole
2513 2515 module and fixes to page_dumb() to improve its behavior under
2514 2516 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2515 2517
2516 2518 * IPython/Magic.py (Macro): simplified Macro class to just
2517 2519 subclass list. We've had only 2.2 compatibility for a very long
2518 2520 time, yet I was still avoiding subclassing the builtin types. No
2519 2521 more (I'm also starting to use properties, though I won't shift to
2520 2522 2.3-specific features quite yet).
2521 2523 (magic_store): added Ville's patch for lightweight variable
2522 2524 persistence, after a request on the user list by Matt Wilkie
2523 2525 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2524 2526 details.
2525 2527
2526 2528 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2527 2529 changed the default logfile name from 'ipython.log' to
2528 2530 'ipython_log.py'. These logs are real python files, and now that
2529 2531 we have much better multiline support, people are more likely to
2530 2532 want to use them as such. Might as well name them correctly.
2531 2533
2532 2534 * IPython/Magic.py: substantial cleanup. While we can't stop
2533 2535 using magics as mixins, due to the existing customizations 'out
2534 2536 there' which rely on the mixin naming conventions, at least I
2535 2537 cleaned out all cross-class name usage. So once we are OK with
2536 2538 breaking compatibility, the two systems can be separated.
2537 2539
2538 2540 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2539 2541 anymore, and the class is a fair bit less hideous as well. New
2540 2542 features were also introduced: timestamping of input, and logging
2541 2543 of output results. These are user-visible with the -t and -o
2542 2544 options to %logstart. Closes
2543 2545 http://www.scipy.net/roundup/ipython/issue11 and a request by
2544 2546 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2545 2547
2546 2548 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2547 2549
2548 2550 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2549 2551 better handle backslashes in paths. See the thread 'More Windows
2550 2552 questions part 2 - \/ characters revisited' on the iypthon user
2551 2553 list:
2552 2554 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2553 2555
2554 2556 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2555 2557
2556 2558 (InteractiveShell.__init__): change threaded shells to not use the
2557 2559 ipython crash handler. This was causing more problems than not,
2558 2560 as exceptions in the main thread (GUI code, typically) would
2559 2561 always show up as a 'crash', when they really weren't.
2560 2562
2561 2563 The colors and exception mode commands (%colors/%xmode) have been
2562 2564 synchronized to also take this into account, so users can get
2563 2565 verbose exceptions for their threaded code as well. I also added
2564 2566 support for activating pdb inside this exception handler as well,
2565 2567 so now GUI authors can use IPython's enhanced pdb at runtime.
2566 2568
2567 2569 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
2568 2570 true by default, and add it to the shipped ipythonrc file. Since
2569 2571 this asks the user before proceeding, I think it's OK to make it
2570 2572 true by default.
2571 2573
2572 2574 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
2573 2575 of the previous special-casing of input in the eval loop. I think
2574 2576 this is cleaner, as they really are commands and shouldn't have
2575 2577 a special role in the middle of the core code.
2576 2578
2577 2579 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
2578 2580
2579 2581 * IPython/iplib.py (edit_syntax_error): added support for
2580 2582 automatically reopening the editor if the file had a syntax error
2581 2583 in it. Thanks to scottt who provided the patch at:
2582 2584 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
2583 2585 version committed).
2584 2586
2585 2587 * IPython/iplib.py (handle_normal): add suport for multi-line
2586 2588 input with emtpy lines. This fixes
2587 2589 http://www.scipy.net/roundup/ipython/issue43 and a similar
2588 2590 discussion on the user list.
2589 2591
2590 2592 WARNING: a behavior change is necessarily introduced to support
2591 2593 blank lines: now a single blank line with whitespace does NOT
2592 2594 break the input loop, which means that when autoindent is on, by
2593 2595 default hitting return on the next (indented) line does NOT exit.
2594 2596
2595 2597 Instead, to exit a multiline input you can either have:
2596 2598
2597 2599 - TWO whitespace lines (just hit return again), or
2598 2600 - a single whitespace line of a different length than provided
2599 2601 by the autoindent (add or remove a space).
2600 2602
2601 2603 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
2602 2604 module to better organize all readline-related functionality.
2603 2605 I've deleted FlexCompleter and put all completion clases here.
2604 2606
2605 2607 * IPython/iplib.py (raw_input): improve indentation management.
2606 2608 It is now possible to paste indented code with autoindent on, and
2607 2609 the code is interpreted correctly (though it still looks bad on
2608 2610 screen, due to the line-oriented nature of ipython).
2609 2611 (MagicCompleter.complete): change behavior so that a TAB key on an
2610 2612 otherwise empty line actually inserts a tab, instead of completing
2611 2613 on the entire global namespace. This makes it easier to use the
2612 2614 TAB key for indentation. After a request by Hans Meine
2613 2615 <hans_meine-AT-gmx.net>
2614 2616 (_prefilter): add support so that typing plain 'exit' or 'quit'
2615 2617 does a sensible thing. Originally I tried to deviate as little as
2616 2618 possible from the default python behavior, but even that one may
2617 2619 change in this direction (thread on python-dev to that effect).
2618 2620 Regardless, ipython should do the right thing even if CPython's
2619 2621 '>>>' prompt doesn't.
2620 2622 (InteractiveShell): removed subclassing code.InteractiveConsole
2621 2623 class. By now we'd overridden just about all of its methods: I've
2622 2624 copied the remaining two over, and now ipython is a standalone
2623 2625 class. This will provide a clearer picture for the chainsaw
2624 2626 branch refactoring.
2625 2627
2626 2628 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2627 2629
2628 2630 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2629 2631 failures for objects which break when dir() is called on them.
2630 2632
2631 2633 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2632 2634 distinct local and global namespaces in the completer API. This
2633 2635 change allows us to properly handle completion with distinct
2634 2636 scopes, including in embedded instances (this had never really
2635 2637 worked correctly).
2636 2638
2637 2639 Note: this introduces a change in the constructor for
2638 2640 MagicCompleter, as a new global_namespace parameter is now the
2639 2641 second argument (the others were bumped one position).
2640 2642
2641 2643 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2642 2644
2643 2645 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2644 2646 embedded instances (which can be done now thanks to Vivian's
2645 2647 frame-handling fixes for pdb).
2646 2648 (InteractiveShell.__init__): Fix namespace handling problem in
2647 2649 embedded instances. We were overwriting __main__ unconditionally,
2648 2650 and this should only be done for 'full' (non-embedded) IPython;
2649 2651 embedded instances must respect the caller's __main__. Thanks to
2650 2652 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2651 2653
2652 2654 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2653 2655
2654 2656 * setup.py: added download_url to setup(). This registers the
2655 2657 download address at PyPI, which is not only useful to humans
2656 2658 browsing the site, but is also picked up by setuptools (the Eggs
2657 2659 machinery). Thanks to Ville and R. Kern for the info/discussion
2658 2660 on this.
2659 2661
2660 2662 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2661 2663
2662 2664 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2663 2665 This brings a lot of nice functionality to the pdb mode, which now
2664 2666 has tab-completion, syntax highlighting, and better stack handling
2665 2667 than before. Many thanks to Vivian De Smedt
2666 2668 <vivian-AT-vdesmedt.com> for the original patches.
2667 2669
2668 2670 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2669 2671
2670 2672 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2671 2673 sequence to consistently accept the banner argument. The
2672 2674 inconsistency was tripping SAGE, thanks to Gary Zablackis
2673 2675 <gzabl-AT-yahoo.com> for the report.
2674 2676
2675 2677 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2676 2678
2677 2679 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2678 2680 Fix bug where a naked 'alias' call in the ipythonrc file would
2679 2681 cause a crash. Bug reported by Jorgen Stenarson.
2680 2682
2681 2683 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2682 2684
2683 2685 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2684 2686 startup time.
2685 2687
2686 2688 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2687 2689 instances had introduced a bug with globals in normal code. Now
2688 2690 it's working in all cases.
2689 2691
2690 2692 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2691 2693 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2692 2694 has been introduced to set the default case sensitivity of the
2693 2695 searches. Users can still select either mode at runtime on a
2694 2696 per-search basis.
2695 2697
2696 2698 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2697 2699
2698 2700 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2699 2701 attributes in wildcard searches for subclasses. Modified version
2700 2702 of a patch by Jorgen.
2701 2703
2702 2704 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2703 2705
2704 2706 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2705 2707 embedded instances. I added a user_global_ns attribute to the
2706 2708 InteractiveShell class to handle this.
2707 2709
2708 2710 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2709 2711
2710 2712 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2711 2713 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2712 2714 (reported under win32, but may happen also in other platforms).
2713 2715 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2714 2716
2715 2717 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2716 2718
2717 2719 * IPython/Magic.py (magic_psearch): new support for wildcard
2718 2720 patterns. Now, typing ?a*b will list all names which begin with a
2719 2721 and end in b, for example. The %psearch magic has full
2720 2722 docstrings. Many thanks to JΓΆrgen Stenarson
2721 2723 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2722 2724 implementing this functionality.
2723 2725
2724 2726 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2725 2727
2726 2728 * Manual: fixed long-standing annoyance of double-dashes (as in
2727 2729 --prefix=~, for example) being stripped in the HTML version. This
2728 2730 is a latex2html bug, but a workaround was provided. Many thanks
2729 2731 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
2730 2732 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
2731 2733 rolling. This seemingly small issue had tripped a number of users
2732 2734 when first installing, so I'm glad to see it gone.
2733 2735
2734 2736 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2735 2737
2736 2738 * IPython/Extensions/numeric_formats.py: fix missing import,
2737 2739 reported by Stephen Walton.
2738 2740
2739 2741 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
2740 2742
2741 2743 * IPython/demo.py: finish demo module, fully documented now.
2742 2744
2743 2745 * IPython/genutils.py (file_read): simple little utility to read a
2744 2746 file and ensure it's closed afterwards.
2745 2747
2746 2748 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
2747 2749
2748 2750 * IPython/demo.py (Demo.__init__): added support for individually
2749 2751 tagging blocks for automatic execution.
2750 2752
2751 2753 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
2752 2754 syntax-highlighted python sources, requested by John.
2753 2755
2754 2756 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
2755 2757
2756 2758 * IPython/demo.py (Demo.again): fix bug where again() blocks after
2757 2759 finishing.
2758 2760
2759 2761 * IPython/genutils.py (shlex_split): moved from Magic to here,
2760 2762 where all 2.2 compatibility stuff lives. I needed it for demo.py.
2761 2763
2762 2764 * IPython/demo.py (Demo.__init__): added support for silent
2763 2765 blocks, improved marks as regexps, docstrings written.
2764 2766 (Demo.__init__): better docstring, added support for sys.argv.
2765 2767
2766 2768 * IPython/genutils.py (marquee): little utility used by the demo
2767 2769 code, handy in general.
2768 2770
2769 2771 * IPython/demo.py (Demo.__init__): new class for interactive
2770 2772 demos. Not documented yet, I just wrote it in a hurry for
2771 2773 scipy'05. Will docstring later.
2772 2774
2773 2775 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
2774 2776
2775 2777 * IPython/Shell.py (sigint_handler): Drastic simplification which
2776 2778 also seems to make Ctrl-C work correctly across threads! This is
2777 2779 so simple, that I can't beleive I'd missed it before. Needs more
2778 2780 testing, though.
2779 2781 (KBINT): Never mind, revert changes. I'm sure I'd tried something
2780 2782 like this before...
2781 2783
2782 2784 * IPython/genutils.py (get_home_dir): add protection against
2783 2785 non-dirs in win32 registry.
2784 2786
2785 2787 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
2786 2788 bug where dict was mutated while iterating (pysh crash).
2787 2789
2788 2790 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
2789 2791
2790 2792 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
2791 2793 spurious newlines added by this routine. After a report by
2792 2794 F. Mantegazza.
2793 2795
2794 2796 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
2795 2797
2796 2798 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
2797 2799 calls. These were a leftover from the GTK 1.x days, and can cause
2798 2800 problems in certain cases (after a report by John Hunter).
2799 2801
2800 2802 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
2801 2803 os.getcwd() fails at init time. Thanks to patch from David Remahl
2802 2804 <chmod007-AT-mac.com>.
2803 2805 (InteractiveShell.__init__): prevent certain special magics from
2804 2806 being shadowed by aliases. Closes
2805 2807 http://www.scipy.net/roundup/ipython/issue41.
2806 2808
2807 2809 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2808 2810
2809 2811 * IPython/iplib.py (InteractiveShell.complete): Added new
2810 2812 top-level completion method to expose the completion mechanism
2811 2813 beyond readline-based environments.
2812 2814
2813 2815 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2814 2816
2815 2817 * tools/ipsvnc (svnversion): fix svnversion capture.
2816 2818
2817 2819 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2818 2820 attribute to self, which was missing. Before, it was set by a
2819 2821 routine which in certain cases wasn't being called, so the
2820 2822 instance could end up missing the attribute. This caused a crash.
2821 2823 Closes http://www.scipy.net/roundup/ipython/issue40.
2822 2824
2823 2825 2005-08-16 Fernando Perez <fperez@colorado.edu>
2824 2826
2825 2827 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2826 2828 contains non-string attribute. Closes
2827 2829 http://www.scipy.net/roundup/ipython/issue38.
2828 2830
2829 2831 2005-08-14 Fernando Perez <fperez@colorado.edu>
2830 2832
2831 2833 * tools/ipsvnc: Minor improvements, to add changeset info.
2832 2834
2833 2835 2005-08-12 Fernando Perez <fperez@colorado.edu>
2834 2836
2835 2837 * IPython/iplib.py (runsource): remove self.code_to_run_src
2836 2838 attribute. I realized this is nothing more than
2837 2839 '\n'.join(self.buffer), and having the same data in two different
2838 2840 places is just asking for synchronization bugs. This may impact
2839 2841 people who have custom exception handlers, so I need to warn
2840 2842 ipython-dev about it (F. Mantegazza may use them).
2841 2843
2842 2844 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2843 2845
2844 2846 * IPython/genutils.py: fix 2.2 compatibility (generators)
2845 2847
2846 2848 2005-07-18 Fernando Perez <fperez@colorado.edu>
2847 2849
2848 2850 * IPython/genutils.py (get_home_dir): fix to help users with
2849 2851 invalid $HOME under win32.
2850 2852
2851 2853 2005-07-17 Fernando Perez <fperez@colorado.edu>
2852 2854
2853 2855 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2854 2856 some old hacks and clean up a bit other routines; code should be
2855 2857 simpler and a bit faster.
2856 2858
2857 2859 * IPython/iplib.py (interact): removed some last-resort attempts
2858 2860 to survive broken stdout/stderr. That code was only making it
2859 2861 harder to abstract out the i/o (necessary for gui integration),
2860 2862 and the crashes it could prevent were extremely rare in practice
2861 2863 (besides being fully user-induced in a pretty violent manner).
2862 2864
2863 2865 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2864 2866 Nothing major yet, but the code is simpler to read; this should
2865 2867 make it easier to do more serious modifications in the future.
2866 2868
2867 2869 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2868 2870 which broke in .15 (thanks to a report by Ville).
2869 2871
2870 2872 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2871 2873 be quite correct, I know next to nothing about unicode). This
2872 2874 will allow unicode strings to be used in prompts, amongst other
2873 2875 cases. It also will prevent ipython from crashing when unicode
2874 2876 shows up unexpectedly in many places. If ascii encoding fails, we
2875 2877 assume utf_8. Currently the encoding is not a user-visible
2876 2878 setting, though it could be made so if there is demand for it.
2877 2879
2878 2880 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2879 2881
2880 2882 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2881 2883
2882 2884 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2883 2885
2884 2886 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2885 2887 code can work transparently for 2.2/2.3.
2886 2888
2887 2889 2005-07-16 Fernando Perez <fperez@colorado.edu>
2888 2890
2889 2891 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2890 2892 out of the color scheme table used for coloring exception
2891 2893 tracebacks. This allows user code to add new schemes at runtime.
2892 2894 This is a minimally modified version of the patch at
2893 2895 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2894 2896 for the contribution.
2895 2897
2896 2898 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2897 2899 slightly modified version of the patch in
2898 2900 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2899 2901 to remove the previous try/except solution (which was costlier).
2900 2902 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2901 2903
2902 2904 2005-06-08 Fernando Perez <fperez@colorado.edu>
2903 2905
2904 2906 * IPython/iplib.py (write/write_err): Add methods to abstract all
2905 2907 I/O a bit more.
2906 2908
2907 2909 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2908 2910 warning, reported by Aric Hagberg, fix by JD Hunter.
2909 2911
2910 2912 2005-06-02 *** Released version 0.6.15
2911 2913
2912 2914 2005-06-01 Fernando Perez <fperez@colorado.edu>
2913 2915
2914 2916 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2915 2917 tab-completion of filenames within open-quoted strings. Note that
2916 2918 this requires that in ~/.ipython/ipythonrc, users change the
2917 2919 readline delimiters configuration to read:
2918 2920
2919 2921 readline_remove_delims -/~
2920 2922
2921 2923
2922 2924 2005-05-31 *** Released version 0.6.14
2923 2925
2924 2926 2005-05-29 Fernando Perez <fperez@colorado.edu>
2925 2927
2926 2928 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2927 2929 with files not on the filesystem. Reported by Eliyahu Sandler
2928 2930 <eli@gondolin.net>
2929 2931
2930 2932 2005-05-22 Fernando Perez <fperez@colorado.edu>
2931 2933
2932 2934 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2933 2935 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2934 2936
2935 2937 2005-05-19 Fernando Perez <fperez@colorado.edu>
2936 2938
2937 2939 * IPython/iplib.py (safe_execfile): close a file which could be
2938 2940 left open (causing problems in win32, which locks open files).
2939 2941 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2940 2942
2941 2943 2005-05-18 Fernando Perez <fperez@colorado.edu>
2942 2944
2943 2945 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2944 2946 keyword arguments correctly to safe_execfile().
2945 2947
2946 2948 2005-05-13 Fernando Perez <fperez@colorado.edu>
2947 2949
2948 2950 * ipython.1: Added info about Qt to manpage, and threads warning
2949 2951 to usage page (invoked with --help).
2950 2952
2951 2953 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2952 2954 new matcher (it goes at the end of the priority list) to do
2953 2955 tab-completion on named function arguments. Submitted by George
2954 2956 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2955 2957 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2956 2958 for more details.
2957 2959
2958 2960 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2959 2961 SystemExit exceptions in the script being run. Thanks to a report
2960 2962 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2961 2963 producing very annoying behavior when running unit tests.
2962 2964
2963 2965 2005-05-12 Fernando Perez <fperez@colorado.edu>
2964 2966
2965 2967 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2966 2968 which I'd broken (again) due to a changed regexp. In the process,
2967 2969 added ';' as an escape to auto-quote the whole line without
2968 2970 splitting its arguments. Thanks to a report by Jerry McRae
2969 2971 <qrs0xyc02-AT-sneakemail.com>.
2970 2972
2971 2973 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2972 2974 possible crashes caused by a TokenError. Reported by Ed Schofield
2973 2975 <schofield-AT-ftw.at>.
2974 2976
2975 2977 2005-05-06 Fernando Perez <fperez@colorado.edu>
2976 2978
2977 2979 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2978 2980
2979 2981 2005-04-29 Fernando Perez <fperez@colorado.edu>
2980 2982
2981 2983 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2982 2984 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2983 2985 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2984 2986 which provides support for Qt interactive usage (similar to the
2985 2987 existing one for WX and GTK). This had been often requested.
2986 2988
2987 2989 2005-04-14 *** Released version 0.6.13
2988 2990
2989 2991 2005-04-08 Fernando Perez <fperez@colorado.edu>
2990 2992
2991 2993 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2992 2994 from _ofind, which gets called on almost every input line. Now,
2993 2995 we only try to get docstrings if they are actually going to be
2994 2996 used (the overhead of fetching unnecessary docstrings can be
2995 2997 noticeable for certain objects, such as Pyro proxies).
2996 2998
2997 2999 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2998 3000 for completers. For some reason I had been passing them the state
2999 3001 variable, which completers never actually need, and was in
3000 3002 conflict with the rlcompleter API. Custom completers ONLY need to
3001 3003 take the text parameter.
3002 3004
3003 3005 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3004 3006 work correctly in pysh. I've also moved all the logic which used
3005 3007 to be in pysh.py here, which will prevent problems with future
3006 3008 upgrades. However, this time I must warn users to update their
3007 3009 pysh profile to include the line
3008 3010
3009 3011 import_all IPython.Extensions.InterpreterExec
3010 3012
3011 3013 because otherwise things won't work for them. They MUST also
3012 3014 delete pysh.py and the line
3013 3015
3014 3016 execfile pysh.py
3015 3017
3016 3018 from their ipythonrc-pysh.
3017 3019
3018 3020 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3019 3021 robust in the face of objects whose dir() returns non-strings
3020 3022 (which it shouldn't, but some broken libs like ITK do). Thanks to
3021 3023 a patch by John Hunter (implemented differently, though). Also
3022 3024 minor improvements by using .extend instead of + on lists.
3023 3025
3024 3026 * pysh.py:
3025 3027
3026 3028 2005-04-06 Fernando Perez <fperez@colorado.edu>
3027 3029
3028 3030 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3029 3031 by default, so that all users benefit from it. Those who don't
3030 3032 want it can still turn it off.
3031 3033
3032 3034 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3033 3035 config file, I'd forgotten about this, so users were getting it
3034 3036 off by default.
3035 3037
3036 3038 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3037 3039 consistency. Now magics can be called in multiline statements,
3038 3040 and python variables can be expanded in magic calls via $var.
3039 3041 This makes the magic system behave just like aliases or !system
3040 3042 calls.
3041 3043
3042 3044 2005-03-28 Fernando Perez <fperez@colorado.edu>
3043 3045
3044 3046 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3045 3047 expensive string additions for building command. Add support for
3046 3048 trailing ';' when autocall is used.
3047 3049
3048 3050 2005-03-26 Fernando Perez <fperez@colorado.edu>
3049 3051
3050 3052 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3051 3053 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3052 3054 ipython.el robust against prompts with any number of spaces
3053 3055 (including 0) after the ':' character.
3054 3056
3055 3057 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3056 3058 continuation prompt, which misled users to think the line was
3057 3059 already indented. Closes debian Bug#300847, reported to me by
3058 3060 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3059 3061
3060 3062 2005-03-23 Fernando Perez <fperez@colorado.edu>
3061 3063
3062 3064 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3063 3065 properly aligned if they have embedded newlines.
3064 3066
3065 3067 * IPython/iplib.py (runlines): Add a public method to expose
3066 3068 IPython's code execution machinery, so that users can run strings
3067 3069 as if they had been typed at the prompt interactively.
3068 3070 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3069 3071 methods which can call the system shell, but with python variable
3070 3072 expansion. The three such methods are: __IPYTHON__.system,
3071 3073 .getoutput and .getoutputerror. These need to be documented in a
3072 3074 'public API' section (to be written) of the manual.
3073 3075
3074 3076 2005-03-20 Fernando Perez <fperez@colorado.edu>
3075 3077
3076 3078 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3077 3079 for custom exception handling. This is quite powerful, and it
3078 3080 allows for user-installable exception handlers which can trap
3079 3081 custom exceptions at runtime and treat them separately from
3080 3082 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3081 3083 Mantegazza <mantegazza-AT-ill.fr>.
3082 3084 (InteractiveShell.set_custom_completer): public API function to
3083 3085 add new completers at runtime.
3084 3086
3085 3087 2005-03-19 Fernando Perez <fperez@colorado.edu>
3086 3088
3087 3089 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3088 3090 allow objects which provide their docstrings via non-standard
3089 3091 mechanisms (like Pyro proxies) to still be inspected by ipython's
3090 3092 ? system.
3091 3093
3092 3094 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3093 3095 automatic capture system. I tried quite hard to make it work
3094 3096 reliably, and simply failed. I tried many combinations with the
3095 3097 subprocess module, but eventually nothing worked in all needed
3096 3098 cases (not blocking stdin for the child, duplicating stdout
3097 3099 without blocking, etc). The new %sc/%sx still do capture to these
3098 3100 magical list/string objects which make shell use much more
3099 3101 conveninent, so not all is lost.
3100 3102
3101 3103 XXX - FIX MANUAL for the change above!
3102 3104
3103 3105 (runsource): I copied code.py's runsource() into ipython to modify
3104 3106 it a bit. Now the code object and source to be executed are
3105 3107 stored in ipython. This makes this info accessible to third-party
3106 3108 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3107 3109 Mantegazza <mantegazza-AT-ill.fr>.
3108 3110
3109 3111 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3110 3112 history-search via readline (like C-p/C-n). I'd wanted this for a
3111 3113 long time, but only recently found out how to do it. For users
3112 3114 who already have their ipythonrc files made and want this, just
3113 3115 add:
3114 3116
3115 3117 readline_parse_and_bind "\e[A": history-search-backward
3116 3118 readline_parse_and_bind "\e[B": history-search-forward
3117 3119
3118 3120 2005-03-18 Fernando Perez <fperez@colorado.edu>
3119 3121
3120 3122 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3121 3123 LSString and SList classes which allow transparent conversions
3122 3124 between list mode and whitespace-separated string.
3123 3125 (magic_r): Fix recursion problem in %r.
3124 3126
3125 3127 * IPython/genutils.py (LSString): New class to be used for
3126 3128 automatic storage of the results of all alias/system calls in _o
3127 3129 and _e (stdout/err). These provide a .l/.list attribute which
3128 3130 does automatic splitting on newlines. This means that for most
3129 3131 uses, you'll never need to do capturing of output with %sc/%sx
3130 3132 anymore, since ipython keeps this always done for you. Note that
3131 3133 only the LAST results are stored, the _o/e variables are
3132 3134 overwritten on each call. If you need to save their contents
3133 3135 further, simply bind them to any other name.
3134 3136
3135 3137 2005-03-17 Fernando Perez <fperez@colorado.edu>
3136 3138
3137 3139 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3138 3140 prompt namespace handling.
3139 3141
3140 3142 2005-03-16 Fernando Perez <fperez@colorado.edu>
3141 3143
3142 3144 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3143 3145 classic prompts to be '>>> ' (final space was missing, and it
3144 3146 trips the emacs python mode).
3145 3147 (BasePrompt.__str__): Added safe support for dynamic prompt
3146 3148 strings. Now you can set your prompt string to be '$x', and the
3147 3149 value of x will be printed from your interactive namespace. The
3148 3150 interpolation syntax includes the full Itpl support, so
3149 3151 ${foo()+x+bar()} is a valid prompt string now, and the function
3150 3152 calls will be made at runtime.
3151 3153
3152 3154 2005-03-15 Fernando Perez <fperez@colorado.edu>
3153 3155
3154 3156 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3155 3157 avoid name clashes in pylab. %hist still works, it just forwards
3156 3158 the call to %history.
3157 3159
3158 3160 2005-03-02 *** Released version 0.6.12
3159 3161
3160 3162 2005-03-02 Fernando Perez <fperez@colorado.edu>
3161 3163
3162 3164 * IPython/iplib.py (handle_magic): log magic calls properly as
3163 3165 ipmagic() function calls.
3164 3166
3165 3167 * IPython/Magic.py (magic_time): Improved %time to support
3166 3168 statements and provide wall-clock as well as CPU time.
3167 3169
3168 3170 2005-02-27 Fernando Perez <fperez@colorado.edu>
3169 3171
3170 3172 * IPython/hooks.py: New hooks module, to expose user-modifiable
3171 3173 IPython functionality in a clean manner. For now only the editor
3172 3174 hook is actually written, and other thigns which I intend to turn
3173 3175 into proper hooks aren't yet there. The display and prefilter
3174 3176 stuff, for example, should be hooks. But at least now the
3175 3177 framework is in place, and the rest can be moved here with more
3176 3178 time later. IPython had had a .hooks variable for a long time for
3177 3179 this purpose, but I'd never actually used it for anything.
3178 3180
3179 3181 2005-02-26 Fernando Perez <fperez@colorado.edu>
3180 3182
3181 3183 * IPython/ipmaker.py (make_IPython): make the default ipython
3182 3184 directory be called _ipython under win32, to follow more the
3183 3185 naming peculiarities of that platform (where buggy software like
3184 3186 Visual Sourcesafe breaks with .named directories). Reported by
3185 3187 Ville Vainio.
3186 3188
3187 3189 2005-02-23 Fernando Perez <fperez@colorado.edu>
3188 3190
3189 3191 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3190 3192 auto_aliases for win32 which were causing problems. Users can
3191 3193 define the ones they personally like.
3192 3194
3193 3195 2005-02-21 Fernando Perez <fperez@colorado.edu>
3194 3196
3195 3197 * IPython/Magic.py (magic_time): new magic to time execution of
3196 3198 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3197 3199
3198 3200 2005-02-19 Fernando Perez <fperez@colorado.edu>
3199 3201
3200 3202 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3201 3203 into keys (for prompts, for example).
3202 3204
3203 3205 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3204 3206 prompts in case users want them. This introduces a small behavior
3205 3207 change: ipython does not automatically add a space to all prompts
3206 3208 anymore. To get the old prompts with a space, users should add it
3207 3209 manually to their ipythonrc file, so for example prompt_in1 should
3208 3210 now read 'In [\#]: ' instead of 'In [\#]:'.
3209 3211 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3210 3212 file) to control left-padding of secondary prompts.
3211 3213
3212 3214 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3213 3215 the profiler can't be imported. Fix for Debian, which removed
3214 3216 profile.py because of License issues. I applied a slightly
3215 3217 modified version of the original Debian patch at
3216 3218 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3217 3219
3218 3220 2005-02-17 Fernando Perez <fperez@colorado.edu>
3219 3221
3220 3222 * IPython/genutils.py (native_line_ends): Fix bug which would
3221 3223 cause improper line-ends under win32 b/c I was not opening files
3222 3224 in binary mode. Bug report and fix thanks to Ville.
3223 3225
3224 3226 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3225 3227 trying to catch spurious foo[1] autocalls. My fix actually broke
3226 3228 ',/' autoquote/call with explicit escape (bad regexp).
3227 3229
3228 3230 2005-02-15 *** Released version 0.6.11
3229 3231
3230 3232 2005-02-14 Fernando Perez <fperez@colorado.edu>
3231 3233
3232 3234 * IPython/background_jobs.py: New background job management
3233 3235 subsystem. This is implemented via a new set of classes, and
3234 3236 IPython now provides a builtin 'jobs' object for background job
3235 3237 execution. A convenience %bg magic serves as a lightweight
3236 3238 frontend for starting the more common type of calls. This was
3237 3239 inspired by discussions with B. Granger and the BackgroundCommand
3238 3240 class described in the book Python Scripting for Computational
3239 3241 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3240 3242 (although ultimately no code from this text was used, as IPython's
3241 3243 system is a separate implementation).
3242 3244
3243 3245 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3244 3246 to control the completion of single/double underscore names
3245 3247 separately. As documented in the example ipytonrc file, the
3246 3248 readline_omit__names variable can now be set to 2, to omit even
3247 3249 single underscore names. Thanks to a patch by Brian Wong
3248 3250 <BrianWong-AT-AirgoNetworks.Com>.
3249 3251 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3250 3252 be autocalled as foo([1]) if foo were callable. A problem for
3251 3253 things which are both callable and implement __getitem__.
3252 3254 (init_readline): Fix autoindentation for win32. Thanks to a patch
3253 3255 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3254 3256
3255 3257 2005-02-12 Fernando Perez <fperez@colorado.edu>
3256 3258
3257 3259 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3258 3260 which I had written long ago to sort out user error messages which
3259 3261 may occur during startup. This seemed like a good idea initially,
3260 3262 but it has proven a disaster in retrospect. I don't want to
3261 3263 change much code for now, so my fix is to set the internal 'debug'
3262 3264 flag to true everywhere, whose only job was precisely to control
3263 3265 this subsystem. This closes issue 28 (as well as avoiding all
3264 3266 sorts of strange hangups which occur from time to time).
3265 3267
3266 3268 2005-02-07 Fernando Perez <fperez@colorado.edu>
3267 3269
3268 3270 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3269 3271 previous call produced a syntax error.
3270 3272
3271 3273 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3272 3274 classes without constructor.
3273 3275
3274 3276 2005-02-06 Fernando Perez <fperez@colorado.edu>
3275 3277
3276 3278 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3277 3279 completions with the results of each matcher, so we return results
3278 3280 to the user from all namespaces. This breaks with ipython
3279 3281 tradition, but I think it's a nicer behavior. Now you get all
3280 3282 possible completions listed, from all possible namespaces (python,
3281 3283 filesystem, magics...) After a request by John Hunter
3282 3284 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3283 3285
3284 3286 2005-02-05 Fernando Perez <fperez@colorado.edu>
3285 3287
3286 3288 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3287 3289 the call had quote characters in it (the quotes were stripped).
3288 3290
3289 3291 2005-01-31 Fernando Perez <fperez@colorado.edu>
3290 3292
3291 3293 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3292 3294 Itpl.itpl() to make the code more robust against psyco
3293 3295 optimizations.
3294 3296
3295 3297 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3296 3298 of causing an exception. Quicker, cleaner.
3297 3299
3298 3300 2005-01-28 Fernando Perez <fperez@colorado.edu>
3299 3301
3300 3302 * scripts/ipython_win_post_install.py (install): hardcode
3301 3303 sys.prefix+'python.exe' as the executable path. It turns out that
3302 3304 during the post-installation run, sys.executable resolves to the
3303 3305 name of the binary installer! I should report this as a distutils
3304 3306 bug, I think. I updated the .10 release with this tiny fix, to
3305 3307 avoid annoying the lists further.
3306 3308
3307 3309 2005-01-27 *** Released version 0.6.10
3308 3310
3309 3311 2005-01-27 Fernando Perez <fperez@colorado.edu>
3310 3312
3311 3313 * IPython/numutils.py (norm): Added 'inf' as optional name for
3312 3314 L-infinity norm, included references to mathworld.com for vector
3313 3315 norm definitions.
3314 3316 (amin/amax): added amin/amax for array min/max. Similar to what
3315 3317 pylab ships with after the recent reorganization of names.
3316 3318 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3317 3319
3318 3320 * ipython.el: committed Alex's recent fixes and improvements.
3319 3321 Tested with python-mode from CVS, and it looks excellent. Since
3320 3322 python-mode hasn't released anything in a while, I'm temporarily
3321 3323 putting a copy of today's CVS (v 4.70) of python-mode in:
3322 3324 http://ipython.scipy.org/tmp/python-mode.el
3323 3325
3324 3326 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3325 3327 sys.executable for the executable name, instead of assuming it's
3326 3328 called 'python.exe' (the post-installer would have produced broken
3327 3329 setups on systems with a differently named python binary).
3328 3330
3329 3331 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3330 3332 references to os.linesep, to make the code more
3331 3333 platform-independent. This is also part of the win32 coloring
3332 3334 fixes.
3333 3335
3334 3336 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3335 3337 lines, which actually cause coloring bugs because the length of
3336 3338 the line is very difficult to correctly compute with embedded
3337 3339 escapes. This was the source of all the coloring problems under
3338 3340 Win32. I think that _finally_, Win32 users have a properly
3339 3341 working ipython in all respects. This would never have happened
3340 3342 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3341 3343
3342 3344 2005-01-26 *** Released version 0.6.9
3343 3345
3344 3346 2005-01-25 Fernando Perez <fperez@colorado.edu>
3345 3347
3346 3348 * setup.py: finally, we have a true Windows installer, thanks to
3347 3349 the excellent work of Viktor Ransmayr
3348 3350 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3349 3351 Windows users. The setup routine is quite a bit cleaner thanks to
3350 3352 this, and the post-install script uses the proper functions to
3351 3353 allow a clean de-installation using the standard Windows Control
3352 3354 Panel.
3353 3355
3354 3356 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3355 3357 environment variable under all OSes (including win32) if
3356 3358 available. This will give consistency to win32 users who have set
3357 3359 this variable for any reason. If os.environ['HOME'] fails, the
3358 3360 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3359 3361
3360 3362 2005-01-24 Fernando Perez <fperez@colorado.edu>
3361 3363
3362 3364 * IPython/numutils.py (empty_like): add empty_like(), similar to
3363 3365 zeros_like() but taking advantage of the new empty() Numeric routine.
3364 3366
3365 3367 2005-01-23 *** Released version 0.6.8
3366 3368
3367 3369 2005-01-22 Fernando Perez <fperez@colorado.edu>
3368 3370
3369 3371 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3370 3372 automatic show() calls. After discussing things with JDH, it
3371 3373 turns out there are too many corner cases where this can go wrong.
3372 3374 It's best not to try to be 'too smart', and simply have ipython
3373 3375 reproduce as much as possible the default behavior of a normal
3374 3376 python shell.
3375 3377
3376 3378 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3377 3379 line-splitting regexp and _prefilter() to avoid calling getattr()
3378 3380 on assignments. This closes
3379 3381 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3380 3382 readline uses getattr(), so a simple <TAB> keypress is still
3381 3383 enough to trigger getattr() calls on an object.
3382 3384
3383 3385 2005-01-21 Fernando Perez <fperez@colorado.edu>
3384 3386
3385 3387 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3386 3388 docstring under pylab so it doesn't mask the original.
3387 3389
3388 3390 2005-01-21 *** Released version 0.6.7
3389 3391
3390 3392 2005-01-21 Fernando Perez <fperez@colorado.edu>
3391 3393
3392 3394 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3393 3395 signal handling for win32 users in multithreaded mode.
3394 3396
3395 3397 2005-01-17 Fernando Perez <fperez@colorado.edu>
3396 3398
3397 3399 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3398 3400 instances with no __init__. After a crash report by Norbert Nemec
3399 3401 <Norbert-AT-nemec-online.de>.
3400 3402
3401 3403 2005-01-14 Fernando Perez <fperez@colorado.edu>
3402 3404
3403 3405 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3404 3406 names for verbose exceptions, when multiple dotted names and the
3405 3407 'parent' object were present on the same line.
3406 3408
3407 3409 2005-01-11 Fernando Perez <fperez@colorado.edu>
3408 3410
3409 3411 * IPython/genutils.py (flag_calls): new utility to trap and flag
3410 3412 calls in functions. I need it to clean up matplotlib support.
3411 3413 Also removed some deprecated code in genutils.
3412 3414
3413 3415 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3414 3416 that matplotlib scripts called with %run, which don't call show()
3415 3417 themselves, still have their plotting windows open.
3416 3418
3417 3419 2005-01-05 Fernando Perez <fperez@colorado.edu>
3418 3420
3419 3421 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3420 3422 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3421 3423
3422 3424 2004-12-19 Fernando Perez <fperez@colorado.edu>
3423 3425
3424 3426 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3425 3427 parent_runcode, which was an eyesore. The same result can be
3426 3428 obtained with Python's regular superclass mechanisms.
3427 3429
3428 3430 2004-12-17 Fernando Perez <fperez@colorado.edu>
3429 3431
3430 3432 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3431 3433 reported by Prabhu.
3432 3434 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3433 3435 sys.stderr) instead of explicitly calling sys.stderr. This helps
3434 3436 maintain our I/O abstractions clean, for future GUI embeddings.
3435 3437
3436 3438 * IPython/genutils.py (info): added new utility for sys.stderr
3437 3439 unified info message handling (thin wrapper around warn()).
3438 3440
3439 3441 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3440 3442 composite (dotted) names on verbose exceptions.
3441 3443 (VerboseTB.nullrepr): harden against another kind of errors which
3442 3444 Python's inspect module can trigger, and which were crashing
3443 3445 IPython. Thanks to a report by Marco Lombardi
3444 3446 <mlombard-AT-ma010192.hq.eso.org>.
3445 3447
3446 3448 2004-12-13 *** Released version 0.6.6
3447 3449
3448 3450 2004-12-12 Fernando Perez <fperez@colorado.edu>
3449 3451
3450 3452 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3451 3453 generated by pygtk upon initialization if it was built without
3452 3454 threads (for matplotlib users). After a crash reported by
3453 3455 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3454 3456
3455 3457 * IPython/ipmaker.py (make_IPython): fix small bug in the
3456 3458 import_some parameter for multiple imports.
3457 3459
3458 3460 * IPython/iplib.py (ipmagic): simplified the interface of
3459 3461 ipmagic() to take a single string argument, just as it would be
3460 3462 typed at the IPython cmd line.
3461 3463 (ipalias): Added new ipalias() with an interface identical to
3462 3464 ipmagic(). This completes exposing a pure python interface to the
3463 3465 alias and magic system, which can be used in loops or more complex
3464 3466 code where IPython's automatic line mangling is not active.
3465 3467
3466 3468 * IPython/genutils.py (timing): changed interface of timing to
3467 3469 simply run code once, which is the most common case. timings()
3468 3470 remains unchanged, for the cases where you want multiple runs.
3469 3471
3470 3472 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3471 3473 bug where Python2.2 crashes with exec'ing code which does not end
3472 3474 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3473 3475 before.
3474 3476
3475 3477 2004-12-10 Fernando Perez <fperez@colorado.edu>
3476 3478
3477 3479 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3478 3480 -t to -T, to accomodate the new -t flag in %run (the %run and
3479 3481 %prun options are kind of intermixed, and it's not easy to change
3480 3482 this with the limitations of python's getopt).
3481 3483
3482 3484 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3483 3485 the execution of scripts. It's not as fine-tuned as timeit.py,
3484 3486 but it works from inside ipython (and under 2.2, which lacks
3485 3487 timeit.py). Optionally a number of runs > 1 can be given for
3486 3488 timing very short-running code.
3487 3489
3488 3490 * IPython/genutils.py (uniq_stable): new routine which returns a
3489 3491 list of unique elements in any iterable, but in stable order of
3490 3492 appearance. I needed this for the ultraTB fixes, and it's a handy
3491 3493 utility.
3492 3494
3493 3495 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3494 3496 dotted names in Verbose exceptions. This had been broken since
3495 3497 the very start, now x.y will properly be printed in a Verbose
3496 3498 traceback, instead of x being shown and y appearing always as an
3497 3499 'undefined global'. Getting this to work was a bit tricky,
3498 3500 because by default python tokenizers are stateless. Saved by
3499 3501 python's ability to easily add a bit of state to an arbitrary
3500 3502 function (without needing to build a full-blown callable object).
3501 3503
3502 3504 Also big cleanup of this code, which had horrendous runtime
3503 3505 lookups of zillions of attributes for colorization. Moved all
3504 3506 this code into a few templates, which make it cleaner and quicker.
3505 3507
3506 3508 Printout quality was also improved for Verbose exceptions: one
3507 3509 variable per line, and memory addresses are printed (this can be
3508 3510 quite handy in nasty debugging situations, which is what Verbose
3509 3511 is for).
3510 3512
3511 3513 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3512 3514 the command line as scripts to be loaded by embedded instances.
3513 3515 Doing so has the potential for an infinite recursion if there are
3514 3516 exceptions thrown in the process. This fixes a strange crash
3515 3517 reported by Philippe MULLER <muller-AT-irit.fr>.
3516 3518
3517 3519 2004-12-09 Fernando Perez <fperez@colorado.edu>
3518 3520
3519 3521 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3520 3522 to reflect new names in matplotlib, which now expose the
3521 3523 matlab-compatible interface via a pylab module instead of the
3522 3524 'matlab' name. The new code is backwards compatible, so users of
3523 3525 all matplotlib versions are OK. Patch by J. Hunter.
3524 3526
3525 3527 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3526 3528 of __init__ docstrings for instances (class docstrings are already
3527 3529 automatically printed). Instances with customized docstrings
3528 3530 (indep. of the class) are also recognized and all 3 separate
3529 3531 docstrings are printed (instance, class, constructor). After some
3530 3532 comments/suggestions by J. Hunter.
3531 3533
3532 3534 2004-12-05 Fernando Perez <fperez@colorado.edu>
3533 3535
3534 3536 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3535 3537 warnings when tab-completion fails and triggers an exception.
3536 3538
3537 3539 2004-12-03 Fernando Perez <fperez@colorado.edu>
3538 3540
3539 3541 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3540 3542 be triggered when using 'run -p'. An incorrect option flag was
3541 3543 being set ('d' instead of 'D').
3542 3544 (manpage): fix missing escaped \- sign.
3543 3545
3544 3546 2004-11-30 *** Released version 0.6.5
3545 3547
3546 3548 2004-11-30 Fernando Perez <fperez@colorado.edu>
3547 3549
3548 3550 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3549 3551 setting with -d option.
3550 3552
3551 3553 * setup.py (docfiles): Fix problem where the doc glob I was using
3552 3554 was COMPLETELY BROKEN. It was giving the right files by pure
3553 3555 accident, but failed once I tried to include ipython.el. Note:
3554 3556 glob() does NOT allow you to do exclusion on multiple endings!
3555 3557
3556 3558 2004-11-29 Fernando Perez <fperez@colorado.edu>
3557 3559
3558 3560 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3559 3561 the manpage as the source. Better formatting & consistency.
3560 3562
3561 3563 * IPython/Magic.py (magic_run): Added new -d option, to run
3562 3564 scripts under the control of the python pdb debugger. Note that
3563 3565 this required changing the %prun option -d to -D, to avoid a clash
3564 3566 (since %run must pass options to %prun, and getopt is too dumb to
3565 3567 handle options with string values with embedded spaces). Thanks
3566 3568 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
3567 3569 (magic_who_ls): added type matching to %who and %whos, so that one
3568 3570 can filter their output to only include variables of certain
3569 3571 types. Another suggestion by Matthew.
3570 3572 (magic_whos): Added memory summaries in kb and Mb for arrays.
3571 3573 (magic_who): Improve formatting (break lines every 9 vars).
3572 3574
3573 3575 2004-11-28 Fernando Perez <fperez@colorado.edu>
3574 3576
3575 3577 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
3576 3578 cache when empty lines were present.
3577 3579
3578 3580 2004-11-24 Fernando Perez <fperez@colorado.edu>
3579 3581
3580 3582 * IPython/usage.py (__doc__): document the re-activated threading
3581 3583 options for WX and GTK.
3582 3584
3583 3585 2004-11-23 Fernando Perez <fperez@colorado.edu>
3584 3586
3585 3587 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
3586 3588 the -wthread and -gthread options, along with a new -tk one to try
3587 3589 and coordinate Tk threading with wx/gtk. The tk support is very
3588 3590 platform dependent, since it seems to require Tcl and Tk to be
3589 3591 built with threads (Fedora1/2 appears NOT to have it, but in
3590 3592 Prabhu's Debian boxes it works OK). But even with some Tk
3591 3593 limitations, this is a great improvement.
3592 3594
3593 3595 * IPython/Prompts.py (prompt_specials_color): Added \t for time
3594 3596 info in user prompts. Patch by Prabhu.
3595 3597
3596 3598 2004-11-18 Fernando Perez <fperez@colorado.edu>
3597 3599
3598 3600 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
3599 3601 EOFErrors and bail, to avoid infinite loops if a non-terminating
3600 3602 file is fed into ipython. Patch submitted in issue 19 by user,
3601 3603 many thanks.
3602 3604
3603 3605 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
3604 3606 autoquote/parens in continuation prompts, which can cause lots of
3605 3607 problems. Closes roundup issue 20.
3606 3608
3607 3609 2004-11-17 Fernando Perez <fperez@colorado.edu>
3608 3610
3609 3611 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
3610 3612 reported as debian bug #280505. I'm not sure my local changelog
3611 3613 entry has the proper debian format (Jack?).
3612 3614
3613 3615 2004-11-08 *** Released version 0.6.4
3614 3616
3615 3617 2004-11-08 Fernando Perez <fperez@colorado.edu>
3616 3618
3617 3619 * IPython/iplib.py (init_readline): Fix exit message for Windows
3618 3620 when readline is active. Thanks to a report by Eric Jones
3619 3621 <eric-AT-enthought.com>.
3620 3622
3621 3623 2004-11-07 Fernando Perez <fperez@colorado.edu>
3622 3624
3623 3625 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3624 3626 sometimes seen by win2k/cygwin users.
3625 3627
3626 3628 2004-11-06 Fernando Perez <fperez@colorado.edu>
3627 3629
3628 3630 * IPython/iplib.py (interact): Change the handling of %Exit from
3629 3631 trying to propagate a SystemExit to an internal ipython flag.
3630 3632 This is less elegant than using Python's exception mechanism, but
3631 3633 I can't get that to work reliably with threads, so under -pylab
3632 3634 %Exit was hanging IPython. Cross-thread exception handling is
3633 3635 really a bitch. Thaks to a bug report by Stephen Walton
3634 3636 <stephen.walton-AT-csun.edu>.
3635 3637
3636 3638 2004-11-04 Fernando Perez <fperez@colorado.edu>
3637 3639
3638 3640 * IPython/iplib.py (raw_input_original): store a pointer to the
3639 3641 true raw_input to harden against code which can modify it
3640 3642 (wx.py.PyShell does this and would otherwise crash ipython).
3641 3643 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3642 3644
3643 3645 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3644 3646 Ctrl-C problem, which does not mess up the input line.
3645 3647
3646 3648 2004-11-03 Fernando Perez <fperez@colorado.edu>
3647 3649
3648 3650 * IPython/Release.py: Changed licensing to BSD, in all files.
3649 3651 (name): lowercase name for tarball/RPM release.
3650 3652
3651 3653 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3652 3654 use throughout ipython.
3653 3655
3654 3656 * IPython/Magic.py (Magic._ofind): Switch to using the new
3655 3657 OInspect.getdoc() function.
3656 3658
3657 3659 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3658 3660 of the line currently being canceled via Ctrl-C. It's extremely
3659 3661 ugly, but I don't know how to do it better (the problem is one of
3660 3662 handling cross-thread exceptions).
3661 3663
3662 3664 2004-10-28 Fernando Perez <fperez@colorado.edu>
3663 3665
3664 3666 * IPython/Shell.py (signal_handler): add signal handlers to trap
3665 3667 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3666 3668 report by Francesc Alted.
3667 3669
3668 3670 2004-10-21 Fernando Perez <fperez@colorado.edu>
3669 3671
3670 3672 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3671 3673 to % for pysh syntax extensions.
3672 3674
3673 3675 2004-10-09 Fernando Perez <fperez@colorado.edu>
3674 3676
3675 3677 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3676 3678 arrays to print a more useful summary, without calling str(arr).
3677 3679 This avoids the problem of extremely lengthy computations which
3678 3680 occur if arr is large, and appear to the user as a system lockup
3679 3681 with 100% cpu activity. After a suggestion by Kristian Sandberg
3680 3682 <Kristian.Sandberg@colorado.edu>.
3681 3683 (Magic.__init__): fix bug in global magic escapes not being
3682 3684 correctly set.
3683 3685
3684 3686 2004-10-08 Fernando Perez <fperez@colorado.edu>
3685 3687
3686 3688 * IPython/Magic.py (__license__): change to absolute imports of
3687 3689 ipython's own internal packages, to start adapting to the absolute
3688 3690 import requirement of PEP-328.
3689 3691
3690 3692 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3691 3693 files, and standardize author/license marks through the Release
3692 3694 module instead of having per/file stuff (except for files with
3693 3695 particular licenses, like the MIT/PSF-licensed codes).
3694 3696
3695 3697 * IPython/Debugger.py: remove dead code for python 2.1
3696 3698
3697 3699 2004-10-04 Fernando Perez <fperez@colorado.edu>
3698 3700
3699 3701 * IPython/iplib.py (ipmagic): New function for accessing magics
3700 3702 via a normal python function call.
3701 3703
3702 3704 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3703 3705 from '@' to '%', to accomodate the new @decorator syntax of python
3704 3706 2.4.
3705 3707
3706 3708 2004-09-29 Fernando Perez <fperez@colorado.edu>
3707 3709
3708 3710 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3709 3711 matplotlib.use to prevent running scripts which try to switch
3710 3712 interactive backends from within ipython. This will just crash
3711 3713 the python interpreter, so we can't allow it (but a detailed error
3712 3714 is given to the user).
3713 3715
3714 3716 2004-09-28 Fernando Perez <fperez@colorado.edu>
3715 3717
3716 3718 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3717 3719 matplotlib-related fixes so that using @run with non-matplotlib
3718 3720 scripts doesn't pop up spurious plot windows. This requires
3719 3721 matplotlib >= 0.63, where I had to make some changes as well.
3720 3722
3721 3723 * IPython/ipmaker.py (make_IPython): update version requirement to
3722 3724 python 2.2.
3723 3725
3724 3726 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
3725 3727 banner arg for embedded customization.
3726 3728
3727 3729 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
3728 3730 explicit uses of __IP as the IPython's instance name. Now things
3729 3731 are properly handled via the shell.name value. The actual code
3730 3732 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
3731 3733 is much better than before. I'll clean things completely when the
3732 3734 magic stuff gets a real overhaul.
3733 3735
3734 3736 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
3735 3737 minor changes to debian dir.
3736 3738
3737 3739 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
3738 3740 pointer to the shell itself in the interactive namespace even when
3739 3741 a user-supplied dict is provided. This is needed for embedding
3740 3742 purposes (found by tests with Michel Sanner).
3741 3743
3742 3744 2004-09-27 Fernando Perez <fperez@colorado.edu>
3743 3745
3744 3746 * IPython/UserConfig/ipythonrc: remove []{} from
3745 3747 readline_remove_delims, so that things like [modname.<TAB> do
3746 3748 proper completion. This disables [].TAB, but that's a less common
3747 3749 case than module names in list comprehensions, for example.
3748 3750 Thanks to a report by Andrea Riciputi.
3749 3751
3750 3752 2004-09-09 Fernando Perez <fperez@colorado.edu>
3751 3753
3752 3754 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
3753 3755 blocking problems in win32 and osx. Fix by John.
3754 3756
3755 3757 2004-09-08 Fernando Perez <fperez@colorado.edu>
3756 3758
3757 3759 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
3758 3760 for Win32 and OSX. Fix by John Hunter.
3759 3761
3760 3762 2004-08-30 *** Released version 0.6.3
3761 3763
3762 3764 2004-08-30 Fernando Perez <fperez@colorado.edu>
3763 3765
3764 3766 * setup.py (isfile): Add manpages to list of dependent files to be
3765 3767 updated.
3766 3768
3767 3769 2004-08-27 Fernando Perez <fperez@colorado.edu>
3768 3770
3769 3771 * IPython/Shell.py (start): I've disabled -wthread and -gthread
3770 3772 for now. They don't really work with standalone WX/GTK code
3771 3773 (though matplotlib IS working fine with both of those backends).
3772 3774 This will neeed much more testing. I disabled most things with
3773 3775 comments, so turning it back on later should be pretty easy.
3774 3776
3775 3777 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
3776 3778 autocalling of expressions like r'foo', by modifying the line
3777 3779 split regexp. Closes
3778 3780 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
3779 3781 Riley <ipythonbugs-AT-sabi.net>.
3780 3782 (InteractiveShell.mainloop): honor --nobanner with banner
3781 3783 extensions.
3782 3784
3783 3785 * IPython/Shell.py: Significant refactoring of all classes, so
3784 3786 that we can really support ALL matplotlib backends and threading
3785 3787 models (John spotted a bug with Tk which required this). Now we
3786 3788 should support single-threaded, WX-threads and GTK-threads, both
3787 3789 for generic code and for matplotlib.
3788 3790
3789 3791 * IPython/ipmaker.py (__call__): Changed -mpthread option to
3790 3792 -pylab, to simplify things for users. Will also remove the pylab
3791 3793 profile, since now all of matplotlib configuration is directly
3792 3794 handled here. This also reduces startup time.
3793 3795
3794 3796 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
3795 3797 shell wasn't being correctly called. Also in IPShellWX.
3796 3798
3797 3799 * IPython/iplib.py (InteractiveShell.__init__): Added option to
3798 3800 fine-tune banner.
3799 3801
3800 3802 * IPython/numutils.py (spike): Deprecate these spike functions,
3801 3803 delete (long deprecated) gnuplot_exec handler.
3802 3804
3803 3805 2004-08-26 Fernando Perez <fperez@colorado.edu>
3804 3806
3805 3807 * ipython.1: Update for threading options, plus some others which
3806 3808 were missing.
3807 3809
3808 3810 * IPython/ipmaker.py (__call__): Added -wthread option for
3809 3811 wxpython thread handling. Make sure threading options are only
3810 3812 valid at the command line.
3811 3813
3812 3814 * scripts/ipython: moved shell selection into a factory function
3813 3815 in Shell.py, to keep the starter script to a minimum.
3814 3816
3815 3817 2004-08-25 Fernando Perez <fperez@colorado.edu>
3816 3818
3817 3819 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3818 3820 John. Along with some recent changes he made to matplotlib, the
3819 3821 next versions of both systems should work very well together.
3820 3822
3821 3823 2004-08-24 Fernando Perez <fperez@colorado.edu>
3822 3824
3823 3825 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3824 3826 tried to switch the profiling to using hotshot, but I'm getting
3825 3827 strange errors from prof.runctx() there. I may be misreading the
3826 3828 docs, but it looks weird. For now the profiling code will
3827 3829 continue to use the standard profiler.
3828 3830
3829 3831 2004-08-23 Fernando Perez <fperez@colorado.edu>
3830 3832
3831 3833 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3832 3834 threaded shell, by John Hunter. It's not quite ready yet, but
3833 3835 close.
3834 3836
3835 3837 2004-08-22 Fernando Perez <fperez@colorado.edu>
3836 3838
3837 3839 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3838 3840 in Magic and ultraTB.
3839 3841
3840 3842 * ipython.1: document threading options in manpage.
3841 3843
3842 3844 * scripts/ipython: Changed name of -thread option to -gthread,
3843 3845 since this is GTK specific. I want to leave the door open for a
3844 3846 -wthread option for WX, which will most likely be necessary. This
3845 3847 change affects usage and ipmaker as well.
3846 3848
3847 3849 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3848 3850 handle the matplotlib shell issues. Code by John Hunter
3849 3851 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3850 3852 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3851 3853 broken (and disabled for end users) for now, but it puts the
3852 3854 infrastructure in place.
3853 3855
3854 3856 2004-08-21 Fernando Perez <fperez@colorado.edu>
3855 3857
3856 3858 * ipythonrc-pylab: Add matplotlib support.
3857 3859
3858 3860 * matplotlib_config.py: new files for matplotlib support, part of
3859 3861 the pylab profile.
3860 3862
3861 3863 * IPython/usage.py (__doc__): documented the threading options.
3862 3864
3863 3865 2004-08-20 Fernando Perez <fperez@colorado.edu>
3864 3866
3865 3867 * ipython: Modified the main calling routine to handle the -thread
3866 3868 and -mpthread options. This needs to be done as a top-level hack,
3867 3869 because it determines which class to instantiate for IPython
3868 3870 itself.
3869 3871
3870 3872 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3871 3873 classes to support multithreaded GTK operation without blocking,
3872 3874 and matplotlib with all backends. This is a lot of still very
3873 3875 experimental code, and threads are tricky. So it may still have a
3874 3876 few rough edges... This code owes a lot to
3875 3877 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3876 3878 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3877 3879 to John Hunter for all the matplotlib work.
3878 3880
3879 3881 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3880 3882 options for gtk thread and matplotlib support.
3881 3883
3882 3884 2004-08-16 Fernando Perez <fperez@colorado.edu>
3883 3885
3884 3886 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3885 3887 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3886 3888 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3887 3889
3888 3890 2004-08-11 Fernando Perez <fperez@colorado.edu>
3889 3891
3890 3892 * setup.py (isfile): Fix build so documentation gets updated for
3891 3893 rpms (it was only done for .tgz builds).
3892 3894
3893 3895 2004-08-10 Fernando Perez <fperez@colorado.edu>
3894 3896
3895 3897 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3896 3898
3897 3899 * iplib.py : Silence syntax error exceptions in tab-completion.
3898 3900
3899 3901 2004-08-05 Fernando Perez <fperez@colorado.edu>
3900 3902
3901 3903 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3902 3904 'color off' mark for continuation prompts. This was causing long
3903 3905 continuation lines to mis-wrap.
3904 3906
3905 3907 2004-08-01 Fernando Perez <fperez@colorado.edu>
3906 3908
3907 3909 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3908 3910 for building ipython to be a parameter. All this is necessary
3909 3911 right now to have a multithreaded version, but this insane
3910 3912 non-design will be cleaned up soon. For now, it's a hack that
3911 3913 works.
3912 3914
3913 3915 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3914 3916 args in various places. No bugs so far, but it's a dangerous
3915 3917 practice.
3916 3918
3917 3919 2004-07-31 Fernando Perez <fperez@colorado.edu>
3918 3920
3919 3921 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3920 3922 fix completion of files with dots in their names under most
3921 3923 profiles (pysh was OK because the completion order is different).
3922 3924
3923 3925 2004-07-27 Fernando Perez <fperez@colorado.edu>
3924 3926
3925 3927 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3926 3928 keywords manually, b/c the one in keyword.py was removed in python
3927 3929 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3928 3930 This is NOT a bug under python 2.3 and earlier.
3929 3931
3930 3932 2004-07-26 Fernando Perez <fperez@colorado.edu>
3931 3933
3932 3934 * IPython/ultraTB.py (VerboseTB.text): Add another
3933 3935 linecache.checkcache() call to try to prevent inspect.py from
3934 3936 crashing under python 2.3. I think this fixes
3935 3937 http://www.scipy.net/roundup/ipython/issue17.
3936 3938
3937 3939 2004-07-26 *** Released version 0.6.2
3938 3940
3939 3941 2004-07-26 Fernando Perez <fperez@colorado.edu>
3940 3942
3941 3943 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3942 3944 fail for any number.
3943 3945 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3944 3946 empty bookmarks.
3945 3947
3946 3948 2004-07-26 *** Released version 0.6.1
3947 3949
3948 3950 2004-07-26 Fernando Perez <fperez@colorado.edu>
3949 3951
3950 3952 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3951 3953
3952 3954 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3953 3955 escaping '()[]{}' in filenames.
3954 3956
3955 3957 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3956 3958 Python 2.2 users who lack a proper shlex.split.
3957 3959
3958 3960 2004-07-19 Fernando Perez <fperez@colorado.edu>
3959 3961
3960 3962 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3961 3963 for reading readline's init file. I follow the normal chain:
3962 3964 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3963 3965 report by Mike Heeter. This closes
3964 3966 http://www.scipy.net/roundup/ipython/issue16.
3965 3967
3966 3968 2004-07-18 Fernando Perez <fperez@colorado.edu>
3967 3969
3968 3970 * IPython/iplib.py (__init__): Add better handling of '\' under
3969 3971 Win32 for filenames. After a patch by Ville.
3970 3972
3971 3973 2004-07-17 Fernando Perez <fperez@colorado.edu>
3972 3974
3973 3975 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3974 3976 autocalling would be triggered for 'foo is bar' if foo is
3975 3977 callable. I also cleaned up the autocall detection code to use a
3976 3978 regexp, which is faster. Bug reported by Alexander Schmolck.
3977 3979
3978 3980 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3979 3981 '?' in them would confuse the help system. Reported by Alex
3980 3982 Schmolck.
3981 3983
3982 3984 2004-07-16 Fernando Perez <fperez@colorado.edu>
3983 3985
3984 3986 * IPython/GnuplotInteractive.py (__all__): added plot2.
3985 3987
3986 3988 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3987 3989 plotting dictionaries, lists or tuples of 1d arrays.
3988 3990
3989 3991 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3990 3992 optimizations.
3991 3993
3992 3994 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3993 3995 the information which was there from Janko's original IPP code:
3994 3996
3995 3997 03.05.99 20:53 porto.ifm.uni-kiel.de
3996 3998 --Started changelog.
3997 3999 --make clear do what it say it does
3998 4000 --added pretty output of lines from inputcache
3999 4001 --Made Logger a mixin class, simplifies handling of switches
4000 4002 --Added own completer class. .string<TAB> expands to last history
4001 4003 line which starts with string. The new expansion is also present
4002 4004 with Ctrl-r from the readline library. But this shows, who this
4003 4005 can be done for other cases.
4004 4006 --Added convention that all shell functions should accept a
4005 4007 parameter_string This opens the door for different behaviour for
4006 4008 each function. @cd is a good example of this.
4007 4009
4008 4010 04.05.99 12:12 porto.ifm.uni-kiel.de
4009 4011 --added logfile rotation
4010 4012 --added new mainloop method which freezes first the namespace
4011 4013
4012 4014 07.05.99 21:24 porto.ifm.uni-kiel.de
4013 4015 --added the docreader classes. Now there is a help system.
4014 4016 -This is only a first try. Currently it's not easy to put new
4015 4017 stuff in the indices. But this is the way to go. Info would be
4016 4018 better, but HTML is every where and not everybody has an info
4017 4019 system installed and it's not so easy to change html-docs to info.
4018 4020 --added global logfile option
4019 4021 --there is now a hook for object inspection method pinfo needs to
4020 4022 be provided for this. Can be reached by two '??'.
4021 4023
4022 4024 08.05.99 20:51 porto.ifm.uni-kiel.de
4023 4025 --added a README
4024 4026 --bug in rc file. Something has changed so functions in the rc
4025 4027 file need to reference the shell and not self. Not clear if it's a
4026 4028 bug or feature.
4027 4029 --changed rc file for new behavior
4028 4030
4029 4031 2004-07-15 Fernando Perez <fperez@colorado.edu>
4030 4032
4031 4033 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4032 4034 cache was falling out of sync in bizarre manners when multi-line
4033 4035 input was present. Minor optimizations and cleanup.
4034 4036
4035 4037 (Logger): Remove old Changelog info for cleanup. This is the
4036 4038 information which was there from Janko's original code:
4037 4039
4038 4040 Changes to Logger: - made the default log filename a parameter
4039 4041
4040 4042 - put a check for lines beginning with !@? in log(). Needed
4041 4043 (even if the handlers properly log their lines) for mid-session
4042 4044 logging activation to work properly. Without this, lines logged
4043 4045 in mid session, which get read from the cache, would end up
4044 4046 'bare' (with !@? in the open) in the log. Now they are caught
4045 4047 and prepended with a #.
4046 4048
4047 4049 * IPython/iplib.py (InteractiveShell.init_readline): added check
4048 4050 in case MagicCompleter fails to be defined, so we don't crash.
4049 4051
4050 4052 2004-07-13 Fernando Perez <fperez@colorado.edu>
4051 4053
4052 4054 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4053 4055 of EPS if the requested filename ends in '.eps'.
4054 4056
4055 4057 2004-07-04 Fernando Perez <fperez@colorado.edu>
4056 4058
4057 4059 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4058 4060 escaping of quotes when calling the shell.
4059 4061
4060 4062 2004-07-02 Fernando Perez <fperez@colorado.edu>
4061 4063
4062 4064 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4063 4065 gettext not working because we were clobbering '_'. Fixes
4064 4066 http://www.scipy.net/roundup/ipython/issue6.
4065 4067
4066 4068 2004-07-01 Fernando Perez <fperez@colorado.edu>
4067 4069
4068 4070 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4069 4071 into @cd. Patch by Ville.
4070 4072
4071 4073 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4072 4074 new function to store things after ipmaker runs. Patch by Ville.
4073 4075 Eventually this will go away once ipmaker is removed and the class
4074 4076 gets cleaned up, but for now it's ok. Key functionality here is
4075 4077 the addition of the persistent storage mechanism, a dict for
4076 4078 keeping data across sessions (for now just bookmarks, but more can
4077 4079 be implemented later).
4078 4080
4079 4081 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4080 4082 persistent across sections. Patch by Ville, I modified it
4081 4083 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4082 4084 added a '-l' option to list all bookmarks.
4083 4085
4084 4086 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4085 4087 center for cleanup. Registered with atexit.register(). I moved
4086 4088 here the old exit_cleanup(). After a patch by Ville.
4087 4089
4088 4090 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4089 4091 characters in the hacked shlex_split for python 2.2.
4090 4092
4091 4093 * IPython/iplib.py (file_matches): more fixes to filenames with
4092 4094 whitespace in them. It's not perfect, but limitations in python's
4093 4095 readline make it impossible to go further.
4094 4096
4095 4097 2004-06-29 Fernando Perez <fperez@colorado.edu>
4096 4098
4097 4099 * IPython/iplib.py (file_matches): escape whitespace correctly in
4098 4100 filename completions. Bug reported by Ville.
4099 4101
4100 4102 2004-06-28 Fernando Perez <fperez@colorado.edu>
4101 4103
4102 4104 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4103 4105 the history file will be called 'history-PROFNAME' (or just
4104 4106 'history' if no profile is loaded). I was getting annoyed at
4105 4107 getting my Numerical work history clobbered by pysh sessions.
4106 4108
4107 4109 * IPython/iplib.py (InteractiveShell.__init__): Internal
4108 4110 getoutputerror() function so that we can honor the system_verbose
4109 4111 flag for _all_ system calls. I also added escaping of #
4110 4112 characters here to avoid confusing Itpl.
4111 4113
4112 4114 * IPython/Magic.py (shlex_split): removed call to shell in
4113 4115 parse_options and replaced it with shlex.split(). The annoying
4114 4116 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4115 4117 to backport it from 2.3, with several frail hacks (the shlex
4116 4118 module is rather limited in 2.2). Thanks to a suggestion by Ville
4117 4119 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4118 4120 problem.
4119 4121
4120 4122 (Magic.magic_system_verbose): new toggle to print the actual
4121 4123 system calls made by ipython. Mainly for debugging purposes.
4122 4124
4123 4125 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4124 4126 doesn't support persistence. Reported (and fix suggested) by
4125 4127 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4126 4128
4127 4129 2004-06-26 Fernando Perez <fperez@colorado.edu>
4128 4130
4129 4131 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4130 4132 continue prompts.
4131 4133
4132 4134 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4133 4135 function (basically a big docstring) and a few more things here to
4134 4136 speedup startup. pysh.py is now very lightweight. We want because
4135 4137 it gets execfile'd, while InterpreterExec gets imported, so
4136 4138 byte-compilation saves time.
4137 4139
4138 4140 2004-06-25 Fernando Perez <fperez@colorado.edu>
4139 4141
4140 4142 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4141 4143 -NUM', which was recently broken.
4142 4144
4143 4145 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4144 4146 in multi-line input (but not !!, which doesn't make sense there).
4145 4147
4146 4148 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4147 4149 It's just too useful, and people can turn it off in the less
4148 4150 common cases where it's a problem.
4149 4151
4150 4152 2004-06-24 Fernando Perez <fperez@colorado.edu>
4151 4153
4152 4154 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4153 4155 special syntaxes (like alias calling) is now allied in multi-line
4154 4156 input. This is still _very_ experimental, but it's necessary for
4155 4157 efficient shell usage combining python looping syntax with system
4156 4158 calls. For now it's restricted to aliases, I don't think it
4157 4159 really even makes sense to have this for magics.
4158 4160
4159 4161 2004-06-23 Fernando Perez <fperez@colorado.edu>
4160 4162
4161 4163 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4162 4164 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4163 4165
4164 4166 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4165 4167 extensions under Windows (after code sent by Gary Bishop). The
4166 4168 extensions considered 'executable' are stored in IPython's rc
4167 4169 structure as win_exec_ext.
4168 4170
4169 4171 * IPython/genutils.py (shell): new function, like system() but
4170 4172 without return value. Very useful for interactive shell work.
4171 4173
4172 4174 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4173 4175 delete aliases.
4174 4176
4175 4177 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4176 4178 sure that the alias table doesn't contain python keywords.
4177 4179
4178 4180 2004-06-21 Fernando Perez <fperez@colorado.edu>
4179 4181
4180 4182 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4181 4183 non-existent items are found in $PATH. Reported by Thorsten.
4182 4184
4183 4185 2004-06-20 Fernando Perez <fperez@colorado.edu>
4184 4186
4185 4187 * IPython/iplib.py (complete): modified the completer so that the
4186 4188 order of priorities can be easily changed at runtime.
4187 4189
4188 4190 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4189 4191 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4190 4192
4191 4193 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4192 4194 expand Python variables prepended with $ in all system calls. The
4193 4195 same was done to InteractiveShell.handle_shell_escape. Now all
4194 4196 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4195 4197 expansion of python variables and expressions according to the
4196 4198 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4197 4199
4198 4200 Though PEP-215 has been rejected, a similar (but simpler) one
4199 4201 seems like it will go into Python 2.4, PEP-292 -
4200 4202 http://www.python.org/peps/pep-0292.html.
4201 4203
4202 4204 I'll keep the full syntax of PEP-215, since IPython has since the
4203 4205 start used Ka-Ping Yee's reference implementation discussed there
4204 4206 (Itpl), and I actually like the powerful semantics it offers.
4205 4207
4206 4208 In order to access normal shell variables, the $ has to be escaped
4207 4209 via an extra $. For example:
4208 4210
4209 4211 In [7]: PATH='a python variable'
4210 4212
4211 4213 In [8]: !echo $PATH
4212 4214 a python variable
4213 4215
4214 4216 In [9]: !echo $$PATH
4215 4217 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4216 4218
4217 4219 (Magic.parse_options): escape $ so the shell doesn't evaluate
4218 4220 things prematurely.
4219 4221
4220 4222 * IPython/iplib.py (InteractiveShell.call_alias): added the
4221 4223 ability for aliases to expand python variables via $.
4222 4224
4223 4225 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4224 4226 system, now there's a @rehash/@rehashx pair of magics. These work
4225 4227 like the csh rehash command, and can be invoked at any time. They
4226 4228 build a table of aliases to everything in the user's $PATH
4227 4229 (@rehash uses everything, @rehashx is slower but only adds
4228 4230 executable files). With this, the pysh.py-based shell profile can
4229 4231 now simply call rehash upon startup, and full access to all
4230 4232 programs in the user's path is obtained.
4231 4233
4232 4234 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4233 4235 functionality is now fully in place. I removed the old dynamic
4234 4236 code generation based approach, in favor of a much lighter one
4235 4237 based on a simple dict. The advantage is that this allows me to
4236 4238 now have thousands of aliases with negligible cost (unthinkable
4237 4239 with the old system).
4238 4240
4239 4241 2004-06-19 Fernando Perez <fperez@colorado.edu>
4240 4242
4241 4243 * IPython/iplib.py (__init__): extended MagicCompleter class to
4242 4244 also complete (last in priority) on user aliases.
4243 4245
4244 4246 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4245 4247 call to eval.
4246 4248 (ItplNS.__init__): Added a new class which functions like Itpl,
4247 4249 but allows configuring the namespace for the evaluation to occur
4248 4250 in.
4249 4251
4250 4252 2004-06-18 Fernando Perez <fperez@colorado.edu>
4251 4253
4252 4254 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4253 4255 better message when 'exit' or 'quit' are typed (a common newbie
4254 4256 confusion).
4255 4257
4256 4258 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4257 4259 check for Windows users.
4258 4260
4259 4261 * IPython/iplib.py (InteractiveShell.user_setup): removed
4260 4262 disabling of colors for Windows. I'll test at runtime and issue a
4261 4263 warning if Gary's readline isn't found, as to nudge users to
4262 4264 download it.
4263 4265
4264 4266 2004-06-16 Fernando Perez <fperez@colorado.edu>
4265 4267
4266 4268 * IPython/genutils.py (Stream.__init__): changed to print errors
4267 4269 to sys.stderr. I had a circular dependency here. Now it's
4268 4270 possible to run ipython as IDLE's shell (consider this pre-alpha,
4269 4271 since true stdout things end up in the starting terminal instead
4270 4272 of IDLE's out).
4271 4273
4272 4274 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4273 4275 users who haven't # updated their prompt_in2 definitions. Remove
4274 4276 eventually.
4275 4277 (multiple_replace): added credit to original ASPN recipe.
4276 4278
4277 4279 2004-06-15 Fernando Perez <fperez@colorado.edu>
4278 4280
4279 4281 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4280 4282 list of auto-defined aliases.
4281 4283
4282 4284 2004-06-13 Fernando Perez <fperez@colorado.edu>
4283 4285
4284 4286 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4285 4287 install was really requested (so setup.py can be used for other
4286 4288 things under Windows).
4287 4289
4288 4290 2004-06-10 Fernando Perez <fperez@colorado.edu>
4289 4291
4290 4292 * IPython/Logger.py (Logger.create_log): Manually remove any old
4291 4293 backup, since os.remove may fail under Windows. Fixes bug
4292 4294 reported by Thorsten.
4293 4295
4294 4296 2004-06-09 Fernando Perez <fperez@colorado.edu>
4295 4297
4296 4298 * examples/example-embed.py: fixed all references to %n (replaced
4297 4299 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4298 4300 for all examples and the manual as well.
4299 4301
4300 4302 2004-06-08 Fernando Perez <fperez@colorado.edu>
4301 4303
4302 4304 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4303 4305 alignment and color management. All 3 prompt subsystems now
4304 4306 inherit from BasePrompt.
4305 4307
4306 4308 * tools/release: updates for windows installer build and tag rpms
4307 4309 with python version (since paths are fixed).
4308 4310
4309 4311 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4310 4312 which will become eventually obsolete. Also fixed the default
4311 4313 prompt_in2 to use \D, so at least new users start with the correct
4312 4314 defaults.
4313 4315 WARNING: Users with existing ipythonrc files will need to apply
4314 4316 this fix manually!
4315 4317
4316 4318 * setup.py: make windows installer (.exe). This is finally the
4317 4319 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4318 4320 which I hadn't included because it required Python 2.3 (or recent
4319 4321 distutils).
4320 4322
4321 4323 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4322 4324 usage of new '\D' escape.
4323 4325
4324 4326 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4325 4327 lacks os.getuid())
4326 4328 (CachedOutput.set_colors): Added the ability to turn coloring
4327 4329 on/off with @colors even for manually defined prompt colors. It
4328 4330 uses a nasty global, but it works safely and via the generic color
4329 4331 handling mechanism.
4330 4332 (Prompt2.__init__): Introduced new escape '\D' for continuation
4331 4333 prompts. It represents the counter ('\#') as dots.
4332 4334 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4333 4335 need to update their ipythonrc files and replace '%n' with '\D' in
4334 4336 their prompt_in2 settings everywhere. Sorry, but there's
4335 4337 otherwise no clean way to get all prompts to properly align. The
4336 4338 ipythonrc shipped with IPython has been updated.
4337 4339
4338 4340 2004-06-07 Fernando Perez <fperez@colorado.edu>
4339 4341
4340 4342 * setup.py (isfile): Pass local_icons option to latex2html, so the
4341 4343 resulting HTML file is self-contained. Thanks to
4342 4344 dryice-AT-liu.com.cn for the tip.
4343 4345
4344 4346 * pysh.py: I created a new profile 'shell', which implements a
4345 4347 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4346 4348 system shell, nor will it become one anytime soon. It's mainly
4347 4349 meant to illustrate the use of the new flexible bash-like prompts.
4348 4350 I guess it could be used by hardy souls for true shell management,
4349 4351 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4350 4352 profile. This uses the InterpreterExec extension provided by
4351 4353 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4352 4354
4353 4355 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4354 4356 auto-align itself with the length of the previous input prompt
4355 4357 (taking into account the invisible color escapes).
4356 4358 (CachedOutput.__init__): Large restructuring of this class. Now
4357 4359 all three prompts (primary1, primary2, output) are proper objects,
4358 4360 managed by the 'parent' CachedOutput class. The code is still a
4359 4361 bit hackish (all prompts share state via a pointer to the cache),
4360 4362 but it's overall far cleaner than before.
4361 4363
4362 4364 * IPython/genutils.py (getoutputerror): modified to add verbose,
4363 4365 debug and header options. This makes the interface of all getout*
4364 4366 functions uniform.
4365 4367 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4366 4368
4367 4369 * IPython/Magic.py (Magic.default_option): added a function to
4368 4370 allow registering default options for any magic command. This
4369 4371 makes it easy to have profiles which customize the magics globally
4370 4372 for a certain use. The values set through this function are
4371 4373 picked up by the parse_options() method, which all magics should
4372 4374 use to parse their options.
4373 4375
4374 4376 * IPython/genutils.py (warn): modified the warnings framework to
4375 4377 use the Term I/O class. I'm trying to slowly unify all of
4376 4378 IPython's I/O operations to pass through Term.
4377 4379
4378 4380 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4379 4381 the secondary prompt to correctly match the length of the primary
4380 4382 one for any prompt. Now multi-line code will properly line up
4381 4383 even for path dependent prompts, such as the new ones available
4382 4384 via the prompt_specials.
4383 4385
4384 4386 2004-06-06 Fernando Perez <fperez@colorado.edu>
4385 4387
4386 4388 * IPython/Prompts.py (prompt_specials): Added the ability to have
4387 4389 bash-like special sequences in the prompts, which get
4388 4390 automatically expanded. Things like hostname, current working
4389 4391 directory and username are implemented already, but it's easy to
4390 4392 add more in the future. Thanks to a patch by W.J. van der Laan
4391 4393 <gnufnork-AT-hetdigitalegat.nl>
4392 4394 (prompt_specials): Added color support for prompt strings, so
4393 4395 users can define arbitrary color setups for their prompts.
4394 4396
4395 4397 2004-06-05 Fernando Perez <fperez@colorado.edu>
4396 4398
4397 4399 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4398 4400 code to load Gary Bishop's readline and configure it
4399 4401 automatically. Thanks to Gary for help on this.
4400 4402
4401 4403 2004-06-01 Fernando Perez <fperez@colorado.edu>
4402 4404
4403 4405 * IPython/Logger.py (Logger.create_log): fix bug for logging
4404 4406 with no filename (previous fix was incomplete).
4405 4407
4406 4408 2004-05-25 Fernando Perez <fperez@colorado.edu>
4407 4409
4408 4410 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4409 4411 parens would get passed to the shell.
4410 4412
4411 4413 2004-05-20 Fernando Perez <fperez@colorado.edu>
4412 4414
4413 4415 * IPython/Magic.py (Magic.magic_prun): changed default profile
4414 4416 sort order to 'time' (the more common profiling need).
4415 4417
4416 4418 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4417 4419 so that source code shown is guaranteed in sync with the file on
4418 4420 disk (also changed in psource). Similar fix to the one for
4419 4421 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4420 4422 <yann.ledu-AT-noos.fr>.
4421 4423
4422 4424 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4423 4425 with a single option would not be correctly parsed. Closes
4424 4426 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4425 4427 introduced in 0.6.0 (on 2004-05-06).
4426 4428
4427 4429 2004-05-13 *** Released version 0.6.0
4428 4430
4429 4431 2004-05-13 Fernando Perez <fperez@colorado.edu>
4430 4432
4431 4433 * debian/: Added debian/ directory to CVS, so that debian support
4432 4434 is publicly accessible. The debian package is maintained by Jack
4433 4435 Moffit <jack-AT-xiph.org>.
4434 4436
4435 4437 * Documentation: included the notes about an ipython-based system
4436 4438 shell (the hypothetical 'pysh') into the new_design.pdf document,
4437 4439 so that these ideas get distributed to users along with the
4438 4440 official documentation.
4439 4441
4440 4442 2004-05-10 Fernando Perez <fperez@colorado.edu>
4441 4443
4442 4444 * IPython/Logger.py (Logger.create_log): fix recently introduced
4443 4445 bug (misindented line) where logstart would fail when not given an
4444 4446 explicit filename.
4445 4447
4446 4448 2004-05-09 Fernando Perez <fperez@colorado.edu>
4447 4449
4448 4450 * IPython/Magic.py (Magic.parse_options): skip system call when
4449 4451 there are no options to look for. Faster, cleaner for the common
4450 4452 case.
4451 4453
4452 4454 * Documentation: many updates to the manual: describing Windows
4453 4455 support better, Gnuplot updates, credits, misc small stuff. Also
4454 4456 updated the new_design doc a bit.
4455 4457
4456 4458 2004-05-06 *** Released version 0.6.0.rc1
4457 4459
4458 4460 2004-05-06 Fernando Perez <fperez@colorado.edu>
4459 4461
4460 4462 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4461 4463 operations to use the vastly more efficient list/''.join() method.
4462 4464 (FormattedTB.text): Fix
4463 4465 http://www.scipy.net/roundup/ipython/issue12 - exception source
4464 4466 extract not updated after reload. Thanks to Mike Salib
4465 4467 <msalib-AT-mit.edu> for pinning the source of the problem.
4466 4468 Fortunately, the solution works inside ipython and doesn't require
4467 4469 any changes to python proper.
4468 4470
4469 4471 * IPython/Magic.py (Magic.parse_options): Improved to process the
4470 4472 argument list as a true shell would (by actually using the
4471 4473 underlying system shell). This way, all @magics automatically get
4472 4474 shell expansion for variables. Thanks to a comment by Alex
4473 4475 Schmolck.
4474 4476
4475 4477 2004-04-04 Fernando Perez <fperez@colorado.edu>
4476 4478
4477 4479 * IPython/iplib.py (InteractiveShell.interact): Added a special
4478 4480 trap for a debugger quit exception, which is basically impossible
4479 4481 to handle by normal mechanisms, given what pdb does to the stack.
4480 4482 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4481 4483
4482 4484 2004-04-03 Fernando Perez <fperez@colorado.edu>
4483 4485
4484 4486 * IPython/genutils.py (Term): Standardized the names of the Term
4485 4487 class streams to cin/cout/cerr, following C++ naming conventions
4486 4488 (I can't use in/out/err because 'in' is not a valid attribute
4487 4489 name).
4488 4490
4489 4491 * IPython/iplib.py (InteractiveShell.interact): don't increment
4490 4492 the prompt if there's no user input. By Daniel 'Dang' Griffith
4491 4493 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4492 4494 Francois Pinard.
4493 4495
4494 4496 2004-04-02 Fernando Perez <fperez@colorado.edu>
4495 4497
4496 4498 * IPython/genutils.py (Stream.__init__): Modified to survive at
4497 4499 least importing in contexts where stdin/out/err aren't true file
4498 4500 objects, such as PyCrust (they lack fileno() and mode). However,
4499 4501 the recovery facilities which rely on these things existing will
4500 4502 not work.
4501 4503
4502 4504 2004-04-01 Fernando Perez <fperez@colorado.edu>
4503 4505
4504 4506 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4505 4507 use the new getoutputerror() function, so it properly
4506 4508 distinguishes stdout/err.
4507 4509
4508 4510 * IPython/genutils.py (getoutputerror): added a function to
4509 4511 capture separately the standard output and error of a command.
4510 4512 After a comment from dang on the mailing lists. This code is
4511 4513 basically a modified version of commands.getstatusoutput(), from
4512 4514 the standard library.
4513 4515
4514 4516 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4515 4517 '!!' as a special syntax (shorthand) to access @sx.
4516 4518
4517 4519 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4518 4520 command and return its output as a list split on '\n'.
4519 4521
4520 4522 2004-03-31 Fernando Perez <fperez@colorado.edu>
4521 4523
4522 4524 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4523 4525 method to dictionaries used as FakeModule instances if they lack
4524 4526 it. At least pydoc in python2.3 breaks for runtime-defined
4525 4527 functions without this hack. At some point I need to _really_
4526 4528 understand what FakeModule is doing, because it's a gross hack.
4527 4529 But it solves Arnd's problem for now...
4528 4530
4529 4531 2004-02-27 Fernando Perez <fperez@colorado.edu>
4530 4532
4531 4533 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4532 4534 mode would behave erratically. Also increased the number of
4533 4535 possible logs in rotate mod to 999. Thanks to Rod Holland
4534 4536 <rhh@StructureLABS.com> for the report and fixes.
4535 4537
4536 4538 2004-02-26 Fernando Perez <fperez@colorado.edu>
4537 4539
4538 4540 * IPython/genutils.py (page): Check that the curses module really
4539 4541 has the initscr attribute before trying to use it. For some
4540 4542 reason, the Solaris curses module is missing this. I think this
4541 4543 should be considered a Solaris python bug, but I'm not sure.
4542 4544
4543 4545 2004-01-17 Fernando Perez <fperez@colorado.edu>
4544 4546
4545 4547 * IPython/genutils.py (Stream.__init__): Changes to try to make
4546 4548 ipython robust against stdin/out/err being closed by the user.
4547 4549 This is 'user error' (and blocks a normal python session, at least
4548 4550 the stdout case). However, Ipython should be able to survive such
4549 4551 instances of abuse as gracefully as possible. To simplify the
4550 4552 coding and maintain compatibility with Gary Bishop's Term
4551 4553 contributions, I've made use of classmethods for this. I think
4552 4554 this introduces a dependency on python 2.2.
4553 4555
4554 4556 2004-01-13 Fernando Perez <fperez@colorado.edu>
4555 4557
4556 4558 * IPython/numutils.py (exp_safe): simplified the code a bit and
4557 4559 removed the need for importing the kinds module altogether.
4558 4560
4559 4561 2004-01-06 Fernando Perez <fperez@colorado.edu>
4560 4562
4561 4563 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
4562 4564 a magic function instead, after some community feedback. No
4563 4565 special syntax will exist for it, but its name is deliberately
4564 4566 very short.
4565 4567
4566 4568 2003-12-20 Fernando Perez <fperez@colorado.edu>
4567 4569
4568 4570 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
4569 4571 new functionality, to automagically assign the result of a shell
4570 4572 command to a variable. I'll solicit some community feedback on
4571 4573 this before making it permanent.
4572 4574
4573 4575 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
4574 4576 requested about callables for which inspect couldn't obtain a
4575 4577 proper argspec. Thanks to a crash report sent by Etienne
4576 4578 Posthumus <etienne-AT-apple01.cs.vu.nl>.
4577 4579
4578 4580 2003-12-09 Fernando Perez <fperez@colorado.edu>
4579 4581
4580 4582 * IPython/genutils.py (page): patch for the pager to work across
4581 4583 various versions of Windows. By Gary Bishop.
4582 4584
4583 4585 2003-12-04 Fernando Perez <fperez@colorado.edu>
4584 4586
4585 4587 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
4586 4588 Gnuplot.py version 1.7, whose internal names changed quite a bit.
4587 4589 While I tested this and it looks ok, there may still be corner
4588 4590 cases I've missed.
4589 4591
4590 4592 2003-12-01 Fernando Perez <fperez@colorado.edu>
4591 4593
4592 4594 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
4593 4595 where a line like 'p,q=1,2' would fail because the automagic
4594 4596 system would be triggered for @p.
4595 4597
4596 4598 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
4597 4599 cleanups, code unmodified.
4598 4600
4599 4601 * IPython/genutils.py (Term): added a class for IPython to handle
4600 4602 output. In most cases it will just be a proxy for stdout/err, but
4601 4603 having this allows modifications to be made for some platforms,
4602 4604 such as handling color escapes under Windows. All of this code
4603 4605 was contributed by Gary Bishop, with minor modifications by me.
4604 4606 The actual changes affect many files.
4605 4607
4606 4608 2003-11-30 Fernando Perez <fperez@colorado.edu>
4607 4609
4608 4610 * IPython/iplib.py (file_matches): new completion code, courtesy
4609 4611 of Jeff Collins. This enables filename completion again under
4610 4612 python 2.3, which disabled it at the C level.
4611 4613
4612 4614 2003-11-11 Fernando Perez <fperez@colorado.edu>
4613 4615
4614 4616 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4615 4617 for Numeric.array(map(...)), but often convenient.
4616 4618
4617 4619 2003-11-05 Fernando Perez <fperez@colorado.edu>
4618 4620
4619 4621 * IPython/numutils.py (frange): Changed a call from int() to
4620 4622 int(round()) to prevent a problem reported with arange() in the
4621 4623 numpy list.
4622 4624
4623 4625 2003-10-06 Fernando Perez <fperez@colorado.edu>
4624 4626
4625 4627 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4626 4628 prevent crashes if sys lacks an argv attribute (it happens with
4627 4629 embedded interpreters which build a bare-bones sys module).
4628 4630 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4629 4631
4630 4632 2003-09-24 Fernando Perez <fperez@colorado.edu>
4631 4633
4632 4634 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4633 4635 to protect against poorly written user objects where __getattr__
4634 4636 raises exceptions other than AttributeError. Thanks to a bug
4635 4637 report by Oliver Sander <osander-AT-gmx.de>.
4636 4638
4637 4639 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4638 4640 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4639 4641
4640 4642 2003-09-09 Fernando Perez <fperez@colorado.edu>
4641 4643
4642 4644 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4643 4645 unpacking a list whith a callable as first element would
4644 4646 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4645 4647 Collins.
4646 4648
4647 4649 2003-08-25 *** Released version 0.5.0
4648 4650
4649 4651 2003-08-22 Fernando Perez <fperez@colorado.edu>
4650 4652
4651 4653 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4652 4654 improperly defined user exceptions. Thanks to feedback from Mark
4653 4655 Russell <mrussell-AT-verio.net>.
4654 4656
4655 4657 2003-08-20 Fernando Perez <fperez@colorado.edu>
4656 4658
4657 4659 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4658 4660 printing so that it would print multi-line string forms starting
4659 4661 with a new line. This way the formatting is better respected for
4660 4662 objects which work hard to make nice string forms.
4661 4663
4662 4664 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4663 4665 autocall would overtake data access for objects with both
4664 4666 __getitem__ and __call__.
4665 4667
4666 4668 2003-08-19 *** Released version 0.5.0-rc1
4667 4669
4668 4670 2003-08-19 Fernando Perez <fperez@colorado.edu>
4669 4671
4670 4672 * IPython/deep_reload.py (load_tail): single tiny change here
4671 4673 seems to fix the long-standing bug of dreload() failing to work
4672 4674 for dotted names. But this module is pretty tricky, so I may have
4673 4675 missed some subtlety. Needs more testing!.
4674 4676
4675 4677 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4676 4678 exceptions which have badly implemented __str__ methods.
4677 4679 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4678 4680 which I've been getting reports about from Python 2.3 users. I
4679 4681 wish I had a simple test case to reproduce the problem, so I could
4680 4682 either write a cleaner workaround or file a bug report if
4681 4683 necessary.
4682 4684
4683 4685 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4684 4686 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4685 4687 a bug report by Tjabo Kloppenburg.
4686 4688
4687 4689 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4688 4690 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4689 4691 seems rather unstable. Thanks to a bug report by Tjabo
4690 4692 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4691 4693
4692 4694 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4693 4695 this out soon because of the critical fixes in the inner loop for
4694 4696 generators.
4695 4697
4696 4698 * IPython/Magic.py (Magic.getargspec): removed. This (and
4697 4699 _get_def) have been obsoleted by OInspect for a long time, I
4698 4700 hadn't noticed that they were dead code.
4699 4701 (Magic._ofind): restored _ofind functionality for a few literals
4700 4702 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4701 4703 for things like "hello".capitalize?, since that would require a
4702 4704 potentially dangerous eval() again.
4703 4705
4704 4706 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4705 4707 logic a bit more to clean up the escapes handling and minimize the
4706 4708 use of _ofind to only necessary cases. The interactive 'feel' of
4707 4709 IPython should have improved quite a bit with the changes in
4708 4710 _prefilter and _ofind (besides being far safer than before).
4709 4711
4710 4712 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4711 4713 obscure, never reported). Edit would fail to find the object to
4712 4714 edit under some circumstances.
4713 4715 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4714 4716 which were causing double-calling of generators. Those eval calls
4715 4717 were _very_ dangerous, since code with side effects could be
4716 4718 triggered. As they say, 'eval is evil'... These were the
4717 4719 nastiest evals in IPython. Besides, _ofind is now far simpler,
4718 4720 and it should also be quite a bit faster. Its use of inspect is
4719 4721 also safer, so perhaps some of the inspect-related crashes I've
4720 4722 seen lately with Python 2.3 might be taken care of. That will
4721 4723 need more testing.
4722 4724
4723 4725 2003-08-17 Fernando Perez <fperez@colorado.edu>
4724 4726
4725 4727 * IPython/iplib.py (InteractiveShell._prefilter): significant
4726 4728 simplifications to the logic for handling user escapes. Faster
4727 4729 and simpler code.
4728 4730
4729 4731 2003-08-14 Fernando Perez <fperez@colorado.edu>
4730 4732
4731 4733 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
4732 4734 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
4733 4735 but it should be quite a bit faster. And the recursive version
4734 4736 generated O(log N) intermediate storage for all rank>1 arrays,
4735 4737 even if they were contiguous.
4736 4738 (l1norm): Added this function.
4737 4739 (norm): Added this function for arbitrary norms (including
4738 4740 l-infinity). l1 and l2 are still special cases for convenience
4739 4741 and speed.
4740 4742
4741 4743 2003-08-03 Fernando Perez <fperez@colorado.edu>
4742 4744
4743 4745 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
4744 4746 exceptions, which now raise PendingDeprecationWarnings in Python
4745 4747 2.3. There were some in Magic and some in Gnuplot2.
4746 4748
4747 4749 2003-06-30 Fernando Perez <fperez@colorado.edu>
4748 4750
4749 4751 * IPython/genutils.py (page): modified to call curses only for
4750 4752 terminals where TERM=='xterm'. After problems under many other
4751 4753 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
4752 4754
4753 4755 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
4754 4756 would be triggered when readline was absent. This was just an old
4755 4757 debugging statement I'd forgotten to take out.
4756 4758
4757 4759 2003-06-20 Fernando Perez <fperez@colorado.edu>
4758 4760
4759 4761 * IPython/genutils.py (clock): modified to return only user time
4760 4762 (not counting system time), after a discussion on scipy. While
4761 4763 system time may be a useful quantity occasionally, it may much
4762 4764 more easily be skewed by occasional swapping or other similar
4763 4765 activity.
4764 4766
4765 4767 2003-06-05 Fernando Perez <fperez@colorado.edu>
4766 4768
4767 4769 * IPython/numutils.py (identity): new function, for building
4768 4770 arbitrary rank Kronecker deltas (mostly backwards compatible with
4769 4771 Numeric.identity)
4770 4772
4771 4773 2003-06-03 Fernando Perez <fperez@colorado.edu>
4772 4774
4773 4775 * IPython/iplib.py (InteractiveShell.handle_magic): protect
4774 4776 arguments passed to magics with spaces, to allow trailing '\' to
4775 4777 work normally (mainly for Windows users).
4776 4778
4777 4779 2003-05-29 Fernando Perez <fperez@colorado.edu>
4778 4780
4779 4781 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
4780 4782 instead of pydoc.help. This fixes a bizarre behavior where
4781 4783 printing '%s' % locals() would trigger the help system. Now
4782 4784 ipython behaves like normal python does.
4783 4785
4784 4786 Note that if one does 'from pydoc import help', the bizarre
4785 4787 behavior returns, but this will also happen in normal python, so
4786 4788 it's not an ipython bug anymore (it has to do with how pydoc.help
4787 4789 is implemented).
4788 4790
4789 4791 2003-05-22 Fernando Perez <fperez@colorado.edu>
4790 4792
4791 4793 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
4792 4794 return [] instead of None when nothing matches, also match to end
4793 4795 of line. Patch by Gary Bishop.
4794 4796
4795 4797 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
4796 4798 protection as before, for files passed on the command line. This
4797 4799 prevents the CrashHandler from kicking in if user files call into
4798 4800 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
4799 4801 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
4800 4802
4801 4803 2003-05-20 *** Released version 0.4.0
4802 4804
4803 4805 2003-05-20 Fernando Perez <fperez@colorado.edu>
4804 4806
4805 4807 * setup.py: added support for manpages. It's a bit hackish b/c of
4806 4808 a bug in the way the bdist_rpm distutils target handles gzipped
4807 4809 manpages, but it works. After a patch by Jack.
4808 4810
4809 4811 2003-05-19 Fernando Perez <fperez@colorado.edu>
4810 4812
4811 4813 * IPython/numutils.py: added a mockup of the kinds module, since
4812 4814 it was recently removed from Numeric. This way, numutils will
4813 4815 work for all users even if they are missing kinds.
4814 4816
4815 4817 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4816 4818 failure, which can occur with SWIG-wrapped extensions. After a
4817 4819 crash report from Prabhu.
4818 4820
4819 4821 2003-05-16 Fernando Perez <fperez@colorado.edu>
4820 4822
4821 4823 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4822 4824 protect ipython from user code which may call directly
4823 4825 sys.excepthook (this looks like an ipython crash to the user, even
4824 4826 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4825 4827 This is especially important to help users of WxWindows, but may
4826 4828 also be useful in other cases.
4827 4829
4828 4830 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4829 4831 an optional tb_offset to be specified, and to preserve exception
4830 4832 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4831 4833
4832 4834 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4833 4835
4834 4836 2003-05-15 Fernando Perez <fperez@colorado.edu>
4835 4837
4836 4838 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4837 4839 installing for a new user under Windows.
4838 4840
4839 4841 2003-05-12 Fernando Perez <fperez@colorado.edu>
4840 4842
4841 4843 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4842 4844 handler for Emacs comint-based lines. Currently it doesn't do
4843 4845 much (but importantly, it doesn't update the history cache). In
4844 4846 the future it may be expanded if Alex needs more functionality
4845 4847 there.
4846 4848
4847 4849 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4848 4850 info to crash reports.
4849 4851
4850 4852 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4851 4853 just like Python's -c. Also fixed crash with invalid -color
4852 4854 option value at startup. Thanks to Will French
4853 4855 <wfrench-AT-bestweb.net> for the bug report.
4854 4856
4855 4857 2003-05-09 Fernando Perez <fperez@colorado.edu>
4856 4858
4857 4859 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4858 4860 to EvalDict (it's a mapping, after all) and simplified its code
4859 4861 quite a bit, after a nice discussion on c.l.py where Gustavo
4860 4862 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4861 4863
4862 4864 2003-04-30 Fernando Perez <fperez@colorado.edu>
4863 4865
4864 4866 * IPython/genutils.py (timings_out): modified it to reduce its
4865 4867 overhead in the common reps==1 case.
4866 4868
4867 4869 2003-04-29 Fernando Perez <fperez@colorado.edu>
4868 4870
4869 4871 * IPython/genutils.py (timings_out): Modified to use the resource
4870 4872 module, which avoids the wraparound problems of time.clock().
4871 4873
4872 4874 2003-04-17 *** Released version 0.2.15pre4
4873 4875
4874 4876 2003-04-17 Fernando Perez <fperez@colorado.edu>
4875 4877
4876 4878 * setup.py (scriptfiles): Split windows-specific stuff over to a
4877 4879 separate file, in an attempt to have a Windows GUI installer.
4878 4880 That didn't work, but part of the groundwork is done.
4879 4881
4880 4882 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4881 4883 indent/unindent with 4 spaces. Particularly useful in combination
4882 4884 with the new auto-indent option.
4883 4885
4884 4886 2003-04-16 Fernando Perez <fperez@colorado.edu>
4885 4887
4886 4888 * IPython/Magic.py: various replacements of self.rc for
4887 4889 self.shell.rc. A lot more remains to be done to fully disentangle
4888 4890 this class from the main Shell class.
4889 4891
4890 4892 * IPython/GnuplotRuntime.py: added checks for mouse support so
4891 4893 that we don't try to enable it if the current gnuplot doesn't
4892 4894 really support it. Also added checks so that we don't try to
4893 4895 enable persist under Windows (where Gnuplot doesn't recognize the
4894 4896 option).
4895 4897
4896 4898 * IPython/iplib.py (InteractiveShell.interact): Added optional
4897 4899 auto-indenting code, after a patch by King C. Shu
4898 4900 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4899 4901 get along well with pasting indented code. If I ever figure out
4900 4902 how to make that part go well, it will become on by default.
4901 4903
4902 4904 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4903 4905 crash ipython if there was an unmatched '%' in the user's prompt
4904 4906 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4905 4907
4906 4908 * IPython/iplib.py (InteractiveShell.interact): removed the
4907 4909 ability to ask the user whether he wants to crash or not at the
4908 4910 'last line' exception handler. Calling functions at that point
4909 4911 changes the stack, and the error reports would have incorrect
4910 4912 tracebacks.
4911 4913
4912 4914 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4913 4915 pass through a peger a pretty-printed form of any object. After a
4914 4916 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4915 4917
4916 4918 2003-04-14 Fernando Perez <fperez@colorado.edu>
4917 4919
4918 4920 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4919 4921 all files in ~ would be modified at first install (instead of
4920 4922 ~/.ipython). This could be potentially disastrous, as the
4921 4923 modification (make line-endings native) could damage binary files.
4922 4924
4923 4925 2003-04-10 Fernando Perez <fperez@colorado.edu>
4924 4926
4925 4927 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4926 4928 handle only lines which are invalid python. This now means that
4927 4929 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4928 4930 for the bug report.
4929 4931
4930 4932 2003-04-01 Fernando Perez <fperez@colorado.edu>
4931 4933
4932 4934 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4933 4935 where failing to set sys.last_traceback would crash pdb.pm().
4934 4936 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4935 4937 report.
4936 4938
4937 4939 2003-03-25 Fernando Perez <fperez@colorado.edu>
4938 4940
4939 4941 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4940 4942 before printing it (it had a lot of spurious blank lines at the
4941 4943 end).
4942 4944
4943 4945 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4944 4946 output would be sent 21 times! Obviously people don't use this
4945 4947 too often, or I would have heard about it.
4946 4948
4947 4949 2003-03-24 Fernando Perez <fperez@colorado.edu>
4948 4950
4949 4951 * setup.py (scriptfiles): renamed the data_files parameter from
4950 4952 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4951 4953 for the patch.
4952 4954
4953 4955 2003-03-20 Fernando Perez <fperez@colorado.edu>
4954 4956
4955 4957 * IPython/genutils.py (error): added error() and fatal()
4956 4958 functions.
4957 4959
4958 4960 2003-03-18 *** Released version 0.2.15pre3
4959 4961
4960 4962 2003-03-18 Fernando Perez <fperez@colorado.edu>
4961 4963
4962 4964 * setupext/install_data_ext.py
4963 4965 (install_data_ext.initialize_options): Class contributed by Jack
4964 4966 Moffit for fixing the old distutils hack. He is sending this to
4965 4967 the distutils folks so in the future we may not need it as a
4966 4968 private fix.
4967 4969
4968 4970 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4969 4971 changes for Debian packaging. See his patch for full details.
4970 4972 The old distutils hack of making the ipythonrc* files carry a
4971 4973 bogus .py extension is gone, at last. Examples were moved to a
4972 4974 separate subdir under doc/, and the separate executable scripts
4973 4975 now live in their own directory. Overall a great cleanup. The
4974 4976 manual was updated to use the new files, and setup.py has been
4975 4977 fixed for this setup.
4976 4978
4977 4979 * IPython/PyColorize.py (Parser.usage): made non-executable and
4978 4980 created a pycolor wrapper around it to be included as a script.
4979 4981
4980 4982 2003-03-12 *** Released version 0.2.15pre2
4981 4983
4982 4984 2003-03-12 Fernando Perez <fperez@colorado.edu>
4983 4985
4984 4986 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4985 4987 long-standing problem with garbage characters in some terminals.
4986 4988 The issue was really that the \001 and \002 escapes must _only_ be
4987 4989 passed to input prompts (which call readline), but _never_ to
4988 4990 normal text to be printed on screen. I changed ColorANSI to have
4989 4991 two classes: TermColors and InputTermColors, each with the
4990 4992 appropriate escapes for input prompts or normal text. The code in
4991 4993 Prompts.py got slightly more complicated, but this very old and
4992 4994 annoying bug is finally fixed.
4993 4995
4994 4996 All the credit for nailing down the real origin of this problem
4995 4997 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4996 4998 *Many* thanks to him for spending quite a bit of effort on this.
4997 4999
4998 5000 2003-03-05 *** Released version 0.2.15pre1
4999 5001
5000 5002 2003-03-03 Fernando Perez <fperez@colorado.edu>
5001 5003
5002 5004 * IPython/FakeModule.py: Moved the former _FakeModule to a
5003 5005 separate file, because it's also needed by Magic (to fix a similar
5004 5006 pickle-related issue in @run).
5005 5007
5006 5008 2003-03-02 Fernando Perez <fperez@colorado.edu>
5007 5009
5008 5010 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5009 5011 the autocall option at runtime.
5010 5012 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5011 5013 across Magic.py to start separating Magic from InteractiveShell.
5012 5014 (Magic._ofind): Fixed to return proper namespace for dotted
5013 5015 names. Before, a dotted name would always return 'not currently
5014 5016 defined', because it would find the 'parent'. s.x would be found,
5015 5017 but since 'x' isn't defined by itself, it would get confused.
5016 5018 (Magic.magic_run): Fixed pickling problems reported by Ralf
5017 5019 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5018 5020 that I'd used when Mike Heeter reported similar issues at the
5019 5021 top-level, but now for @run. It boils down to injecting the
5020 5022 namespace where code is being executed with something that looks
5021 5023 enough like a module to fool pickle.dump(). Since a pickle stores
5022 5024 a named reference to the importing module, we need this for
5023 5025 pickles to save something sensible.
5024 5026
5025 5027 * IPython/ipmaker.py (make_IPython): added an autocall option.
5026 5028
5027 5029 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5028 5030 the auto-eval code. Now autocalling is an option, and the code is
5029 5031 also vastly safer. There is no more eval() involved at all.
5030 5032
5031 5033 2003-03-01 Fernando Perez <fperez@colorado.edu>
5032 5034
5033 5035 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5034 5036 dict with named keys instead of a tuple.
5035 5037
5036 5038 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5037 5039
5038 5040 * setup.py (make_shortcut): Fixed message about directories
5039 5041 created during Windows installation (the directories were ok, just
5040 5042 the printed message was misleading). Thanks to Chris Liechti
5041 5043 <cliechti-AT-gmx.net> for the heads up.
5042 5044
5043 5045 2003-02-21 Fernando Perez <fperez@colorado.edu>
5044 5046
5045 5047 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5046 5048 of ValueError exception when checking for auto-execution. This
5047 5049 one is raised by things like Numeric arrays arr.flat when the
5048 5050 array is non-contiguous.
5049 5051
5050 5052 2003-01-31 Fernando Perez <fperez@colorado.edu>
5051 5053
5052 5054 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5053 5055 not return any value at all (even though the command would get
5054 5056 executed).
5055 5057 (xsys): Flush stdout right after printing the command to ensure
5056 5058 proper ordering of commands and command output in the total
5057 5059 output.
5058 5060 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5059 5061 system/getoutput as defaults. The old ones are kept for
5060 5062 compatibility reasons, so no code which uses this library needs
5061 5063 changing.
5062 5064
5063 5065 2003-01-27 *** Released version 0.2.14
5064 5066
5065 5067 2003-01-25 Fernando Perez <fperez@colorado.edu>
5066 5068
5067 5069 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5068 5070 functions defined in previous edit sessions could not be re-edited
5069 5071 (because the temp files were immediately removed). Now temp files
5070 5072 are removed only at IPython's exit.
5071 5073 (Magic.magic_run): Improved @run to perform shell-like expansions
5072 5074 on its arguments (~users and $VARS). With this, @run becomes more
5073 5075 like a normal command-line.
5074 5076
5075 5077 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5076 5078 bugs related to embedding and cleaned up that code. A fairly
5077 5079 important one was the impossibility to access the global namespace
5078 5080 through the embedded IPython (only local variables were visible).
5079 5081
5080 5082 2003-01-14 Fernando Perez <fperez@colorado.edu>
5081 5083
5082 5084 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5083 5085 auto-calling to be a bit more conservative. Now it doesn't get
5084 5086 triggered if any of '!=()<>' are in the rest of the input line, to
5085 5087 allow comparing callables. Thanks to Alex for the heads up.
5086 5088
5087 5089 2003-01-07 Fernando Perez <fperez@colorado.edu>
5088 5090
5089 5091 * IPython/genutils.py (page): fixed estimation of the number of
5090 5092 lines in a string to be paged to simply count newlines. This
5091 5093 prevents over-guessing due to embedded escape sequences. A better
5092 5094 long-term solution would involve stripping out the control chars
5093 5095 for the count, but it's potentially so expensive I just don't
5094 5096 think it's worth doing.
5095 5097
5096 5098 2002-12-19 *** Released version 0.2.14pre50
5097 5099
5098 5100 2002-12-19 Fernando Perez <fperez@colorado.edu>
5099 5101
5100 5102 * tools/release (version): Changed release scripts to inform
5101 5103 Andrea and build a NEWS file with a list of recent changes.
5102 5104
5103 5105 * IPython/ColorANSI.py (__all__): changed terminal detection
5104 5106 code. Seems to work better for xterms without breaking
5105 5107 konsole. Will need more testing to determine if WinXP and Mac OSX
5106 5108 also work ok.
5107 5109
5108 5110 2002-12-18 *** Released version 0.2.14pre49
5109 5111
5110 5112 2002-12-18 Fernando Perez <fperez@colorado.edu>
5111 5113
5112 5114 * Docs: added new info about Mac OSX, from Andrea.
5113 5115
5114 5116 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5115 5117 allow direct plotting of python strings whose format is the same
5116 5118 of gnuplot data files.
5117 5119
5118 5120 2002-12-16 Fernando Perez <fperez@colorado.edu>
5119 5121
5120 5122 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5121 5123 value of exit question to be acknowledged.
5122 5124
5123 5125 2002-12-03 Fernando Perez <fperez@colorado.edu>
5124 5126
5125 5127 * IPython/ipmaker.py: removed generators, which had been added
5126 5128 by mistake in an earlier debugging run. This was causing trouble
5127 5129 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5128 5130 for pointing this out.
5129 5131
5130 5132 2002-11-17 Fernando Perez <fperez@colorado.edu>
5131 5133
5132 5134 * Manual: updated the Gnuplot section.
5133 5135
5134 5136 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5135 5137 a much better split of what goes in Runtime and what goes in
5136 5138 Interactive.
5137 5139
5138 5140 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5139 5141 being imported from iplib.
5140 5142
5141 5143 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5142 5144 for command-passing. Now the global Gnuplot instance is called
5143 5145 'gp' instead of 'g', which was really a far too fragile and
5144 5146 common name.
5145 5147
5146 5148 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5147 5149 bounding boxes generated by Gnuplot for square plots.
5148 5150
5149 5151 * IPython/genutils.py (popkey): new function added. I should
5150 5152 suggest this on c.l.py as a dict method, it seems useful.
5151 5153
5152 5154 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5153 5155 to transparently handle PostScript generation. MUCH better than
5154 5156 the previous plot_eps/replot_eps (which I removed now). The code
5155 5157 is also fairly clean and well documented now (including
5156 5158 docstrings).
5157 5159
5158 5160 2002-11-13 Fernando Perez <fperez@colorado.edu>
5159 5161
5160 5162 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5161 5163 (inconsistent with options).
5162 5164
5163 5165 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5164 5166 manually disabled, I don't know why. Fixed it.
5165 5167 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5166 5168 eps output.
5167 5169
5168 5170 2002-11-12 Fernando Perez <fperez@colorado.edu>
5169 5171
5170 5172 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5171 5173 don't propagate up to caller. Fixes crash reported by François
5172 5174 Pinard.
5173 5175
5174 5176 2002-11-09 Fernando Perez <fperez@colorado.edu>
5175 5177
5176 5178 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5177 5179 history file for new users.
5178 5180 (make_IPython): fixed bug where initial install would leave the
5179 5181 user running in the .ipython dir.
5180 5182 (make_IPython): fixed bug where config dir .ipython would be
5181 5183 created regardless of the given -ipythondir option. Thanks to Cory
5182 5184 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5183 5185
5184 5186 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5185 5187 type confirmations. Will need to use it in all of IPython's code
5186 5188 consistently.
5187 5189
5188 5190 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5189 5191 context to print 31 lines instead of the default 5. This will make
5190 5192 the crash reports extremely detailed in case the problem is in
5191 5193 libraries I don't have access to.
5192 5194
5193 5195 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5194 5196 line of defense' code to still crash, but giving users fair
5195 5197 warning. I don't want internal errors to go unreported: if there's
5196 5198 an internal problem, IPython should crash and generate a full
5197 5199 report.
5198 5200
5199 5201 2002-11-08 Fernando Perez <fperez@colorado.edu>
5200 5202
5201 5203 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5202 5204 otherwise uncaught exceptions which can appear if people set
5203 5205 sys.stdout to something badly broken. Thanks to a crash report
5204 5206 from henni-AT-mail.brainbot.com.
5205 5207
5206 5208 2002-11-04 Fernando Perez <fperez@colorado.edu>
5207 5209
5208 5210 * IPython/iplib.py (InteractiveShell.interact): added
5209 5211 __IPYTHON__active to the builtins. It's a flag which goes on when
5210 5212 the interaction starts and goes off again when it stops. This
5211 5213 allows embedding code to detect being inside IPython. Before this
5212 5214 was done via __IPYTHON__, but that only shows that an IPython
5213 5215 instance has been created.
5214 5216
5215 5217 * IPython/Magic.py (Magic.magic_env): I realized that in a
5216 5218 UserDict, instance.data holds the data as a normal dict. So I
5217 5219 modified @env to return os.environ.data instead of rebuilding a
5218 5220 dict by hand.
5219 5221
5220 5222 2002-11-02 Fernando Perez <fperez@colorado.edu>
5221 5223
5222 5224 * IPython/genutils.py (warn): changed so that level 1 prints no
5223 5225 header. Level 2 is now the default (with 'WARNING' header, as
5224 5226 before). I think I tracked all places where changes were needed in
5225 5227 IPython, but outside code using the old level numbering may have
5226 5228 broken.
5227 5229
5228 5230 * IPython/iplib.py (InteractiveShell.runcode): added this to
5229 5231 handle the tracebacks in SystemExit traps correctly. The previous
5230 5232 code (through interact) was printing more of the stack than
5231 5233 necessary, showing IPython internal code to the user.
5232 5234
5233 5235 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5234 5236 default. Now that the default at the confirmation prompt is yes,
5235 5237 it's not so intrusive. François' argument that ipython sessions
5236 5238 tend to be complex enough not to lose them from an accidental C-d,
5237 5239 is a valid one.
5238 5240
5239 5241 * IPython/iplib.py (InteractiveShell.interact): added a
5240 5242 showtraceback() call to the SystemExit trap, and modified the exit
5241 5243 confirmation to have yes as the default.
5242 5244
5243 5245 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5244 5246 this file. It's been gone from the code for a long time, this was
5245 5247 simply leftover junk.
5246 5248
5247 5249 2002-11-01 Fernando Perez <fperez@colorado.edu>
5248 5250
5249 5251 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5250 5252 added. If set, IPython now traps EOF and asks for
5251 5253 confirmation. After a request by François Pinard.
5252 5254
5253 5255 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5254 5256 of @abort, and with a new (better) mechanism for handling the
5255 5257 exceptions.
5256 5258
5257 5259 2002-10-27 Fernando Perez <fperez@colorado.edu>
5258 5260
5259 5261 * IPython/usage.py (__doc__): updated the --help information and
5260 5262 the ipythonrc file to indicate that -log generates
5261 5263 ./ipython.log. Also fixed the corresponding info in @logstart.
5262 5264 This and several other fixes in the manuals thanks to reports by
5263 5265 François Pinard <pinard-AT-iro.umontreal.ca>.
5264 5266
5265 5267 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5266 5268 refer to @logstart (instead of @log, which doesn't exist).
5267 5269
5268 5270 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5269 5271 AttributeError crash. Thanks to Christopher Armstrong
5270 5272 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5271 5273 introduced recently (in 0.2.14pre37) with the fix to the eval
5272 5274 problem mentioned below.
5273 5275
5274 5276 2002-10-17 Fernando Perez <fperez@colorado.edu>
5275 5277
5276 5278 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5277 5279 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5278 5280
5279 5281 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5280 5282 this function to fix a problem reported by Alex Schmolck. He saw
5281 5283 it with list comprehensions and generators, which were getting
5282 5284 called twice. The real problem was an 'eval' call in testing for
5283 5285 automagic which was evaluating the input line silently.
5284 5286
5285 5287 This is a potentially very nasty bug, if the input has side
5286 5288 effects which must not be repeated. The code is much cleaner now,
5287 5289 without any blanket 'except' left and with a regexp test for
5288 5290 actual function names.
5289 5291
5290 5292 But an eval remains, which I'm not fully comfortable with. I just
5291 5293 don't know how to find out if an expression could be a callable in
5292 5294 the user's namespace without doing an eval on the string. However
5293 5295 that string is now much more strictly checked so that no code
5294 5296 slips by, so the eval should only happen for things that can
5295 5297 really be only function/method names.
5296 5298
5297 5299 2002-10-15 Fernando Perez <fperez@colorado.edu>
5298 5300
5299 5301 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5300 5302 OSX information to main manual, removed README_Mac_OSX file from
5301 5303 distribution. Also updated credits for recent additions.
5302 5304
5303 5305 2002-10-10 Fernando Perez <fperez@colorado.edu>
5304 5306
5305 5307 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5306 5308 terminal-related issues. Many thanks to Andrea Riciputi
5307 5309 <andrea.riciputi-AT-libero.it> for writing it.
5308 5310
5309 5311 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5310 5312 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5311 5313
5312 5314 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5313 5315 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5314 5316 <syver-en-AT-online.no> who both submitted patches for this problem.
5315 5317
5316 5318 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5317 5319 global embedding to make sure that things don't overwrite user
5318 5320 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5319 5321
5320 5322 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5321 5323 compatibility. Thanks to Hayden Callow
5322 5324 <h.callow-AT-elec.canterbury.ac.nz>
5323 5325
5324 5326 2002-10-04 Fernando Perez <fperez@colorado.edu>
5325 5327
5326 5328 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5327 5329 Gnuplot.File objects.
5328 5330
5329 5331 2002-07-23 Fernando Perez <fperez@colorado.edu>
5330 5332
5331 5333 * IPython/genutils.py (timing): Added timings() and timing() for
5332 5334 quick access to the most commonly needed data, the execution
5333 5335 times. Old timing() renamed to timings_out().
5334 5336
5335 5337 2002-07-18 Fernando Perez <fperez@colorado.edu>
5336 5338
5337 5339 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5338 5340 bug with nested instances disrupting the parent's tab completion.
5339 5341
5340 5342 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5341 5343 all_completions code to begin the emacs integration.
5342 5344
5343 5345 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5344 5346 argument to allow titling individual arrays when plotting.
5345 5347
5346 5348 2002-07-15 Fernando Perez <fperez@colorado.edu>
5347 5349
5348 5350 * setup.py (make_shortcut): changed to retrieve the value of
5349 5351 'Program Files' directory from the registry (this value changes in
5350 5352 non-english versions of Windows). Thanks to Thomas Fanslau
5351 5353 <tfanslau-AT-gmx.de> for the report.
5352 5354
5353 5355 2002-07-10 Fernando Perez <fperez@colorado.edu>
5354 5356
5355 5357 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5356 5358 a bug in pdb, which crashes if a line with only whitespace is
5357 5359 entered. Bug report submitted to sourceforge.
5358 5360
5359 5361 2002-07-09 Fernando Perez <fperez@colorado.edu>
5360 5362
5361 5363 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5362 5364 reporting exceptions (it's a bug in inspect.py, I just set a
5363 5365 workaround).
5364 5366
5365 5367 2002-07-08 Fernando Perez <fperez@colorado.edu>
5366 5368
5367 5369 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5368 5370 __IPYTHON__ in __builtins__ to show up in user_ns.
5369 5371
5370 5372 2002-07-03 Fernando Perez <fperez@colorado.edu>
5371 5373
5372 5374 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5373 5375 name from @gp_set_instance to @gp_set_default.
5374 5376
5375 5377 * IPython/ipmaker.py (make_IPython): default editor value set to
5376 5378 '0' (a string), to match the rc file. Otherwise will crash when
5377 5379 .strip() is called on it.
5378 5380
5379 5381
5380 5382 2002-06-28 Fernando Perez <fperez@colorado.edu>
5381 5383
5382 5384 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5383 5385 of files in current directory when a file is executed via
5384 5386 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5385 5387
5386 5388 * setup.py (manfiles): fix for rpm builds, submitted by RA
5387 5389 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5388 5390
5389 5391 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5390 5392 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5391 5393 string!). A. Schmolck caught this one.
5392 5394
5393 5395 2002-06-27 Fernando Perez <fperez@colorado.edu>
5394 5396
5395 5397 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5396 5398 defined files at the cmd line. __name__ wasn't being set to
5397 5399 __main__.
5398 5400
5399 5401 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5400 5402 regular lists and tuples besides Numeric arrays.
5401 5403
5402 5404 * IPython/Prompts.py (CachedOutput.__call__): Added output
5403 5405 supression for input ending with ';'. Similar to Mathematica and
5404 5406 Matlab. The _* vars and Out[] list are still updated, just like
5405 5407 Mathematica behaves.
5406 5408
5407 5409 2002-06-25 Fernando Perez <fperez@colorado.edu>
5408 5410
5409 5411 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5410 5412 .ini extensions for profiels under Windows.
5411 5413
5412 5414 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5413 5415 string form. Fix contributed by Alexander Schmolck
5414 5416 <a.schmolck-AT-gmx.net>
5415 5417
5416 5418 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5417 5419 pre-configured Gnuplot instance.
5418 5420
5419 5421 2002-06-21 Fernando Perez <fperez@colorado.edu>
5420 5422
5421 5423 * IPython/numutils.py (exp_safe): new function, works around the
5422 5424 underflow problems in Numeric.
5423 5425 (log2): New fn. Safe log in base 2: returns exact integer answer
5424 5426 for exact integer powers of 2.
5425 5427
5426 5428 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5427 5429 properly.
5428 5430
5429 5431 2002-06-20 Fernando Perez <fperez@colorado.edu>
5430 5432
5431 5433 * IPython/genutils.py (timing): new function like
5432 5434 Mathematica's. Similar to time_test, but returns more info.
5433 5435
5434 5436 2002-06-18 Fernando Perez <fperez@colorado.edu>
5435 5437
5436 5438 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5437 5439 according to Mike Heeter's suggestions.
5438 5440
5439 5441 2002-06-16 Fernando Perez <fperez@colorado.edu>
5440 5442
5441 5443 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5442 5444 system. GnuplotMagic is gone as a user-directory option. New files
5443 5445 make it easier to use all the gnuplot stuff both from external
5444 5446 programs as well as from IPython. Had to rewrite part of
5445 5447 hardcopy() b/c of a strange bug: often the ps files simply don't
5446 5448 get created, and require a repeat of the command (often several
5447 5449 times).
5448 5450
5449 5451 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5450 5452 resolve output channel at call time, so that if sys.stderr has
5451 5453 been redirected by user this gets honored.
5452 5454
5453 5455 2002-06-13 Fernando Perez <fperez@colorado.edu>
5454 5456
5455 5457 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5456 5458 IPShell. Kept a copy with the old names to avoid breaking people's
5457 5459 embedded code.
5458 5460
5459 5461 * IPython/ipython: simplified it to the bare minimum after
5460 5462 Holger's suggestions. Added info about how to use it in
5461 5463 PYTHONSTARTUP.
5462 5464
5463 5465 * IPython/Shell.py (IPythonShell): changed the options passing
5464 5466 from a string with funky %s replacements to a straight list. Maybe
5465 5467 a bit more typing, but it follows sys.argv conventions, so there's
5466 5468 less special-casing to remember.
5467 5469
5468 5470 2002-06-12 Fernando Perez <fperez@colorado.edu>
5469 5471
5470 5472 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5471 5473 command. Thanks to a suggestion by Mike Heeter.
5472 5474 (Magic.magic_pfile): added behavior to look at filenames if given
5473 5475 arg is not a defined object.
5474 5476 (Magic.magic_save): New @save function to save code snippets. Also
5475 5477 a Mike Heeter idea.
5476 5478
5477 5479 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5478 5480 plot() and replot(). Much more convenient now, especially for
5479 5481 interactive use.
5480 5482
5481 5483 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5482 5484 filenames.
5483 5485
5484 5486 2002-06-02 Fernando Perez <fperez@colorado.edu>
5485 5487
5486 5488 * IPython/Struct.py (Struct.__init__): modified to admit
5487 5489 initialization via another struct.
5488 5490
5489 5491 * IPython/genutils.py (SystemExec.__init__): New stateful
5490 5492 interface to xsys and bq. Useful for writing system scripts.
5491 5493
5492 5494 2002-05-30 Fernando Perez <fperez@colorado.edu>
5493 5495
5494 5496 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5495 5497 documents. This will make the user download smaller (it's getting
5496 5498 too big).
5497 5499
5498 5500 2002-05-29 Fernando Perez <fperez@colorado.edu>
5499 5501
5500 5502 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5501 5503 fix problems with shelve and pickle. Seems to work, but I don't
5502 5504 know if corner cases break it. Thanks to Mike Heeter
5503 5505 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5504 5506
5505 5507 2002-05-24 Fernando Perez <fperez@colorado.edu>
5506 5508
5507 5509 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5508 5510 macros having broken.
5509 5511
5510 5512 2002-05-21 Fernando Perez <fperez@colorado.edu>
5511 5513
5512 5514 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5513 5515 introduced logging bug: all history before logging started was
5514 5516 being written one character per line! This came from the redesign
5515 5517 of the input history as a special list which slices to strings,
5516 5518 not to lists.
5517 5519
5518 5520 2002-05-20 Fernando Perez <fperez@colorado.edu>
5519 5521
5520 5522 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5521 5523 be an attribute of all classes in this module. The design of these
5522 5524 classes needs some serious overhauling.
5523 5525
5524 5526 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5525 5527 which was ignoring '_' in option names.
5526 5528
5527 5529 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5528 5530 'Verbose_novars' to 'Context' and made it the new default. It's a
5529 5531 bit more readable and also safer than verbose.
5530 5532
5531 5533 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5532 5534 triple-quoted strings.
5533 5535
5534 5536 * IPython/OInspect.py (__all__): new module exposing the object
5535 5537 introspection facilities. Now the corresponding magics are dummy
5536 5538 wrappers around this. Having this module will make it much easier
5537 5539 to put these functions into our modified pdb.
5538 5540 This new object inspector system uses the new colorizing module,
5539 5541 so source code and other things are nicely syntax highlighted.
5540 5542
5541 5543 2002-05-18 Fernando Perez <fperez@colorado.edu>
5542 5544
5543 5545 * IPython/ColorANSI.py: Split the coloring tools into a separate
5544 5546 module so I can use them in other code easier (they were part of
5545 5547 ultraTB).
5546 5548
5547 5549 2002-05-17 Fernando Perez <fperez@colorado.edu>
5548 5550
5549 5551 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5550 5552 fixed it to set the global 'g' also to the called instance, as
5551 5553 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5552 5554 user's 'g' variables).
5553 5555
5554 5556 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5555 5557 global variables (aliases to _ih,_oh) so that users which expect
5556 5558 In[5] or Out[7] to work aren't unpleasantly surprised.
5557 5559 (InputList.__getslice__): new class to allow executing slices of
5558 5560 input history directly. Very simple class, complements the use of
5559 5561 macros.
5560 5562
5561 5563 2002-05-16 Fernando Perez <fperez@colorado.edu>
5562 5564
5563 5565 * setup.py (docdirbase): make doc directory be just doc/IPython
5564 5566 without version numbers, it will reduce clutter for users.
5565 5567
5566 5568 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
5567 5569 execfile call to prevent possible memory leak. See for details:
5568 5570 http://mail.python.org/pipermail/python-list/2002-February/088476.html
5569 5571
5570 5572 2002-05-15 Fernando Perez <fperez@colorado.edu>
5571 5573
5572 5574 * IPython/Magic.py (Magic.magic_psource): made the object
5573 5575 introspection names be more standard: pdoc, pdef, pfile and
5574 5576 psource. They all print/page their output, and it makes
5575 5577 remembering them easier. Kept old names for compatibility as
5576 5578 aliases.
5577 5579
5578 5580 2002-05-14 Fernando Perez <fperez@colorado.edu>
5579 5581
5580 5582 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
5581 5583 what the mouse problem was. The trick is to use gnuplot with temp
5582 5584 files and NOT with pipes (for data communication), because having
5583 5585 both pipes and the mouse on is bad news.
5584 5586
5585 5587 2002-05-13 Fernando Perez <fperez@colorado.edu>
5586 5588
5587 5589 * IPython/Magic.py (Magic._ofind): fixed namespace order search
5588 5590 bug. Information would be reported about builtins even when
5589 5591 user-defined functions overrode them.
5590 5592
5591 5593 2002-05-11 Fernando Perez <fperez@colorado.edu>
5592 5594
5593 5595 * IPython/__init__.py (__all__): removed FlexCompleter from
5594 5596 __all__ so that things don't fail in platforms without readline.
5595 5597
5596 5598 2002-05-10 Fernando Perez <fperez@colorado.edu>
5597 5599
5598 5600 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
5599 5601 it requires Numeric, effectively making Numeric a dependency for
5600 5602 IPython.
5601 5603
5602 5604 * Released 0.2.13
5603 5605
5604 5606 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
5605 5607 profiler interface. Now all the major options from the profiler
5606 5608 module are directly supported in IPython, both for single
5607 5609 expressions (@prun) and for full programs (@run -p).
5608 5610
5609 5611 2002-05-09 Fernando Perez <fperez@colorado.edu>
5610 5612
5611 5613 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
5612 5614 magic properly formatted for screen.
5613 5615
5614 5616 * setup.py (make_shortcut): Changed things to put pdf version in
5615 5617 doc/ instead of doc/manual (had to change lyxport a bit).
5616 5618
5617 5619 * IPython/Magic.py (Profile.string_stats): made profile runs go
5618 5620 through pager (they are long and a pager allows searching, saving,
5619 5621 etc.)
5620 5622
5621 5623 2002-05-08 Fernando Perez <fperez@colorado.edu>
5622 5624
5623 5625 * Released 0.2.12
5624 5626
5625 5627 2002-05-06 Fernando Perez <fperez@colorado.edu>
5626 5628
5627 5629 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5628 5630 introduced); 'hist n1 n2' was broken.
5629 5631 (Magic.magic_pdb): added optional on/off arguments to @pdb
5630 5632 (Magic.magic_run): added option -i to @run, which executes code in
5631 5633 the IPython namespace instead of a clean one. Also added @irun as
5632 5634 an alias to @run -i.
5633 5635
5634 5636 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5635 5637 fixed (it didn't really do anything, the namespaces were wrong).
5636 5638
5637 5639 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5638 5640
5639 5641 * IPython/__init__.py (__all__): Fixed package namespace, now
5640 5642 'import IPython' does give access to IPython.<all> as
5641 5643 expected. Also renamed __release__ to Release.
5642 5644
5643 5645 * IPython/Debugger.py (__license__): created new Pdb class which
5644 5646 functions like a drop-in for the normal pdb.Pdb but does NOT
5645 5647 import readline by default. This way it doesn't muck up IPython's
5646 5648 readline handling, and now tab-completion finally works in the
5647 5649 debugger -- sort of. It completes things globally visible, but the
5648 5650 completer doesn't track the stack as pdb walks it. That's a bit
5649 5651 tricky, and I'll have to implement it later.
5650 5652
5651 5653 2002-05-05 Fernando Perez <fperez@colorado.edu>
5652 5654
5653 5655 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5654 5656 magic docstrings when printed via ? (explicit \'s were being
5655 5657 printed).
5656 5658
5657 5659 * IPython/ipmaker.py (make_IPython): fixed namespace
5658 5660 identification bug. Now variables loaded via logs or command-line
5659 5661 files are recognized in the interactive namespace by @who.
5660 5662
5661 5663 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5662 5664 log replay system stemming from the string form of Structs.
5663 5665
5664 5666 * IPython/Magic.py (Macro.__init__): improved macros to properly
5665 5667 handle magic commands in them.
5666 5668 (Magic.magic_logstart): usernames are now expanded so 'logstart
5667 5669 ~/mylog' now works.
5668 5670
5669 5671 * IPython/iplib.py (complete): fixed bug where paths starting with
5670 5672 '/' would be completed as magic names.
5671 5673
5672 5674 2002-05-04 Fernando Perez <fperez@colorado.edu>
5673 5675
5674 5676 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5675 5677 allow running full programs under the profiler's control.
5676 5678
5677 5679 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5678 5680 mode to report exceptions verbosely but without formatting
5679 5681 variables. This addresses the issue of ipython 'freezing' (it's
5680 5682 not frozen, but caught in an expensive formatting loop) when huge
5681 5683 variables are in the context of an exception.
5682 5684 (VerboseTB.text): Added '--->' markers at line where exception was
5683 5685 triggered. Much clearer to read, especially in NoColor modes.
5684 5686
5685 5687 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5686 5688 implemented in reverse when changing to the new parse_options().
5687 5689
5688 5690 2002-05-03 Fernando Perez <fperez@colorado.edu>
5689 5691
5690 5692 * IPython/Magic.py (Magic.parse_options): new function so that
5691 5693 magics can parse options easier.
5692 5694 (Magic.magic_prun): new function similar to profile.run(),
5693 5695 suggested by Chris Hart.
5694 5696 (Magic.magic_cd): fixed behavior so that it only changes if
5695 5697 directory actually is in history.
5696 5698
5697 5699 * IPython/usage.py (__doc__): added information about potential
5698 5700 slowness of Verbose exception mode when there are huge data
5699 5701 structures to be formatted (thanks to Archie Paulson).
5700 5702
5701 5703 * IPython/ipmaker.py (make_IPython): Changed default logging
5702 5704 (when simply called with -log) to use curr_dir/ipython.log in
5703 5705 rotate mode. Fixed crash which was occuring with -log before
5704 5706 (thanks to Jim Boyle).
5705 5707
5706 5708 2002-05-01 Fernando Perez <fperez@colorado.edu>
5707 5709
5708 5710 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5709 5711 was nasty -- though somewhat of a corner case).
5710 5712
5711 5713 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5712 5714 text (was a bug).
5713 5715
5714 5716 2002-04-30 Fernando Perez <fperez@colorado.edu>
5715 5717
5716 5718 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5717 5719 a print after ^D or ^C from the user so that the In[] prompt
5718 5720 doesn't over-run the gnuplot one.
5719 5721
5720 5722 2002-04-29 Fernando Perez <fperez@colorado.edu>
5721 5723
5722 5724 * Released 0.2.10
5723 5725
5724 5726 * IPython/__release__.py (version): get date dynamically.
5725 5727
5726 5728 * Misc. documentation updates thanks to Arnd's comments. Also ran
5727 5729 a full spellcheck on the manual (hadn't been done in a while).
5728 5730
5729 5731 2002-04-27 Fernando Perez <fperez@colorado.edu>
5730 5732
5731 5733 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
5732 5734 starting a log in mid-session would reset the input history list.
5733 5735
5734 5736 2002-04-26 Fernando Perez <fperez@colorado.edu>
5735 5737
5736 5738 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
5737 5739 all files were being included in an update. Now anything in
5738 5740 UserConfig that matches [A-Za-z]*.py will go (this excludes
5739 5741 __init__.py)
5740 5742
5741 5743 2002-04-25 Fernando Perez <fperez@colorado.edu>
5742 5744
5743 5745 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
5744 5746 to __builtins__ so that any form of embedded or imported code can
5745 5747 test for being inside IPython.
5746 5748
5747 5749 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
5748 5750 changed to GnuplotMagic because it's now an importable module,
5749 5751 this makes the name follow that of the standard Gnuplot module.
5750 5752 GnuplotMagic can now be loaded at any time in mid-session.
5751 5753
5752 5754 2002-04-24 Fernando Perez <fperez@colorado.edu>
5753 5755
5754 5756 * IPython/numutils.py: removed SIUnits. It doesn't properly set
5755 5757 the globals (IPython has its own namespace) and the
5756 5758 PhysicalQuantity stuff is much better anyway.
5757 5759
5758 5760 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
5759 5761 embedding example to standard user directory for
5760 5762 distribution. Also put it in the manual.
5761 5763
5762 5764 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
5763 5765 instance as first argument (so it doesn't rely on some obscure
5764 5766 hidden global).
5765 5767
5766 5768 * IPython/UserConfig/ipythonrc.py: put () back in accepted
5767 5769 delimiters. While it prevents ().TAB from working, it allows
5768 5770 completions in open (... expressions. This is by far a more common
5769 5771 case.
5770 5772
5771 5773 2002-04-23 Fernando Perez <fperez@colorado.edu>
5772 5774
5773 5775 * IPython/Extensions/InterpreterPasteInput.py: new
5774 5776 syntax-processing module for pasting lines with >>> or ... at the
5775 5777 start.
5776 5778
5777 5779 * IPython/Extensions/PhysicalQ_Interactive.py
5778 5780 (PhysicalQuantityInteractive.__int__): fixed to work with either
5779 5781 Numeric or math.
5780 5782
5781 5783 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
5782 5784 provided profiles. Now we have:
5783 5785 -math -> math module as * and cmath with its own namespace.
5784 5786 -numeric -> Numeric as *, plus gnuplot & grace
5785 5787 -physics -> same as before
5786 5788
5787 5789 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
5788 5790 user-defined magics wouldn't be found by @magic if they were
5789 5791 defined as class methods. Also cleaned up the namespace search
5790 5792 logic and the string building (to use %s instead of many repeated
5791 5793 string adds).
5792 5794
5793 5795 * IPython/UserConfig/example-magic.py (magic_foo): updated example
5794 5796 of user-defined magics to operate with class methods (cleaner, in
5795 5797 line with the gnuplot code).
5796 5798
5797 5799 2002-04-22 Fernando Perez <fperez@colorado.edu>
5798 5800
5799 5801 * setup.py: updated dependency list so that manual is updated when
5800 5802 all included files change.
5801 5803
5802 5804 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5803 5805 the delimiter removal option (the fix is ugly right now).
5804 5806
5805 5807 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5806 5808 all of the math profile (quicker loading, no conflict between
5807 5809 g-9.8 and g-gnuplot).
5808 5810
5809 5811 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5810 5812 name of post-mortem files to IPython_crash_report.txt.
5811 5813
5812 5814 * Cleanup/update of the docs. Added all the new readline info and
5813 5815 formatted all lists as 'real lists'.
5814 5816
5815 5817 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5816 5818 tab-completion options, since the full readline parse_and_bind is
5817 5819 now accessible.
5818 5820
5819 5821 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5820 5822 handling of readline options. Now users can specify any string to
5821 5823 be passed to parse_and_bind(), as well as the delimiters to be
5822 5824 removed.
5823 5825 (InteractiveShell.__init__): Added __name__ to the global
5824 5826 namespace so that things like Itpl which rely on its existence
5825 5827 don't crash.
5826 5828 (InteractiveShell._prefilter): Defined the default with a _ so
5827 5829 that prefilter() is easier to override, while the default one
5828 5830 remains available.
5829 5831
5830 5832 2002-04-18 Fernando Perez <fperez@colorado.edu>
5831 5833
5832 5834 * Added information about pdb in the docs.
5833 5835
5834 5836 2002-04-17 Fernando Perez <fperez@colorado.edu>
5835 5837
5836 5838 * IPython/ipmaker.py (make_IPython): added rc_override option to
5837 5839 allow passing config options at creation time which may override
5838 5840 anything set in the config files or command line. This is
5839 5841 particularly useful for configuring embedded instances.
5840 5842
5841 5843 2002-04-15 Fernando Perez <fperez@colorado.edu>
5842 5844
5843 5845 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5844 5846 crash embedded instances because of the input cache falling out of
5845 5847 sync with the output counter.
5846 5848
5847 5849 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5848 5850 mode which calls pdb after an uncaught exception in IPython itself.
5849 5851
5850 5852 2002-04-14 Fernando Perez <fperez@colorado.edu>
5851 5853
5852 5854 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5853 5855 readline, fix it back after each call.
5854 5856
5855 5857 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5856 5858 method to force all access via __call__(), which guarantees that
5857 5859 traceback references are properly deleted.
5858 5860
5859 5861 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5860 5862 improve printing when pprint is in use.
5861 5863
5862 5864 2002-04-13 Fernando Perez <fperez@colorado.edu>
5863 5865
5864 5866 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5865 5867 exceptions aren't caught anymore. If the user triggers one, he
5866 5868 should know why he's doing it and it should go all the way up,
5867 5869 just like any other exception. So now @abort will fully kill the
5868 5870 embedded interpreter and the embedding code (unless that happens
5869 5871 to catch SystemExit).
5870 5872
5871 5873 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5872 5874 and a debugger() method to invoke the interactive pdb debugger
5873 5875 after printing exception information. Also added the corresponding
5874 5876 -pdb option and @pdb magic to control this feature, and updated
5875 5877 the docs. After a suggestion from Christopher Hart
5876 5878 (hart-AT-caltech.edu).
5877 5879
5878 5880 2002-04-12 Fernando Perez <fperez@colorado.edu>
5879 5881
5880 5882 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5881 5883 the exception handlers defined by the user (not the CrashHandler)
5882 5884 so that user exceptions don't trigger an ipython bug report.
5883 5885
5884 5886 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5885 5887 configurable (it should have always been so).
5886 5888
5887 5889 2002-03-26 Fernando Perez <fperez@colorado.edu>
5888 5890
5889 5891 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5890 5892 and there to fix embedding namespace issues. This should all be
5891 5893 done in a more elegant way.
5892 5894
5893 5895 2002-03-25 Fernando Perez <fperez@colorado.edu>
5894 5896
5895 5897 * IPython/genutils.py (get_home_dir): Try to make it work under
5896 5898 win9x also.
5897 5899
5898 5900 2002-03-20 Fernando Perez <fperez@colorado.edu>
5899 5901
5900 5902 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5901 5903 sys.displayhook untouched upon __init__.
5902 5904
5903 5905 2002-03-19 Fernando Perez <fperez@colorado.edu>
5904 5906
5905 5907 * Released 0.2.9 (for embedding bug, basically).
5906 5908
5907 5909 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5908 5910 exceptions so that enclosing shell's state can be restored.
5909 5911
5910 5912 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5911 5913 naming conventions in the .ipython/ dir.
5912 5914
5913 5915 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5914 5916 from delimiters list so filenames with - in them get expanded.
5915 5917
5916 5918 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5917 5919 sys.displayhook not being properly restored after an embedded call.
5918 5920
5919 5921 2002-03-18 Fernando Perez <fperez@colorado.edu>
5920 5922
5921 5923 * Released 0.2.8
5922 5924
5923 5925 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5924 5926 some files weren't being included in a -upgrade.
5925 5927 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5926 5928 on' so that the first tab completes.
5927 5929 (InteractiveShell.handle_magic): fixed bug with spaces around
5928 5930 quotes breaking many magic commands.
5929 5931
5930 5932 * setup.py: added note about ignoring the syntax error messages at
5931 5933 installation.
5932 5934
5933 5935 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5934 5936 streamlining the gnuplot interface, now there's only one magic @gp.
5935 5937
5936 5938 2002-03-17 Fernando Perez <fperez@colorado.edu>
5937 5939
5938 5940 * IPython/UserConfig/magic_gnuplot.py: new name for the
5939 5941 example-magic_pm.py file. Much enhanced system, now with a shell
5940 5942 for communicating directly with gnuplot, one command at a time.
5941 5943
5942 5944 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5943 5945 setting __name__=='__main__'.
5944 5946
5945 5947 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5946 5948 mini-shell for accessing gnuplot from inside ipython. Should
5947 5949 extend it later for grace access too. Inspired by Arnd's
5948 5950 suggestion.
5949 5951
5950 5952 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5951 5953 calling magic functions with () in their arguments. Thanks to Arnd
5952 5954 Baecker for pointing this to me.
5953 5955
5954 5956 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5955 5957 infinitely for integer or complex arrays (only worked with floats).
5956 5958
5957 5959 2002-03-16 Fernando Perez <fperez@colorado.edu>
5958 5960
5959 5961 * setup.py: Merged setup and setup_windows into a single script
5960 5962 which properly handles things for windows users.
5961 5963
5962 5964 2002-03-15 Fernando Perez <fperez@colorado.edu>
5963 5965
5964 5966 * Big change to the manual: now the magics are all automatically
5965 5967 documented. This information is generated from their docstrings
5966 5968 and put in a latex file included by the manual lyx file. This way
5967 5969 we get always up to date information for the magics. The manual
5968 5970 now also has proper version information, also auto-synced.
5969 5971
5970 5972 For this to work, an undocumented --magic_docstrings option was added.
5971 5973
5972 5974 2002-03-13 Fernando Perez <fperez@colorado.edu>
5973 5975
5974 5976 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5975 5977 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5976 5978
5977 5979 2002-03-12 Fernando Perez <fperez@colorado.edu>
5978 5980
5979 5981 * IPython/ultraTB.py (TermColors): changed color escapes again to
5980 5982 fix the (old, reintroduced) line-wrapping bug. Basically, if
5981 5983 \001..\002 aren't given in the color escapes, lines get wrapped
5982 5984 weirdly. But giving those screws up old xterms and emacs terms. So
5983 5985 I added some logic for emacs terms to be ok, but I can't identify old
5984 5986 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5985 5987
5986 5988 2002-03-10 Fernando Perez <fperez@colorado.edu>
5987 5989
5988 5990 * IPython/usage.py (__doc__): Various documentation cleanups and
5989 5991 updates, both in usage docstrings and in the manual.
5990 5992
5991 5993 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5992 5994 handling of caching. Set minimum acceptabe value for having a
5993 5995 cache at 20 values.
5994 5996
5995 5997 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5996 5998 install_first_time function to a method, renamed it and added an
5997 5999 'upgrade' mode. Now people can update their config directory with
5998 6000 a simple command line switch (-upgrade, also new).
5999 6001
6000 6002 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6001 6003 @file (convenient for automagic users under Python >= 2.2).
6002 6004 Removed @files (it seemed more like a plural than an abbrev. of
6003 6005 'file show').
6004 6006
6005 6007 * IPython/iplib.py (install_first_time): Fixed crash if there were
6006 6008 backup files ('~') in .ipython/ install directory.
6007 6009
6008 6010 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6009 6011 system. Things look fine, but these changes are fairly
6010 6012 intrusive. Test them for a few days.
6011 6013
6012 6014 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6013 6015 the prompts system. Now all in/out prompt strings are user
6014 6016 controllable. This is particularly useful for embedding, as one
6015 6017 can tag embedded instances with particular prompts.
6016 6018
6017 6019 Also removed global use of sys.ps1/2, which now allows nested
6018 6020 embeddings without any problems. Added command-line options for
6019 6021 the prompt strings.
6020 6022
6021 6023 2002-03-08 Fernando Perez <fperez@colorado.edu>
6022 6024
6023 6025 * IPython/UserConfig/example-embed-short.py (ipshell): added
6024 6026 example file with the bare minimum code for embedding.
6025 6027
6026 6028 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6027 6029 functionality for the embeddable shell to be activated/deactivated
6028 6030 either globally or at each call.
6029 6031
6030 6032 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6031 6033 rewriting the prompt with '--->' for auto-inputs with proper
6032 6034 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6033 6035 this is handled by the prompts class itself, as it should.
6034 6036
6035 6037 2002-03-05 Fernando Perez <fperez@colorado.edu>
6036 6038
6037 6039 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6038 6040 @logstart to avoid name clashes with the math log function.
6039 6041
6040 6042 * Big updates to X/Emacs section of the manual.
6041 6043
6042 6044 * Removed ipython_emacs. Milan explained to me how to pass
6043 6045 arguments to ipython through Emacs. Some day I'm going to end up
6044 6046 learning some lisp...
6045 6047
6046 6048 2002-03-04 Fernando Perez <fperez@colorado.edu>
6047 6049
6048 6050 * IPython/ipython_emacs: Created script to be used as the
6049 6051 py-python-command Emacs variable so we can pass IPython
6050 6052 parameters. I can't figure out how to tell Emacs directly to pass
6051 6053 parameters to IPython, so a dummy shell script will do it.
6052 6054
6053 6055 Other enhancements made for things to work better under Emacs'
6054 6056 various types of terminals. Many thanks to Milan Zamazal
6055 6057 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6056 6058
6057 6059 2002-03-01 Fernando Perez <fperez@colorado.edu>
6058 6060
6059 6061 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6060 6062 that loading of readline is now optional. This gives better
6061 6063 control to emacs users.
6062 6064
6063 6065 * IPython/ultraTB.py (__date__): Modified color escape sequences
6064 6066 and now things work fine under xterm and in Emacs' term buffers
6065 6067 (though not shell ones). Well, in emacs you get colors, but all
6066 6068 seem to be 'light' colors (no difference between dark and light
6067 6069 ones). But the garbage chars are gone, and also in xterms. It
6068 6070 seems that now I'm using 'cleaner' ansi sequences.
6069 6071
6070 6072 2002-02-21 Fernando Perez <fperez@colorado.edu>
6071 6073
6072 6074 * Released 0.2.7 (mainly to publish the scoping fix).
6073 6075
6074 6076 * IPython/Logger.py (Logger.logstate): added. A corresponding
6075 6077 @logstate magic was created.
6076 6078
6077 6079 * IPython/Magic.py: fixed nested scoping problem under Python
6078 6080 2.1.x (automagic wasn't working).
6079 6081
6080 6082 2002-02-20 Fernando Perez <fperez@colorado.edu>
6081 6083
6082 6084 * Released 0.2.6.
6083 6085
6084 6086 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6085 6087 option so that logs can come out without any headers at all.
6086 6088
6087 6089 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6088 6090 SciPy.
6089 6091
6090 6092 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6091 6093 that embedded IPython calls don't require vars() to be explicitly
6092 6094 passed. Now they are extracted from the caller's frame (code
6093 6095 snatched from Eric Jones' weave). Added better documentation to
6094 6096 the section on embedding and the example file.
6095 6097
6096 6098 * IPython/genutils.py (page): Changed so that under emacs, it just
6097 6099 prints the string. You can then page up and down in the emacs
6098 6100 buffer itself. This is how the builtin help() works.
6099 6101
6100 6102 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6101 6103 macro scoping: macros need to be executed in the user's namespace
6102 6104 to work as if they had been typed by the user.
6103 6105
6104 6106 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6105 6107 execute automatically (no need to type 'exec...'). They then
6106 6108 behave like 'true macros'. The printing system was also modified
6107 6109 for this to work.
6108 6110
6109 6111 2002-02-19 Fernando Perez <fperez@colorado.edu>
6110 6112
6111 6113 * IPython/genutils.py (page_file): new function for paging files
6112 6114 in an OS-independent way. Also necessary for file viewing to work
6113 6115 well inside Emacs buffers.
6114 6116 (page): Added checks for being in an emacs buffer.
6115 6117 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6116 6118 same bug in iplib.
6117 6119
6118 6120 2002-02-18 Fernando Perez <fperez@colorado.edu>
6119 6121
6120 6122 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6121 6123 of readline so that IPython can work inside an Emacs buffer.
6122 6124
6123 6125 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6124 6126 method signatures (they weren't really bugs, but it looks cleaner
6125 6127 and keeps PyChecker happy).
6126 6128
6127 6129 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6128 6130 for implementing various user-defined hooks. Currently only
6129 6131 display is done.
6130 6132
6131 6133 * IPython/Prompts.py (CachedOutput._display): changed display
6132 6134 functions so that they can be dynamically changed by users easily.
6133 6135
6134 6136 * IPython/Extensions/numeric_formats.py (num_display): added an
6135 6137 extension for printing NumPy arrays in flexible manners. It
6136 6138 doesn't do anything yet, but all the structure is in
6137 6139 place. Ultimately the plan is to implement output format control
6138 6140 like in Octave.
6139 6141
6140 6142 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6141 6143 methods are found at run-time by all the automatic machinery.
6142 6144
6143 6145 2002-02-17 Fernando Perez <fperez@colorado.edu>
6144 6146
6145 6147 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6146 6148 whole file a little.
6147 6149
6148 6150 * ToDo: closed this document. Now there's a new_design.lyx
6149 6151 document for all new ideas. Added making a pdf of it for the
6150 6152 end-user distro.
6151 6153
6152 6154 * IPython/Logger.py (Logger.switch_log): Created this to replace
6153 6155 logon() and logoff(). It also fixes a nasty crash reported by
6154 6156 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6155 6157
6156 6158 * IPython/iplib.py (complete): got auto-completion to work with
6157 6159 automagic (I had wanted this for a long time).
6158 6160
6159 6161 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6160 6162 to @file, since file() is now a builtin and clashes with automagic
6161 6163 for @file.
6162 6164
6163 6165 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6164 6166 of this was previously in iplib, which had grown to more than 2000
6165 6167 lines, way too long. No new functionality, but it makes managing
6166 6168 the code a bit easier.
6167 6169
6168 6170 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6169 6171 information to crash reports.
6170 6172
6171 6173 2002-02-12 Fernando Perez <fperez@colorado.edu>
6172 6174
6173 6175 * Released 0.2.5.
6174 6176
6175 6177 2002-02-11 Fernando Perez <fperez@colorado.edu>
6176 6178
6177 6179 * Wrote a relatively complete Windows installer. It puts
6178 6180 everything in place, creates Start Menu entries and fixes the
6179 6181 color issues. Nothing fancy, but it works.
6180 6182
6181 6183 2002-02-10 Fernando Perez <fperez@colorado.edu>
6182 6184
6183 6185 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6184 6186 os.path.expanduser() call so that we can type @run ~/myfile.py and
6185 6187 have thigs work as expected.
6186 6188
6187 6189 * IPython/genutils.py (page): fixed exception handling so things
6188 6190 work both in Unix and Windows correctly. Quitting a pager triggers
6189 6191 an IOError/broken pipe in Unix, and in windows not finding a pager
6190 6192 is also an IOError, so I had to actually look at the return value
6191 6193 of the exception, not just the exception itself. Should be ok now.
6192 6194
6193 6195 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6194 6196 modified to allow case-insensitive color scheme changes.
6195 6197
6196 6198 2002-02-09 Fernando Perez <fperez@colorado.edu>
6197 6199
6198 6200 * IPython/genutils.py (native_line_ends): new function to leave
6199 6201 user config files with os-native line-endings.
6200 6202
6201 6203 * README and manual updates.
6202 6204
6203 6205 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6204 6206 instead of StringType to catch Unicode strings.
6205 6207
6206 6208 * IPython/genutils.py (filefind): fixed bug for paths with
6207 6209 embedded spaces (very common in Windows).
6208 6210
6209 6211 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6210 6212 files under Windows, so that they get automatically associated
6211 6213 with a text editor. Windows makes it a pain to handle
6212 6214 extension-less files.
6213 6215
6214 6216 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6215 6217 warning about readline only occur for Posix. In Windows there's no
6216 6218 way to get readline, so why bother with the warning.
6217 6219
6218 6220 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6219 6221 for __str__ instead of dir(self), since dir() changed in 2.2.
6220 6222
6221 6223 * Ported to Windows! Tested on XP, I suspect it should work fine
6222 6224 on NT/2000, but I don't think it will work on 98 et al. That
6223 6225 series of Windows is such a piece of junk anyway that I won't try
6224 6226 porting it there. The XP port was straightforward, showed a few
6225 6227 bugs here and there (fixed all), in particular some string
6226 6228 handling stuff which required considering Unicode strings (which
6227 6229 Windows uses). This is good, but hasn't been too tested :) No
6228 6230 fancy installer yet, I'll put a note in the manual so people at
6229 6231 least make manually a shortcut.
6230 6232
6231 6233 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6232 6234 into a single one, "colors". This now controls both prompt and
6233 6235 exception color schemes, and can be changed both at startup
6234 6236 (either via command-line switches or via ipythonrc files) and at
6235 6237 runtime, with @colors.
6236 6238 (Magic.magic_run): renamed @prun to @run and removed the old
6237 6239 @run. The two were too similar to warrant keeping both.
6238 6240
6239 6241 2002-02-03 Fernando Perez <fperez@colorado.edu>
6240 6242
6241 6243 * IPython/iplib.py (install_first_time): Added comment on how to
6242 6244 configure the color options for first-time users. Put a <return>
6243 6245 request at the end so that small-terminal users get a chance to
6244 6246 read the startup info.
6245 6247
6246 6248 2002-01-23 Fernando Perez <fperez@colorado.edu>
6247 6249
6248 6250 * IPython/iplib.py (CachedOutput.update): Changed output memory
6249 6251 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6250 6252 input history we still use _i. Did this b/c these variable are
6251 6253 very commonly used in interactive work, so the less we need to
6252 6254 type the better off we are.
6253 6255 (Magic.magic_prun): updated @prun to better handle the namespaces
6254 6256 the file will run in, including a fix for __name__ not being set
6255 6257 before.
6256 6258
6257 6259 2002-01-20 Fernando Perez <fperez@colorado.edu>
6258 6260
6259 6261 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6260 6262 extra garbage for Python 2.2. Need to look more carefully into
6261 6263 this later.
6262 6264
6263 6265 2002-01-19 Fernando Perez <fperez@colorado.edu>
6264 6266
6265 6267 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6266 6268 display SyntaxError exceptions properly formatted when they occur
6267 6269 (they can be triggered by imported code).
6268 6270
6269 6271 2002-01-18 Fernando Perez <fperez@colorado.edu>
6270 6272
6271 6273 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6272 6274 SyntaxError exceptions are reported nicely formatted, instead of
6273 6275 spitting out only offset information as before.
6274 6276 (Magic.magic_prun): Added the @prun function for executing
6275 6277 programs with command line args inside IPython.
6276 6278
6277 6279 2002-01-16 Fernando Perez <fperez@colorado.edu>
6278 6280
6279 6281 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6280 6282 to *not* include the last item given in a range. This brings their
6281 6283 behavior in line with Python's slicing:
6282 6284 a[n1:n2] -> a[n1]...a[n2-1]
6283 6285 It may be a bit less convenient, but I prefer to stick to Python's
6284 6286 conventions *everywhere*, so users never have to wonder.
6285 6287 (Magic.magic_macro): Added @macro function to ease the creation of
6286 6288 macros.
6287 6289
6288 6290 2002-01-05 Fernando Perez <fperez@colorado.edu>
6289 6291
6290 6292 * Released 0.2.4.
6291 6293
6292 6294 * IPython/iplib.py (Magic.magic_pdef):
6293 6295 (InteractiveShell.safe_execfile): report magic lines and error
6294 6296 lines without line numbers so one can easily copy/paste them for
6295 6297 re-execution.
6296 6298
6297 6299 * Updated manual with recent changes.
6298 6300
6299 6301 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6300 6302 docstring printing when class? is called. Very handy for knowing
6301 6303 how to create class instances (as long as __init__ is well
6302 6304 documented, of course :)
6303 6305 (Magic.magic_doc): print both class and constructor docstrings.
6304 6306 (Magic.magic_pdef): give constructor info if passed a class and
6305 6307 __call__ info for callable object instances.
6306 6308
6307 6309 2002-01-04 Fernando Perez <fperez@colorado.edu>
6308 6310
6309 6311 * Made deep_reload() off by default. It doesn't always work
6310 6312 exactly as intended, so it's probably safer to have it off. It's
6311 6313 still available as dreload() anyway, so nothing is lost.
6312 6314
6313 6315 2002-01-02 Fernando Perez <fperez@colorado.edu>
6314 6316
6315 6317 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6316 6318 so I wanted an updated release).
6317 6319
6318 6320 2001-12-27 Fernando Perez <fperez@colorado.edu>
6319 6321
6320 6322 * IPython/iplib.py (InteractiveShell.interact): Added the original
6321 6323 code from 'code.py' for this module in order to change the
6322 6324 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6323 6325 the history cache would break when the user hit Ctrl-C, and
6324 6326 interact() offers no way to add any hooks to it.
6325 6327
6326 6328 2001-12-23 Fernando Perez <fperez@colorado.edu>
6327 6329
6328 6330 * setup.py: added check for 'MANIFEST' before trying to remove
6329 6331 it. Thanks to Sean Reifschneider.
6330 6332
6331 6333 2001-12-22 Fernando Perez <fperez@colorado.edu>
6332 6334
6333 6335 * Released 0.2.2.
6334 6336
6335 6337 * Finished (reasonably) writing the manual. Later will add the
6336 6338 python-standard navigation stylesheets, but for the time being
6337 6339 it's fairly complete. Distribution will include html and pdf
6338 6340 versions.
6339 6341
6340 6342 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6341 6343 (MayaVi author).
6342 6344
6343 6345 2001-12-21 Fernando Perez <fperez@colorado.edu>
6344 6346
6345 6347 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6346 6348 good public release, I think (with the manual and the distutils
6347 6349 installer). The manual can use some work, but that can go
6348 6350 slowly. Otherwise I think it's quite nice for end users. Next
6349 6351 summer, rewrite the guts of it...
6350 6352
6351 6353 * Changed format of ipythonrc files to use whitespace as the
6352 6354 separator instead of an explicit '='. Cleaner.
6353 6355
6354 6356 2001-12-20 Fernando Perez <fperez@colorado.edu>
6355 6357
6356 6358 * Started a manual in LyX. For now it's just a quick merge of the
6357 6359 various internal docstrings and READMEs. Later it may grow into a
6358 6360 nice, full-blown manual.
6359 6361
6360 6362 * Set up a distutils based installer. Installation should now be
6361 6363 trivially simple for end-users.
6362 6364
6363 6365 2001-12-11 Fernando Perez <fperez@colorado.edu>
6364 6366
6365 6367 * Released 0.2.0. First public release, announced it at
6366 6368 comp.lang.python. From now on, just bugfixes...
6367 6369
6368 6370 * Went through all the files, set copyright/license notices and
6369 6371 cleaned up things. Ready for release.
6370 6372
6371 6373 2001-12-10 Fernando Perez <fperez@colorado.edu>
6372 6374
6373 6375 * Changed the first-time installer not to use tarfiles. It's more
6374 6376 robust now and less unix-dependent. Also makes it easier for
6375 6377 people to later upgrade versions.
6376 6378
6377 6379 * Changed @exit to @abort to reflect the fact that it's pretty
6378 6380 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6379 6381 becomes significant only when IPyhton is embedded: in that case,
6380 6382 C-D closes IPython only, but @abort kills the enclosing program
6381 6383 too (unless it had called IPython inside a try catching
6382 6384 SystemExit).
6383 6385
6384 6386 * Created Shell module which exposes the actuall IPython Shell
6385 6387 classes, currently the normal and the embeddable one. This at
6386 6388 least offers a stable interface we won't need to change when
6387 6389 (later) the internals are rewritten. That rewrite will be confined
6388 6390 to iplib and ipmaker, but the Shell interface should remain as is.
6389 6391
6390 6392 * Added embed module which offers an embeddable IPShell object,
6391 6393 useful to fire up IPython *inside* a running program. Great for
6392 6394 debugging or dynamical data analysis.
6393 6395
6394 6396 2001-12-08 Fernando Perez <fperez@colorado.edu>
6395 6397
6396 6398 * Fixed small bug preventing seeing info from methods of defined
6397 6399 objects (incorrect namespace in _ofind()).
6398 6400
6399 6401 * Documentation cleanup. Moved the main usage docstrings to a
6400 6402 separate file, usage.py (cleaner to maintain, and hopefully in the
6401 6403 future some perlpod-like way of producing interactive, man and
6402 6404 html docs out of it will be found).
6403 6405
6404 6406 * Added @profile to see your profile at any time.
6405 6407
6406 6408 * Added @p as an alias for 'print'. It's especially convenient if
6407 6409 using automagic ('p x' prints x).
6408 6410
6409 6411 * Small cleanups and fixes after a pychecker run.
6410 6412
6411 6413 * Changed the @cd command to handle @cd - and @cd -<n> for
6412 6414 visiting any directory in _dh.
6413 6415
6414 6416 * Introduced _dh, a history of visited directories. @dhist prints
6415 6417 it out with numbers.
6416 6418
6417 6419 2001-12-07 Fernando Perez <fperez@colorado.edu>
6418 6420
6419 6421 * Released 0.1.22
6420 6422
6421 6423 * Made initialization a bit more robust against invalid color
6422 6424 options in user input (exit, not traceback-crash).
6423 6425
6424 6426 * Changed the bug crash reporter to write the report only in the
6425 6427 user's .ipython directory. That way IPython won't litter people's
6426 6428 hard disks with crash files all over the place. Also print on
6427 6429 screen the necessary mail command.
6428 6430
6429 6431 * With the new ultraTB, implemented LightBG color scheme for light
6430 6432 background terminals. A lot of people like white backgrounds, so I
6431 6433 guess we should at least give them something readable.
6432 6434
6433 6435 2001-12-06 Fernando Perez <fperez@colorado.edu>
6434 6436
6435 6437 * Modified the structure of ultraTB. Now there's a proper class
6436 6438 for tables of color schemes which allow adding schemes easily and
6437 6439 switching the active scheme without creating a new instance every
6438 6440 time (which was ridiculous). The syntax for creating new schemes
6439 6441 is also cleaner. I think ultraTB is finally done, with a clean
6440 6442 class structure. Names are also much cleaner (now there's proper
6441 6443 color tables, no need for every variable to also have 'color' in
6442 6444 its name).
6443 6445
6444 6446 * Broke down genutils into separate files. Now genutils only
6445 6447 contains utility functions, and classes have been moved to their
6446 6448 own files (they had enough independent functionality to warrant
6447 6449 it): ConfigLoader, OutputTrap, Struct.
6448 6450
6449 6451 2001-12-05 Fernando Perez <fperez@colorado.edu>
6450 6452
6451 6453 * IPython turns 21! Released version 0.1.21, as a candidate for
6452 6454 public consumption. If all goes well, release in a few days.
6453 6455
6454 6456 * Fixed path bug (files in Extensions/ directory wouldn't be found
6455 6457 unless IPython/ was explicitly in sys.path).
6456 6458
6457 6459 * Extended the FlexCompleter class as MagicCompleter to allow
6458 6460 completion of @-starting lines.
6459 6461
6460 6462 * Created __release__.py file as a central repository for release
6461 6463 info that other files can read from.
6462 6464
6463 6465 * Fixed small bug in logging: when logging was turned on in
6464 6466 mid-session, old lines with special meanings (!@?) were being
6465 6467 logged without the prepended comment, which is necessary since
6466 6468 they are not truly valid python syntax. This should make session
6467 6469 restores produce less errors.
6468 6470
6469 6471 * The namespace cleanup forced me to make a FlexCompleter class
6470 6472 which is nothing but a ripoff of rlcompleter, but with selectable
6471 6473 namespace (rlcompleter only works in __main__.__dict__). I'll try
6472 6474 to submit a note to the authors to see if this change can be
6473 6475 incorporated in future rlcompleter releases (Dec.6: done)
6474 6476
6475 6477 * More fixes to namespace handling. It was a mess! Now all
6476 6478 explicit references to __main__.__dict__ are gone (except when
6477 6479 really needed) and everything is handled through the namespace
6478 6480 dicts in the IPython instance. We seem to be getting somewhere
6479 6481 with this, finally...
6480 6482
6481 6483 * Small documentation updates.
6482 6484
6483 6485 * Created the Extensions directory under IPython (with an
6484 6486 __init__.py). Put the PhysicalQ stuff there. This directory should
6485 6487 be used for all special-purpose extensions.
6486 6488
6487 6489 * File renaming:
6488 6490 ipythonlib --> ipmaker
6489 6491 ipplib --> iplib
6490 6492 This makes a bit more sense in terms of what these files actually do.
6491 6493
6492 6494 * Moved all the classes and functions in ipythonlib to ipplib, so
6493 6495 now ipythonlib only has make_IPython(). This will ease up its
6494 6496 splitting in smaller functional chunks later.
6495 6497
6496 6498 * Cleaned up (done, I think) output of @whos. Better column
6497 6499 formatting, and now shows str(var) for as much as it can, which is
6498 6500 typically what one gets with a 'print var'.
6499 6501
6500 6502 2001-12-04 Fernando Perez <fperez@colorado.edu>
6501 6503
6502 6504 * Fixed namespace problems. Now builtin/IPyhton/user names get
6503 6505 properly reported in their namespace. Internal namespace handling
6504 6506 is finally getting decent (not perfect yet, but much better than
6505 6507 the ad-hoc mess we had).
6506 6508
6507 6509 * Removed -exit option. If people just want to run a python
6508 6510 script, that's what the normal interpreter is for. Less
6509 6511 unnecessary options, less chances for bugs.
6510 6512
6511 6513 * Added a crash handler which generates a complete post-mortem if
6512 6514 IPython crashes. This will help a lot in tracking bugs down the
6513 6515 road.
6514 6516
6515 6517 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6516 6518 which were boud to functions being reassigned would bypass the
6517 6519 logger, breaking the sync of _il with the prompt counter. This
6518 6520 would then crash IPython later when a new line was logged.
6519 6521
6520 6522 2001-12-02 Fernando Perez <fperez@colorado.edu>
6521 6523
6522 6524 * Made IPython a package. This means people don't have to clutter
6523 6525 their sys.path with yet another directory. Changed the INSTALL
6524 6526 file accordingly.
6525 6527
6526 6528 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6527 6529 sorts its output (so @who shows it sorted) and @whos formats the
6528 6530 table according to the width of the first column. Nicer, easier to
6529 6531 read. Todo: write a generic table_format() which takes a list of
6530 6532 lists and prints it nicely formatted, with optional row/column
6531 6533 separators and proper padding and justification.
6532 6534
6533 6535 * Released 0.1.20
6534 6536
6535 6537 * Fixed bug in @log which would reverse the inputcache list (a
6536 6538 copy operation was missing).
6537 6539
6538 6540 * Code cleanup. @config was changed to use page(). Better, since
6539 6541 its output is always quite long.
6540 6542
6541 6543 * Itpl is back as a dependency. I was having too many problems
6542 6544 getting the parametric aliases to work reliably, and it's just
6543 6545 easier to code weird string operations with it than playing %()s
6544 6546 games. It's only ~6k, so I don't think it's too big a deal.
6545 6547
6546 6548 * Found (and fixed) a very nasty bug with history. !lines weren't
6547 6549 getting cached, and the out of sync caches would crash
6548 6550 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6549 6551 division of labor a bit better. Bug fixed, cleaner structure.
6550 6552
6551 6553 2001-12-01 Fernando Perez <fperez@colorado.edu>
6552 6554
6553 6555 * Released 0.1.19
6554 6556
6555 6557 * Added option -n to @hist to prevent line number printing. Much
6556 6558 easier to copy/paste code this way.
6557 6559
6558 6560 * Created global _il to hold the input list. Allows easy
6559 6561 re-execution of blocks of code by slicing it (inspired by Janko's
6560 6562 comment on 'macros').
6561 6563
6562 6564 * Small fixes and doc updates.
6563 6565
6564 6566 * Rewrote @history function (was @h). Renamed it to @hist, @h is
6565 6567 much too fragile with automagic. Handles properly multi-line
6566 6568 statements and takes parameters.
6567 6569
6568 6570 2001-11-30 Fernando Perez <fperez@colorado.edu>
6569 6571
6570 6572 * Version 0.1.18 released.
6571 6573
6572 6574 * Fixed nasty namespace bug in initial module imports.
6573 6575
6574 6576 * Added copyright/license notes to all code files (except
6575 6577 DPyGetOpt). For the time being, LGPL. That could change.
6576 6578
6577 6579 * Rewrote a much nicer README, updated INSTALL, cleaned up
6578 6580 ipythonrc-* samples.
6579 6581
6580 6582 * Overall code/documentation cleanup. Basically ready for
6581 6583 release. Only remaining thing: licence decision (LGPL?).
6582 6584
6583 6585 * Converted load_config to a class, ConfigLoader. Now recursion
6584 6586 control is better organized. Doesn't include the same file twice.
6585 6587
6586 6588 2001-11-29 Fernando Perez <fperez@colorado.edu>
6587 6589
6588 6590 * Got input history working. Changed output history variables from
6589 6591 _p to _o so that _i is for input and _o for output. Just cleaner
6590 6592 convention.
6591 6593
6592 6594 * Implemented parametric aliases. This pretty much allows the
6593 6595 alias system to offer full-blown shell convenience, I think.
6594 6596
6595 6597 * Version 0.1.17 released, 0.1.18 opened.
6596 6598
6597 6599 * dot_ipython/ipythonrc (alias): added documentation.
6598 6600 (xcolor): Fixed small bug (xcolors -> xcolor)
6599 6601
6600 6602 * Changed the alias system. Now alias is a magic command to define
6601 6603 aliases just like the shell. Rationale: the builtin magics should
6602 6604 be there for things deeply connected to IPython's
6603 6605 architecture. And this is a much lighter system for what I think
6604 6606 is the really important feature: allowing users to define quickly
6605 6607 magics that will do shell things for them, so they can customize
6606 6608 IPython easily to match their work habits. If someone is really
6607 6609 desperate to have another name for a builtin alias, they can
6608 6610 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
6609 6611 works.
6610 6612
6611 6613 2001-11-28 Fernando Perez <fperez@colorado.edu>
6612 6614
6613 6615 * Changed @file so that it opens the source file at the proper
6614 6616 line. Since it uses less, if your EDITOR environment is
6615 6617 configured, typing v will immediately open your editor of choice
6616 6618 right at the line where the object is defined. Not as quick as
6617 6619 having a direct @edit command, but for all intents and purposes it
6618 6620 works. And I don't have to worry about writing @edit to deal with
6619 6621 all the editors, less does that.
6620 6622
6621 6623 * Version 0.1.16 released, 0.1.17 opened.
6622 6624
6623 6625 * Fixed some nasty bugs in the page/page_dumb combo that could
6624 6626 crash IPython.
6625 6627
6626 6628 2001-11-27 Fernando Perez <fperez@colorado.edu>
6627 6629
6628 6630 * Version 0.1.15 released, 0.1.16 opened.
6629 6631
6630 6632 * Finally got ? and ?? to work for undefined things: now it's
6631 6633 possible to type {}.get? and get information about the get method
6632 6634 of dicts, or os.path? even if only os is defined (so technically
6633 6635 os.path isn't). Works at any level. For example, after import os,
6634 6636 os?, os.path?, os.path.abspath? all work. This is great, took some
6635 6637 work in _ofind.
6636 6638
6637 6639 * Fixed more bugs with logging. The sanest way to do it was to add
6638 6640 to @log a 'mode' parameter. Killed two in one shot (this mode
6639 6641 option was a request of Janko's). I think it's finally clean
6640 6642 (famous last words).
6641 6643
6642 6644 * Added a page_dumb() pager which does a decent job of paging on
6643 6645 screen, if better things (like less) aren't available. One less
6644 6646 unix dependency (someday maybe somebody will port this to
6645 6647 windows).
6646 6648
6647 6649 * Fixed problem in magic_log: would lock of logging out if log
6648 6650 creation failed (because it would still think it had succeeded).
6649 6651
6650 6652 * Improved the page() function using curses to auto-detect screen
6651 6653 size. Now it can make a much better decision on whether to print
6652 6654 or page a string. Option screen_length was modified: a value 0
6653 6655 means auto-detect, and that's the default now.
6654 6656
6655 6657 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6656 6658 go out. I'll test it for a few days, then talk to Janko about
6657 6659 licences and announce it.
6658 6660
6659 6661 * Fixed the length of the auto-generated ---> prompt which appears
6660 6662 for auto-parens and auto-quotes. Getting this right isn't trivial,
6661 6663 with all the color escapes, different prompt types and optional
6662 6664 separators. But it seems to be working in all the combinations.
6663 6665
6664 6666 2001-11-26 Fernando Perez <fperez@colorado.edu>
6665 6667
6666 6668 * Wrote a regexp filter to get option types from the option names
6667 6669 string. This eliminates the need to manually keep two duplicate
6668 6670 lists.
6669 6671
6670 6672 * Removed the unneeded check_option_names. Now options are handled
6671 6673 in a much saner manner and it's easy to visually check that things
6672 6674 are ok.
6673 6675
6674 6676 * Updated version numbers on all files I modified to carry a
6675 6677 notice so Janko and Nathan have clear version markers.
6676 6678
6677 6679 * Updated docstring for ultraTB with my changes. I should send
6678 6680 this to Nathan.
6679 6681
6680 6682 * Lots of small fixes. Ran everything through pychecker again.
6681 6683
6682 6684 * Made loading of deep_reload an cmd line option. If it's not too
6683 6685 kosher, now people can just disable it. With -nodeep_reload it's
6684 6686 still available as dreload(), it just won't overwrite reload().
6685 6687
6686 6688 * Moved many options to the no| form (-opt and -noopt
6687 6689 accepted). Cleaner.
6688 6690
6689 6691 * Changed magic_log so that if called with no parameters, it uses
6690 6692 'rotate' mode. That way auto-generated logs aren't automatically
6691 6693 over-written. For normal logs, now a backup is made if it exists
6692 6694 (only 1 level of backups). A new 'backup' mode was added to the
6693 6695 Logger class to support this. This was a request by Janko.
6694 6696
6695 6697 * Added @logoff/@logon to stop/restart an active log.
6696 6698
6697 6699 * Fixed a lot of bugs in log saving/replay. It was pretty
6698 6700 broken. Now special lines (!@,/) appear properly in the command
6699 6701 history after a log replay.
6700 6702
6701 6703 * Tried and failed to implement full session saving via pickle. My
6702 6704 idea was to pickle __main__.__dict__, but modules can't be
6703 6705 pickled. This would be a better alternative to replaying logs, but
6704 6706 seems quite tricky to get to work. Changed -session to be called
6705 6707 -logplay, which more accurately reflects what it does. And if we
6706 6708 ever get real session saving working, -session is now available.
6707 6709
6708 6710 * Implemented color schemes for prompts also. As for tracebacks,
6709 6711 currently only NoColor and Linux are supported. But now the
6710 6712 infrastructure is in place, based on a generic ColorScheme
6711 6713 class. So writing and activating new schemes both for the prompts
6712 6714 and the tracebacks should be straightforward.
6713 6715
6714 6716 * Version 0.1.13 released, 0.1.14 opened.
6715 6717
6716 6718 * Changed handling of options for output cache. Now counter is
6717 6719 hardwired starting at 1 and one specifies the maximum number of
6718 6720 entries *in the outcache* (not the max prompt counter). This is
6719 6721 much better, since many statements won't increase the cache
6720 6722 count. It also eliminated some confusing options, now there's only
6721 6723 one: cache_size.
6722 6724
6723 6725 * Added 'alias' magic function and magic_alias option in the
6724 6726 ipythonrc file. Now the user can easily define whatever names he
6725 6727 wants for the magic functions without having to play weird
6726 6728 namespace games. This gives IPython a real shell-like feel.
6727 6729
6728 6730 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
6729 6731 @ or not).
6730 6732
6731 6733 This was one of the last remaining 'visible' bugs (that I know
6732 6734 of). I think if I can clean up the session loading so it works
6733 6735 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
6734 6736 about licensing).
6735 6737
6736 6738 2001-11-25 Fernando Perez <fperez@colorado.edu>
6737 6739
6738 6740 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
6739 6741 there's a cleaner distinction between what ? and ?? show.
6740 6742
6741 6743 * Added screen_length option. Now the user can define his own
6742 6744 screen size for page() operations.
6743 6745
6744 6746 * Implemented magic shell-like functions with automatic code
6745 6747 generation. Now adding another function is just a matter of adding
6746 6748 an entry to a dict, and the function is dynamically generated at
6747 6749 run-time. Python has some really cool features!
6748 6750
6749 6751 * Renamed many options to cleanup conventions a little. Now all
6750 6752 are lowercase, and only underscores where needed. Also in the code
6751 6753 option name tables are clearer.
6752 6754
6753 6755 * Changed prompts a little. Now input is 'In [n]:' instead of
6754 6756 'In[n]:='. This allows it the numbers to be aligned with the
6755 6757 Out[n] numbers, and removes usage of ':=' which doesn't exist in
6756 6758 Python (it was a Mathematica thing). The '...' continuation prompt
6757 6759 was also changed a little to align better.
6758 6760
6759 6761 * Fixed bug when flushing output cache. Not all _p<n> variables
6760 6762 exist, so their deletion needs to be wrapped in a try:
6761 6763
6762 6764 * Figured out how to properly use inspect.formatargspec() (it
6763 6765 requires the args preceded by *). So I removed all the code from
6764 6766 _get_pdef in Magic, which was just replicating that.
6765 6767
6766 6768 * Added test to prefilter to allow redefining magic function names
6767 6769 as variables. This is ok, since the @ form is always available,
6768 6770 but whe should allow the user to define a variable called 'ls' if
6769 6771 he needs it.
6770 6772
6771 6773 * Moved the ToDo information from README into a separate ToDo.
6772 6774
6773 6775 * General code cleanup and small bugfixes. I think it's close to a
6774 6776 state where it can be released, obviously with a big 'beta'
6775 6777 warning on it.
6776 6778
6777 6779 * Got the magic function split to work. Now all magics are defined
6778 6780 in a separate class. It just organizes things a bit, and now
6779 6781 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
6780 6782 was too long).
6781 6783
6782 6784 * Changed @clear to @reset to avoid potential confusions with
6783 6785 the shell command clear. Also renamed @cl to @clear, which does
6784 6786 exactly what people expect it to from their shell experience.
6785 6787
6786 6788 Added a check to the @reset command (since it's so
6787 6789 destructive, it's probably a good idea to ask for confirmation).
6788 6790 But now reset only works for full namespace resetting. Since the
6789 6791 del keyword is already there for deleting a few specific
6790 6792 variables, I don't see the point of having a redundant magic
6791 6793 function for the same task.
6792 6794
6793 6795 2001-11-24 Fernando Perez <fperez@colorado.edu>
6794 6796
6795 6797 * Updated the builtin docs (esp. the ? ones).
6796 6798
6797 6799 * Ran all the code through pychecker. Not terribly impressed with
6798 6800 it: lots of spurious warnings and didn't really find anything of
6799 6801 substance (just a few modules being imported and not used).
6800 6802
6801 6803 * Implemented the new ultraTB functionality into IPython. New
6802 6804 option: xcolors. This chooses color scheme. xmode now only selects
6803 6805 between Plain and Verbose. Better orthogonality.
6804 6806
6805 6807 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6806 6808 mode and color scheme for the exception handlers. Now it's
6807 6809 possible to have the verbose traceback with no coloring.
6808 6810
6809 6811 2001-11-23 Fernando Perez <fperez@colorado.edu>
6810 6812
6811 6813 * Version 0.1.12 released, 0.1.13 opened.
6812 6814
6813 6815 * Removed option to set auto-quote and auto-paren escapes by
6814 6816 user. The chances of breaking valid syntax are just too high. If
6815 6817 someone *really* wants, they can always dig into the code.
6816 6818
6817 6819 * Made prompt separators configurable.
6818 6820
6819 6821 2001-11-22 Fernando Perez <fperez@colorado.edu>
6820 6822
6821 6823 * Small bugfixes in many places.
6822 6824
6823 6825 * Removed the MyCompleter class from ipplib. It seemed redundant
6824 6826 with the C-p,C-n history search functionality. Less code to
6825 6827 maintain.
6826 6828
6827 6829 * Moved all the original ipython.py code into ipythonlib.py. Right
6828 6830 now it's just one big dump into a function called make_IPython, so
6829 6831 no real modularity has been gained. But at least it makes the
6830 6832 wrapper script tiny, and since ipythonlib is a module, it gets
6831 6833 compiled and startup is much faster.
6832 6834
6833 6835 This is a reasobably 'deep' change, so we should test it for a
6834 6836 while without messing too much more with the code.
6835 6837
6836 6838 2001-11-21 Fernando Perez <fperez@colorado.edu>
6837 6839
6838 6840 * Version 0.1.11 released, 0.1.12 opened for further work.
6839 6841
6840 6842 * Removed dependency on Itpl. It was only needed in one place. It
6841 6843 would be nice if this became part of python, though. It makes life
6842 6844 *a lot* easier in some cases.
6843 6845
6844 6846 * Simplified the prefilter code a bit. Now all handlers are
6845 6847 expected to explicitly return a value (at least a blank string).
6846 6848
6847 6849 * Heavy edits in ipplib. Removed the help system altogether. Now
6848 6850 obj?/?? is used for inspecting objects, a magic @doc prints
6849 6851 docstrings, and full-blown Python help is accessed via the 'help'
6850 6852 keyword. This cleans up a lot of code (less to maintain) and does
6851 6853 the job. Since 'help' is now a standard Python component, might as
6852 6854 well use it and remove duplicate functionality.
6853 6855
6854 6856 Also removed the option to use ipplib as a standalone program. By
6855 6857 now it's too dependent on other parts of IPython to function alone.
6856 6858
6857 6859 * Fixed bug in genutils.pager. It would crash if the pager was
6858 6860 exited immediately after opening (broken pipe).
6859 6861
6860 6862 * Trimmed down the VerboseTB reporting a little. The header is
6861 6863 much shorter now and the repeated exception arguments at the end
6862 6864 have been removed. For interactive use the old header seemed a bit
6863 6865 excessive.
6864 6866
6865 6867 * Fixed small bug in output of @whos for variables with multi-word
6866 6868 types (only first word was displayed).
6867 6869
6868 6870 2001-11-17 Fernando Perez <fperez@colorado.edu>
6869 6871
6870 6872 * Version 0.1.10 released, 0.1.11 opened for further work.
6871 6873
6872 6874 * Modified dirs and friends. dirs now *returns* the stack (not
6873 6875 prints), so one can manipulate it as a variable. Convenient to
6874 6876 travel along many directories.
6875 6877
6876 6878 * Fixed bug in magic_pdef: would only work with functions with
6877 6879 arguments with default values.
6878 6880
6879 6881 2001-11-14 Fernando Perez <fperez@colorado.edu>
6880 6882
6881 6883 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6882 6884 example with IPython. Various other minor fixes and cleanups.
6883 6885
6884 6886 * Version 0.1.9 released, 0.1.10 opened for further work.
6885 6887
6886 6888 * Added sys.path to the list of directories searched in the
6887 6889 execfile= option. It used to be the current directory and the
6888 6890 user's IPYTHONDIR only.
6889 6891
6890 6892 2001-11-13 Fernando Perez <fperez@colorado.edu>
6891 6893
6892 6894 * Reinstated the raw_input/prefilter separation that Janko had
6893 6895 initially. This gives a more convenient setup for extending the
6894 6896 pre-processor from the outside: raw_input always gets a string,
6895 6897 and prefilter has to process it. We can then redefine prefilter
6896 6898 from the outside and implement extensions for special
6897 6899 purposes.
6898 6900
6899 6901 Today I got one for inputting PhysicalQuantity objects
6900 6902 (from Scientific) without needing any function calls at
6901 6903 all. Extremely convenient, and it's all done as a user-level
6902 6904 extension (no IPython code was touched). Now instead of:
6903 6905 a = PhysicalQuantity(4.2,'m/s**2')
6904 6906 one can simply say
6905 6907 a = 4.2 m/s**2
6906 6908 or even
6907 6909 a = 4.2 m/s^2
6908 6910
6909 6911 I use this, but it's also a proof of concept: IPython really is
6910 6912 fully user-extensible, even at the level of the parsing of the
6911 6913 command line. It's not trivial, but it's perfectly doable.
6912 6914
6913 6915 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6914 6916 the problem of modules being loaded in the inverse order in which
6915 6917 they were defined in
6916 6918
6917 6919 * Version 0.1.8 released, 0.1.9 opened for further work.
6918 6920
6919 6921 * Added magics pdef, source and file. They respectively show the
6920 6922 definition line ('prototype' in C), source code and full python
6921 6923 file for any callable object. The object inspector oinfo uses
6922 6924 these to show the same information.
6923 6925
6924 6926 * Version 0.1.7 released, 0.1.8 opened for further work.
6925 6927
6926 6928 * Separated all the magic functions into a class called Magic. The
6927 6929 InteractiveShell class was becoming too big for Xemacs to handle
6928 6930 (de-indenting a line would lock it up for 10 seconds while it
6929 6931 backtracked on the whole class!)
6930 6932
6931 6933 FIXME: didn't work. It can be done, but right now namespaces are
6932 6934 all messed up. Do it later (reverted it for now, so at least
6933 6935 everything works as before).
6934 6936
6935 6937 * Got the object introspection system (magic_oinfo) working! I
6936 6938 think this is pretty much ready for release to Janko, so he can
6937 6939 test it for a while and then announce it. Pretty much 100% of what
6938 6940 I wanted for the 'phase 1' release is ready. Happy, tired.
6939 6941
6940 6942 2001-11-12 Fernando Perez <fperez@colorado.edu>
6941 6943
6942 6944 * Version 0.1.6 released, 0.1.7 opened for further work.
6943 6945
6944 6946 * Fixed bug in printing: it used to test for truth before
6945 6947 printing, so 0 wouldn't print. Now checks for None.
6946 6948
6947 6949 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6948 6950 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6949 6951 reaches by hand into the outputcache. Think of a better way to do
6950 6952 this later.
6951 6953
6952 6954 * Various small fixes thanks to Nathan's comments.
6953 6955
6954 6956 * Changed magic_pprint to magic_Pprint. This way it doesn't
6955 6957 collide with pprint() and the name is consistent with the command
6956 6958 line option.
6957 6959
6958 6960 * Changed prompt counter behavior to be fully like
6959 6961 Mathematica's. That is, even input that doesn't return a result
6960 6962 raises the prompt counter. The old behavior was kind of confusing
6961 6963 (getting the same prompt number several times if the operation
6962 6964 didn't return a result).
6963 6965
6964 6966 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6965 6967
6966 6968 * Fixed -Classic mode (wasn't working anymore).
6967 6969
6968 6970 * Added colored prompts using Nathan's new code. Colors are
6969 6971 currently hardwired, they can be user-configurable. For
6970 6972 developers, they can be chosen in file ipythonlib.py, at the
6971 6973 beginning of the CachedOutput class def.
6972 6974
6973 6975 2001-11-11 Fernando Perez <fperez@colorado.edu>
6974 6976
6975 6977 * Version 0.1.5 released, 0.1.6 opened for further work.
6976 6978
6977 6979 * Changed magic_env to *return* the environment as a dict (not to
6978 6980 print it). This way it prints, but it can also be processed.
6979 6981
6980 6982 * Added Verbose exception reporting to interactive
6981 6983 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6982 6984 traceback. Had to make some changes to the ultraTB file. This is
6983 6985 probably the last 'big' thing in my mental todo list. This ties
6984 6986 in with the next entry:
6985 6987
6986 6988 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6987 6989 has to specify is Plain, Color or Verbose for all exception
6988 6990 handling.
6989 6991
6990 6992 * Removed ShellServices option. All this can really be done via
6991 6993 the magic system. It's easier to extend, cleaner and has automatic
6992 6994 namespace protection and documentation.
6993 6995
6994 6996 2001-11-09 Fernando Perez <fperez@colorado.edu>
6995 6997
6996 6998 * Fixed bug in output cache flushing (missing parameter to
6997 6999 __init__). Other small bugs fixed (found using pychecker).
6998 7000
6999 7001 * Version 0.1.4 opened for bugfixing.
7000 7002
7001 7003 2001-11-07 Fernando Perez <fperez@colorado.edu>
7002 7004
7003 7005 * Version 0.1.3 released, mainly because of the raw_input bug.
7004 7006
7005 7007 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7006 7008 and when testing for whether things were callable, a call could
7007 7009 actually be made to certain functions. They would get called again
7008 7010 once 'really' executed, with a resulting double call. A disaster
7009 7011 in many cases (list.reverse() would never work!).
7010 7012
7011 7013 * Removed prefilter() function, moved its code to raw_input (which
7012 7014 after all was just a near-empty caller for prefilter). This saves
7013 7015 a function call on every prompt, and simplifies the class a tiny bit.
7014 7016
7015 7017 * Fix _ip to __ip name in magic example file.
7016 7018
7017 7019 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7018 7020 work with non-gnu versions of tar.
7019 7021
7020 7022 2001-11-06 Fernando Perez <fperez@colorado.edu>
7021 7023
7022 7024 * Version 0.1.2. Just to keep track of the recent changes.
7023 7025
7024 7026 * Fixed nasty bug in output prompt routine. It used to check 'if
7025 7027 arg != None...'. Problem is, this fails if arg implements a
7026 7028 special comparison (__cmp__) which disallows comparing to
7027 7029 None. Found it when trying to use the PhysicalQuantity module from
7028 7030 ScientificPython.
7029 7031
7030 7032 2001-11-05 Fernando Perez <fperez@colorado.edu>
7031 7033
7032 7034 * Also added dirs. Now the pushd/popd/dirs family functions
7033 7035 basically like the shell, with the added convenience of going home
7034 7036 when called with no args.
7035 7037
7036 7038 * pushd/popd slightly modified to mimic shell behavior more
7037 7039 closely.
7038 7040
7039 7041 * Added env,pushd,popd from ShellServices as magic functions. I
7040 7042 think the cleanest will be to port all desired functions from
7041 7043 ShellServices as magics and remove ShellServices altogether. This
7042 7044 will provide a single, clean way of adding functionality
7043 7045 (shell-type or otherwise) to IP.
7044 7046
7045 7047 2001-11-04 Fernando Perez <fperez@colorado.edu>
7046 7048
7047 7049 * Added .ipython/ directory to sys.path. This way users can keep
7048 7050 customizations there and access them via import.
7049 7051
7050 7052 2001-11-03 Fernando Perez <fperez@colorado.edu>
7051 7053
7052 7054 * Opened version 0.1.1 for new changes.
7053 7055
7054 7056 * Changed version number to 0.1.0: first 'public' release, sent to
7055 7057 Nathan and Janko.
7056 7058
7057 7059 * Lots of small fixes and tweaks.
7058 7060
7059 7061 * Minor changes to whos format. Now strings are shown, snipped if
7060 7062 too long.
7061 7063
7062 7064 * Changed ShellServices to work on __main__ so they show up in @who
7063 7065
7064 7066 * Help also works with ? at the end of a line:
7065 7067 ?sin and sin?
7066 7068 both produce the same effect. This is nice, as often I use the
7067 7069 tab-complete to find the name of a method, but I used to then have
7068 7070 to go to the beginning of the line to put a ? if I wanted more
7069 7071 info. Now I can just add the ? and hit return. Convenient.
7070 7072
7071 7073 2001-11-02 Fernando Perez <fperez@colorado.edu>
7072 7074
7073 7075 * Python version check (>=2.1) added.
7074 7076
7075 7077 * Added LazyPython documentation. At this point the docs are quite
7076 7078 a mess. A cleanup is in order.
7077 7079
7078 7080 * Auto-installer created. For some bizarre reason, the zipfiles
7079 7081 module isn't working on my system. So I made a tar version
7080 7082 (hopefully the command line options in various systems won't kill
7081 7083 me).
7082 7084
7083 7085 * Fixes to Struct in genutils. Now all dictionary-like methods are
7084 7086 protected (reasonably).
7085 7087
7086 7088 * Added pager function to genutils and changed ? to print usage
7087 7089 note through it (it was too long).
7088 7090
7089 7091 * Added the LazyPython functionality. Works great! I changed the
7090 7092 auto-quote escape to ';', it's on home row and next to '. But
7091 7093 both auto-quote and auto-paren (still /) escapes are command-line
7092 7094 parameters.
7093 7095
7094 7096
7095 7097 2001-11-01 Fernando Perez <fperez@colorado.edu>
7096 7098
7097 7099 * Version changed to 0.0.7. Fairly large change: configuration now
7098 7100 is all stored in a directory, by default .ipython. There, all
7099 7101 config files have normal looking names (not .names)
7100 7102
7101 7103 * Version 0.0.6 Released first to Lucas and Archie as a test
7102 7104 run. Since it's the first 'semi-public' release, change version to
7103 7105 > 0.0.6 for any changes now.
7104 7106
7105 7107 * Stuff I had put in the ipplib.py changelog:
7106 7108
7107 7109 Changes to InteractiveShell:
7108 7110
7109 7111 - Made the usage message a parameter.
7110 7112
7111 7113 - Require the name of the shell variable to be given. It's a bit
7112 7114 of a hack, but allows the name 'shell' not to be hardwired in the
7113 7115 magic (@) handler, which is problematic b/c it requires
7114 7116 polluting the global namespace with 'shell'. This in turn is
7115 7117 fragile: if a user redefines a variable called shell, things
7116 7118 break.
7117 7119
7118 7120 - magic @: all functions available through @ need to be defined
7119 7121 as magic_<name>, even though they can be called simply as
7120 7122 @<name>. This allows the special command @magic to gather
7121 7123 information automatically about all existing magic functions,
7122 7124 even if they are run-time user extensions, by parsing the shell
7123 7125 instance __dict__ looking for special magic_ names.
7124 7126
7125 7127 - mainloop: added *two* local namespace parameters. This allows
7126 7128 the class to differentiate between parameters which were there
7127 7129 before and after command line initialization was processed. This
7128 7130 way, later @who can show things loaded at startup by the
7129 7131 user. This trick was necessary to make session saving/reloading
7130 7132 really work: ideally after saving/exiting/reloading a session,
7131 7133 *everything* should look the same, including the output of @who. I
7132 7134 was only able to make this work with this double namespace
7133 7135 trick.
7134 7136
7135 7137 - added a header to the logfile which allows (almost) full
7136 7138 session restoring.
7137 7139
7138 7140 - prepend lines beginning with @ or !, with a and log
7139 7141 them. Why? !lines: may be useful to know what you did @lines:
7140 7142 they may affect session state. So when restoring a session, at
7141 7143 least inform the user of their presence. I couldn't quite get
7142 7144 them to properly re-execute, but at least the user is warned.
7143 7145
7144 7146 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now