##// END OF EJS Templates
integrate fernandos 0.8.3 release changes to original trunk
Ville M. Vainio -
r1209:cabe8467 merge
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,3311 +1,3319 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 4 $Id: Magic.py 2996 2008-01-30 06:31:39Z fperez $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 #****************************************************************************
15 15 # Modules and globals
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>\n%s <%s>' % \
19 19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 20 __license__ = Release.license
21 21
22 22 # Python standard modules
23 23 import __builtin__
24 24 import bdb
25 25 import inspect
26 26 import os
27 27 import pdb
28 28 import pydoc
29 29 import sys
30 30 import re
31 31 import tempfile
32 32 import time
33 33 import cPickle as pickle
34 34 import textwrap
35 35 from cStringIO import StringIO
36 36 from getopt import getopt,GetoptError
37 37 from pprint import pprint, pformat
38 38 from sets import Set
39 39
40 40 # cProfile was added in Python2.5
41 41 try:
42 42 import cProfile as profile
43 43 import pstats
44 44 except ImportError:
45 45 # profile isn't bundled by default in Debian for license reasons
46 46 try:
47 47 import profile,pstats
48 48 except ImportError:
49 49 profile = pstats = None
50 50
51 51 # Homebrewed
52 52 import IPython
53 53 from IPython import Debugger, OInspect, wildcard
54 54 from IPython.FakeModule import FakeModule
55 55 from IPython.Itpl import Itpl, itpl, printpl,itplns
56 56 from IPython.PyColorize import Parser
57 57 from IPython.ipstruct import Struct
58 58 from IPython.macro import Macro
59 59 from IPython.genutils import *
60 60 from IPython import platutils
61 61 import IPython.generics
62 62 import IPython.ipapi
63 63 from IPython.ipapi import UsageError
64 64 #***************************************************************************
65 65 # Utility functions
66 66 def on_off(tag):
67 67 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
68 68 return ['OFF','ON'][tag]
69 69
70 70 class Bunch: pass
71 71
72 72 def compress_dhist(dh):
73 73 head, tail = dh[:-10], dh[-10:]
74 74
75 75 newhead = []
76 76 done = Set()
77 77 for h in head:
78 78 if h in done:
79 79 continue
80 80 newhead.append(h)
81 81 done.add(h)
82 82
83 83 return newhead + tail
84 84
85 85
86 86 #***************************************************************************
87 87 # Main class implementing Magic functionality
88 88 class Magic:
89 89 """Magic functions for InteractiveShell.
90 90
91 91 Shell functions which can be reached as %function_name. All magic
92 92 functions should accept a string, which they can parse for their own
93 93 needs. This can make some functions easier to type, eg `%cd ../`
94 94 vs. `%cd("../")`
95 95
96 96 ALL definitions MUST begin with the prefix magic_. The user won't need it
97 97 at the command line, but it is is needed in the definition. """
98 98
99 99 # class globals
100 100 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
101 101 'Automagic is ON, % prefix NOT needed for magic functions.']
102 102
103 103 #......................................................................
104 104 # some utility functions
105 105
106 106 def __init__(self,shell):
107 107
108 108 self.options_table = {}
109 109 if profile is None:
110 110 self.magic_prun = self.profile_missing_notice
111 111 self.shell = shell
112 112
113 113 # namespace for holding state we may need
114 114 self._magic_state = Bunch()
115 115
116 116 def profile_missing_notice(self, *args, **kwargs):
117 117 error("""\
118 118 The profile module could not be found. It has been removed from the standard
119 119 python packages because of its non-free license. To use profiling, install the
120 120 python-profiler package from non-free.""")
121 121
122 122 def default_option(self,fn,optstr):
123 123 """Make an entry in the options_table for fn, with value optstr"""
124 124
125 125 if fn not in self.lsmagic():
126 126 error("%s is not a magic function" % fn)
127 127 self.options_table[fn] = optstr
128 128
129 129 def lsmagic(self):
130 130 """Return a list of currently available magic functions.
131 131
132 132 Gives a list of the bare names after mangling (['ls','cd', ...], not
133 133 ['magic_ls','magic_cd',...]"""
134 134
135 135 # FIXME. This needs a cleanup, in the way the magics list is built.
136 136
137 137 # magics in class definition
138 138 class_magic = lambda fn: fn.startswith('magic_') and \
139 139 callable(Magic.__dict__[fn])
140 140 # in instance namespace (run-time user additions)
141 141 inst_magic = lambda fn: fn.startswith('magic_') and \
142 142 callable(self.__dict__[fn])
143 143 # and bound magics by user (so they can access self):
144 144 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
145 145 callable(self.__class__.__dict__[fn])
146 146 magics = filter(class_magic,Magic.__dict__.keys()) + \
147 147 filter(inst_magic,self.__dict__.keys()) + \
148 148 filter(inst_bound_magic,self.__class__.__dict__.keys())
149 149 out = []
150 150 for fn in Set(magics):
151 151 out.append(fn.replace('magic_','',1))
152 152 out.sort()
153 153 return out
154 154
155 155 def extract_input_slices(self,slices,raw=False):
156 156 """Return as a string a set of input history slices.
157 157
158 158 Inputs:
159 159
160 160 - slices: the set of slices is given as a list of strings (like
161 161 ['1','4:8','9'], since this function is for use by magic functions
162 162 which get their arguments as strings.
163 163
164 164 Optional inputs:
165 165
166 166 - raw(False): by default, the processed input is used. If this is
167 167 true, the raw input history is used instead.
168 168
169 169 Note that slices can be called with two notations:
170 170
171 171 N:M -> standard python form, means including items N...(M-1).
172 172
173 173 N-M -> include items N..M (closed endpoint)."""
174 174
175 175 if raw:
176 176 hist = self.shell.input_hist_raw
177 177 else:
178 178 hist = self.shell.input_hist
179 179
180 180 cmds = []
181 181 for chunk in slices:
182 182 if ':' in chunk:
183 183 ini,fin = map(int,chunk.split(':'))
184 184 elif '-' in chunk:
185 185 ini,fin = map(int,chunk.split('-'))
186 186 fin += 1
187 187 else:
188 188 ini = int(chunk)
189 189 fin = ini+1
190 190 cmds.append(hist[ini:fin])
191 191 return cmds
192 192
193 193 def _ofind(self, oname, namespaces=None):
194 194 """Find an object in the available namespaces.
195 195
196 196 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
197 197
198 198 Has special code to detect magic functions.
199 199 """
200 200
201 201 oname = oname.strip()
202 202
203 203 alias_ns = None
204 204 if namespaces is None:
205 205 # Namespaces to search in:
206 206 # Put them in a list. The order is important so that we
207 207 # find things in the same order that Python finds them.
208 208 namespaces = [ ('Interactive', self.shell.user_ns),
209 209 ('IPython internal', self.shell.internal_ns),
210 210 ('Python builtin', __builtin__.__dict__),
211 211 ('Alias', self.shell.alias_table),
212 212 ]
213 213 alias_ns = self.shell.alias_table
214 214
215 215 # initialize results to 'null'
216 216 found = 0; obj = None; ospace = None; ds = None;
217 217 ismagic = 0; isalias = 0; parent = None
218 218
219 219 # Look for the given name by splitting it in parts. If the head is
220 220 # found, then we look for all the remaining parts as members, and only
221 221 # declare success if we can find them all.
222 222 oname_parts = oname.split('.')
223 223 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
224 224 for nsname,ns in namespaces:
225 225 try:
226 226 obj = ns[oname_head]
227 227 except KeyError:
228 228 continue
229 229 else:
230 230 #print 'oname_rest:', oname_rest # dbg
231 231 for part in oname_rest:
232 232 try:
233 233 parent = obj
234 234 obj = getattr(obj,part)
235 235 except:
236 236 # Blanket except b/c some badly implemented objects
237 237 # allow __getattr__ to raise exceptions other than
238 238 # AttributeError, which then crashes IPython.
239 239 break
240 240 else:
241 241 # If we finish the for loop (no break), we got all members
242 242 found = 1
243 243 ospace = nsname
244 244 if ns == alias_ns:
245 245 isalias = 1
246 246 break # namespace loop
247 247
248 248 # Try to see if it's magic
249 249 if not found:
250 250 if oname.startswith(self.shell.ESC_MAGIC):
251 251 oname = oname[1:]
252 252 obj = getattr(self,'magic_'+oname,None)
253 253 if obj is not None:
254 254 found = 1
255 255 ospace = 'IPython internal'
256 256 ismagic = 1
257 257
258 258 # Last try: special-case some literals like '', [], {}, etc:
259 259 if not found and oname_head in ["''",'""','[]','{}','()']:
260 260 obj = eval(oname_head)
261 261 found = 1
262 262 ospace = 'Interactive'
263 263
264 264 return {'found':found, 'obj':obj, 'namespace':ospace,
265 265 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
266 266
267 267 def arg_err(self,func):
268 268 """Print docstring if incorrect arguments were passed"""
269 269 print 'Error in arguments:'
270 270 print OInspect.getdoc(func)
271 271
272 272 def format_latex(self,strng):
273 273 """Format a string for latex inclusion."""
274 274
275 275 # Characters that need to be escaped for latex:
276 276 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
277 277 # Magic command names as headers:
278 278 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
279 279 re.MULTILINE)
280 280 # Magic commands
281 281 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
282 282 re.MULTILINE)
283 283 # Paragraph continue
284 284 par_re = re.compile(r'\\$',re.MULTILINE)
285 285
286 286 # The "\n" symbol
287 287 newline_re = re.compile(r'\\n')
288 288
289 289 # Now build the string for output:
290 290 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
291 291 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
292 292 strng)
293 293 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
294 294 strng = par_re.sub(r'\\\\',strng)
295 295 strng = escape_re.sub(r'\\\1',strng)
296 296 strng = newline_re.sub(r'\\textbackslash{}n',strng)
297 297 return strng
298 298
299 299 def format_screen(self,strng):
300 300 """Format a string for screen printing.
301 301
302 302 This removes some latex-type format codes."""
303 303 # Paragraph continue
304 304 par_re = re.compile(r'\\$',re.MULTILINE)
305 305 strng = par_re.sub('',strng)
306 306 return strng
307 307
308 308 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
309 309 """Parse options passed to an argument string.
310 310
311 311 The interface is similar to that of getopt(), but it returns back a
312 312 Struct with the options as keys and the stripped argument string still
313 313 as a string.
314 314
315 315 arg_str is quoted as a true sys.argv vector by using shlex.split.
316 316 This allows us to easily expand variables, glob files, quote
317 317 arguments, etc.
318 318
319 319 Options:
320 320 -mode: default 'string'. If given as 'list', the argument string is
321 321 returned as a list (split on whitespace) instead of a string.
322 322
323 323 -list_all: put all option values in lists. Normally only options
324 324 appearing more than once are put in a list.
325 325
326 326 -posix (True): whether to split the input line in POSIX mode or not,
327 327 as per the conventions outlined in the shlex module from the
328 328 standard library."""
329 329
330 330 # inject default options at the beginning of the input line
331 331 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
332 332 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
333 333
334 334 mode = kw.get('mode','string')
335 335 if mode not in ['string','list']:
336 336 raise ValueError,'incorrect mode given: %s' % mode
337 337 # Get options
338 338 list_all = kw.get('list_all',0)
339 339 posix = kw.get('posix',True)
340 340
341 341 # Check if we have more than one argument to warrant extra processing:
342 342 odict = {} # Dictionary with options
343 343 args = arg_str.split()
344 344 if len(args) >= 1:
345 345 # If the list of inputs only has 0 or 1 thing in it, there's no
346 346 # need to look for options
347 347 argv = arg_split(arg_str,posix)
348 348 # Do regular option processing
349 349 try:
350 350 opts,args = getopt(argv,opt_str,*long_opts)
351 351 except GetoptError,e:
352 352 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
353 353 " ".join(long_opts)))
354 354 for o,a in opts:
355 355 if o.startswith('--'):
356 356 o = o[2:]
357 357 else:
358 358 o = o[1:]
359 359 try:
360 360 odict[o].append(a)
361 361 except AttributeError:
362 362 odict[o] = [odict[o],a]
363 363 except KeyError:
364 364 if list_all:
365 365 odict[o] = [a]
366 366 else:
367 367 odict[o] = a
368 368
369 369 # Prepare opts,args for return
370 370 opts = Struct(odict)
371 371 if mode == 'string':
372 372 args = ' '.join(args)
373 373
374 374 return opts,args
375 375
376 376 #......................................................................
377 377 # And now the actual magic functions
378 378
379 379 # Functions for IPython shell work (vars,funcs, config, etc)
380 380 def magic_lsmagic(self, parameter_s = ''):
381 381 """List currently available magic functions."""
382 382 mesc = self.shell.ESC_MAGIC
383 383 print 'Available magic functions:\n'+mesc+\
384 384 (' '+mesc).join(self.lsmagic())
385 385 print '\n' + Magic.auto_status[self.shell.rc.automagic]
386 386 return None
387 387
388 388 def magic_magic(self, parameter_s = ''):
389 389 """Print information about the magic function system.
390 390
391 391 Supported formats: -latex, -brief, -rest
392 392 """
393 393
394 394 mode = ''
395 395 try:
396 396 if parameter_s.split()[0] == '-latex':
397 397 mode = 'latex'
398 398 if parameter_s.split()[0] == '-brief':
399 399 mode = 'brief'
400 400 if parameter_s.split()[0] == '-rest':
401 401 mode = 'rest'
402 402 rest_docs = []
403 403 except:
404 404 pass
405 405
406 406 magic_docs = []
407 407 for fname in self.lsmagic():
408 408 mname = 'magic_' + fname
409 409 for space in (Magic,self,self.__class__):
410 410 try:
411 411 fn = space.__dict__[mname]
412 412 except KeyError:
413 413 pass
414 414 else:
415 415 break
416 416 if mode == 'brief':
417 417 # only first line
418 418 if fn.__doc__:
419 419 fndoc = fn.__doc__.split('\n',1)[0]
420 420 else:
421 421 fndoc = 'No documentation'
422 422 else:
423 423 fndoc = fn.__doc__.rstrip()
424 424
425 425 if mode == 'rest':
426 426 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
427 427 fname,fndoc))
428 428
429 429 else:
430 430 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
431 431 fname,fndoc))
432 432
433 433 magic_docs = ''.join(magic_docs)
434 434
435 435 if mode == 'rest':
436 436 return "".join(rest_docs)
437 437
438 438 if mode == 'latex':
439 439 print self.format_latex(magic_docs)
440 440 return
441 441 else:
442 442 magic_docs = self.format_screen(magic_docs)
443 443 if mode == 'brief':
444 444 return magic_docs
445 445
446 446 outmsg = """
447 447 IPython's 'magic' functions
448 448 ===========================
449 449
450 450 The magic function system provides a series of functions which allow you to
451 451 control the behavior of IPython itself, plus a lot of system-type
452 452 features. All these functions are prefixed with a % character, but parameters
453 453 are given without parentheses or quotes.
454 454
455 455 NOTE: If you have 'automagic' enabled (via the command line option or with the
456 456 %automagic function), you don't need to type in the % explicitly. By default,
457 457 IPython ships with automagic on, so you should only rarely need the % escape.
458 458
459 459 Example: typing '%cd mydir' (without the quotes) changes you working directory
460 460 to 'mydir', if it exists.
461 461
462 462 You can define your own magic functions to extend the system. See the supplied
463 463 ipythonrc and example-magic.py files for details (in your ipython
464 464 configuration directory, typically $HOME/.ipython/).
465 465
466 466 You can also define your own aliased names for magic functions. In your
467 467 ipythonrc file, placing a line like:
468 468
469 469 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
470 470
471 471 will define %pf as a new name for %profile.
472 472
473 473 You can also call magics in code using the ipmagic() function, which IPython
474 474 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
475 475
476 476 For a list of the available magic functions, use %lsmagic. For a description
477 477 of any of them, type %magic_name?, e.g. '%cd?'.
478 478
479 479 Currently the magic system has the following functions:\n"""
480 480
481 481 mesc = self.shell.ESC_MAGIC
482 482 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
483 483 "\n\n%s%s\n\n%s" % (outmsg,
484 484 magic_docs,mesc,mesc,
485 485 (' '+mesc).join(self.lsmagic()),
486 486 Magic.auto_status[self.shell.rc.automagic] ) )
487 487
488 488 page(outmsg,screen_lines=self.shell.rc.screen_length)
489 489
490 490
491 491 def magic_autoindent(self, parameter_s = ''):
492 492 """Toggle autoindent on/off (if available)."""
493 493
494 494 self.shell.set_autoindent()
495 495 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
496 496
497 497
498 498 def magic_automagic(self, parameter_s = ''):
499 499 """Make magic functions callable without having to type the initial %.
500 500
501 501 Without argumentsl toggles on/off (when off, you must call it as
502 502 %automagic, of course). With arguments it sets the value, and you can
503 503 use any of (case insensitive):
504 504
505 505 - on,1,True: to activate
506 506
507 507 - off,0,False: to deactivate.
508 508
509 509 Note that magic functions have lowest priority, so if there's a
510 510 variable whose name collides with that of a magic fn, automagic won't
511 511 work for that function (you get the variable instead). However, if you
512 512 delete the variable (del var), the previously shadowed magic function
513 513 becomes visible to automagic again."""
514 514
515 515 rc = self.shell.rc
516 516 arg = parameter_s.lower()
517 517 if parameter_s in ('on','1','true'):
518 518 rc.automagic = True
519 519 elif parameter_s in ('off','0','false'):
520 520 rc.automagic = False
521 521 else:
522 522 rc.automagic = not rc.automagic
523 523 print '\n' + Magic.auto_status[rc.automagic]
524 524
525 525
526 526 def magic_autocall(self, parameter_s = ''):
527 527 """Make functions callable without having to type parentheses.
528 528
529 529 Usage:
530 530
531 531 %autocall [mode]
532 532
533 533 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
534 534 value is toggled on and off (remembering the previous state).
535 535
536 536 In more detail, these values mean:
537 537
538 538 0 -> fully disabled
539 539
540 540 1 -> active, but do not apply if there are no arguments on the line.
541 541
542 542 In this mode, you get:
543 543
544 544 In [1]: callable
545 545 Out[1]: <built-in function callable>
546 546
547 547 In [2]: callable 'hello'
548 548 ------> callable('hello')
549 549 Out[2]: False
550 550
551 551 2 -> Active always. Even if no arguments are present, the callable
552 552 object is called:
553 553
554 554 In [4]: callable
555 555 ------> callable()
556 556
557 557 Note that even with autocall off, you can still use '/' at the start of
558 558 a line to treat the first argument on the command line as a function
559 559 and add parentheses to it:
560 560
561 561 In [8]: /str 43
562 562 ------> str(43)
563 563 Out[8]: '43'
564 564 """
565 565
566 566 rc = self.shell.rc
567 567
568 568 if parameter_s:
569 569 arg = int(parameter_s)
570 570 else:
571 571 arg = 'toggle'
572 572
573 573 if not arg in (0,1,2,'toggle'):
574 574 error('Valid modes: (0->Off, 1->Smart, 2->Full')
575 575 return
576 576
577 577 if arg in (0,1,2):
578 578 rc.autocall = arg
579 579 else: # toggle
580 580 if rc.autocall:
581 581 self._magic_state.autocall_save = rc.autocall
582 582 rc.autocall = 0
583 583 else:
584 584 try:
585 585 rc.autocall = self._magic_state.autocall_save
586 586 except AttributeError:
587 587 rc.autocall = self._magic_state.autocall_save = 1
588 588
589 589 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
590 590
591 591 def magic_system_verbose(self, parameter_s = ''):
592 592 """Set verbose printing of system calls.
593 593
594 594 If called without an argument, act as a toggle"""
595 595
596 596 if parameter_s:
597 597 val = bool(eval(parameter_s))
598 598 else:
599 599 val = None
600 600
601 601 self.shell.rc_set_toggle('system_verbose',val)
602 602 print "System verbose printing is:",\
603 603 ['OFF','ON'][self.shell.rc.system_verbose]
604 604
605 605
606 606 def magic_page(self, parameter_s=''):
607 607 """Pretty print the object and display it through a pager.
608 608
609 609 %page [options] OBJECT
610 610
611 611 If no object is given, use _ (last output).
612 612
613 613 Options:
614 614
615 615 -r: page str(object), don't pretty-print it."""
616 616
617 617 # After a function contributed by Olivier Aubert, slightly modified.
618 618
619 619 # Process options/args
620 620 opts,args = self.parse_options(parameter_s,'r')
621 621 raw = 'r' in opts
622 622
623 623 oname = args and args or '_'
624 624 info = self._ofind(oname)
625 625 if info['found']:
626 626 txt = (raw and str or pformat)( info['obj'] )
627 627 page(txt)
628 628 else:
629 629 print 'Object `%s` not found' % oname
630 630
631 631 def magic_profile(self, parameter_s=''):
632 632 """Print your currently active IPyhton profile."""
633 633 if self.shell.rc.profile:
634 634 printpl('Current IPython profile: $self.shell.rc.profile.')
635 635 else:
636 636 print 'No profile active.'
637 637
638 638 def magic_pinfo(self, parameter_s='', namespaces=None):
639 639 """Provide detailed information about an object.
640 640
641 641 '%pinfo object' is just a synonym for object? or ?object."""
642 642
643 643 #print 'pinfo par: <%s>' % parameter_s # dbg
644 644
645 645
646 646 # detail_level: 0 -> obj? , 1 -> obj??
647 647 detail_level = 0
648 648 # We need to detect if we got called as 'pinfo pinfo foo', which can
649 649 # happen if the user types 'pinfo foo?' at the cmd line.
650 650 pinfo,qmark1,oname,qmark2 = \
651 651 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
652 652 if pinfo or qmark1 or qmark2:
653 653 detail_level = 1
654 654 if "*" in oname:
655 655 self.magic_psearch(oname)
656 656 else:
657 657 self._inspect('pinfo', oname, detail_level=detail_level,
658 658 namespaces=namespaces)
659 659
660 660 def magic_pdef(self, parameter_s='', namespaces=None):
661 661 """Print the definition header for any callable object.
662 662
663 663 If the object is a class, print the constructor information."""
664 664 self._inspect('pdef',parameter_s, namespaces)
665 665
666 666 def magic_pdoc(self, parameter_s='', namespaces=None):
667 667 """Print the docstring for an object.
668 668
669 669 If the given object is a class, it will print both the class and the
670 670 constructor docstrings."""
671 671 self._inspect('pdoc',parameter_s, namespaces)
672 672
673 673 def magic_psource(self, parameter_s='', namespaces=None):
674 674 """Print (or run through pager) the source code for an object."""
675 675 self._inspect('psource',parameter_s, namespaces)
676 676
677 677 def magic_pfile(self, parameter_s=''):
678 678 """Print (or run through pager) the file where an object is defined.
679 679
680 680 The file opens at the line where the object definition begins. IPython
681 681 will honor the environment variable PAGER if set, and otherwise will
682 682 do its best to print the file in a convenient form.
683 683
684 684 If the given argument is not an object currently defined, IPython will
685 685 try to interpret it as a filename (automatically adding a .py extension
686 686 if needed). You can thus use %pfile as a syntax highlighting code
687 687 viewer."""
688 688
689 689 # first interpret argument as an object name
690 690 out = self._inspect('pfile',parameter_s)
691 691 # if not, try the input as a filename
692 692 if out == 'not found':
693 693 try:
694 694 filename = get_py_filename(parameter_s)
695 695 except IOError,msg:
696 696 print msg
697 697 return
698 698 page(self.shell.inspector.format(file(filename).read()))
699 699
700 700 def _inspect(self,meth,oname,namespaces=None,**kw):
701 701 """Generic interface to the inspector system.
702 702
703 703 This function is meant to be called by pdef, pdoc & friends."""
704 704
705 705 #oname = oname.strip()
706 706 #print '1- oname: <%r>' % oname # dbg
707 707 try:
708 708 oname = oname.strip().encode('ascii')
709 709 #print '2- oname: <%r>' % oname # dbg
710 710 except UnicodeEncodeError:
711 711 print 'Python identifiers can only contain ascii characters.'
712 712 return 'not found'
713 713
714 714 info = Struct(self._ofind(oname, namespaces))
715 715
716 716 if info.found:
717 717 try:
718 718 IPython.generics.inspect_object(info.obj)
719 719 return
720 720 except IPython.ipapi.TryNext:
721 721 pass
722 722 # Get the docstring of the class property if it exists.
723 723 path = oname.split('.')
724 724 root = '.'.join(path[:-1])
725 725 if info.parent is not None:
726 726 try:
727 727 target = getattr(info.parent, '__class__')
728 728 # The object belongs to a class instance.
729 729 try:
730 730 target = getattr(target, path[-1])
731 731 # The class defines the object.
732 732 if isinstance(target, property):
733 733 oname = root + '.__class__.' + path[-1]
734 734 info = Struct(self._ofind(oname))
735 735 except AttributeError: pass
736 736 except AttributeError: pass
737 737
738 738 pmethod = getattr(self.shell.inspector,meth)
739 739 formatter = info.ismagic and self.format_screen or None
740 740 if meth == 'pdoc':
741 741 pmethod(info.obj,oname,formatter)
742 742 elif meth == 'pinfo':
743 743 pmethod(info.obj,oname,formatter,info,**kw)
744 744 else:
745 745 pmethod(info.obj,oname)
746 746 else:
747 747 print 'Object `%s` not found.' % oname
748 748 return 'not found' # so callers can take other action
749 749
750 750 def magic_psearch(self, parameter_s=''):
751 751 """Search for object in namespaces by wildcard.
752 752
753 753 %psearch [options] PATTERN [OBJECT TYPE]
754 754
755 755 Note: ? can be used as a synonym for %psearch, at the beginning or at
756 756 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
757 757 rest of the command line must be unchanged (options come first), so
758 758 for example the following forms are equivalent
759 759
760 760 %psearch -i a* function
761 761 -i a* function?
762 762 ?-i a* function
763 763
764 764 Arguments:
765 765
766 766 PATTERN
767 767
768 768 where PATTERN is a string containing * as a wildcard similar to its
769 769 use in a shell. The pattern is matched in all namespaces on the
770 770 search path. By default objects starting with a single _ are not
771 771 matched, many IPython generated objects have a single
772 772 underscore. The default is case insensitive matching. Matching is
773 773 also done on the attributes of objects and not only on the objects
774 774 in a module.
775 775
776 776 [OBJECT TYPE]
777 777
778 778 Is the name of a python type from the types module. The name is
779 779 given in lowercase without the ending type, ex. StringType is
780 780 written string. By adding a type here only objects matching the
781 781 given type are matched. Using all here makes the pattern match all
782 782 types (this is the default).
783 783
784 784 Options:
785 785
786 786 -a: makes the pattern match even objects whose names start with a
787 787 single underscore. These names are normally ommitted from the
788 788 search.
789 789
790 790 -i/-c: make the pattern case insensitive/sensitive. If neither of
791 791 these options is given, the default is read from your ipythonrc
792 792 file. The option name which sets this value is
793 793 'wildcards_case_sensitive'. If this option is not specified in your
794 794 ipythonrc file, IPython's internal default is to do a case sensitive
795 795 search.
796 796
797 797 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
798 798 specifiy can be searched in any of the following namespaces:
799 799 'builtin', 'user', 'user_global','internal', 'alias', where
800 800 'builtin' and 'user' are the search defaults. Note that you should
801 801 not use quotes when specifying namespaces.
802 802
803 803 'Builtin' contains the python module builtin, 'user' contains all
804 804 user data, 'alias' only contain the shell aliases and no python
805 805 objects, 'internal' contains objects used by IPython. The
806 806 'user_global' namespace is only used by embedded IPython instances,
807 807 and it contains module-level globals. You can add namespaces to the
808 808 search with -s or exclude them with -e (these options can be given
809 809 more than once).
810 810
811 811 Examples:
812 812
813 813 %psearch a* -> objects beginning with an a
814 814 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
815 815 %psearch a* function -> all functions beginning with an a
816 816 %psearch re.e* -> objects beginning with an e in module re
817 817 %psearch r*.e* -> objects that start with e in modules starting in r
818 818 %psearch r*.* string -> all strings in modules beginning with r
819 819
820 820 Case sensitve search:
821 821
822 822 %psearch -c a* list all object beginning with lower case a
823 823
824 824 Show objects beginning with a single _:
825 825
826 826 %psearch -a _* list objects beginning with a single underscore"""
827 827 try:
828 828 parameter_s = parameter_s.encode('ascii')
829 829 except UnicodeEncodeError:
830 830 print 'Python identifiers can only contain ascii characters.'
831 831 return
832 832
833 833 # default namespaces to be searched
834 834 def_search = ['user','builtin']
835 835
836 836 # Process options/args
837 837 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
838 838 opt = opts.get
839 839 shell = self.shell
840 840 psearch = shell.inspector.psearch
841 841
842 842 # select case options
843 843 if opts.has_key('i'):
844 844 ignore_case = True
845 845 elif opts.has_key('c'):
846 846 ignore_case = False
847 847 else:
848 848 ignore_case = not shell.rc.wildcards_case_sensitive
849 849
850 850 # Build list of namespaces to search from user options
851 851 def_search.extend(opt('s',[]))
852 852 ns_exclude = ns_exclude=opt('e',[])
853 853 ns_search = [nm for nm in def_search if nm not in ns_exclude]
854 854
855 855 # Call the actual search
856 856 try:
857 857 psearch(args,shell.ns_table,ns_search,
858 858 show_all=opt('a'),ignore_case=ignore_case)
859 859 except:
860 860 shell.showtraceback()
861 861
862 862 def magic_who_ls(self, parameter_s=''):
863 863 """Return a sorted list of all interactive variables.
864 864
865 865 If arguments are given, only variables of types matching these
866 866 arguments are returned."""
867 867
868 868 user_ns = self.shell.user_ns
869 869 internal_ns = self.shell.internal_ns
870 870 user_config_ns = self.shell.user_config_ns
871 871 out = []
872 872 typelist = parameter_s.split()
873 873
874 874 for i in user_ns:
875 875 if not (i.startswith('_') or i.startswith('_i')) \
876 876 and not (i in internal_ns or i in user_config_ns):
877 877 if typelist:
878 878 if type(user_ns[i]).__name__ in typelist:
879 879 out.append(i)
880 880 else:
881 881 out.append(i)
882 882 out.sort()
883 883 return out
884 884
885 885 def magic_who(self, parameter_s=''):
886 886 """Print all interactive variables, with some minimal formatting.
887 887
888 888 If any arguments are given, only variables whose type matches one of
889 889 these are printed. For example:
890 890
891 891 %who function str
892 892
893 893 will only list functions and strings, excluding all other types of
894 894 variables. To find the proper type names, simply use type(var) at a
895 895 command line to see how python prints type names. For example:
896 896
897 897 In [1]: type('hello')\\
898 898 Out[1]: <type 'str'>
899 899
900 900 indicates that the type name for strings is 'str'.
901 901
902 902 %who always excludes executed names loaded through your configuration
903 903 file and things which are internal to IPython.
904 904
905 905 This is deliberate, as typically you may load many modules and the
906 906 purpose of %who is to show you only what you've manually defined."""
907 907
908 908 varlist = self.magic_who_ls(parameter_s)
909 909 if not varlist:
910 910 if parameter_s:
911 911 print 'No variables match your requested type.'
912 912 else:
913 913 print 'Interactive namespace is empty.'
914 914 return
915 915
916 916 # if we have variables, move on...
917 917 count = 0
918 918 for i in varlist:
919 919 print i+'\t',
920 920 count += 1
921 921 if count > 8:
922 922 count = 0
923 923 print
924 924 print
925 925
926 926 def magic_whos(self, parameter_s=''):
927 927 """Like %who, but gives some extra information about each variable.
928 928
929 929 The same type filtering of %who can be applied here.
930 930
931 931 For all variables, the type is printed. Additionally it prints:
932 932
933 933 - For {},[],(): their length.
934 934
935 935 - For numpy and Numeric arrays, a summary with shape, number of
936 936 elements, typecode and size in memory.
937 937
938 938 - Everything else: a string representation, snipping their middle if
939 939 too long."""
940 940
941 941 varnames = self.magic_who_ls(parameter_s)
942 942 if not varnames:
943 943 if parameter_s:
944 944 print 'No variables match your requested type.'
945 945 else:
946 946 print 'Interactive namespace is empty.'
947 947 return
948 948
949 949 # if we have variables, move on...
950 950
951 951 # for these types, show len() instead of data:
952 952 seq_types = [types.DictType,types.ListType,types.TupleType]
953 953
954 954 # for numpy/Numeric arrays, display summary info
955 955 try:
956 956 import numpy
957 957 except ImportError:
958 958 ndarray_type = None
959 959 else:
960 960 ndarray_type = numpy.ndarray.__name__
961 961 try:
962 962 import Numeric
963 963 except ImportError:
964 964 array_type = None
965 965 else:
966 966 array_type = Numeric.ArrayType.__name__
967 967
968 968 # Find all variable names and types so we can figure out column sizes
969 969 def get_vars(i):
970 970 return self.shell.user_ns[i]
971 971
972 972 # some types are well known and can be shorter
973 973 abbrevs = {'IPython.macro.Macro' : 'Macro'}
974 974 def type_name(v):
975 975 tn = type(v).__name__
976 976 return abbrevs.get(tn,tn)
977 977
978 978 varlist = map(get_vars,varnames)
979 979
980 980 typelist = []
981 981 for vv in varlist:
982 982 tt = type_name(vv)
983 983
984 984 if tt=='instance':
985 985 typelist.append( abbrevs.get(str(vv.__class__),
986 986 str(vv.__class__)))
987 987 else:
988 988 typelist.append(tt)
989 989
990 990 # column labels and # of spaces as separator
991 991 varlabel = 'Variable'
992 992 typelabel = 'Type'
993 993 datalabel = 'Data/Info'
994 994 colsep = 3
995 995 # variable format strings
996 996 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
997 997 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
998 998 aformat = "%s: %s elems, type `%s`, %s bytes"
999 999 # find the size of the columns to format the output nicely
1000 1000 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1001 1001 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1002 1002 # table header
1003 1003 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1004 1004 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1005 1005 # and the table itself
1006 1006 kb = 1024
1007 1007 Mb = 1048576 # kb**2
1008 1008 for vname,var,vtype in zip(varnames,varlist,typelist):
1009 1009 print itpl(vformat),
1010 1010 if vtype in seq_types:
1011 1011 print len(var)
1012 1012 elif vtype in [array_type,ndarray_type]:
1013 1013 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1014 1014 if vtype==ndarray_type:
1015 1015 # numpy
1016 1016 vsize = var.size
1017 1017 vbytes = vsize*var.itemsize
1018 1018 vdtype = var.dtype
1019 1019 else:
1020 1020 # Numeric
1021 1021 vsize = Numeric.size(var)
1022 1022 vbytes = vsize*var.itemsize()
1023 1023 vdtype = var.typecode()
1024 1024
1025 1025 if vbytes < 100000:
1026 1026 print aformat % (vshape,vsize,vdtype,vbytes)
1027 1027 else:
1028 1028 print aformat % (vshape,vsize,vdtype,vbytes),
1029 1029 if vbytes < Mb:
1030 1030 print '(%s kb)' % (vbytes/kb,)
1031 1031 else:
1032 1032 print '(%s Mb)' % (vbytes/Mb,)
1033 1033 else:
1034 1034 try:
1035 1035 vstr = str(var)
1036 1036 except UnicodeEncodeError:
1037 1037 vstr = unicode(var).encode(sys.getdefaultencoding(),
1038 1038 'backslashreplace')
1039 1039 vstr = vstr.replace('\n','\\n')
1040 1040 if len(vstr) < 50:
1041 1041 print vstr
1042 1042 else:
1043 1043 printpl(vfmt_short)
1044 1044
1045 1045 def magic_reset(self, parameter_s=''):
1046 1046 """Resets the namespace by removing all names defined by the user.
1047 1047
1048 1048 Input/Output history are left around in case you need them."""
1049 1049
1050 1050 ans = self.shell.ask_yes_no(
1051 1051 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1052 1052 if not ans:
1053 1053 print 'Nothing done.'
1054 1054 return
1055 1055 user_ns = self.shell.user_ns
1056 1056 for i in self.magic_who_ls():
1057 1057 del(user_ns[i])
1058 1058
1059 1059 # Also flush the private list of module references kept for script
1060 1060 # execution protection
1061 1061 self.shell._user_main_modules[:] = []
1062 1062
1063 1063 def magic_logstart(self,parameter_s=''):
1064 1064 """Start logging anywhere in a session.
1065 1065
1066 1066 %logstart [-o|-r|-t] [log_name [log_mode]]
1067 1067
1068 1068 If no name is given, it defaults to a file named 'ipython_log.py' in your
1069 1069 current directory, in 'rotate' mode (see below).
1070 1070
1071 1071 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1072 1072 history up to that point and then continues logging.
1073 1073
1074 1074 %logstart takes a second optional parameter: logging mode. This can be one
1075 1075 of (note that the modes are given unquoted):\\
1076 1076 append: well, that says it.\\
1077 1077 backup: rename (if exists) to name~ and start name.\\
1078 1078 global: single logfile in your home dir, appended to.\\
1079 1079 over : overwrite existing log.\\
1080 1080 rotate: create rotating logs name.1~, name.2~, etc.
1081 1081
1082 1082 Options:
1083 1083
1084 1084 -o: log also IPython's output. In this mode, all commands which
1085 1085 generate an Out[NN] prompt are recorded to the logfile, right after
1086 1086 their corresponding input line. The output lines are always
1087 1087 prepended with a '#[Out]# ' marker, so that the log remains valid
1088 1088 Python code.
1089 1089
1090 1090 Since this marker is always the same, filtering only the output from
1091 1091 a log is very easy, using for example a simple awk call:
1092 1092
1093 1093 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1094 1094
1095 1095 -r: log 'raw' input. Normally, IPython's logs contain the processed
1096 1096 input, so that user lines are logged in their final form, converted
1097 1097 into valid Python. For example, %Exit is logged as
1098 1098 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1099 1099 exactly as typed, with no transformations applied.
1100 1100
1101 1101 -t: put timestamps before each input line logged (these are put in
1102 1102 comments)."""
1103 1103
1104 1104 opts,par = self.parse_options(parameter_s,'ort')
1105 1105 log_output = 'o' in opts
1106 1106 log_raw_input = 'r' in opts
1107 1107 timestamp = 't' in opts
1108 1108
1109 1109 rc = self.shell.rc
1110 1110 logger = self.shell.logger
1111 1111
1112 1112 # if no args are given, the defaults set in the logger constructor by
1113 1113 # ipytohn remain valid
1114 1114 if par:
1115 1115 try:
1116 1116 logfname,logmode = par.split()
1117 1117 except:
1118 1118 logfname = par
1119 1119 logmode = 'backup'
1120 1120 else:
1121 1121 logfname = logger.logfname
1122 1122 logmode = logger.logmode
1123 1123 # put logfname into rc struct as if it had been called on the command
1124 1124 # line, so it ends up saved in the log header Save it in case we need
1125 1125 # to restore it...
1126 1126 old_logfile = rc.opts.get('logfile','')
1127 1127 if logfname:
1128 1128 logfname = os.path.expanduser(logfname)
1129 1129 rc.opts.logfile = logfname
1130 1130 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1131 1131 try:
1132 1132 started = logger.logstart(logfname,loghead,logmode,
1133 1133 log_output,timestamp,log_raw_input)
1134 1134 except:
1135 1135 rc.opts.logfile = old_logfile
1136 1136 warn("Couldn't start log: %s" % sys.exc_info()[1])
1137 1137 else:
1138 1138 # log input history up to this point, optionally interleaving
1139 1139 # output if requested
1140 1140
1141 1141 if timestamp:
1142 1142 # disable timestamping for the previous history, since we've
1143 1143 # lost those already (no time machine here).
1144 1144 logger.timestamp = False
1145 1145
1146 1146 if log_raw_input:
1147 1147 input_hist = self.shell.input_hist_raw
1148 1148 else:
1149 1149 input_hist = self.shell.input_hist
1150 1150
1151 1151 if log_output:
1152 1152 log_write = logger.log_write
1153 1153 output_hist = self.shell.output_hist
1154 1154 for n in range(1,len(input_hist)-1):
1155 1155 log_write(input_hist[n].rstrip())
1156 1156 if n in output_hist:
1157 1157 log_write(repr(output_hist[n]),'output')
1158 1158 else:
1159 1159 logger.log_write(input_hist[1:])
1160 1160 if timestamp:
1161 1161 # re-enable timestamping
1162 1162 logger.timestamp = True
1163 1163
1164 1164 print ('Activating auto-logging. '
1165 1165 'Current session state plus future input saved.')
1166 1166 logger.logstate()
1167 1167
1168 1168 def magic_logstop(self,parameter_s=''):
1169 1169 """Fully stop logging and close log file.
1170 1170
1171 1171 In order to start logging again, a new %logstart call needs to be made,
1172 1172 possibly (though not necessarily) with a new filename, mode and other
1173 1173 options."""
1174 1174 self.logger.logstop()
1175 1175
1176 1176 def magic_logoff(self,parameter_s=''):
1177 1177 """Temporarily stop logging.
1178 1178
1179 1179 You must have previously started logging."""
1180 1180 self.shell.logger.switch_log(0)
1181 1181
1182 1182 def magic_logon(self,parameter_s=''):
1183 1183 """Restart logging.
1184 1184
1185 1185 This function is for restarting logging which you've temporarily
1186 1186 stopped with %logoff. For starting logging for the first time, you
1187 1187 must use the %logstart function, which allows you to specify an
1188 1188 optional log filename."""
1189 1189
1190 1190 self.shell.logger.switch_log(1)
1191 1191
1192 1192 def magic_logstate(self,parameter_s=''):
1193 1193 """Print the status of the logging system."""
1194 1194
1195 1195 self.shell.logger.logstate()
1196 1196
1197 1197 def magic_pdb(self, parameter_s=''):
1198 1198 """Control the automatic calling of the pdb interactive debugger.
1199 1199
1200 1200 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1201 1201 argument it works as a toggle.
1202 1202
1203 1203 When an exception is triggered, IPython can optionally call the
1204 1204 interactive pdb debugger after the traceback printout. %pdb toggles
1205 1205 this feature on and off.
1206 1206
1207 1207 The initial state of this feature is set in your ipythonrc
1208 1208 configuration file (the variable is called 'pdb').
1209 1209
1210 1210 If you want to just activate the debugger AFTER an exception has fired,
1211 1211 without having to type '%pdb on' and rerunning your code, you can use
1212 1212 the %debug magic."""
1213 1213
1214 1214 par = parameter_s.strip().lower()
1215 1215
1216 1216 if par:
1217 1217 try:
1218 1218 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1219 1219 except KeyError:
1220 1220 print ('Incorrect argument. Use on/1, off/0, '
1221 1221 'or nothing for a toggle.')
1222 1222 return
1223 1223 else:
1224 1224 # toggle
1225 1225 new_pdb = not self.shell.call_pdb
1226 1226
1227 1227 # set on the shell
1228 1228 self.shell.call_pdb = new_pdb
1229 1229 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1230 1230
1231 1231 def magic_debug(self, parameter_s=''):
1232 1232 """Activate the interactive debugger in post-mortem mode.
1233 1233
1234 1234 If an exception has just occurred, this lets you inspect its stack
1235 1235 frames interactively. Note that this will always work only on the last
1236 1236 traceback that occurred, so you must call this quickly after an
1237 1237 exception that you wish to inspect has fired, because if another one
1238 1238 occurs, it clobbers the previous one.
1239 1239
1240 1240 If you want IPython to automatically do this on every exception, see
1241 1241 the %pdb magic for more details.
1242 1242 """
1243 1243
1244 1244 self.shell.debugger(force=True)
1245 1245
1246 1246 def magic_prun(self, parameter_s ='',user_mode=1,
1247 1247 opts=None,arg_lst=None,prog_ns=None):
1248 1248
1249 1249 """Run a statement through the python code profiler.
1250 1250
1251 1251 Usage:\\
1252 1252 %prun [options] statement
1253 1253
1254 1254 The given statement (which doesn't require quote marks) is run via the
1255 1255 python profiler in a manner similar to the profile.run() function.
1256 1256 Namespaces are internally managed to work correctly; profile.run
1257 1257 cannot be used in IPython because it makes certain assumptions about
1258 1258 namespaces which do not hold under IPython.
1259 1259
1260 1260 Options:
1261 1261
1262 1262 -l <limit>: you can place restrictions on what or how much of the
1263 1263 profile gets printed. The limit value can be:
1264 1264
1265 1265 * A string: only information for function names containing this string
1266 1266 is printed.
1267 1267
1268 1268 * An integer: only these many lines are printed.
1269 1269
1270 1270 * A float (between 0 and 1): this fraction of the report is printed
1271 1271 (for example, use a limit of 0.4 to see the topmost 40% only).
1272 1272
1273 1273 You can combine several limits with repeated use of the option. For
1274 1274 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1275 1275 information about class constructors.
1276 1276
1277 1277 -r: return the pstats.Stats object generated by the profiling. This
1278 1278 object has all the information about the profile in it, and you can
1279 1279 later use it for further analysis or in other functions.
1280 1280
1281 1281 -s <key>: sort profile by given key. You can provide more than one key
1282 1282 by using the option several times: '-s key1 -s key2 -s key3...'. The
1283 1283 default sorting key is 'time'.
1284 1284
1285 1285 The following is copied verbatim from the profile documentation
1286 1286 referenced below:
1287 1287
1288 1288 When more than one key is provided, additional keys are used as
1289 1289 secondary criteria when the there is equality in all keys selected
1290 1290 before them.
1291 1291
1292 1292 Abbreviations can be used for any key names, as long as the
1293 1293 abbreviation is unambiguous. The following are the keys currently
1294 1294 defined:
1295 1295
1296 1296 Valid Arg Meaning\\
1297 1297 "calls" call count\\
1298 1298 "cumulative" cumulative time\\
1299 1299 "file" file name\\
1300 1300 "module" file name\\
1301 1301 "pcalls" primitive call count\\
1302 1302 "line" line number\\
1303 1303 "name" function name\\
1304 1304 "nfl" name/file/line\\
1305 1305 "stdname" standard name\\
1306 1306 "time" internal time
1307 1307
1308 1308 Note that all sorts on statistics are in descending order (placing
1309 1309 most time consuming items first), where as name, file, and line number
1310 1310 searches are in ascending order (i.e., alphabetical). The subtle
1311 1311 distinction between "nfl" and "stdname" is that the standard name is a
1312 1312 sort of the name as printed, which means that the embedded line
1313 1313 numbers get compared in an odd way. For example, lines 3, 20, and 40
1314 1314 would (if the file names were the same) appear in the string order
1315 1315 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1316 1316 line numbers. In fact, sort_stats("nfl") is the same as
1317 1317 sort_stats("name", "file", "line").
1318 1318
1319 1319 -T <filename>: save profile results as shown on screen to a text
1320 1320 file. The profile is still shown on screen.
1321 1321
1322 1322 -D <filename>: save (via dump_stats) profile statistics to given
1323 1323 filename. This data is in a format understod by the pstats module, and
1324 1324 is generated by a call to the dump_stats() method of profile
1325 1325 objects. The profile is still shown on screen.
1326 1326
1327 1327 If you want to run complete programs under the profiler's control, use
1328 1328 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1329 1329 contains profiler specific options as described here.
1330 1330
1331 1331 You can read the complete documentation for the profile module with:\\
1332 1332 In [1]: import profile; profile.help() """
1333 1333
1334 1334 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1335 1335 # protect user quote marks
1336 1336 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1337 1337
1338 1338 if user_mode: # regular user call
1339 1339 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1340 1340 list_all=1)
1341 1341 namespace = self.shell.user_ns
1342 1342 else: # called to run a program by %run -p
1343 1343 try:
1344 1344 filename = get_py_filename(arg_lst[0])
1345 1345 except IOError,msg:
1346 1346 error(msg)
1347 1347 return
1348 1348
1349 1349 arg_str = 'execfile(filename,prog_ns)'
1350 1350 namespace = locals()
1351 1351
1352 1352 opts.merge(opts_def)
1353 1353
1354 1354 prof = profile.Profile()
1355 1355 try:
1356 1356 prof = prof.runctx(arg_str,namespace,namespace)
1357 1357 sys_exit = ''
1358 1358 except SystemExit:
1359 1359 sys_exit = """*** SystemExit exception caught in code being profiled."""
1360 1360
1361 1361 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1362 1362
1363 1363 lims = opts.l
1364 1364 if lims:
1365 1365 lims = [] # rebuild lims with ints/floats/strings
1366 1366 for lim in opts.l:
1367 1367 try:
1368 1368 lims.append(int(lim))
1369 1369 except ValueError:
1370 1370 try:
1371 1371 lims.append(float(lim))
1372 1372 except ValueError:
1373 1373 lims.append(lim)
1374 1374
1375 1375 # Trap output.
1376 1376 stdout_trap = StringIO()
1377 1377
1378 1378 if hasattr(stats,'stream'):
1379 1379 # In newer versions of python, the stats object has a 'stream'
1380 1380 # attribute to write into.
1381 1381 stats.stream = stdout_trap
1382 1382 stats.print_stats(*lims)
1383 1383 else:
1384 1384 # For older versions, we manually redirect stdout during printing
1385 1385 sys_stdout = sys.stdout
1386 1386 try:
1387 1387 sys.stdout = stdout_trap
1388 1388 stats.print_stats(*lims)
1389 1389 finally:
1390 1390 sys.stdout = sys_stdout
1391 1391
1392 1392 output = stdout_trap.getvalue()
1393 1393 output = output.rstrip()
1394 1394
1395 1395 page(output,screen_lines=self.shell.rc.screen_length)
1396 1396 print sys_exit,
1397 1397
1398 1398 dump_file = opts.D[0]
1399 1399 text_file = opts.T[0]
1400 1400 if dump_file:
1401 1401 prof.dump_stats(dump_file)
1402 1402 print '\n*** Profile stats marshalled to file',\
1403 1403 `dump_file`+'.',sys_exit
1404 1404 if text_file:
1405 1405 pfile = file(text_file,'w')
1406 1406 pfile.write(output)
1407 1407 pfile.close()
1408 1408 print '\n*** Profile printout saved to text file',\
1409 1409 `text_file`+'.',sys_exit
1410 1410
1411 1411 if opts.has_key('r'):
1412 1412 return stats
1413 1413 else:
1414 1414 return None
1415 1415
1416 1416 def magic_run(self, parameter_s ='',runner=None):
1417 1417 """Run the named file inside IPython as a program.
1418 1418
1419 1419 Usage:\\
1420 1420 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1421 1421
1422 1422 Parameters after the filename are passed as command-line arguments to
1423 1423 the program (put in sys.argv). Then, control returns to IPython's
1424 1424 prompt.
1425 1425
1426 1426 This is similar to running at a system prompt:\\
1427 1427 $ python file args\\
1428 1428 but with the advantage of giving you IPython's tracebacks, and of
1429 1429 loading all variables into your interactive namespace for further use
1430 1430 (unless -p is used, see below).
1431 1431
1432 1432 The file is executed in a namespace initially consisting only of
1433 1433 __name__=='__main__' and sys.argv constructed as indicated. It thus
1434 1434 sees its environment as if it were being run as a stand-alone program
1435 1435 (except for sharing global objects such as previously imported
1436 1436 modules). But after execution, the IPython interactive namespace gets
1437 1437 updated with all variables defined in the program (except for __name__
1438 1438 and sys.argv). This allows for very convenient loading of code for
1439 1439 interactive work, while giving each program a 'clean sheet' to run in.
1440 1440
1441 1441 Options:
1442 1442
1443 1443 -n: __name__ is NOT set to '__main__', but to the running file's name
1444 1444 without extension (as python does under import). This allows running
1445 1445 scripts and reloading the definitions in them without calling code
1446 1446 protected by an ' if __name__ == "__main__" ' clause.
1447 1447
1448 1448 -i: run the file in IPython's namespace instead of an empty one. This
1449 1449 is useful if you are experimenting with code written in a text editor
1450 1450 which depends on variables defined interactively.
1451 1451
1452 1452 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1453 1453 being run. This is particularly useful if IPython is being used to
1454 1454 run unittests, which always exit with a sys.exit() call. In such
1455 1455 cases you are interested in the output of the test results, not in
1456 1456 seeing a traceback of the unittest module.
1457 1457
1458 1458 -t: print timing information at the end of the run. IPython will give
1459 1459 you an estimated CPU time consumption for your script, which under
1460 1460 Unix uses the resource module to avoid the wraparound problems of
1461 1461 time.clock(). Under Unix, an estimate of time spent on system tasks
1462 1462 is also given (for Windows platforms this is reported as 0.0).
1463 1463
1464 1464 If -t is given, an additional -N<N> option can be given, where <N>
1465 1465 must be an integer indicating how many times you want the script to
1466 1466 run. The final timing report will include total and per run results.
1467 1467
1468 1468 For example (testing the script uniq_stable.py):
1469 1469
1470 1470 In [1]: run -t uniq_stable
1471 1471
1472 1472 IPython CPU timings (estimated):\\
1473 1473 User : 0.19597 s.\\
1474 1474 System: 0.0 s.\\
1475 1475
1476 1476 In [2]: run -t -N5 uniq_stable
1477 1477
1478 1478 IPython CPU timings (estimated):\\
1479 1479 Total runs performed: 5\\
1480 1480 Times : Total Per run\\
1481 1481 User : 0.910862 s, 0.1821724 s.\\
1482 1482 System: 0.0 s, 0.0 s.
1483 1483
1484 1484 -d: run your program under the control of pdb, the Python debugger.
1485 1485 This allows you to execute your program step by step, watch variables,
1486 1486 etc. Internally, what IPython does is similar to calling:
1487 1487
1488 1488 pdb.run('execfile("YOURFILENAME")')
1489 1489
1490 1490 with a breakpoint set on line 1 of your file. You can change the line
1491 1491 number for this automatic breakpoint to be <N> by using the -bN option
1492 1492 (where N must be an integer). For example:
1493 1493
1494 1494 %run -d -b40 myscript
1495 1495
1496 1496 will set the first breakpoint at line 40 in myscript.py. Note that
1497 1497 the first breakpoint must be set on a line which actually does
1498 1498 something (not a comment or docstring) for it to stop execution.
1499 1499
1500 1500 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1501 1501 first enter 'c' (without qoutes) to start execution up to the first
1502 1502 breakpoint.
1503 1503
1504 1504 Entering 'help' gives information about the use of the debugger. You
1505 1505 can easily see pdb's full documentation with "import pdb;pdb.help()"
1506 1506 at a prompt.
1507 1507
1508 1508 -p: run program under the control of the Python profiler module (which
1509 1509 prints a detailed report of execution times, function calls, etc).
1510 1510
1511 1511 You can pass other options after -p which affect the behavior of the
1512 1512 profiler itself. See the docs for %prun for details.
1513 1513
1514 1514 In this mode, the program's variables do NOT propagate back to the
1515 1515 IPython interactive namespace (because they remain in the namespace
1516 1516 where the profiler executes them).
1517 1517
1518 1518 Internally this triggers a call to %prun, see its documentation for
1519 1519 details on the options available specifically for profiling.
1520 1520
1521 1521 There is one special usage for which the text above doesn't apply:
1522 1522 if the filename ends with .ipy, the file is run as ipython script,
1523 1523 just as if the commands were written on IPython prompt.
1524 1524 """
1525 1525
1526 1526 # get arguments and set sys.argv for program to be run.
1527 1527 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1528 1528 mode='list',list_all=1)
1529 1529
1530 1530 try:
1531 1531 filename = get_py_filename(arg_lst[0])
1532 1532 except IndexError:
1533 1533 warn('you must provide at least a filename.')
1534 1534 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1535 1535 return
1536 1536 except IOError,msg:
1537 1537 error(msg)
1538 1538 return
1539 1539
1540 1540 if filename.lower().endswith('.ipy'):
1541 1541 self.api.runlines(open(filename).read())
1542 1542 return
1543 1543
1544 1544 # Control the response to exit() calls made by the script being run
1545 1545 exit_ignore = opts.has_key('e')
1546 1546
1547 1547 # Make sure that the running script gets a proper sys.argv as if it
1548 1548 # were run from a system shell.
1549 1549 save_argv = sys.argv # save it for later restoring
1550 1550 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1551 1551
1552 1552 if opts.has_key('i'):
1553 1553 # Run in user's interactive namespace
1554 1554 prog_ns = self.shell.user_ns
1555 1555 __name__save = self.shell.user_ns['__name__']
1556 1556 prog_ns['__name__'] = '__main__'
1557 1557 main_mod = FakeModule(prog_ns)
1558 1558 else:
1559 1559 # Run in a fresh, empty namespace
1560 1560 if opts.has_key('n'):
1561 1561 name = os.path.splitext(os.path.basename(filename))[0]
1562 1562 else:
1563 1563 name = '__main__'
1564 1564 main_mod = FakeModule()
1565 1565 prog_ns = main_mod.__dict__
1566 1566 prog_ns['__name__'] = name
1567 1567 # The shell MUST hold a reference to main_mod so after %run exits,
1568 1568 # the python deletion mechanism doesn't zero it out (leaving
1569 1569 # dangling references)
1570 1570 self.shell._user_main_modules.append(main_mod)
1571 1571
1572 1572 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1573 1573 # set the __file__ global in the script's namespace
1574 1574 prog_ns['__file__'] = filename
1575 1575
1576 1576 # pickle fix. See iplib for an explanation. But we need to make sure
1577 1577 # that, if we overwrite __main__, we replace it at the end
1578 1578 if prog_ns['__name__'] == '__main__':
1579 1579 restore_main = sys.modules['__main__']
1580 1580 else:
1581 1581 restore_main = False
1582 1582
1583 1583 sys.modules[prog_ns['__name__']] = main_mod
1584 1584
1585 1585 stats = None
1586 1586 try:
1587 1587 self.shell.savehist()
1588 1588
1589 1589 if opts.has_key('p'):
1590 1590 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1591 1591 else:
1592 1592 if opts.has_key('d'):
1593 1593 deb = Debugger.Pdb(self.shell.rc.colors)
1594 1594 # reset Breakpoint state, which is moronically kept
1595 1595 # in a class
1596 1596 bdb.Breakpoint.next = 1
1597 1597 bdb.Breakpoint.bplist = {}
1598 1598 bdb.Breakpoint.bpbynumber = [None]
1599 1599 # Set an initial breakpoint to stop execution
1600 1600 maxtries = 10
1601 1601 bp = int(opts.get('b',[1])[0])
1602 1602 checkline = deb.checkline(filename,bp)
1603 1603 if not checkline:
1604 1604 for bp in range(bp+1,bp+maxtries+1):
1605 1605 if deb.checkline(filename,bp):
1606 1606 break
1607 1607 else:
1608 1608 msg = ("\nI failed to find a valid line to set "
1609 1609 "a breakpoint\n"
1610 1610 "after trying up to line: %s.\n"
1611 1611 "Please set a valid breakpoint manually "
1612 1612 "with the -b option." % bp)
1613 1613 error(msg)
1614 1614 return
1615 1615 # if we find a good linenumber, set the breakpoint
1616 1616 deb.do_break('%s:%s' % (filename,bp))
1617 1617 # Start file run
1618 1618 print "NOTE: Enter 'c' at the",
1619 1619 print "%s prompt to start your script." % deb.prompt
1620 1620 try:
1621 1621 deb.run('execfile("%s")' % filename,prog_ns)
1622 1622
1623 1623 except:
1624 1624 etype, value, tb = sys.exc_info()
1625 1625 # Skip three frames in the traceback: the %run one,
1626 1626 # one inside bdb.py, and the command-line typed by the
1627 1627 # user (run by exec in pdb itself).
1628 1628 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1629 1629 else:
1630 1630 if runner is None:
1631 1631 runner = self.shell.safe_execfile
1632 1632 if opts.has_key('t'):
1633 1633 # timed execution
1634 1634 try:
1635 1635 nruns = int(opts['N'][0])
1636 1636 if nruns < 1:
1637 1637 error('Number of runs must be >=1')
1638 1638 return
1639 1639 except (KeyError):
1640 1640 nruns = 1
1641 1641 if nruns == 1:
1642 1642 t0 = clock2()
1643 1643 runner(filename,prog_ns,prog_ns,
1644 1644 exit_ignore=exit_ignore)
1645 1645 t1 = clock2()
1646 1646 t_usr = t1[0]-t0[0]
1647 1647 t_sys = t1[1]-t1[1]
1648 1648 print "\nIPython CPU timings (estimated):"
1649 1649 print " User : %10s s." % t_usr
1650 1650 print " System: %10s s." % t_sys
1651 1651 else:
1652 1652 runs = range(nruns)
1653 1653 t0 = clock2()
1654 1654 for nr in runs:
1655 1655 runner(filename,prog_ns,prog_ns,
1656 1656 exit_ignore=exit_ignore)
1657 1657 t1 = clock2()
1658 1658 t_usr = t1[0]-t0[0]
1659 1659 t_sys = t1[1]-t1[1]
1660 1660 print "\nIPython CPU timings (estimated):"
1661 1661 print "Total runs performed:",nruns
1662 1662 print " Times : %10s %10s" % ('Total','Per run')
1663 1663 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1664 1664 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1665 1665
1666 1666 else:
1667 1667 # regular execution
1668 1668 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1669 1669 if opts.has_key('i'):
1670 1670 self.shell.user_ns['__name__'] = __name__save
1671 1671 else:
1672 1672 # update IPython interactive namespace
1673 1673 del prog_ns['__name__']
1674 1674 self.shell.user_ns.update(prog_ns)
1675 1675 finally:
1676 1676 sys.argv = save_argv
1677 1677 if restore_main:
1678 1678 sys.modules['__main__'] = restore_main
1679 1679 self.shell.reloadhist()
1680 1680
1681 1681 return stats
1682 1682
1683 1683 def magic_runlog(self, parameter_s =''):
1684 1684 """Run files as logs.
1685 1685
1686 1686 Usage:\\
1687 1687 %runlog file1 file2 ...
1688 1688
1689 1689 Run the named files (treating them as log files) in sequence inside
1690 1690 the interpreter, and return to the prompt. This is much slower than
1691 1691 %run because each line is executed in a try/except block, but it
1692 1692 allows running files with syntax errors in them.
1693 1693
1694 1694 Normally IPython will guess when a file is one of its own logfiles, so
1695 1695 you can typically use %run even for logs. This shorthand allows you to
1696 1696 force any file to be treated as a log file."""
1697 1697
1698 1698 for f in parameter_s.split():
1699 1699 self.shell.safe_execfile(f,self.shell.user_ns,
1700 1700 self.shell.user_ns,islog=1)
1701 1701
1702 1702 def magic_timeit(self, parameter_s =''):
1703 1703 """Time execution of a Python statement or expression
1704 1704
1705 1705 Usage:\\
1706 1706 %timeit [-n<N> -r<R> [-t|-c]] statement
1707 1707
1708 1708 Time execution of a Python statement or expression using the timeit
1709 1709 module.
1710 1710
1711 1711 Options:
1712 1712 -n<N>: execute the given statement <N> times in a loop. If this value
1713 1713 is not given, a fitting value is chosen.
1714 1714
1715 1715 -r<R>: repeat the loop iteration <R> times and take the best result.
1716 1716 Default: 3
1717 1717
1718 1718 -t: use time.time to measure the time, which is the default on Unix.
1719 1719 This function measures wall time.
1720 1720
1721 1721 -c: use time.clock to measure the time, which is the default on
1722 1722 Windows and measures wall time. On Unix, resource.getrusage is used
1723 1723 instead and returns the CPU user time.
1724 1724
1725 1725 -p<P>: use a precision of <P> digits to display the timing result.
1726 1726 Default: 3
1727 1727
1728 1728
1729 1729 Examples:\\
1730 1730 In [1]: %timeit pass
1731 1731 10000000 loops, best of 3: 53.3 ns per loop
1732 1732
1733 1733 In [2]: u = None
1734 1734
1735 1735 In [3]: %timeit u is None
1736 1736 10000000 loops, best of 3: 184 ns per loop
1737 1737
1738 1738 In [4]: %timeit -r 4 u == None
1739 1739 1000000 loops, best of 4: 242 ns per loop
1740 1740
1741 1741 In [5]: import time
1742 1742
1743 1743 In [6]: %timeit -n1 time.sleep(2)
1744 1744 1 loops, best of 3: 2 s per loop
1745 1745
1746 1746
1747 1747 The times reported by %timeit will be slightly higher than those
1748 1748 reported by the timeit.py script when variables are accessed. This is
1749 1749 due to the fact that %timeit executes the statement in the namespace
1750 1750 of the shell, compared with timeit.py, which uses a single setup
1751 1751 statement to import function or create variables. Generally, the bias
1752 1752 does not matter as long as results from timeit.py are not mixed with
1753 1753 those from %timeit."""
1754 1754
1755 1755 import timeit
1756 1756 import math
1757 1757
1758 1758 units = ["s", "ms", "\xc2\xb5s", "ns"]
1759 1759 scaling = [1, 1e3, 1e6, 1e9]
1760 1760
1761 1761 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1762 1762 posix=False)
1763 1763 if stmt == "":
1764 1764 return
1765 1765 timefunc = timeit.default_timer
1766 1766 number = int(getattr(opts, "n", 0))
1767 1767 repeat = int(getattr(opts, "r", timeit.default_repeat))
1768 1768 precision = int(getattr(opts, "p", 3))
1769 1769 if hasattr(opts, "t"):
1770 1770 timefunc = time.time
1771 1771 if hasattr(opts, "c"):
1772 1772 timefunc = clock
1773 1773
1774 1774 timer = timeit.Timer(timer=timefunc)
1775 1775 # this code has tight coupling to the inner workings of timeit.Timer,
1776 1776 # but is there a better way to achieve that the code stmt has access
1777 1777 # to the shell namespace?
1778 1778
1779 1779 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1780 1780 'setup': "pass"}
1781 1781 # Track compilation time so it can be reported if too long
1782 1782 # Minimum time above which compilation time will be reported
1783 1783 tc_min = 0.1
1784 1784
1785 1785 t0 = clock()
1786 1786 code = compile(src, "<magic-timeit>", "exec")
1787 1787 tc = clock()-t0
1788 1788
1789 1789 ns = {}
1790 1790 exec code in self.shell.user_ns, ns
1791 1791 timer.inner = ns["inner"]
1792 1792
1793 1793 if number == 0:
1794 1794 # determine number so that 0.2 <= total time < 2.0
1795 1795 number = 1
1796 1796 for i in range(1, 10):
1797 1797 number *= 10
1798 1798 if timer.timeit(number) >= 0.2:
1799 1799 break
1800 1800
1801 1801 best = min(timer.repeat(repeat, number)) / number
1802 1802
1803 1803 if best > 0.0:
1804 1804 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1805 1805 else:
1806 1806 order = 3
1807 1807 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1808 1808 precision,
1809 1809 best * scaling[order],
1810 1810 units[order])
1811 1811 if tc > tc_min:
1812 1812 print "Compiler time: %.2f s" % tc
1813 1813
1814 1814 def magic_time(self,parameter_s = ''):
1815 1815 """Time execution of a Python statement or expression.
1816 1816
1817 1817 The CPU and wall clock times are printed, and the value of the
1818 1818 expression (if any) is returned. Note that under Win32, system time
1819 1819 is always reported as 0, since it can not be measured.
1820 1820
1821 1821 This function provides very basic timing functionality. In Python
1822 1822 2.3, the timeit module offers more control and sophistication, so this
1823 1823 could be rewritten to use it (patches welcome).
1824 1824
1825 1825 Some examples:
1826 1826
1827 1827 In [1]: time 2**128
1828 1828 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1829 1829 Wall time: 0.00
1830 1830 Out[1]: 340282366920938463463374607431768211456L
1831 1831
1832 1832 In [2]: n = 1000000
1833 1833
1834 1834 In [3]: time sum(range(n))
1835 1835 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1836 1836 Wall time: 1.37
1837 1837 Out[3]: 499999500000L
1838 1838
1839 1839 In [4]: time print 'hello world'
1840 1840 hello world
1841 1841 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1842 1842 Wall time: 0.00
1843 1843
1844 1844 Note that the time needed by Python to compile the given expression
1845 1845 will be reported if it is more than 0.1s. In this example, the
1846 1846 actual exponentiation is done by Python at compilation time, so while
1847 1847 the expression can take a noticeable amount of time to compute, that
1848 1848 time is purely due to the compilation:
1849 1849
1850 1850 In [5]: time 3**9999;
1851 1851 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1852 1852 Wall time: 0.00 s
1853 1853
1854 1854 In [6]: time 3**999999;
1855 1855 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1856 1856 Wall time: 0.00 s
1857 1857 Compiler : 0.78 s
1858 1858 """
1859 1859
1860 1860 # fail immediately if the given expression can't be compiled
1861 1861
1862 1862 expr = self.shell.prefilter(parameter_s,False)
1863 1863
1864 1864 # Minimum time above which compilation time will be reported
1865 1865 tc_min = 0.1
1866 1866
1867 1867 try:
1868 1868 mode = 'eval'
1869 1869 t0 = clock()
1870 1870 code = compile(expr,'<timed eval>',mode)
1871 1871 tc = clock()-t0
1872 1872 except SyntaxError:
1873 1873 mode = 'exec'
1874 1874 t0 = clock()
1875 1875 code = compile(expr,'<timed exec>',mode)
1876 1876 tc = clock()-t0
1877 1877 # skew measurement as little as possible
1878 1878 glob = self.shell.user_ns
1879 1879 clk = clock2
1880 1880 wtime = time.time
1881 1881 # time execution
1882 1882 wall_st = wtime()
1883 1883 if mode=='eval':
1884 1884 st = clk()
1885 1885 out = eval(code,glob)
1886 1886 end = clk()
1887 1887 else:
1888 1888 st = clk()
1889 1889 exec code in glob
1890 1890 end = clk()
1891 1891 out = None
1892 1892 wall_end = wtime()
1893 1893 # Compute actual times and report
1894 1894 wall_time = wall_end-wall_st
1895 1895 cpu_user = end[0]-st[0]
1896 1896 cpu_sys = end[1]-st[1]
1897 1897 cpu_tot = cpu_user+cpu_sys
1898 1898 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1899 1899 (cpu_user,cpu_sys,cpu_tot)
1900 1900 print "Wall time: %.2f s" % wall_time
1901 1901 if tc > tc_min:
1902 1902 print "Compiler : %.2f s" % tc
1903 1903 return out
1904 1904
1905 1905 def magic_macro(self,parameter_s = ''):
1906 1906 """Define a set of input lines as a macro for future re-execution.
1907 1907
1908 1908 Usage:\\
1909 1909 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1910 1910
1911 1911 Options:
1912 1912
1913 1913 -r: use 'raw' input. By default, the 'processed' history is used,
1914 1914 so that magics are loaded in their transformed version to valid
1915 1915 Python. If this option is given, the raw input as typed as the
1916 1916 command line is used instead.
1917 1917
1918 1918 This will define a global variable called `name` which is a string
1919 1919 made of joining the slices and lines you specify (n1,n2,... numbers
1920 1920 above) from your input history into a single string. This variable
1921 1921 acts like an automatic function which re-executes those lines as if
1922 1922 you had typed them. You just type 'name' at the prompt and the code
1923 1923 executes.
1924 1924
1925 1925 The notation for indicating number ranges is: n1-n2 means 'use line
1926 1926 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1927 1927 using the lines numbered 5,6 and 7.
1928 1928
1929 1929 Note: as a 'hidden' feature, you can also use traditional python slice
1930 1930 notation, where N:M means numbers N through M-1.
1931 1931
1932 1932 For example, if your history contains (%hist prints it):
1933 1933
1934 1934 44: x=1\\
1935 1935 45: y=3\\
1936 1936 46: z=x+y\\
1937 1937 47: print x\\
1938 1938 48: a=5\\
1939 1939 49: print 'x',x,'y',y\\
1940 1940
1941 1941 you can create a macro with lines 44 through 47 (included) and line 49
1942 1942 called my_macro with:
1943 1943
1944 1944 In [51]: %macro my_macro 44-47 49
1945 1945
1946 1946 Now, typing `my_macro` (without quotes) will re-execute all this code
1947 1947 in one pass.
1948 1948
1949 1949 You don't need to give the line-numbers in order, and any given line
1950 1950 number can appear multiple times. You can assemble macros with any
1951 1951 lines from your input history in any order.
1952 1952
1953 1953 The macro is a simple object which holds its value in an attribute,
1954 1954 but IPython's display system checks for macros and executes them as
1955 1955 code instead of printing them when you type their name.
1956 1956
1957 1957 You can view a macro's contents by explicitly printing it with:
1958 1958
1959 1959 'print macro_name'.
1960 1960
1961 1961 For one-off cases which DON'T contain magic function calls in them you
1962 1962 can obtain similar results by explicitly executing slices from your
1963 1963 input history with:
1964 1964
1965 1965 In [60]: exec In[44:48]+In[49]"""
1966 1966
1967 1967 opts,args = self.parse_options(parameter_s,'r',mode='list')
1968 1968 if not args:
1969 1969 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
1970 1970 macs.sort()
1971 1971 return macs
1972 1972 if len(args) == 1:
1973 1973 raise UsageError(
1974 1974 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
1975 1975 name,ranges = args[0], args[1:]
1976 1976
1977 1977 #print 'rng',ranges # dbg
1978 1978 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1979 1979 macro = Macro(lines)
1980 1980 self.shell.user_ns.update({name:macro})
1981 1981 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1982 1982 print 'Macro contents:'
1983 1983 print macro,
1984 1984
1985 1985 def magic_save(self,parameter_s = ''):
1986 1986 """Save a set of lines to a given filename.
1987 1987
1988 1988 Usage:\\
1989 1989 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1990 1990
1991 1991 Options:
1992 1992
1993 1993 -r: use 'raw' input. By default, the 'processed' history is used,
1994 1994 so that magics are loaded in their transformed version to valid
1995 1995 Python. If this option is given, the raw input as typed as the
1996 1996 command line is used instead.
1997 1997
1998 1998 This function uses the same syntax as %macro for line extraction, but
1999 1999 instead of creating a macro it saves the resulting string to the
2000 2000 filename you specify.
2001 2001
2002 2002 It adds a '.py' extension to the file if you don't do so yourself, and
2003 2003 it asks for confirmation before overwriting existing files."""
2004 2004
2005 2005 opts,args = self.parse_options(parameter_s,'r',mode='list')
2006 2006 fname,ranges = args[0], args[1:]
2007 2007 if not fname.endswith('.py'):
2008 2008 fname += '.py'
2009 2009 if os.path.isfile(fname):
2010 2010 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2011 2011 if ans.lower() not in ['y','yes']:
2012 2012 print 'Operation cancelled.'
2013 2013 return
2014 2014 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2015 2015 f = file(fname,'w')
2016 2016 f.write(cmds)
2017 2017 f.close()
2018 2018 print 'The following commands were written to file `%s`:' % fname
2019 2019 print cmds
2020 2020
2021 2021 def _edit_macro(self,mname,macro):
2022 2022 """open an editor with the macro data in a file"""
2023 2023 filename = self.shell.mktempfile(macro.value)
2024 2024 self.shell.hooks.editor(filename)
2025 2025
2026 2026 # and make a new macro object, to replace the old one
2027 2027 mfile = open(filename)
2028 2028 mvalue = mfile.read()
2029 2029 mfile.close()
2030 2030 self.shell.user_ns[mname] = Macro(mvalue)
2031 2031
2032 2032 def magic_ed(self,parameter_s=''):
2033 2033 """Alias to %edit."""
2034 2034 return self.magic_edit(parameter_s)
2035 2035
2036 2036 def magic_edit(self,parameter_s='',last_call=['','']):
2037 2037 """Bring up an editor and execute the resulting code.
2038 2038
2039 2039 Usage:
2040 2040 %edit [options] [args]
2041 2041
2042 2042 %edit runs IPython's editor hook. The default version of this hook is
2043 2043 set to call the __IPYTHON__.rc.editor command. This is read from your
2044 2044 environment variable $EDITOR. If this isn't found, it will default to
2045 2045 vi under Linux/Unix and to notepad under Windows. See the end of this
2046 2046 docstring for how to change the editor hook.
2047 2047
2048 2048 You can also set the value of this editor via the command line option
2049 2049 '-editor' or in your ipythonrc file. This is useful if you wish to use
2050 2050 specifically for IPython an editor different from your typical default
2051 2051 (and for Windows users who typically don't set environment variables).
2052 2052
2053 2053 This command allows you to conveniently edit multi-line code right in
2054 2054 your IPython session.
2055 2055
2056 2056 If called without arguments, %edit opens up an empty editor with a
2057 2057 temporary file and will execute the contents of this file when you
2058 2058 close it (don't forget to save it!).
2059 2059
2060 2060
2061 2061 Options:
2062 2062
2063 2063 -n <number>: open the editor at a specified line number. By default,
2064 2064 the IPython editor hook uses the unix syntax 'editor +N filename', but
2065 2065 you can configure this by providing your own modified hook if your
2066 2066 favorite editor supports line-number specifications with a different
2067 2067 syntax.
2068 2068
2069 2069 -p: this will call the editor with the same data as the previous time
2070 2070 it was used, regardless of how long ago (in your current session) it
2071 2071 was.
2072 2072
2073 2073 -r: use 'raw' input. This option only applies to input taken from the
2074 2074 user's history. By default, the 'processed' history is used, so that
2075 2075 magics are loaded in their transformed version to valid Python. If
2076 2076 this option is given, the raw input as typed as the command line is
2077 2077 used instead. When you exit the editor, it will be executed by
2078 2078 IPython's own processor.
2079 2079
2080 2080 -x: do not execute the edited code immediately upon exit. This is
2081 2081 mainly useful if you are editing programs which need to be called with
2082 2082 command line arguments, which you can then do using %run.
2083 2083
2084 2084
2085 2085 Arguments:
2086 2086
2087 2087 If arguments are given, the following possibilites exist:
2088 2088
2089 2089 - The arguments are numbers or pairs of colon-separated numbers (like
2090 2090 1 4:8 9). These are interpreted as lines of previous input to be
2091 2091 loaded into the editor. The syntax is the same of the %macro command.
2092 2092
2093 2093 - If the argument doesn't start with a number, it is evaluated as a
2094 2094 variable and its contents loaded into the editor. You can thus edit
2095 2095 any string which contains python code (including the result of
2096 2096 previous edits).
2097 2097
2098 2098 - If the argument is the name of an object (other than a string),
2099 2099 IPython will try to locate the file where it was defined and open the
2100 2100 editor at the point where it is defined. You can use `%edit function`
2101 2101 to load an editor exactly at the point where 'function' is defined,
2102 2102 edit it and have the file be executed automatically.
2103 2103
2104 2104 If the object is a macro (see %macro for details), this opens up your
2105 2105 specified editor with a temporary file containing the macro's data.
2106 2106 Upon exit, the macro is reloaded with the contents of the file.
2107 2107
2108 2108 Note: opening at an exact line is only supported under Unix, and some
2109 2109 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2110 2110 '+NUMBER' parameter necessary for this feature. Good editors like
2111 2111 (X)Emacs, vi, jed, pico and joe all do.
2112 2112
2113 2113 - If the argument is not found as a variable, IPython will look for a
2114 2114 file with that name (adding .py if necessary) and load it into the
2115 2115 editor. It will execute its contents with execfile() when you exit,
2116 2116 loading any code in the file into your interactive namespace.
2117 2117
2118 2118 After executing your code, %edit will return as output the code you
2119 2119 typed in the editor (except when it was an existing file). This way
2120 2120 you can reload the code in further invocations of %edit as a variable,
2121 2121 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2122 2122 the output.
2123 2123
2124 2124 Note that %edit is also available through the alias %ed.
2125 2125
2126 2126 This is an example of creating a simple function inside the editor and
2127 2127 then modifying it. First, start up the editor:
2128 2128
2129 2129 In [1]: ed\\
2130 2130 Editing... done. Executing edited code...\\
2131 2131 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
2132 2132
2133 2133 We can then call the function foo():
2134 2134
2135 2135 In [2]: foo()\\
2136 2136 foo() was defined in an editing session
2137 2137
2138 2138 Now we edit foo. IPython automatically loads the editor with the
2139 2139 (temporary) file where foo() was previously defined:
2140 2140
2141 2141 In [3]: ed foo\\
2142 2142 Editing... done. Executing edited code...
2143 2143
2144 2144 And if we call foo() again we get the modified version:
2145 2145
2146 2146 In [4]: foo()\\
2147 2147 foo() has now been changed!
2148 2148
2149 2149 Here is an example of how to edit a code snippet successive
2150 2150 times. First we call the editor:
2151 2151
2152 2152 In [8]: ed\\
2153 2153 Editing... done. Executing edited code...\\
2154 2154 hello\\
2155 2155 Out[8]: "print 'hello'\\n"
2156 2156
2157 2157 Now we call it again with the previous output (stored in _):
2158 2158
2159 2159 In [9]: ed _\\
2160 2160 Editing... done. Executing edited code...\\
2161 2161 hello world\\
2162 2162 Out[9]: "print 'hello world'\\n"
2163 2163
2164 2164 Now we call it with the output #8 (stored in _8, also as Out[8]):
2165 2165
2166 2166 In [10]: ed _8\\
2167 2167 Editing... done. Executing edited code...\\
2168 2168 hello again\\
2169 2169 Out[10]: "print 'hello again'\\n"
2170 2170
2171 2171
2172 2172 Changing the default editor hook:
2173 2173
2174 2174 If you wish to write your own editor hook, you can put it in a
2175 2175 configuration file which you load at startup time. The default hook
2176 2176 is defined in the IPython.hooks module, and you can use that as a
2177 2177 starting example for further modifications. That file also has
2178 2178 general instructions on how to set a new hook for use once you've
2179 2179 defined it."""
2180 2180
2181 2181 # FIXME: This function has become a convoluted mess. It needs a
2182 2182 # ground-up rewrite with clean, simple logic.
2183 2183
2184 2184 def make_filename(arg):
2185 2185 "Make a filename from the given args"
2186 2186 try:
2187 2187 filename = get_py_filename(arg)
2188 2188 except IOError:
2189 2189 if args.endswith('.py'):
2190 2190 filename = arg
2191 2191 else:
2192 2192 filename = None
2193 2193 return filename
2194 2194
2195 2195 # custom exceptions
2196 2196 class DataIsObject(Exception): pass
2197 2197
2198 2198 opts,args = self.parse_options(parameter_s,'prxn:')
2199 2199 # Set a few locals from the options for convenience:
2200 2200 opts_p = opts.has_key('p')
2201 2201 opts_r = opts.has_key('r')
2202 2202
2203 2203 # Default line number value
2204 2204 lineno = opts.get('n',None)
2205 2205
2206 2206 if opts_p:
2207 2207 args = '_%s' % last_call[0]
2208 2208 if not self.shell.user_ns.has_key(args):
2209 2209 args = last_call[1]
2210 2210
2211 2211 # use last_call to remember the state of the previous call, but don't
2212 2212 # let it be clobbered by successive '-p' calls.
2213 2213 try:
2214 2214 last_call[0] = self.shell.outputcache.prompt_count
2215 2215 if not opts_p:
2216 2216 last_call[1] = parameter_s
2217 2217 except:
2218 2218 pass
2219 2219
2220 2220 # by default this is done with temp files, except when the given
2221 2221 # arg is a filename
2222 2222 use_temp = 1
2223 2223
2224 2224 if re.match(r'\d',args):
2225 2225 # Mode where user specifies ranges of lines, like in %macro.
2226 2226 # This means that you can't edit files whose names begin with
2227 2227 # numbers this way. Tough.
2228 2228 ranges = args.split()
2229 2229 data = ''.join(self.extract_input_slices(ranges,opts_r))
2230 2230 elif args.endswith('.py'):
2231 2231 filename = make_filename(args)
2232 2232 data = ''
2233 2233 use_temp = 0
2234 2234 elif args:
2235 2235 try:
2236 2236 # Load the parameter given as a variable. If not a string,
2237 2237 # process it as an object instead (below)
2238 2238
2239 2239 #print '*** args',args,'type',type(args) # dbg
2240 2240 data = eval(args,self.shell.user_ns)
2241 2241 if not type(data) in StringTypes:
2242 2242 raise DataIsObject
2243 2243
2244 2244 except (NameError,SyntaxError):
2245 2245 # given argument is not a variable, try as a filename
2246 2246 filename = make_filename(args)
2247 2247 if filename is None:
2248 2248 warn("Argument given (%s) can't be found as a variable "
2249 2249 "or as a filename." % args)
2250 2250 return
2251 2251
2252 2252 data = ''
2253 2253 use_temp = 0
2254 2254 except DataIsObject:
2255 2255
2256 2256 # macros have a special edit function
2257 2257 if isinstance(data,Macro):
2258 2258 self._edit_macro(args,data)
2259 2259 return
2260 2260
2261 2261 # For objects, try to edit the file where they are defined
2262 2262 try:
2263 2263 filename = inspect.getabsfile(data)
2264 2264 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2265 2265 # class created by %edit? Try to find source
2266 2266 # by looking for method definitions instead, the
2267 2267 # __module__ in those classes is FakeModule.
2268 2268 attrs = [getattr(data, aname) for aname in dir(data)]
2269 2269 for attr in attrs:
2270 2270 if not inspect.ismethod(attr):
2271 2271 continue
2272 2272 filename = inspect.getabsfile(attr)
2273 2273 if filename and 'fakemodule' not in filename.lower():
2274 2274 # change the attribute to be the edit target instead
2275 2275 data = attr
2276 2276 break
2277 2277
2278 2278 datafile = 1
2279 2279 except TypeError:
2280 2280 filename = make_filename(args)
2281 2281 datafile = 1
2282 2282 warn('Could not find file where `%s` is defined.\n'
2283 2283 'Opening a file named `%s`' % (args,filename))
2284 2284 # Now, make sure we can actually read the source (if it was in
2285 2285 # a temp file it's gone by now).
2286 2286 if datafile:
2287 2287 try:
2288 2288 if lineno is None:
2289 2289 lineno = inspect.getsourcelines(data)[1]
2290 2290 except IOError:
2291 2291 filename = make_filename(args)
2292 2292 if filename is None:
2293 2293 warn('The file `%s` where `%s` was defined cannot '
2294 2294 'be read.' % (filename,data))
2295 2295 return
2296 2296 use_temp = 0
2297 2297 else:
2298 2298 data = ''
2299 2299
2300 2300 if use_temp:
2301 2301 filename = self.shell.mktempfile(data)
2302 2302 print 'IPython will make a temporary file named:',filename
2303 2303
2304 2304 # do actual editing here
2305 2305 print 'Editing...',
2306 2306 sys.stdout.flush()
2307 2307 self.shell.hooks.editor(filename,lineno)
2308 2308 if opts.has_key('x'): # -x prevents actual execution
2309 2309 print
2310 2310 else:
2311 2311 print 'done. Executing edited code...'
2312 2312 if opts_r:
2313 2313 self.shell.runlines(file_read(filename))
2314 2314 else:
2315 2315 self.shell.safe_execfile(filename,self.shell.user_ns,
2316 2316 self.shell.user_ns)
2317 2317 if use_temp:
2318 2318 try:
2319 2319 return open(filename).read()
2320 2320 except IOError,msg:
2321 2321 if msg.filename == filename:
2322 2322 warn('File not found. Did you forget to save?')
2323 2323 return
2324 2324 else:
2325 2325 self.shell.showtraceback()
2326 2326
2327 2327 def magic_xmode(self,parameter_s = ''):
2328 2328 """Switch modes for the exception handlers.
2329 2329
2330 2330 Valid modes: Plain, Context and Verbose.
2331 2331
2332 2332 If called without arguments, acts as a toggle."""
2333 2333
2334 2334 def xmode_switch_err(name):
2335 2335 warn('Error changing %s exception modes.\n%s' %
2336 2336 (name,sys.exc_info()[1]))
2337 2337
2338 2338 shell = self.shell
2339 2339 new_mode = parameter_s.strip().capitalize()
2340 2340 try:
2341 2341 shell.InteractiveTB.set_mode(mode=new_mode)
2342 2342 print 'Exception reporting mode:',shell.InteractiveTB.mode
2343 2343 except:
2344 2344 xmode_switch_err('user')
2345 2345
2346 2346 # threaded shells use a special handler in sys.excepthook
2347 2347 if shell.isthreaded:
2348 2348 try:
2349 2349 shell.sys_excepthook.set_mode(mode=new_mode)
2350 2350 except:
2351 2351 xmode_switch_err('threaded')
2352 2352
2353 2353 def magic_colors(self,parameter_s = ''):
2354 2354 """Switch color scheme for prompts, info system and exception handlers.
2355 2355
2356 2356 Currently implemented schemes: NoColor, Linux, LightBG.
2357 2357
2358 2358 Color scheme names are not case-sensitive."""
2359 2359
2360 2360 def color_switch_err(name):
2361 2361 warn('Error changing %s color schemes.\n%s' %
2362 2362 (name,sys.exc_info()[1]))
2363 2363
2364 2364
2365 2365 new_scheme = parameter_s.strip()
2366 2366 if not new_scheme:
2367 2367 raise UsageError(
2368 2368 "%colors: you must specify a color scheme. See '%colors?'")
2369 2369 return
2370 2370 # local shortcut
2371 2371 shell = self.shell
2372 2372
2373 2373 import IPython.rlineimpl as readline
2374 2374
2375 2375 if not readline.have_readline and sys.platform == "win32":
2376 2376 msg = """\
2377 2377 Proper color support under MS Windows requires the pyreadline library.
2378 2378 You can find it at:
2379 2379 http://ipython.scipy.org/moin/PyReadline/Intro
2380 2380 Gary's readline needs the ctypes module, from:
2381 2381 http://starship.python.net/crew/theller/ctypes
2382 2382 (Note that ctypes is already part of Python versions 2.5 and newer).
2383 2383
2384 2384 Defaulting color scheme to 'NoColor'"""
2385 2385 new_scheme = 'NoColor'
2386 2386 warn(msg)
2387 2387
2388 2388 # readline option is 0
2389 2389 if not shell.has_readline:
2390 2390 new_scheme = 'NoColor'
2391 2391
2392 2392 # Set prompt colors
2393 2393 try:
2394 2394 shell.outputcache.set_colors(new_scheme)
2395 2395 except:
2396 2396 color_switch_err('prompt')
2397 2397 else:
2398 2398 shell.rc.colors = \
2399 2399 shell.outputcache.color_table.active_scheme_name
2400 2400 # Set exception colors
2401 2401 try:
2402 2402 shell.InteractiveTB.set_colors(scheme = new_scheme)
2403 2403 shell.SyntaxTB.set_colors(scheme = new_scheme)
2404 2404 except:
2405 2405 color_switch_err('exception')
2406 2406
2407 2407 # threaded shells use a verbose traceback in sys.excepthook
2408 2408 if shell.isthreaded:
2409 2409 try:
2410 2410 shell.sys_excepthook.set_colors(scheme=new_scheme)
2411 2411 except:
2412 2412 color_switch_err('system exception handler')
2413 2413
2414 2414 # Set info (for 'object?') colors
2415 2415 if shell.rc.color_info:
2416 2416 try:
2417 2417 shell.inspector.set_active_scheme(new_scheme)
2418 2418 except:
2419 2419 color_switch_err('object inspector')
2420 2420 else:
2421 2421 shell.inspector.set_active_scheme('NoColor')
2422 2422
2423 2423 def magic_color_info(self,parameter_s = ''):
2424 2424 """Toggle color_info.
2425 2425
2426 2426 The color_info configuration parameter controls whether colors are
2427 2427 used for displaying object details (by things like %psource, %pfile or
2428 2428 the '?' system). This function toggles this value with each call.
2429 2429
2430 2430 Note that unless you have a fairly recent pager (less works better
2431 2431 than more) in your system, using colored object information displays
2432 2432 will not work properly. Test it and see."""
2433 2433
2434 2434 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2435 2435 self.magic_colors(self.shell.rc.colors)
2436 2436 print 'Object introspection functions have now coloring:',
2437 2437 print ['OFF','ON'][self.shell.rc.color_info]
2438 2438
2439 2439 def magic_Pprint(self, parameter_s=''):
2440 2440 """Toggle pretty printing on/off."""
2441 2441
2442 2442 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2443 2443 print 'Pretty printing has been turned', \
2444 2444 ['OFF','ON'][self.shell.rc.pprint]
2445 2445
2446 2446 def magic_exit(self, parameter_s=''):
2447 2447 """Exit IPython, confirming if configured to do so.
2448 2448
2449 2449 You can configure whether IPython asks for confirmation upon exit by
2450 2450 setting the confirm_exit flag in the ipythonrc file."""
2451 2451
2452 2452 self.shell.exit()
2453 2453
2454 2454 def magic_quit(self, parameter_s=''):
2455 2455 """Exit IPython, confirming if configured to do so (like %exit)"""
2456 2456
2457 2457 self.shell.exit()
2458 2458
2459 2459 def magic_Exit(self, parameter_s=''):
2460 2460 """Exit IPython without confirmation."""
2461 2461
2462 2462 self.shell.exit_now = True
2463 2463
2464 2464 #......................................................................
2465 2465 # Functions to implement unix shell-type things
2466 2466
2467 2467 def magic_alias(self, parameter_s = ''):
2468 2468 """Define an alias for a system command.
2469 2469
2470 2470 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2471 2471
2472 2472 Then, typing 'alias_name params' will execute the system command 'cmd
2473 2473 params' (from your underlying operating system).
2474 2474
2475 2475 Aliases have lower precedence than magic functions and Python normal
2476 2476 variables, so if 'foo' is both a Python variable and an alias, the
2477 2477 alias can not be executed until 'del foo' removes the Python variable.
2478 2478
2479 2479 You can use the %l specifier in an alias definition to represent the
2480 2480 whole line when the alias is called. For example:
2481 2481
2482 2482 In [2]: alias all echo "Input in brackets: <%l>"\\
2483 2483 In [3]: all hello world\\
2484 2484 Input in brackets: <hello world>
2485 2485
2486 2486 You can also define aliases with parameters using %s specifiers (one
2487 2487 per parameter):
2488 2488
2489 2489 In [1]: alias parts echo first %s second %s\\
2490 2490 In [2]: %parts A B\\
2491 2491 first A second B\\
2492 2492 In [3]: %parts A\\
2493 2493 Incorrect number of arguments: 2 expected.\\
2494 2494 parts is an alias to: 'echo first %s second %s'
2495 2495
2496 2496 Note that %l and %s are mutually exclusive. You can only use one or
2497 2497 the other in your aliases.
2498 2498
2499 2499 Aliases expand Python variables just like system calls using ! or !!
2500 2500 do: all expressions prefixed with '$' get expanded. For details of
2501 2501 the semantic rules, see PEP-215:
2502 2502 http://www.python.org/peps/pep-0215.html. This is the library used by
2503 2503 IPython for variable expansion. If you want to access a true shell
2504 2504 variable, an extra $ is necessary to prevent its expansion by IPython:
2505 2505
2506 2506 In [6]: alias show echo\\
2507 2507 In [7]: PATH='A Python string'\\
2508 2508 In [8]: show $PATH\\
2509 2509 A Python string\\
2510 2510 In [9]: show $$PATH\\
2511 2511 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2512 2512
2513 2513 You can use the alias facility to acess all of $PATH. See the %rehash
2514 2514 and %rehashx functions, which automatically create aliases for the
2515 2515 contents of your $PATH.
2516 2516
2517 2517 If called with no parameters, %alias prints the current alias table."""
2518 2518
2519 2519 par = parameter_s.strip()
2520 2520 if not par:
2521 2521 stored = self.db.get('stored_aliases', {} )
2522 2522 atab = self.shell.alias_table
2523 2523 aliases = atab.keys()
2524 2524 aliases.sort()
2525 2525 res = []
2526 2526 showlast = []
2527 2527 for alias in aliases:
2528 2528 special = False
2529 2529 try:
2530 2530 tgt = atab[alias][1]
2531 2531 except (TypeError, AttributeError):
2532 2532 # unsubscriptable? probably a callable
2533 2533 tgt = atab[alias]
2534 2534 special = True
2535 2535 # 'interesting' aliases
2536 2536 if (alias in stored or
2537 2537 special or
2538 2538 alias.lower() != os.path.splitext(tgt)[0].lower() or
2539 2539 ' ' in tgt):
2540 2540 showlast.append((alias, tgt))
2541 2541 else:
2542 2542 res.append((alias, tgt ))
2543 2543
2544 2544 # show most interesting aliases last
2545 2545 res.extend(showlast)
2546 2546 print "Total number of aliases:",len(aliases)
2547 2547 return res
2548 2548 try:
2549 2549 alias,cmd = par.split(None,1)
2550 2550 except:
2551 2551 print OInspect.getdoc(self.magic_alias)
2552 2552 else:
2553 2553 nargs = cmd.count('%s')
2554 2554 if nargs>0 and cmd.find('%l')>=0:
2555 2555 error('The %s and %l specifiers are mutually exclusive '
2556 2556 'in alias definitions.')
2557 2557 else: # all looks OK
2558 2558 self.shell.alias_table[alias] = (nargs,cmd)
2559 2559 self.shell.alias_table_validate(verbose=0)
2560 2560 # end magic_alias
2561 2561
2562 2562 def magic_unalias(self, parameter_s = ''):
2563 2563 """Remove an alias"""
2564 2564
2565 2565 aname = parameter_s.strip()
2566 2566 if aname in self.shell.alias_table:
2567 2567 del self.shell.alias_table[aname]
2568 2568 stored = self.db.get('stored_aliases', {} )
2569 2569 if aname in stored:
2570 2570 print "Removing %stored alias",aname
2571 2571 del stored[aname]
2572 2572 self.db['stored_aliases'] = stored
2573 2573
2574 2574
2575 2575 def magic_rehashx(self, parameter_s = ''):
2576 2576 """Update the alias table with all executable files in $PATH.
2577 2577
2578 2578 This version explicitly checks that every entry in $PATH is a file
2579 2579 with execute access (os.X_OK), so it is much slower than %rehash.
2580 2580
2581 2581 Under Windows, it checks executability as a match agains a
2582 2582 '|'-separated string of extensions, stored in the IPython config
2583 2583 variable win_exec_ext. This defaults to 'exe|com|bat'.
2584 2584
2585 2585 This function also resets the root module cache of module completer,
2586 2586 used on slow filesystems.
2587 2587 """
2588 2588
2589 2589
2590 2590 ip = self.api
2591 2591
2592 2592 # for the benefit of module completer in ipy_completers.py
2593 2593 del ip.db['rootmodules']
2594 2594
2595 2595 path = [os.path.abspath(os.path.expanduser(p)) for p in
2596 2596 os.environ.get('PATH','').split(os.pathsep)]
2597 2597 path = filter(os.path.isdir,path)
2598 2598
2599 2599 alias_table = self.shell.alias_table
2600 2600 syscmdlist = []
2601 2601 if os.name == 'posix':
2602 2602 isexec = lambda fname:os.path.isfile(fname) and \
2603 2603 os.access(fname,os.X_OK)
2604 2604 else:
2605 2605
2606 2606 try:
2607 2607 winext = os.environ['pathext'].replace(';','|').replace('.','')
2608 2608 except KeyError:
2609 2609 winext = 'exe|com|bat|py'
2610 2610 if 'py' not in winext:
2611 2611 winext += '|py'
2612 2612 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2613 2613 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2614 2614 savedir = os.getcwd()
2615 2615 try:
2616 2616 # write the whole loop for posix/Windows so we don't have an if in
2617 2617 # the innermost part
2618 2618 if os.name == 'posix':
2619 2619 for pdir in path:
2620 2620 os.chdir(pdir)
2621 2621 for ff in os.listdir(pdir):
2622 2622 if isexec(ff) and ff not in self.shell.no_alias:
2623 2623 # each entry in the alias table must be (N,name),
2624 2624 # where N is the number of positional arguments of the
2625 2625 # alias.
2626 2626 alias_table[ff] = (0,ff)
2627 2627 syscmdlist.append(ff)
2628 2628 else:
2629 2629 for pdir in path:
2630 2630 os.chdir(pdir)
2631 2631 for ff in os.listdir(pdir):
2632 2632 base, ext = os.path.splitext(ff)
2633 2633 if isexec(ff) and base.lower() not in self.shell.no_alias:
2634 2634 if ext.lower() == '.exe':
2635 2635 ff = base
2636 2636 alias_table[base.lower()] = (0,ff)
2637 2637 syscmdlist.append(ff)
2638 2638 # Make sure the alias table doesn't contain keywords or builtins
2639 2639 self.shell.alias_table_validate()
2640 2640 # Call again init_auto_alias() so we get 'rm -i' and other
2641 2641 # modified aliases since %rehashx will probably clobber them
2642 2642
2643 2643 # no, we don't want them. if %rehashx clobbers them, good,
2644 2644 # we'll probably get better versions
2645 2645 # self.shell.init_auto_alias()
2646 2646 db = ip.db
2647 2647 db['syscmdlist'] = syscmdlist
2648 2648 finally:
2649 2649 os.chdir(savedir)
2650 2650
2651 2651 def magic_pwd(self, parameter_s = ''):
2652 2652 """Return the current working directory path."""
2653 2653 return os.getcwd()
2654 2654
2655 2655 def magic_cd(self, parameter_s=''):
2656 2656 """Change the current working directory.
2657 2657
2658 2658 This command automatically maintains an internal list of directories
2659 2659 you visit during your IPython session, in the variable _dh. The
2660 2660 command %dhist shows this history nicely formatted. You can also
2661 2661 do 'cd -<tab>' to see directory history conveniently.
2662 2662
2663 2663 Usage:
2664 2664
2665 2665 cd 'dir': changes to directory 'dir'.
2666 2666
2667 2667 cd -: changes to the last visited directory.
2668 2668
2669 2669 cd -<n>: changes to the n-th directory in the directory history.
2670 2670
2671 2671 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2672 2672 (note: cd <bookmark_name> is enough if there is no
2673 2673 directory <bookmark_name>, but a bookmark with the name exists.)
2674 2674 'cd -b <tab>' allows you to tab-complete bookmark names.
2675 2675
2676 2676 Options:
2677 2677
2678 2678 -q: quiet. Do not print the working directory after the cd command is
2679 2679 executed. By default IPython's cd command does print this directory,
2680 2680 since the default prompts do not display path information.
2681 2681
2682 2682 Note that !cd doesn't work for this purpose because the shell where
2683 2683 !command runs is immediately discarded after executing 'command'."""
2684 2684
2685 2685 parameter_s = parameter_s.strip()
2686 2686 #bkms = self.shell.persist.get("bookmarks",{})
2687 2687
2688 2688 oldcwd = os.getcwd()
2689 2689 numcd = re.match(r'(-)(\d+)$',parameter_s)
2690 2690 # jump in directory history by number
2691 2691 if numcd:
2692 2692 nn = int(numcd.group(2))
2693 2693 try:
2694 2694 ps = self.shell.user_ns['_dh'][nn]
2695 2695 except IndexError:
2696 2696 print 'The requested directory does not exist in history.'
2697 2697 return
2698 2698 else:
2699 2699 opts = {}
2700 2700 else:
2701 2701 #turn all non-space-escaping backslashes to slashes,
2702 2702 # for c:\windows\directory\names\
2703 2703 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2704 2704 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2705 2705 # jump to previous
2706 2706 if ps == '-':
2707 2707 try:
2708 2708 ps = self.shell.user_ns['_dh'][-2]
2709 2709 except IndexError:
2710 2710 raise UsageError('%cd -: No previous directory to change to.')
2711 2711 # jump to bookmark if needed
2712 2712 else:
2713 2713 if not os.path.isdir(ps) or opts.has_key('b'):
2714 2714 bkms = self.db.get('bookmarks', {})
2715 2715
2716 2716 if bkms.has_key(ps):
2717 2717 target = bkms[ps]
2718 2718 print '(bookmark:%s) -> %s' % (ps,target)
2719 2719 ps = target
2720 2720 else:
2721 2721 if opts.has_key('b'):
2722 2722 raise UsageError("Bookmark '%s' not found. "
2723 2723 "Use '%%bookmark -l' to see your bookmarks." % ps)
2724 2724
2725 2725 # at this point ps should point to the target dir
2726 2726 if ps:
2727 2727 try:
2728 2728 os.chdir(os.path.expanduser(ps))
2729 2729 if self.shell.rc.term_title:
2730 2730 #print 'set term title:',self.shell.rc.term_title # dbg
2731 2731 ttitle = 'IPy ' + abbrev_cwd()
2732 2732 platutils.set_term_title(ttitle)
2733 2733 except OSError:
2734 2734 print sys.exc_info()[1]
2735 2735 else:
2736 2736 cwd = os.getcwd()
2737 2737 dhist = self.shell.user_ns['_dh']
2738 2738 if oldcwd != cwd:
2739 2739 dhist.append(cwd)
2740 2740 self.db['dhist'] = compress_dhist(dhist)[-100:]
2741 2741
2742 2742 else:
2743 2743 os.chdir(self.shell.home_dir)
2744 2744 if self.shell.rc.term_title:
2745 2745 platutils.set_term_title("IPy ~")
2746 2746 cwd = os.getcwd()
2747 2747 dhist = self.shell.user_ns['_dh']
2748 2748
2749 2749 if oldcwd != cwd:
2750 2750 dhist.append(cwd)
2751 2751 self.db['dhist'] = compress_dhist(dhist)[-100:]
2752 2752 if not 'q' in opts and self.shell.user_ns['_dh']:
2753 2753 print self.shell.user_ns['_dh'][-1]
2754 2754
2755 2755
2756 2756 def magic_env(self, parameter_s=''):
2757 2757 """List environment variables."""
2758 2758
2759 2759 return os.environ.data
2760 2760
2761 2761 def magic_pushd(self, parameter_s=''):
2762 2762 """Place the current dir on stack and change directory.
2763 2763
2764 2764 Usage:\\
2765 2765 %pushd ['dirname']
2766 2766 """
2767 2767
2768 2768 dir_s = self.shell.dir_stack
2769 2769 tgt = os.path.expanduser(parameter_s)
2770 2770 cwd = os.getcwd().replace(self.home_dir,'~')
2771 2771 if tgt:
2772 2772 self.magic_cd(parameter_s)
2773 2773 dir_s.insert(0,cwd)
2774 2774 return self.magic_dirs()
2775 2775
2776 2776 def magic_popd(self, parameter_s=''):
2777 2777 """Change to directory popped off the top of the stack.
2778 2778 """
2779 2779 if not self.shell.dir_stack:
2780 2780 raise UsageError("%popd on empty stack")
2781 2781 top = self.shell.dir_stack.pop(0)
2782 2782 self.magic_cd(top)
2783 2783 print "popd ->",top
2784 2784
2785 2785 def magic_dirs(self, parameter_s=''):
2786 2786 """Return the current directory stack."""
2787 2787
2788 2788 return self.shell.dir_stack
2789 2789
2790 2790 def magic_dhist(self, parameter_s=''):
2791 2791 """Print your history of visited directories.
2792 2792
2793 2793 %dhist -> print full history\\
2794 2794 %dhist n -> print last n entries only\\
2795 2795 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2796 2796
2797 2797 This history is automatically maintained by the %cd command, and
2798 2798 always available as the global list variable _dh. You can use %cd -<n>
2799 2799 to go to directory number <n>.
2800 2800
2801 2801 Note that most of time, you should view directory history by entering
2802 2802 cd -<TAB>.
2803 2803
2804 2804 """
2805 2805
2806 2806 dh = self.shell.user_ns['_dh']
2807 2807 if parameter_s:
2808 2808 try:
2809 2809 args = map(int,parameter_s.split())
2810 2810 except:
2811 2811 self.arg_err(Magic.magic_dhist)
2812 2812 return
2813 2813 if len(args) == 1:
2814 2814 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2815 2815 elif len(args) == 2:
2816 2816 ini,fin = args
2817 2817 else:
2818 2818 self.arg_err(Magic.magic_dhist)
2819 2819 return
2820 2820 else:
2821 2821 ini,fin = 0,len(dh)
2822 2822 nlprint(dh,
2823 2823 header = 'Directory history (kept in _dh)',
2824 2824 start=ini,stop=fin)
2825 2825
2826 2826
2827 2827 def magic_sc(self, parameter_s=''):
2828 2828 """Shell capture - execute a shell command and capture its output.
2829 2829
2830 2830 DEPRECATED. Suboptimal, retained for backwards compatibility.
2831 2831
2832 2832 You should use the form 'var = !command' instead. Example:
2833 2833
2834 2834 "%sc -l myfiles = ls ~" should now be written as
2835 2835
2836 2836 "myfiles = !ls ~"
2837 2837
2838 2838 myfiles.s, myfiles.l and myfiles.n still apply as documented
2839 2839 below.
2840 2840
2841 2841 --
2842 2842 %sc [options] varname=command
2843 2843
2844 2844 IPython will run the given command using commands.getoutput(), and
2845 2845 will then update the user's interactive namespace with a variable
2846 2846 called varname, containing the value of the call. Your command can
2847 2847 contain shell wildcards, pipes, etc.
2848 2848
2849 2849 The '=' sign in the syntax is mandatory, and the variable name you
2850 2850 supply must follow Python's standard conventions for valid names.
2851 2851
2852 2852 (A special format without variable name exists for internal use)
2853 2853
2854 2854 Options:
2855 2855
2856 2856 -l: list output. Split the output on newlines into a list before
2857 2857 assigning it to the given variable. By default the output is stored
2858 2858 as a single string.
2859 2859
2860 2860 -v: verbose. Print the contents of the variable.
2861 2861
2862 2862 In most cases you should not need to split as a list, because the
2863 2863 returned value is a special type of string which can automatically
2864 2864 provide its contents either as a list (split on newlines) or as a
2865 2865 space-separated string. These are convenient, respectively, either
2866 2866 for sequential processing or to be passed to a shell command.
2867 2867
2868 2868 For example:
2869 2869
2870 2870 # Capture into variable a
2871 2871 In [9]: sc a=ls *py
2872 2872
2873 2873 # a is a string with embedded newlines
2874 2874 In [10]: a
2875 2875 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2876 2876
2877 2877 # which can be seen as a list:
2878 2878 In [11]: a.l
2879 2879 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2880 2880
2881 2881 # or as a whitespace-separated string:
2882 2882 In [12]: a.s
2883 2883 Out[12]: 'setup.py win32_manual_post_install.py'
2884 2884
2885 2885 # a.s is useful to pass as a single command line:
2886 2886 In [13]: !wc -l $a.s
2887 2887 146 setup.py
2888 2888 130 win32_manual_post_install.py
2889 2889 276 total
2890 2890
2891 2891 # while the list form is useful to loop over:
2892 2892 In [14]: for f in a.l:
2893 2893 ....: !wc -l $f
2894 2894 ....:
2895 2895 146 setup.py
2896 2896 130 win32_manual_post_install.py
2897 2897
2898 2898 Similiarly, the lists returned by the -l option are also special, in
2899 2899 the sense that you can equally invoke the .s attribute on them to
2900 2900 automatically get a whitespace-separated string from their contents:
2901 2901
2902 2902 In [1]: sc -l b=ls *py
2903 2903
2904 2904 In [2]: b
2905 2905 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2906 2906
2907 2907 In [3]: b.s
2908 2908 Out[3]: 'setup.py win32_manual_post_install.py'
2909 2909
2910 2910 In summary, both the lists and strings used for ouptut capture have
2911 2911 the following special attributes:
2912 2912
2913 2913 .l (or .list) : value as list.
2914 2914 .n (or .nlstr): value as newline-separated string.
2915 2915 .s (or .spstr): value as space-separated string.
2916 2916 """
2917 2917
2918 2918 opts,args = self.parse_options(parameter_s,'lv')
2919 2919 # Try to get a variable name and command to run
2920 2920 try:
2921 2921 # the variable name must be obtained from the parse_options
2922 2922 # output, which uses shlex.split to strip options out.
2923 2923 var,_ = args.split('=',1)
2924 2924 var = var.strip()
2925 2925 # But the the command has to be extracted from the original input
2926 2926 # parameter_s, not on what parse_options returns, to avoid the
2927 2927 # quote stripping which shlex.split performs on it.
2928 2928 _,cmd = parameter_s.split('=',1)
2929 2929 except ValueError:
2930 2930 var,cmd = '',''
2931 2931 # If all looks ok, proceed
2932 2932 out,err = self.shell.getoutputerror(cmd)
2933 2933 if err:
2934 2934 print >> Term.cerr,err
2935 2935 if opts.has_key('l'):
2936 2936 out = SList(out.split('\n'))
2937 2937 else:
2938 2938 out = LSString(out)
2939 2939 if opts.has_key('v'):
2940 2940 print '%s ==\n%s' % (var,pformat(out))
2941 2941 if var:
2942 2942 self.shell.user_ns.update({var:out})
2943 2943 else:
2944 2944 return out
2945 2945
2946 2946 def magic_sx(self, parameter_s=''):
2947 2947 """Shell execute - run a shell command and capture its output.
2948 2948
2949 2949 %sx command
2950 2950
2951 2951 IPython will run the given command using commands.getoutput(), and
2952 2952 return the result formatted as a list (split on '\\n'). Since the
2953 2953 output is _returned_, it will be stored in ipython's regular output
2954 2954 cache Out[N] and in the '_N' automatic variables.
2955 2955
2956 2956 Notes:
2957 2957
2958 2958 1) If an input line begins with '!!', then %sx is automatically
2959 2959 invoked. That is, while:
2960 2960 !ls
2961 2961 causes ipython to simply issue system('ls'), typing
2962 2962 !!ls
2963 2963 is a shorthand equivalent to:
2964 2964 %sx ls
2965 2965
2966 2966 2) %sx differs from %sc in that %sx automatically splits into a list,
2967 2967 like '%sc -l'. The reason for this is to make it as easy as possible
2968 2968 to process line-oriented shell output via further python commands.
2969 2969 %sc is meant to provide much finer control, but requires more
2970 2970 typing.
2971 2971
2972 2972 3) Just like %sc -l, this is a list with special attributes:
2973 2973
2974 2974 .l (or .list) : value as list.
2975 2975 .n (or .nlstr): value as newline-separated string.
2976 2976 .s (or .spstr): value as whitespace-separated string.
2977 2977
2978 2978 This is very useful when trying to use such lists as arguments to
2979 2979 system commands."""
2980 2980
2981 2981 if parameter_s:
2982 2982 out,err = self.shell.getoutputerror(parameter_s)
2983 2983 if err:
2984 2984 print >> Term.cerr,err
2985 2985 return SList(out.split('\n'))
2986 2986
2987 2987 def magic_bg(self, parameter_s=''):
2988 2988 """Run a job in the background, in a separate thread.
2989 2989
2990 2990 For example,
2991 2991
2992 2992 %bg myfunc(x,y,z=1)
2993 2993
2994 2994 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2995 2995 execution starts, a message will be printed indicating the job
2996 2996 number. If your job number is 5, you can use
2997 2997
2998 2998 myvar = jobs.result(5) or myvar = jobs[5].result
2999 2999
3000 3000 to assign this result to variable 'myvar'.
3001 3001
3002 3002 IPython has a job manager, accessible via the 'jobs' object. You can
3003 3003 type jobs? to get more information about it, and use jobs.<TAB> to see
3004 3004 its attributes. All attributes not starting with an underscore are
3005 3005 meant for public use.
3006 3006
3007 3007 In particular, look at the jobs.new() method, which is used to create
3008 3008 new jobs. This magic %bg function is just a convenience wrapper
3009 3009 around jobs.new(), for expression-based jobs. If you want to create a
3010 3010 new job with an explicit function object and arguments, you must call
3011 3011 jobs.new() directly.
3012 3012
3013 3013 The jobs.new docstring also describes in detail several important
3014 3014 caveats associated with a thread-based model for background job
3015 3015 execution. Type jobs.new? for details.
3016 3016
3017 3017 You can check the status of all jobs with jobs.status().
3018 3018
3019 3019 The jobs variable is set by IPython into the Python builtin namespace.
3020 3020 If you ever declare a variable named 'jobs', you will shadow this
3021 3021 name. You can either delete your global jobs variable to regain
3022 3022 access to the job manager, or make a new name and assign it manually
3023 3023 to the manager (stored in IPython's namespace). For example, to
3024 3024 assign the job manager to the Jobs name, use:
3025 3025
3026 3026 Jobs = __builtins__.jobs"""
3027 3027
3028 3028 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3029 3029
3030 3030 def magic_r(self, parameter_s=''):
3031 3031 """Repeat previous input.
3032 3032
3033 3033 Note: Consider using the more powerfull %rep instead!
3034 3034
3035 3035 If given an argument, repeats the previous command which starts with
3036 3036 the same string, otherwise it just repeats the previous input.
3037 3037
3038 3038 Shell escaped commands (with ! as first character) are not recognized
3039 3039 by this system, only pure python code and magic commands.
3040 3040 """
3041 3041
3042 3042 start = parameter_s.strip()
3043 3043 esc_magic = self.shell.ESC_MAGIC
3044 3044 # Identify magic commands even if automagic is on (which means
3045 3045 # the in-memory version is different from that typed by the user).
3046 3046 if self.shell.rc.automagic:
3047 3047 start_magic = esc_magic+start
3048 3048 else:
3049 3049 start_magic = start
3050 3050 # Look through the input history in reverse
3051 3051 for n in range(len(self.shell.input_hist)-2,0,-1):
3052 3052 input = self.shell.input_hist[n]
3053 3053 # skip plain 'r' lines so we don't recurse to infinity
3054 3054 if input != '_ip.magic("r")\n' and \
3055 3055 (input.startswith(start) or input.startswith(start_magic)):
3056 3056 #print 'match',`input` # dbg
3057 3057 print 'Executing:',input,
3058 3058 self.shell.runlines(input)
3059 3059 return
3060 3060 print 'No previous input matching `%s` found.' % start
3061 3061
3062 3062
3063 3063 def magic_bookmark(self, parameter_s=''):
3064 3064 """Manage IPython's bookmark system.
3065 3065
3066 3066 %bookmark <name> - set bookmark to current dir
3067 3067 %bookmark <name> <dir> - set bookmark to <dir>
3068 3068 %bookmark -l - list all bookmarks
3069 3069 %bookmark -d <name> - remove bookmark
3070 3070 %bookmark -r - remove all bookmarks
3071 3071
3072 3072 You can later on access a bookmarked folder with:
3073 3073 %cd -b <name>
3074 3074 or simply '%cd <name>' if there is no directory called <name> AND
3075 3075 there is such a bookmark defined.
3076 3076
3077 3077 Your bookmarks persist through IPython sessions, but they are
3078 3078 associated with each profile."""
3079 3079
3080 3080 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3081 3081 if len(args) > 2:
3082 3082 raise UsageError("%bookmark: too many arguments")
3083 3083
3084 3084 bkms = self.db.get('bookmarks',{})
3085 3085
3086 3086 if opts.has_key('d'):
3087 3087 try:
3088 3088 todel = args[0]
3089 3089 except IndexError:
3090 3090 raise UsageError(
3091 3091 "%bookmark -d: must provide a bookmark to delete")
3092 3092 else:
3093 3093 try:
3094 3094 del bkms[todel]
3095 3095 except KeyError:
3096 3096 raise UsageError(
3097 3097 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3098 3098
3099 3099 elif opts.has_key('r'):
3100 3100 bkms = {}
3101 3101 elif opts.has_key('l'):
3102 3102 bks = bkms.keys()
3103 3103 bks.sort()
3104 3104 if bks:
3105 3105 size = max(map(len,bks))
3106 3106 else:
3107 3107 size = 0
3108 3108 fmt = '%-'+str(size)+'s -> %s'
3109 3109 print 'Current bookmarks:'
3110 3110 for bk in bks:
3111 3111 print fmt % (bk,bkms[bk])
3112 3112 else:
3113 3113 if not args:
3114 3114 raise UsageError("%bookmark: You must specify the bookmark name")
3115 3115 elif len(args)==1:
3116 3116 bkms[args[0]] = os.getcwd()
3117 3117 elif len(args)==2:
3118 3118 bkms[args[0]] = args[1]
3119 3119 self.db['bookmarks'] = bkms
3120 3120
3121 3121 def magic_pycat(self, parameter_s=''):
3122 3122 """Show a syntax-highlighted file through a pager.
3123 3123
3124 3124 This magic is similar to the cat utility, but it will assume the file
3125 3125 to be Python source and will show it with syntax highlighting. """
3126 3126
3127 3127 try:
3128 3128 filename = get_py_filename(parameter_s)
3129 3129 cont = file_read(filename)
3130 3130 except IOError:
3131 3131 try:
3132 3132 cont = eval(parameter_s,self.user_ns)
3133 3133 except NameError:
3134 3134 cont = None
3135 3135 if cont is None:
3136 3136 print "Error: no such file or variable"
3137 3137 return
3138 3138
3139 3139 page(self.shell.pycolorize(cont),
3140 3140 screen_lines=self.shell.rc.screen_length)
3141 3141
3142 3142 def magic_cpaste(self, parameter_s=''):
3143 """Allows you to paste & execute a pre-formatted code block from clipboard
3143 """Allows you to paste & execute a pre-formatted code block from clipboard.
3144 3144
3145 3145 You must terminate the block with '--' (two minus-signs) alone on the
3146 3146 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3147 3147 is the new sentinel for this operation)
3148 3148
3149 3149 The block is dedented prior to execution to enable execution of method
3150 3150 definitions. '>' and '+' characters at the beginning of a line are
3151 ignored, to allow pasting directly from e-mails, diff files and doctests.
3152 The executed block is also assigned to variable named 'pasted_block' for
3151 ignored, to allow pasting directly from e-mails, diff files and
3152 doctests (the '...' continuation prompt is also stripped). The
3153 executed block is also assigned to variable named 'pasted_block' for
3153 3154 later editing with '%edit pasted_block'.
3154 3155
3155 3156 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3156 3157 This assigns the pasted block to variable 'foo' as string, without
3157 3158 dedenting or executing it (preceding >>> and + is still stripped)
3158 3159
3159 3160 Do not be alarmed by garbled output on Windows (it's a readline bug).
3160 3161 Just press enter and type -- (and press enter again) and the block
3161 3162 will be what was just pasted.
3162 3163
3163 3164 IPython statements (magics, shell escapes) are not supported (yet).
3164 3165 """
3165 3166 opts,args = self.parse_options(parameter_s,'s:',mode='string')
3166 3167 par = args.strip()
3167 3168 sentinel = opts.get('s','--')
3168 3169
3169 strip_from_start = [re.compile(e) for e in
3170 [r'^\s*(\s?>)+',r'^\s*In \[\d+\]:',r'^\++']]
3170 # Regular expressions that declare text we strip from the input:
3171 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3172 r'^\s*(\s?>)+', # Python input prompt
3173 r'^\s*\.{3,}', # Continuation prompts
3174 r'^\++',
3175 ]
3176
3177 strip_from_start = map(re.compile,strip_re)
3178
3171 3179 from IPython import iplib
3172 3180 lines = []
3173 3181 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3174 3182 while 1:
3175 3183 l = iplib.raw_input_original(':')
3176 3184 if l ==sentinel:
3177 3185 break
3178 3186
3179 3187 for pat in strip_from_start:
3180 3188 l = pat.sub('',l)
3181 3189 lines.append(l)
3182 3190
3183 3191 block = "\n".join(lines) + '\n'
3184 3192 #print "block:\n",block
3185 3193 if not par:
3186 3194 b = textwrap.dedent(block)
3187 3195 exec b in self.user_ns
3188 3196 self.user_ns['pasted_block'] = b
3189 3197 else:
3190 3198 self.user_ns[par] = block
3191 3199 print "Block assigned to '%s'" % par
3192 3200
3193 3201 def magic_quickref(self,arg):
3194 3202 """ Show a quick reference sheet """
3195 3203 import IPython.usage
3196 3204 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
3197 3205
3198 3206 page(qr)
3199 3207
3200 3208 def magic_upgrade(self,arg):
3201 3209 """ Upgrade your IPython installation
3202 3210
3203 3211 This will copy the config files that don't yet exist in your
3204 3212 ipython dir from the system config dir. Use this after upgrading
3205 3213 IPython if you don't wish to delete your .ipython dir.
3206 3214
3207 3215 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3208 3216 new users)
3209 3217
3210 3218 """
3211 3219 ip = self.getapi()
3212 3220 ipinstallation = path(IPython.__file__).dirname()
3213 3221 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
3214 3222 src_config = ipinstallation / 'UserConfig'
3215 3223 userdir = path(ip.options.ipythondir)
3216 3224 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3217 3225 print ">",cmd
3218 3226 shell(cmd)
3219 3227 if arg == '-nolegacy':
3220 3228 legacy = userdir.files('ipythonrc*')
3221 3229 print "Nuking legacy files:",legacy
3222 3230
3223 3231 [p.remove() for p in legacy]
3224 3232 suffix = (sys.platform == 'win32' and '.ini' or '')
3225 3233 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3226 3234
3227 3235
3228 3236 def magic_doctest_mode(self,parameter_s=''):
3229 3237 """Toggle doctest mode on and off.
3230 3238
3231 3239 This mode allows you to toggle the prompt behavior between normal
3232 3240 IPython prompts and ones that are as similar to the default IPython
3233 3241 interpreter as possible.
3234 3242
3235 3243 It also supports the pasting of code snippets that have leading '>>>'
3236 3244 and '...' prompts in them. This means that you can paste doctests from
3237 3245 files or docstrings (even if they have leading whitespace), and the
3238 3246 code will execute correctly. You can then use '%history -tn' to see
3239 3247 the translated history without line numbers; this will give you the
3240 3248 input after removal of all the leading prompts and whitespace, which
3241 3249 can be pasted back into an editor.
3242 3250
3243 3251 With these features, you can switch into this mode easily whenever you
3244 3252 need to do testing and changes to doctests, without having to leave
3245 3253 your existing IPython session.
3246 3254 """
3247 3255
3248 3256 # XXX - Fix this to have cleaner activate/deactivate calls.
3249 3257 from IPython.Extensions import InterpreterPasteInput as ipaste
3250 3258 from IPython.ipstruct import Struct
3251 3259
3252 3260 # Shorthands
3253 3261 shell = self.shell
3254 3262 oc = shell.outputcache
3255 3263 rc = shell.rc
3256 3264 meta = shell.meta
3257 3265 # dstore is a data store kept in the instance metadata bag to track any
3258 3266 # changes we make, so we can undo them later.
3259 3267 dstore = meta.setdefault('doctest_mode',Struct())
3260 3268 save_dstore = dstore.setdefault
3261 3269
3262 3270 # save a few values we'll need to recover later
3263 3271 mode = save_dstore('mode',False)
3264 3272 save_dstore('rc_pprint',rc.pprint)
3265 3273 save_dstore('xmode',shell.InteractiveTB.mode)
3266 3274 save_dstore('rc_separate_out',rc.separate_out)
3267 3275 save_dstore('rc_separate_out2',rc.separate_out2)
3268 3276 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3269 3277
3270 3278 if mode == False:
3271 3279 # turn on
3272 3280 ipaste.activate_prefilter()
3273 3281
3274 3282 oc.prompt1.p_template = '>>> '
3275 3283 oc.prompt2.p_template = '... '
3276 3284 oc.prompt_out.p_template = ''
3277 3285
3278 3286 oc.output_sep = ''
3279 3287 oc.output_sep2 = ''
3280 3288
3281 3289 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3282 3290 oc.prompt_out.pad_left = False
3283 3291
3284 3292 rc.pprint = False
3285 3293
3286 3294 shell.magic_xmode('Plain')
3287 3295
3288 3296 else:
3289 3297 # turn off
3290 3298 ipaste.deactivate_prefilter()
3291 3299
3292 3300 oc.prompt1.p_template = rc.prompt_in1
3293 3301 oc.prompt2.p_template = rc.prompt_in2
3294 3302 oc.prompt_out.p_template = rc.prompt_out
3295 3303
3296 3304 oc.output_sep = dstore.rc_separate_out
3297 3305 oc.output_sep2 = dstore.rc_separate_out2
3298 3306
3299 3307 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3300 3308 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3301 3309
3302 3310 rc.pprint = dstore.rc_pprint
3303 3311
3304 3312 shell.magic_xmode(dstore.xmode)
3305 3313
3306 3314 # Store new mode and inform
3307 3315 dstore.mode = bool(1-int(mode))
3308 3316 print 'Doctest mode is:',
3309 3317 print ['OFF','ON'][dstore.mode]
3310 3318
3311 3319 # end Magic
@@ -1,89 +1,89 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Release data for the IPython project.
3 3
4 4 $Id: Release.py 3002 2008-02-01 07:17:00Z fperez $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 8 #
9 9 # Copyright (c) 2001 Janko Hauser <jhauser@zscout.de> and Nathaniel Gray
10 10 # <n8gray@caltech.edu>
11 11 #
12 12 # Distributed under the terms of the BSD License. The full license is in
13 13 # the file COPYING, distributed as part of this software.
14 14 #*****************************************************************************
15 15
16 16 # Name of the package for release purposes. This is the name which labels
17 17 # the tarballs and RPMs made by distutils, so it's best to lowercase it.
18 18 name = 'ipython'
19 19
20 20 # For versions with substrings (like 0.6.16.svn), use an extra . to separate
21 21 # the new substring. We have to avoid using either dashes or underscores,
22 22 # because bdist_rpm does not accept dashes (an RPM) convention, and
23 23 # bdist_deb does not accept underscores (a Debian convention).
24 24
25 revision = '117'
25 revision = '85'
26 26 branch = 'ipython'
27 27
28 28 if branch == 'ipython':
29 29 version = '0.8.3.bzr.r' + revision
30 30 else:
31 31 version = '0.8.3.bzr.r%s.%s' % (revision,branch)
32 32
33 33 version = '0.8.3'
34 34
35 35 description = "An enhanced interactive Python shell."
36 36
37 37 long_description = \
38 38 """
39 39 IPython provides a replacement for the interactive Python interpreter with
40 40 extra functionality.
41 41
42 42 Main features:
43 43
44 44 * Comprehensive object introspection.
45 45
46 46 * Input history, persistent across sessions.
47 47
48 48 * Caching of output results during a session with automatically generated
49 49 references.
50 50
51 51 * Readline based name completion.
52 52
53 53 * Extensible system of 'magic' commands for controlling the environment and
54 54 performing many tasks related either to IPython or the operating system.
55 55
56 56 * Configuration system with easy switching between different setups (simpler
57 57 than changing $PYTHONSTARTUP environment variables every time).
58 58
59 59 * Session logging and reloading.
60 60
61 61 * Extensible syntax processing for special purpose situations.
62 62
63 63 * Access to the system shell with user-extensible alias system.
64 64
65 65 * Easily embeddable in other Python programs.
66 66
67 67 * Integrated access to the pdb debugger and the Python profiler.
68 68
69 69 The latest development version is always available at the IPython subversion
70 70 repository_.
71 71
72 72 .. _repository: http://ipython.scipy.org/svn/ipython/ipython/trunk#egg=ipython-dev
73 73 """
74 74
75 75 license = 'BSD'
76 76
77 77 authors = {'Fernando' : ('Fernando Perez','fperez@colorado.edu'),
78 78 'Janko' : ('Janko Hauser','jhauser@zscout.de'),
79 79 'Nathan' : ('Nathaniel Gray','n8gray@caltech.edu'),
80 80 'Ville' : ('Ville Vainio','vivainio@gmail.com')
81 81 }
82 82
83 83 url = 'http://ipython.scipy.org'
84 84
85 85 download_url = 'http://ipython.scipy.org/dist'
86 86
87 87 platforms = ['Linux','Mac OSX','Windows XP/2000/NT','Windows 95/98/ME']
88 88
89 89 keywords = ['Interactive','Interpreter','Shell']
@@ -1,1045 +1,1045 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 ultraTB.py -- Spice up your tracebacks!
4 4
5 5 * ColorTB
6 6 I've always found it a bit hard to visually parse tracebacks in Python. The
7 7 ColorTB class is a solution to that problem. It colors the different parts of a
8 8 traceback in a manner similar to what you would expect from a syntax-highlighting
9 9 text editor.
10 10
11 11 Installation instructions for ColorTB:
12 12 import sys,ultraTB
13 13 sys.excepthook = ultraTB.ColorTB()
14 14
15 15 * VerboseTB
16 16 I've also included a port of Ka-Ping Yee's "cgitb.py" that produces all kinds
17 17 of useful info when a traceback occurs. Ping originally had it spit out HTML
18 18 and intended it for CGI programmers, but why should they have all the fun? I
19 19 altered it to spit out colored text to the terminal. It's a bit overwhelming,
20 20 but kind of neat, and maybe useful for long-running programs that you believe
21 21 are bug-free. If a crash *does* occur in that type of program you want details.
22 22 Give it a shot--you'll love it or you'll hate it.
23 23
24 24 Note:
25 25
26 26 The Verbose mode prints the variables currently visible where the exception
27 27 happened (shortening their strings if too long). This can potentially be
28 28 very slow, if you happen to have a huge data structure whose string
29 29 representation is complex to compute. Your computer may appear to freeze for
30 30 a while with cpu usage at 100%. If this occurs, you can cancel the traceback
31 31 with Ctrl-C (maybe hitting it more than once).
32 32
33 33 If you encounter this kind of situation often, you may want to use the
34 34 Verbose_novars mode instead of the regular Verbose, which avoids formatting
35 35 variables (but otherwise includes the information and context given by
36 36 Verbose).
37 37
38 38
39 39 Installation instructions for ColorTB:
40 40 import sys,ultraTB
41 41 sys.excepthook = ultraTB.VerboseTB()
42 42
43 43 Note: Much of the code in this module was lifted verbatim from the standard
44 44 library module 'traceback.py' and Ka-Ping Yee's 'cgitb.py'.
45 45
46 46 * Color schemes
47 47 The colors are defined in the class TBTools through the use of the
48 48 ColorSchemeTable class. Currently the following exist:
49 49
50 50 - NoColor: allows all of this module to be used in any terminal (the color
51 51 escapes are just dummy blank strings).
52 52
53 53 - Linux: is meant to look good in a terminal like the Linux console (black
54 54 or very dark background).
55 55
56 56 - LightBG: similar to Linux but swaps dark/light colors to be more readable
57 57 in light background terminals.
58 58
59 59 You can implement other color schemes easily, the syntax is fairly
60 60 self-explanatory. Please send back new schemes you develop to the author for
61 61 possible inclusion in future releases.
62 62
63 63 $Id: ultraTB.py 2908 2007-12-30 21:07:46Z vivainio $"""
64 64
65 65 #*****************************************************************************
66 66 # Copyright (C) 2001 Nathaniel Gray <n8gray@caltech.edu>
67 67 # Copyright (C) 2001-2004 Fernando Perez <fperez@colorado.edu>
68 68 #
69 69 # Distributed under the terms of the BSD License. The full license is in
70 70 # the file COPYING, distributed as part of this software.
71 71 #*****************************************************************************
72 72
73 73 from IPython import Release
74 74 __author__ = '%s <%s>\n%s <%s>' % (Release.authors['Nathan']+
75 75 Release.authors['Fernando'])
76 76 __license__ = Release.license
77 77
78 78 # Required modules
79 79 import inspect
80 80 import keyword
81 81 import linecache
82 82 import os
83 83 import pydoc
84 84 import re
85 85 import string
86 86 import sys
87 87 import time
88 88 import tokenize
89 89 import traceback
90 90 import types
91 91
92 92 # For purposes of monkeypatching inspect to fix a bug in it.
93 93 from inspect import getsourcefile, getfile, getmodule,\
94 94 ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode
95 95
96 96
97 97 # IPython's own modules
98 98 # Modified pdb which doesn't damage IPython's readline handling
99 99 from IPython import Debugger, PyColorize
100 100 from IPython.ipstruct import Struct
101 101 from IPython.excolors import ExceptionColors
102 102 from IPython.genutils import Term,uniq_stable,error,info
103 103
104 104 # Globals
105 105 # amount of space to put line numbers before verbose tracebacks
106 106 INDENT_SIZE = 8
107 107
108 108 # Default color scheme. This is used, for example, by the traceback
109 109 # formatter. When running in an actual IPython instance, the user's rc.colors
110 110 # value is used, but havinga module global makes this functionality available
111 111 # to users of ultraTB who are NOT running inside ipython.
112 112 DEFAULT_SCHEME = 'NoColor'
113 113
114 114 #---------------------------------------------------------------------------
115 115 # Code begins
116 116
117 117 # Utility functions
118 118 def inspect_error():
119 119 """Print a message about internal inspect errors.
120 120
121 121 These are unfortunately quite common."""
122 122
123 123 error('Internal Python error in the inspect module.\n'
124 124 'Below is the traceback from this internal error.\n')
125 125
126 126
127 127 def findsource(object):
128 128 """Return the entire source file and starting line number for an object.
129 129
130 130 The argument may be a module, class, method, function, traceback, frame,
131 131 or code object. The source code is returned as a list of all the lines
132 132 in the file and the line number indexes a line in that list. An IOError
133 133 is raised if the source code cannot be retrieved.
134 134
135 135 FIXED version with which we monkeypatch the stdlib to work around a bug."""
136 136
137 137 file = getsourcefile(object) or getfile(object)
138 138 # If the object is a frame, then trying to get the globals dict from its
139 139 # module won't work. Instead, the frame object itself has the globals
140 140 # dictionary.
141 141 globals_dict = None
142 142 if inspect.isframe(object):
143 143 # XXX: can this ever be false?
144 144 globals_dict = object.f_globals
145 145 else:
146 146 module = getmodule(object, file)
147 147 if module:
148 148 globals_dict = module.__dict__
149 149 lines = linecache.getlines(file, globals_dict)
150 150 if not lines:
151 151 raise IOError('could not get source code')
152 152
153 153 if ismodule(object):
154 154 return lines, 0
155 155
156 156 if isclass(object):
157 157 name = object.__name__
158 158 pat = re.compile(r'^(\s*)class\s*' + name + r'\b')
159 159 # make some effort to find the best matching class definition:
160 160 # use the one with the least indentation, which is the one
161 161 # that's most probably not inside a function definition.
162 162 candidates = []
163 163 for i in range(len(lines)):
164 164 match = pat.match(lines[i])
165 165 if match:
166 166 # if it's at toplevel, it's already the best one
167 167 if lines[i][0] == 'c':
168 168 return lines, i
169 169 # else add whitespace to candidate list
170 170 candidates.append((match.group(1), i))
171 171 if candidates:
172 172 # this will sort by whitespace, and by line number,
173 173 # less whitespace first
174 174 candidates.sort()
175 175 return lines, candidates[0][1]
176 176 else:
177 177 raise IOError('could not find class definition')
178 178
179 179 if ismethod(object):
180 180 object = object.im_func
181 181 if isfunction(object):
182 182 object = object.func_code
183 183 if istraceback(object):
184 184 object = object.tb_frame
185 185 if isframe(object):
186 186 object = object.f_code
187 187 if iscode(object):
188 188 if not hasattr(object, 'co_firstlineno'):
189 189 raise IOError('could not find function definition')
190 190 pat = re.compile(r'^(\s*def\s)|(.*(?<!\w)lambda(:|\s))|^(\s*@)')
191 191 pmatch = pat.match
192 192 # fperez - fix: sometimes, co_firstlineno can give a number larger than
193 193 # the length of lines, which causes an error. Safeguard against that.
194 194 lnum = min(object.co_firstlineno,len(lines))-1
195 195 while lnum > 0:
196 196 if pmatch(lines[lnum]): break
197 197 lnum -= 1
198 198
199 199 return lines, lnum
200 200 raise IOError('could not find code object')
201 201
202 202 # Monkeypatch inspect to apply our bugfix. This code only works with py25
203 203 if sys.version_info[:2] >= (2,5):
204 204 inspect.findsource = findsource
205 205
206 206 def fix_frame_records_filenames(records):
207 207 """Try to fix the filenames in each record from inspect.getinnerframes().
208 208
209 209 Particularly, modules loaded from within zip files have useless filenames
210 210 attached to their code object, and inspect.getinnerframes() just uses it.
211 211 """
212 212 fixed_records = []
213 213 for frame, filename, line_no, func_name, lines, index in records:
214 214 # Look inside the frame's globals dictionary for __file__, which should
215 215 # be better.
216 216 better_fn = frame.f_globals.get('__file__', None)
217 217 if isinstance(better_fn, str):
218 218 # Check the type just in case someone did something weird with
219 219 # __file__. It might also be None if the error occurred during
220 220 # import.
221 221 filename = better_fn
222 222 fixed_records.append((frame, filename, line_no, func_name, lines, index))
223 223 return fixed_records
224 224
225 225
226 226 def _fixed_getinnerframes(etb, context=1,tb_offset=0):
227 227 import linecache
228 228 LNUM_POS, LINES_POS, INDEX_POS = 2, 4, 5
229 229
230 230 records = fix_frame_records_filenames(inspect.getinnerframes(etb, context))
231 231
232 232 # If the error is at the console, don't build any context, since it would
233 233 # otherwise produce 5 blank lines printed out (there is no file at the
234 234 # console)
235 235 rec_check = records[tb_offset:]
236 236 try:
237 237 rname = rec_check[0][1]
238 238 if rname == '<ipython console>' or rname.endswith('<string>'):
239 239 return rec_check
240 240 except IndexError:
241 241 pass
242 242
243 243 aux = traceback.extract_tb(etb)
244 244 assert len(records) == len(aux)
245 245 for i, (file, lnum, _, _) in zip(range(len(records)), aux):
246 246 maybeStart = lnum-1 - context//2
247 247 start = max(maybeStart, 0)
248 248 end = start + context
249 249 lines = linecache.getlines(file)[start:end]
250 250 # pad with empty lines if necessary
251 251 if maybeStart < 0:
252 252 lines = (['\n'] * -maybeStart) + lines
253 253 if len(lines) < context:
254 254 lines += ['\n'] * (context - len(lines))
255 255 buf = list(records[i])
256 256 buf[LNUM_POS] = lnum
257 257 buf[INDEX_POS] = lnum - 1 - start
258 258 buf[LINES_POS] = lines
259 259 records[i] = tuple(buf)
260 260 return records[tb_offset:]
261 261
262 262 # Helper function -- largely belongs to VerboseTB, but we need the same
263 263 # functionality to produce a pseudo verbose TB for SyntaxErrors, so that they
264 264 # can be recognized properly by ipython.el's py-traceback-line-re
265 265 # (SyntaxErrors have to be treated specially because they have no traceback)
266 266
267 267 _parser = PyColorize.Parser()
268 268
269 269 def _formatTracebackLines(lnum, index, lines, Colors, lvals=None,scheme=None):
270 270 numbers_width = INDENT_SIZE - 1
271 271 res = []
272 272 i = lnum - index
273 273
274 274 # This lets us get fully syntax-highlighted tracebacks.
275 275 if scheme is None:
276 276 try:
277 277 scheme = __IPYTHON__.rc.colors
278 278 except:
279 279 scheme = DEFAULT_SCHEME
280 280 _line_format = _parser.format2
281 281
282 282 for line in lines:
283 283 new_line, err = _line_format(line,'str',scheme)
284 284 if not err: line = new_line
285 285
286 286 if i == lnum:
287 287 # This is the line with the error
288 288 pad = numbers_width - len(str(i))
289 289 if pad >= 3:
290 290 marker = '-'*(pad-3) + '-> '
291 291 elif pad == 2:
292 292 marker = '> '
293 293 elif pad == 1:
294 294 marker = '>'
295 295 else:
296 296 marker = ''
297 297 num = marker + str(i)
298 298 line = '%s%s%s %s%s' %(Colors.linenoEm, num,
299 299 Colors.line, line, Colors.Normal)
300 300 else:
301 301 num = '%*s' % (numbers_width,i)
302 302 line = '%s%s%s %s' %(Colors.lineno, num,
303 303 Colors.Normal, line)
304 304
305 305 res.append(line)
306 306 if lvals and i == lnum:
307 307 res.append(lvals + '\n')
308 308 i = i + 1
309 309 return res
310 310
311 311
312 312 #---------------------------------------------------------------------------
313 313 # Module classes
314 314 class TBTools:
315 315 """Basic tools used by all traceback printer classes."""
316 316
317 317 def __init__(self,color_scheme = 'NoColor',call_pdb=False):
318 318 # Whether to call the interactive pdb debugger after printing
319 319 # tracebacks or not
320 320 self.call_pdb = call_pdb
321 321
322 322 # Create color table
323 323 self.color_scheme_table = ExceptionColors
324 324
325 325 self.set_colors(color_scheme)
326 326 self.old_scheme = color_scheme # save initial value for toggles
327 327
328 328 if call_pdb:
329 329 self.pdb = Debugger.Pdb(self.color_scheme_table.active_scheme_name)
330 330 else:
331 331 self.pdb = None
332 332
333 333 def set_colors(self,*args,**kw):
334 334 """Shorthand access to the color table scheme selector method."""
335 335
336 336 # Set own color table
337 337 self.color_scheme_table.set_active_scheme(*args,**kw)
338 338 # for convenience, set Colors to the active scheme
339 339 self.Colors = self.color_scheme_table.active_colors
340 340 # Also set colors of debugger
341 341 if hasattr(self,'pdb') and self.pdb is not None:
342 342 self.pdb.set_colors(*args,**kw)
343 343
344 344 def color_toggle(self):
345 345 """Toggle between the currently active color scheme and NoColor."""
346 346
347 347 if self.color_scheme_table.active_scheme_name == 'NoColor':
348 348 self.color_scheme_table.set_active_scheme(self.old_scheme)
349 349 self.Colors = self.color_scheme_table.active_colors
350 350 else:
351 351 self.old_scheme = self.color_scheme_table.active_scheme_name
352 352 self.color_scheme_table.set_active_scheme('NoColor')
353 353 self.Colors = self.color_scheme_table.active_colors
354 354
355 355 #---------------------------------------------------------------------------
356 356 class ListTB(TBTools):
357 357 """Print traceback information from a traceback list, with optional color.
358 358
359 359 Calling: requires 3 arguments:
360 360 (etype, evalue, elist)
361 361 as would be obtained by:
362 362 etype, evalue, tb = sys.exc_info()
363 363 if tb:
364 364 elist = traceback.extract_tb(tb)
365 365 else:
366 366 elist = None
367 367
368 368 It can thus be used by programs which need to process the traceback before
369 369 printing (such as console replacements based on the code module from the
370 370 standard library).
371 371
372 372 Because they are meant to be called without a full traceback (only a
373 373 list), instances of this class can't call the interactive pdb debugger."""
374 374
375 375 def __init__(self,color_scheme = 'NoColor'):
376 376 TBTools.__init__(self,color_scheme = color_scheme,call_pdb=0)
377 377
378 378 def __call__(self, etype, value, elist):
379 379 Term.cout.flush()
380 Term.cerr.flush()
381 380 print >> Term.cerr, self.text(etype,value,elist)
381 Term.cerr.flush()
382 382
383 383 def text(self,etype, value, elist,context=5):
384 384 """Return a color formatted string with the traceback info."""
385 385
386 386 Colors = self.Colors
387 387 out_string = ['%s%s%s\n' % (Colors.topline,'-'*60,Colors.Normal)]
388 388 if elist:
389 389 out_string.append('Traceback %s(most recent call last)%s:' % \
390 390 (Colors.normalEm, Colors.Normal) + '\n')
391 391 out_string.extend(self._format_list(elist))
392 392 lines = self._format_exception_only(etype, value)
393 393 for line in lines[:-1]:
394 394 out_string.append(" "+line)
395 395 out_string.append(lines[-1])
396 396 return ''.join(out_string)
397 397
398 398 def _format_list(self, extracted_list):
399 399 """Format a list of traceback entry tuples for printing.
400 400
401 401 Given a list of tuples as returned by extract_tb() or
402 402 extract_stack(), return a list of strings ready for printing.
403 403 Each string in the resulting list corresponds to the item with the
404 404 same index in the argument list. Each string ends in a newline;
405 405 the strings may contain internal newlines as well, for those items
406 406 whose source text line is not None.
407 407
408 408 Lifted almost verbatim from traceback.py
409 409 """
410 410
411 411 Colors = self.Colors
412 412 list = []
413 413 for filename, lineno, name, line in extracted_list[:-1]:
414 414 item = ' File %s"%s"%s, line %s%d%s, in %s%s%s\n' % \
415 415 (Colors.filename, filename, Colors.Normal,
416 416 Colors.lineno, lineno, Colors.Normal,
417 417 Colors.name, name, Colors.Normal)
418 418 if line:
419 419 item = item + ' %s\n' % line.strip()
420 420 list.append(item)
421 421 # Emphasize the last entry
422 422 filename, lineno, name, line = extracted_list[-1]
423 423 item = '%s File %s"%s"%s, line %s%d%s, in %s%s%s%s\n' % \
424 424 (Colors.normalEm,
425 425 Colors.filenameEm, filename, Colors.normalEm,
426 426 Colors.linenoEm, lineno, Colors.normalEm,
427 427 Colors.nameEm, name, Colors.normalEm,
428 428 Colors.Normal)
429 429 if line:
430 430 item = item + '%s %s%s\n' % (Colors.line, line.strip(),
431 431 Colors.Normal)
432 432 list.append(item)
433 433 return list
434 434
435 435 def _format_exception_only(self, etype, value):
436 436 """Format the exception part of a traceback.
437 437
438 438 The arguments are the exception type and value such as given by
439 439 sys.exc_info()[:2]. The return value is a list of strings, each ending
440 440 in a newline. Normally, the list contains a single string; however,
441 441 for SyntaxError exceptions, it contains several lines that (when
442 442 printed) display detailed information about where the syntax error
443 443 occurred. The message indicating which exception occurred is the
444 444 always last string in the list.
445 445
446 446 Also lifted nearly verbatim from traceback.py
447 447 """
448 448
449 449 Colors = self.Colors
450 450 list = []
451 451 try:
452 452 stype = Colors.excName + etype.__name__ + Colors.Normal
453 453 except AttributeError:
454 454 stype = etype # String exceptions don't get special coloring
455 455 if value is None:
456 456 list.append( str(stype) + '\n')
457 457 else:
458 458 if etype is SyntaxError:
459 459 try:
460 460 msg, (filename, lineno, offset, line) = value
461 461 except:
462 462 pass
463 463 else:
464 464 #print 'filename is',filename # dbg
465 465 if not filename: filename = "<string>"
466 466 list.append('%s File %s"%s"%s, line %s%d%s\n' % \
467 467 (Colors.normalEm,
468 468 Colors.filenameEm, filename, Colors.normalEm,
469 469 Colors.linenoEm, lineno, Colors.Normal ))
470 470 if line is not None:
471 471 i = 0
472 472 while i < len(line) and line[i].isspace():
473 473 i = i+1
474 474 list.append('%s %s%s\n' % (Colors.line,
475 475 line.strip(),
476 476 Colors.Normal))
477 477 if offset is not None:
478 478 s = ' '
479 479 for c in line[i:offset-1]:
480 480 if c.isspace():
481 481 s = s + c
482 482 else:
483 483 s = s + ' '
484 484 list.append('%s%s^%s\n' % (Colors.caret, s,
485 485 Colors.Normal) )
486 486 value = msg
487 487 s = self._some_str(value)
488 488 if s:
489 489 list.append('%s%s:%s %s\n' % (str(stype), Colors.excName,
490 490 Colors.Normal, s))
491 491 else:
492 492 list.append('%s\n' % str(stype))
493 493 return list
494 494
495 495 def _some_str(self, value):
496 496 # Lifted from traceback.py
497 497 try:
498 498 return str(value)
499 499 except:
500 500 return '<unprintable %s object>' % type(value).__name__
501 501
502 502 #----------------------------------------------------------------------------
503 503 class VerboseTB(TBTools):
504 504 """A port of Ka-Ping Yee's cgitb.py module that outputs color text instead
505 505 of HTML. Requires inspect and pydoc. Crazy, man.
506 506
507 507 Modified version which optionally strips the topmost entries from the
508 508 traceback, to be used with alternate interpreters (because their own code
509 509 would appear in the traceback)."""
510 510
511 511 def __init__(self,color_scheme = 'Linux',tb_offset=0,long_header=0,
512 512 call_pdb = 0, include_vars=1):
513 513 """Specify traceback offset, headers and color scheme.
514 514
515 515 Define how many frames to drop from the tracebacks. Calling it with
516 516 tb_offset=1 allows use of this handler in interpreters which will have
517 517 their own code at the top of the traceback (VerboseTB will first
518 518 remove that frame before printing the traceback info)."""
519 519 TBTools.__init__(self,color_scheme=color_scheme,call_pdb=call_pdb)
520 520 self.tb_offset = tb_offset
521 521 self.long_header = long_header
522 522 self.include_vars = include_vars
523 523
524 524 def text(self, etype, evalue, etb, context=5):
525 525 """Return a nice text document describing the traceback."""
526 526
527 527 # some locals
528 528 try:
529 529 etype = etype.__name__
530 530 except AttributeError:
531 531 pass
532 532 Colors = self.Colors # just a shorthand + quicker name lookup
533 533 ColorsNormal = Colors.Normal # used a lot
534 534 col_scheme = self.color_scheme_table.active_scheme_name
535 535 indent = ' '*INDENT_SIZE
536 536 em_normal = '%s\n%s%s' % (Colors.valEm, indent,ColorsNormal)
537 537 undefined = '%sundefined%s' % (Colors.em, ColorsNormal)
538 538 exc = '%s%s%s' % (Colors.excName,etype,ColorsNormal)
539 539
540 540 # some internal-use functions
541 541 def text_repr(value):
542 542 """Hopefully pretty robust repr equivalent."""
543 543 # this is pretty horrible but should always return *something*
544 544 try:
545 545 return pydoc.text.repr(value)
546 546 except KeyboardInterrupt:
547 547 raise
548 548 except:
549 549 try:
550 550 return repr(value)
551 551 except KeyboardInterrupt:
552 552 raise
553 553 except:
554 554 try:
555 555 # all still in an except block so we catch
556 556 # getattr raising
557 557 name = getattr(value, '__name__', None)
558 558 if name:
559 559 # ick, recursion
560 560 return text_repr(name)
561 561 klass = getattr(value, '__class__', None)
562 562 if klass:
563 563 return '%s instance' % text_repr(klass)
564 564 except KeyboardInterrupt:
565 565 raise
566 566 except:
567 567 return 'UNRECOVERABLE REPR FAILURE'
568 568 def eqrepr(value, repr=text_repr): return '=%s' % repr(value)
569 569 def nullrepr(value, repr=text_repr): return ''
570 570
571 571 # meat of the code begins
572 572 try:
573 573 etype = etype.__name__
574 574 except AttributeError:
575 575 pass
576 576
577 577 if self.long_header:
578 578 # Header with the exception type, python version, and date
579 579 pyver = 'Python ' + string.split(sys.version)[0] + ': ' + sys.executable
580 580 date = time.ctime(time.time())
581 581
582 582 head = '%s%s%s\n%s%s%s\n%s' % (Colors.topline, '-'*75, ColorsNormal,
583 583 exc, ' '*(75-len(str(etype))-len(pyver)),
584 584 pyver, string.rjust(date, 75) )
585 585 head += "\nA problem occured executing Python code. Here is the sequence of function"\
586 586 "\ncalls leading up to the error, with the most recent (innermost) call last."
587 587 else:
588 588 # Simplified header
589 589 head = '%s%s%s\n%s%s' % (Colors.topline, '-'*75, ColorsNormal,exc,
590 590 string.rjust('Traceback (most recent call last)',
591 591 75 - len(str(etype)) ) )
592 592 frames = []
593 593 # Flush cache before calling inspect. This helps alleviate some of the
594 594 # problems with python 2.3's inspect.py.
595 595 linecache.checkcache()
596 596 # Drop topmost frames if requested
597 597 try:
598 598 # Try the default getinnerframes and Alex's: Alex's fixes some
599 599 # problems, but it generates empty tracebacks for console errors
600 600 # (5 blanks lines) where none should be returned.
601 601 #records = inspect.getinnerframes(etb, context)[self.tb_offset:]
602 602 #print 'python records:', records # dbg
603 603 records = _fixed_getinnerframes(etb, context,self.tb_offset)
604 604 #print 'alex records:', records # dbg
605 605 except:
606 606
607 607 # FIXME: I've been getting many crash reports from python 2.3
608 608 # users, traceable to inspect.py. If I can find a small test-case
609 609 # to reproduce this, I should either write a better workaround or
610 610 # file a bug report against inspect (if that's the real problem).
611 611 # So far, I haven't been able to find an isolated example to
612 612 # reproduce the problem.
613 613 inspect_error()
614 614 traceback.print_exc(file=Term.cerr)
615 615 info('\nUnfortunately, your original traceback can not be constructed.\n')
616 616 return ''
617 617
618 618 # build some color string templates outside these nested loops
619 619 tpl_link = '%s%%s%s' % (Colors.filenameEm,ColorsNormal)
620 620 tpl_call = 'in %s%%s%s%%s%s' % (Colors.vName, Colors.valEm,
621 621 ColorsNormal)
622 622 tpl_call_fail = 'in %s%%s%s(***failed resolving arguments***)%s' % \
623 623 (Colors.vName, Colors.valEm, ColorsNormal)
624 624 tpl_local_var = '%s%%s%s' % (Colors.vName, ColorsNormal)
625 625 tpl_global_var = '%sglobal%s %s%%s%s' % (Colors.em, ColorsNormal,
626 626 Colors.vName, ColorsNormal)
627 627 tpl_name_val = '%%s %s= %%s%s' % (Colors.valEm, ColorsNormal)
628 628 tpl_line = '%s%%s%s %%s' % (Colors.lineno, ColorsNormal)
629 629 tpl_line_em = '%s%%s%s %%s%s' % (Colors.linenoEm,Colors.line,
630 630 ColorsNormal)
631 631
632 632 # now, loop over all records printing context and info
633 633 abspath = os.path.abspath
634 634 for frame, file, lnum, func, lines, index in records:
635 635 #print '*** record:',file,lnum,func,lines,index # dbg
636 636 try:
637 637 file = file and abspath(file) or '?'
638 638 except OSError:
639 639 # if file is '<console>' or something not in the filesystem,
640 640 # the abspath call will throw an OSError. Just ignore it and
641 641 # keep the original file string.
642 642 pass
643 643 link = tpl_link % file
644 644 try:
645 645 args, varargs, varkw, locals = inspect.getargvalues(frame)
646 646 except:
647 647 # This can happen due to a bug in python2.3. We should be
648 648 # able to remove this try/except when 2.4 becomes a
649 649 # requirement. Bug details at http://python.org/sf/1005466
650 650 inspect_error()
651 651 traceback.print_exc(file=Term.cerr)
652 652 info("\nIPython's exception reporting continues...\n")
653 653
654 654 if func == '?':
655 655 call = ''
656 656 else:
657 657 # Decide whether to include variable details or not
658 658 var_repr = self.include_vars and eqrepr or nullrepr
659 659 try:
660 660 call = tpl_call % (func,inspect.formatargvalues(args,
661 661 varargs, varkw,
662 662 locals,formatvalue=var_repr))
663 663 except KeyError:
664 664 # Very odd crash from inspect.formatargvalues(). The
665 665 # scenario under which it appeared was a call to
666 666 # view(array,scale) in NumTut.view.view(), where scale had
667 667 # been defined as a scalar (it should be a tuple). Somehow
668 668 # inspect messes up resolving the argument list of view()
669 669 # and barfs out. At some point I should dig into this one
670 670 # and file a bug report about it.
671 671 inspect_error()
672 672 traceback.print_exc(file=Term.cerr)
673 673 info("\nIPython's exception reporting continues...\n")
674 674 call = tpl_call_fail % func
675 675
676 676 # Initialize a list of names on the current line, which the
677 677 # tokenizer below will populate.
678 678 names = []
679 679
680 680 def tokeneater(token_type, token, start, end, line):
681 681 """Stateful tokeneater which builds dotted names.
682 682
683 683 The list of names it appends to (from the enclosing scope) can
684 684 contain repeated composite names. This is unavoidable, since
685 685 there is no way to disambguate partial dotted structures until
686 686 the full list is known. The caller is responsible for pruning
687 687 the final list of duplicates before using it."""
688 688
689 689 # build composite names
690 690 if token == '.':
691 691 try:
692 692 names[-1] += '.'
693 693 # store state so the next token is added for x.y.z names
694 694 tokeneater.name_cont = True
695 695 return
696 696 except IndexError:
697 697 pass
698 698 if token_type == tokenize.NAME and token not in keyword.kwlist:
699 699 if tokeneater.name_cont:
700 700 # Dotted names
701 701 names[-1] += token
702 702 tokeneater.name_cont = False
703 703 else:
704 704 # Regular new names. We append everything, the caller
705 705 # will be responsible for pruning the list later. It's
706 706 # very tricky to try to prune as we go, b/c composite
707 707 # names can fool us. The pruning at the end is easy
708 708 # to do (or the caller can print a list with repeated
709 709 # names if so desired.
710 710 names.append(token)
711 711 elif token_type == tokenize.NEWLINE:
712 712 raise IndexError
713 713 # we need to store a bit of state in the tokenizer to build
714 714 # dotted names
715 715 tokeneater.name_cont = False
716 716
717 717 def linereader(file=file, lnum=[lnum], getline=linecache.getline):
718 718 line = getline(file, lnum[0])
719 719 lnum[0] += 1
720 720 return line
721 721
722 722 # Build the list of names on this line of code where the exception
723 723 # occurred.
724 724 try:
725 725 # This builds the names list in-place by capturing it from the
726 726 # enclosing scope.
727 727 tokenize.tokenize(linereader, tokeneater)
728 728 except IndexError:
729 729 # signals exit of tokenizer
730 730 pass
731 731 except tokenize.TokenError,msg:
732 732 _m = ("An unexpected error occurred while tokenizing input\n"
733 733 "The following traceback may be corrupted or invalid\n"
734 734 "The error message is: %s\n" % msg)
735 735 error(_m)
736 736
737 737 # prune names list of duplicates, but keep the right order
738 738 unique_names = uniq_stable(names)
739 739
740 740 # Start loop over vars
741 741 lvals = []
742 742 if self.include_vars:
743 743 for name_full in unique_names:
744 744 name_base = name_full.split('.',1)[0]
745 745 if name_base in frame.f_code.co_varnames:
746 746 if locals.has_key(name_base):
747 747 try:
748 748 value = repr(eval(name_full,locals))
749 749 except:
750 750 value = undefined
751 751 else:
752 752 value = undefined
753 753 name = tpl_local_var % name_full
754 754 else:
755 755 if frame.f_globals.has_key(name_base):
756 756 try:
757 757 value = repr(eval(name_full,frame.f_globals))
758 758 except:
759 759 value = undefined
760 760 else:
761 761 value = undefined
762 762 name = tpl_global_var % name_full
763 763 lvals.append(tpl_name_val % (name,value))
764 764 if lvals:
765 765 lvals = '%s%s' % (indent,em_normal.join(lvals))
766 766 else:
767 767 lvals = ''
768 768
769 769 level = '%s %s\n' % (link,call)
770 770
771 771 if index is None:
772 772 frames.append(level)
773 773 else:
774 774 frames.append('%s%s' % (level,''.join(
775 775 _formatTracebackLines(lnum,index,lines,Colors,lvals,
776 776 col_scheme))))
777 777
778 778 # Get (safely) a string form of the exception info
779 779 try:
780 780 etype_str,evalue_str = map(str,(etype,evalue))
781 781 except:
782 782 # User exception is improperly defined.
783 783 etype,evalue = str,sys.exc_info()[:2]
784 784 etype_str,evalue_str = map(str,(etype,evalue))
785 785 # ... and format it
786 786 exception = ['%s%s%s: %s' % (Colors.excName, etype_str,
787 787 ColorsNormal, evalue_str)]
788 788 if type(evalue) is types.InstanceType:
789 789 try:
790 790 names = [w for w in dir(evalue) if isinstance(w, basestring)]
791 791 except:
792 792 # Every now and then, an object with funny inernals blows up
793 793 # when dir() is called on it. We do the best we can to report
794 794 # the problem and continue
795 795 _m = '%sException reporting error (object with broken dir())%s:'
796 796 exception.append(_m % (Colors.excName,ColorsNormal))
797 797 etype_str,evalue_str = map(str,sys.exc_info()[:2])
798 798 exception.append('%s%s%s: %s' % (Colors.excName,etype_str,
799 799 ColorsNormal, evalue_str))
800 800 names = []
801 801 for name in names:
802 802 value = text_repr(getattr(evalue, name))
803 803 exception.append('\n%s%s = %s' % (indent, name, value))
804 804 # return all our info assembled as a single string
805 805 return '%s\n\n%s\n%s' % (head,'\n'.join(frames),''.join(exception[0]) )
806 806
807 807 def debugger(self,force=False):
808 808 """Call up the pdb debugger if desired, always clean up the tb
809 809 reference.
810 810
811 811 Keywords:
812 812
813 813 - force(False): by default, this routine checks the instance call_pdb
814 814 flag and does not actually invoke the debugger if the flag is false.
815 815 The 'force' option forces the debugger to activate even if the flag
816 816 is false.
817 817
818 818 If the call_pdb flag is set, the pdb interactive debugger is
819 819 invoked. In all cases, the self.tb reference to the current traceback
820 820 is deleted to prevent lingering references which hamper memory
821 821 management.
822 822
823 823 Note that each call to pdb() does an 'import readline', so if your app
824 824 requires a special setup for the readline completers, you'll have to
825 825 fix that by hand after invoking the exception handler."""
826 826
827 827 if force or self.call_pdb:
828 828 if self.pdb is None:
829 829 self.pdb = Debugger.Pdb(
830 830 self.color_scheme_table.active_scheme_name)
831 831 # the system displayhook may have changed, restore the original
832 832 # for pdb
833 833 dhook = sys.displayhook
834 834 sys.displayhook = sys.__displayhook__
835 835 self.pdb.reset()
836 836 # Find the right frame so we don't pop up inside ipython itself
837 837 if hasattr(self,'tb'):
838 838 etb = self.tb
839 839 else:
840 840 etb = self.tb = sys.last_traceback
841 841 while self.tb.tb_next is not None:
842 842 self.tb = self.tb.tb_next
843 843 try:
844 844 if etb and etb.tb_next:
845 845 etb = etb.tb_next
846 846 self.pdb.botframe = etb.tb_frame
847 847 self.pdb.interaction(self.tb.tb_frame, self.tb)
848 848 finally:
849 849 sys.displayhook = dhook
850 850
851 851 if hasattr(self,'tb'):
852 852 del self.tb
853 853
854 854 def handler(self, info=None):
855 855 (etype, evalue, etb) = info or sys.exc_info()
856 856 self.tb = etb
857 857 Term.cout.flush()
858 Term.cerr.flush()
859 858 print >> Term.cerr, self.text(etype, evalue, etb)
859 Term.cerr.flush()
860 860
861 861 # Changed so an instance can just be called as VerboseTB_inst() and print
862 862 # out the right info on its own.
863 863 def __call__(self, etype=None, evalue=None, etb=None):
864 864 """This hook can replace sys.excepthook (for Python 2.1 or higher)."""
865 865 if etb is None:
866 866 self.handler()
867 867 else:
868 868 self.handler((etype, evalue, etb))
869 869 try:
870 870 self.debugger()
871 871 except KeyboardInterrupt:
872 872 print "\nKeyboardInterrupt"
873 873
874 874 #----------------------------------------------------------------------------
875 875 class FormattedTB(VerboseTB,ListTB):
876 876 """Subclass ListTB but allow calling with a traceback.
877 877
878 878 It can thus be used as a sys.excepthook for Python > 2.1.
879 879
880 880 Also adds 'Context' and 'Verbose' modes, not available in ListTB.
881 881
882 882 Allows a tb_offset to be specified. This is useful for situations where
883 883 one needs to remove a number of topmost frames from the traceback (such as
884 884 occurs with python programs that themselves execute other python code,
885 885 like Python shells). """
886 886
887 887 def __init__(self, mode = 'Plain', color_scheme='Linux',
888 888 tb_offset = 0,long_header=0,call_pdb=0,include_vars=0):
889 889
890 890 # NEVER change the order of this list. Put new modes at the end:
891 891 self.valid_modes = ['Plain','Context','Verbose']
892 892 self.verbose_modes = self.valid_modes[1:3]
893 893
894 894 VerboseTB.__init__(self,color_scheme,tb_offset,long_header,
895 895 call_pdb=call_pdb,include_vars=include_vars)
896 896 self.set_mode(mode)
897 897
898 898 def _extract_tb(self,tb):
899 899 if tb:
900 900 return traceback.extract_tb(tb)
901 901 else:
902 902 return None
903 903
904 904 def text(self, etype, value, tb,context=5,mode=None):
905 905 """Return formatted traceback.
906 906
907 907 If the optional mode parameter is given, it overrides the current
908 908 mode."""
909 909
910 910 if mode is None:
911 911 mode = self.mode
912 912 if mode in self.verbose_modes:
913 913 # verbose modes need a full traceback
914 914 return VerboseTB.text(self,etype, value, tb,context=5)
915 915 else:
916 916 # We must check the source cache because otherwise we can print
917 917 # out-of-date source code.
918 918 linecache.checkcache()
919 919 # Now we can extract and format the exception
920 920 elist = self._extract_tb(tb)
921 921 if len(elist) > self.tb_offset:
922 922 del elist[:self.tb_offset]
923 923 return ListTB.text(self,etype,value,elist)
924 924
925 925 def set_mode(self,mode=None):
926 926 """Switch to the desired mode.
927 927
928 928 If mode is not specified, cycles through the available modes."""
929 929
930 930 if not mode:
931 931 new_idx = ( self.valid_modes.index(self.mode) + 1 ) % \
932 932 len(self.valid_modes)
933 933 self.mode = self.valid_modes[new_idx]
934 934 elif mode not in self.valid_modes:
935 935 raise ValueError, 'Unrecognized mode in FormattedTB: <'+mode+'>\n'\
936 936 'Valid modes: '+str(self.valid_modes)
937 937 else:
938 938 self.mode = mode
939 939 # include variable details only in 'Verbose' mode
940 940 self.include_vars = (self.mode == self.valid_modes[2])
941 941
942 942 # some convenient shorcuts
943 943 def plain(self):
944 944 self.set_mode(self.valid_modes[0])
945 945
946 946 def context(self):
947 947 self.set_mode(self.valid_modes[1])
948 948
949 949 def verbose(self):
950 950 self.set_mode(self.valid_modes[2])
951 951
952 952 #----------------------------------------------------------------------------
953 953 class AutoFormattedTB(FormattedTB):
954 954 """A traceback printer which can be called on the fly.
955 955
956 956 It will find out about exceptions by itself.
957 957
958 958 A brief example:
959 959
960 960 AutoTB = AutoFormattedTB(mode = 'Verbose',color_scheme='Linux')
961 961 try:
962 962 ...
963 963 except:
964 964 AutoTB() # or AutoTB(out=logfile) where logfile is an open file object
965 965 """
966 966 def __call__(self,etype=None,evalue=None,etb=None,
967 967 out=None,tb_offset=None):
968 968 """Print out a formatted exception traceback.
969 969
970 970 Optional arguments:
971 971 - out: an open file-like object to direct output to.
972 972
973 973 - tb_offset: the number of frames to skip over in the stack, on a
974 974 per-call basis (this overrides temporarily the instance's tb_offset
975 975 given at initialization time. """
976 976
977 977 if out is None:
978 978 out = Term.cerr
979 979 Term.cout.flush()
980 out.flush()
981 980 if tb_offset is not None:
982 981 tb_offset, self.tb_offset = self.tb_offset, tb_offset
983 982 print >> out, self.text(etype, evalue, etb)
984 983 self.tb_offset = tb_offset
985 984 else:
986 985 print >> out, self.text(etype, evalue, etb)
986 out.flush()
987 987 try:
988 988 self.debugger()
989 989 except KeyboardInterrupt:
990 990 print "\nKeyboardInterrupt"
991 991
992 992 def text(self,etype=None,value=None,tb=None,context=5,mode=None):
993 993 if etype is None:
994 994 etype,value,tb = sys.exc_info()
995 995 self.tb = tb
996 996 return FormattedTB.text(self,etype,value,tb,context=5,mode=mode)
997 997
998 998 #---------------------------------------------------------------------------
999 999 # A simple class to preserve Nathan's original functionality.
1000 1000 class ColorTB(FormattedTB):
1001 1001 """Shorthand to initialize a FormattedTB in Linux colors mode."""
1002 1002 def __init__(self,color_scheme='Linux',call_pdb=0):
1003 1003 FormattedTB.__init__(self,color_scheme=color_scheme,
1004 1004 call_pdb=call_pdb)
1005 1005
1006 1006 #----------------------------------------------------------------------------
1007 1007 # module testing (minimal)
1008 1008 if __name__ == "__main__":
1009 1009 def spam(c, (d, e)):
1010 1010 x = c + d
1011 1011 y = c * d
1012 1012 foo(x, y)
1013 1013
1014 1014 def foo(a, b, bar=1):
1015 1015 eggs(a, b + bar)
1016 1016
1017 1017 def eggs(f, g, z=globals()):
1018 1018 h = f + g
1019 1019 i = f - g
1020 1020 return h / i
1021 1021
1022 1022 print ''
1023 1023 print '*** Before ***'
1024 1024 try:
1025 1025 print spam(1, (2, 3))
1026 1026 except:
1027 1027 traceback.print_exc()
1028 1028 print ''
1029 1029
1030 1030 handler = ColorTB()
1031 1031 print '*** ColorTB ***'
1032 1032 try:
1033 1033 print spam(1, (2, 3))
1034 1034 except:
1035 1035 apply(handler, sys.exc_info() )
1036 1036 print ''
1037 1037
1038 1038 handler = VerboseTB()
1039 1039 print '*** VerboseTB ***'
1040 1040 try:
1041 1041 print spam(1, (2, 3))
1042 1042 except:
1043 1043 apply(handler, sys.exc_info() )
1044 1044 print ''
1045 1045
@@ -1,36 +1,31 b''
1 1 include README_Windows.txt
2 2 include win32_manual_post_install.py
3 3 include ipython.py
4 4
5 5 graft scripts
6 6
7 7 graft setupext
8 8
9 9 graft IPython/UserConfig
10 10
11 11 graft doc
12 exclude doc/\#*
12 13 exclude doc/*.1
13 exclude doc/manual_base*
14 14 exclude doc/ChangeLog.*
15 exclude doc/\#*
16 exclude doc/update_magic.sh
17 15 exclude doc/update_version.sh
18 exclude doc/manual_base*
19 exclude doc/manual/WARNINGS
20 exclude doc/manual/*.aux
21 exclude doc/manual/*.log
22 exclude doc/manual/*.out
23 exclude doc/manual/*.pl
24 exclude doc/manual/*.tex
16
17 # There seems to be no way of excluding whole subdirectories, other than
18 # manually excluding all their subdirs. distutils really is horrible...
19 exclude doc/attic/*
25 20 exclude doc/build/doctrees/*
26 exclude doc/build/latex/*
27 21 exclude doc/build/html/_sources/*
28
29
30
22 exclude doc/build/html/_static/*
23 exclude doc/build/html/*
24 exclude doc/build/latex/*
31 25
32 26 global-exclude *~
33 27 global-exclude *.flc
34 28 global-exclude *.pyc
35 29 global-exclude .dircopy.log
36 30 global-exclude .svn
31 global-exclude .bzr
@@ -1,7611 +1,7628 b''
1 2008-05-28 *** Released version 0.8.3
2
3 2008-05-28 Fernando Perez <Fernando.Perez@berkeley.edu>
4
5 * ../win32_manual_post_install.py (run): Fix the windows installer
6 so the links to the docs are correct.
7
8 * IPython/ultraTB.py: flush stderr after writing to it to fix
9 problems with exception traceback ordering in some platforms.
10 Thanks to a report/fix by Jie Tang <jietang86-AT-gmail.com>.
11
12 * IPython/Magic.py (magic_cpaste): add stripping of continuation
13 prompts, feature requested by Stefan vdW.
14
15 * ../setup.py: updates to build and release tools in preparation
16 for 0.8.3 release.
17
1 18 2008-05-27 Ville Vainio <vivainio@gmail.com>
2 19
3 20 * iplib.py, ipmaker.py: survive lack of doctest and site._Helper
4 21 for minimal environments (e.g. Maemo sdk python)
5 22
6 23 * Magic.py: cpaste strips whitespace before >>> (allow pasting
7 24 doctests)
8 25
9 26 * ipy_completers.py: cd completer now does recursive path expand
10 27 (old behaviour is buggy on some readline versions)
11 28
12 29 2008-05-14 Ville Vainio <vivainio@gmail.com>
13 30
14 31 * Extensions/ipy_greedycompleter.py:
15 32 New extension that enables a bit more "relaxed" tab
16 33 completer that evaluates code without safety checks
17 34 (i.e. there can be side effects like function calls)
18 35
19 36 2008-04-20 Ville Vainio <vivainio@gmail.com>
20 37
21 38 * Extensions/ipy_lookfor.py: add %lookfor magic command
22 39 (search docstrings for words) by Pauli Virtanen. Close #245.
23 40
24 41 * Extension/ipy_jot.py: %jot and %read magics, analogous
25 42 to %store but you can specify some notes. Not read
26 43 in automatically on startup, you need %read.
27 44 Contributed by Yichun Wei.
28 45
29 46 2008-04-18 Fernando Perez <Fernando.Perez@berkeley.edu>
30 47
31 48 * IPython/genutils.py (page): apply workaround to curses bug that
32 49 can leave terminal corrupted after a call to initscr().
33 50
34 51 2008-04-15 Ville Vainio <vivainio@gmail.com>
35 52
36 53 * genutils.py: SList.grep supports 'field' argument
37 54
38 55 * ipy_completers.py: module completer looks inside
39 56 .egg zip files (patch by mc). Close #196.
40 57
41 58 2008-04-09 Ville Vainio <vivainio@gmail.com>
42 59
43 60 * deep_reload.py: do not crash on from __future__ import
44 61 absolute_import. Close #244.
45 62
46 63 2008-04-02 Ville Vainio <vivainio@gmail.com>
47 64
48 65 * ipy_winpdb.py: New extension for winpdb integration. %wdb
49 66 test.py is winpdb equivalent of %run -d test.py. winpdb is a
50 67 crossplatform remote GUI debugger based on wxpython.
51 68
52 69 2008-03-29 Ville Vainio <vivainio@gmail.com>
53 70
54 71 * ipython.rst, do_sphinx.py: New documentation base, based on
55 72 reStucturedText and Sphinx (html/pdf generation). The old Lyx
56 73 based documentation will not be updated anymore.
57 74
58 75 * jobctrl.py: Use shell in Popen for 'start' command (in windows).
59 76
60 77 2008-03-24 Ville Vainio <vivainio@gmail.com>
61 78
62 79 * ipython.rst, do_sphinx.py: New documentation base, based on
63 80 reStucturedText and Sphinx (html/pdf generation). The old Lyx
64 81 based documentation will not be updated anymore.
65 82
66 83 ipython.rst has up to date documentation on matters that were not
67 84 documented at all, and it also removes various
68 85 misdocumented/deprecated features.
69 86
70 87 2008-03-22 Ville Vainio <vivainio@gmail.com>
71 88
72 89 * Shell.py: Merge mtexp branch:
73 90 https://code.launchpad.net/~ipython/ipython/mtexp
74 91
75 92 Privides simpler and more robust MTInteractiveShell that won't
76 93 deadlock, even when the worker thread (GUI) stops doing runcode()
77 94 regularly. r71.
78 95
79 96 2008-03-20 Ville Vainio <vivainio@gmail.com>
80 97
81 98 * twshell.py: New shell that runs IPython code in Twisted reactor.
82 99 Launch by doing ipython -twisted. r67.
83 100
84 101 2008-03-19 Ville Vainio <vivainio@gmail.com>
85 102
86 103 * Magic.py: %rehashx works correctly when shadowed system commands
87 104 have upper case characters (e.g. Print.exe). r64.
88 105
89 106 * ipy_bzr.py, ipy_app_completers.py: new bzr completer that also
90 107 knows options to commands, based on bzrtools. Uses bzrlib
91 108 directly. r66.
92 109
93 110 2008-03-16 Ville Vainio <vivainio@gmail.com>
94 111
95 112 * make_tarball.py: Fixed for bzr.
96 113
97 114 * ipapi.py: Better _ip.runlines() script cleanup. r56,r79.
98 115
99 116 * ipy_vimserver.py, ipy.vim: New extension for vim server mode,
100 117 by Erich Heine.
101 118
102 119 2008-03-12 Ville Vainio <vivainio@gmail.com>
103 120
104 121 * ipmaker.py: Force (reload?) import of ipy_user_conf and
105 122 ipy_profile_foo, so that embedded instances can be relaunched and
106 123 configuration is still done. r50
107 124
108 125 * ipapi.py, test_embed.py: Allow specifying shell class in
109 126 launch_new_instance & make_new instance. Use this in
110 127 test_embed.py. r51.
111 128
112 129 test_embed.py is also a good and simple demo of embedding IPython.
113 130
114 131
115 132 2008-03-10 Ville Vainio <vivainio@gmail.com>
116 133
117 134 * tool/update_revnum.py: Change to bzr revisioning scheme in
118 135 revision numbers.
119 136
120 137 * Shell.py: Threading improvements:
121 138
122 139 In multithreaded shells, do not hang on macros and o.autoexec
123 140 commands (or anything executed with _ip.runlines()) anymore. Allow
124 141 recursive execution of IPython code in
125 142 MTInteractiveShell.runsource by checking if we are already in
126 143 worker thread, and execute code directly if we are. r48.
127 144
128 145 MTInteractiveShell.runsource: execute code directly if worker
129 146 thread is not running yet (this is the case in config files). r49.
130 147
131 148 2008-03-09 Ville Vainio <vivainio@gmail.com>
132 149
133 150 * ipy_profile_sh.py: You can now use $LA or LA() to refer to last
134 151 argument of previous command in sh profile. Similar to bash '!$'.
135 152 LA(3) or $LA(3) stands for last argument of input history command
136 153 3.
137 154
138 155 * Shell.py: -pylab names don't clutter %whos listing.
139 156
140 157 2008-03-07 Ville Vainio <vivainio@gmail.com>
141 158
142 159 * ipy_autoreload.py: new extension (by Pauli Virtanen) for
143 160 autoreloading modules; try %autoreload and %aimport. Close #154.
144 161 Uses the new pre_runcode_hook.
145 162
146 163 2008-02-24 Ville Vainio <vivainio@gmail.com>
147 164
148 165 * platutils_posix.py: freeze_term_title works
149 166
150 167 2008-02-21 Ville Vainio <vivainio@gmail.com>
151 168
152 169 * Magic.py: %quickref does not crash with empty docstring
153 170
154 171 2008-02-20 Ville Vainio <vivainio@gmail.com>
155 172
156 173 * completer.py: do not treat [](){} as protectable chars anymore,
157 174 close #233.
158 175
159 176 * completer.py: do not treat [](){} as protectable chars anymore
160 177
161 178 * magic.py, test_cpaste.py: Allow different prefix for pasting
162 179 from email
163 180
164 181 2008-02-17 Ville Vainio <vivainio@gmail.com>
165 182
166 183 * Switched over to Launchpad/bzr as primary VCS.
167 184
168 185 2008-02-14 Ville Vainio <vivainio@gmail.com>
169 186
170 187 * ipapi.py: _ip.runlines() is now much more liberal about
171 188 indentation - it cleans up the scripts it gets
172 189
173 190 2008-02-14 Ville Vainio <vivainio@gmail.com>
174 191
175 192 * Extensions/ipy_leo.py: created 'ILeo' IPython-Leo bridge.
176 193 Changes to it (later on) are too numerous to list in ChangeLog
177 194 until it stabilizes
178 195
179 196 2008-02-07 Darren Dale <darren.dale@cornell.edu>
180 197
181 198 * IPython/Shell.py: Call QtCore.pyqtRemoveInputHook() when creating
182 199 an IPShellQt4. PyQt4-4.2.1 and later uses PyOS_InputHook to improve
183 200 interaction in the interpreter (like Tkinter does), but it seems to
184 201 partially interfere with the IPython implementation and exec_()
185 202 still seems to block. So we disable the PyQt implementation and
186 203 stick with the IPython one for now.
187 204
188 205 2008-02-02 Walter Doerwald <walter@livinglogic.de>
189 206
190 207 * ipipe.py: A new ipipe table has been added: ialias produces all
191 208 entries from IPython's alias table.
192 209
193 210 2008-02-01 Fernando Perez <Fernando.Perez@colorado.edu>
194 211
195 212 * IPython/Shell.py (MTInteractiveShell.runcode): Improve handling
196 213 of KBINT in threaded shells. After code provided by Marc in #212.
197 214
198 215 2008-01-30 Fernando Perez <Fernando.Perez@colorado.edu>
199 216
200 217 * IPython/Shell.py (MTInteractiveShell.__init__): Fixed deadlock
201 218 that could occur due to a race condition in threaded shells.
202 219 Thanks to code provided by Marc, as #210.
203 220
204 221 2008-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
205 222
206 223 * IPython/Magic.py (magic_doctest_mode): respect the user's
207 224 settings for input separators rather than overriding them. After
208 225 a report by Jeff Kowalczyk <jtk-AT-yahoo.com>
209 226
210 227 * IPython/history.py (magic_history): Add support for declaring an
211 228 output file directly from the history command.
212 229
213 230 2008-01-21 Walter Doerwald <walter@livinglogic.de>
214 231
215 232 * ipipe.py: Register ipipe's displayhooks via the generic function
216 233 generics.result_display() instead of using ipapi.set_hook().
217 234
218 235 2008-01-19 Walter Doerwald <walter@livinglogic.de>
219 236
220 237 * ibrowse.py, igrid.py, ipipe.py:
221 238 The input object can now be passed to the constructor of the display classes.
222 239 This makes it possible to use them with objects that implement __or__.
223 240 Use this constructor in the displayhook instead of piping.
224 241
225 242 * ipipe.py: Importing astyle.py is done as late as possible to
226 243 avoid problems with circular imports.
227 244
228 245 2008-01-19 Ville Vainio <vivainio@gmail.com>
229 246
230 247 * hooks.py, iplib.py: Added 'shell_hook' to customize how
231 248 IPython calls shell.
232 249
233 250 * hooks.py, iplib.py: Added 'show_in_pager' hook to specify
234 251 how IPython pages text (%page, %pycat, %pdoc etc.)
235 252
236 253 * Extensions/jobctrl.py: Use shell_hook. New magics: '%tasks'
237 254 and '%kill' to kill hanging processes that won't obey ctrl+C.
238 255
239 256 2008-01-16 Ville Vainio <vivainio@gmail.com>
240 257
241 258 * ipy_completers.py: pyw extension support for %run completer.
242 259
243 260 2008-01-11 Ville Vainio <vivainio@gmail.com>
244 261
245 262 * iplib.py, ipmaker.py: new rc option - autoexec. It's a list
246 263 of ipython commands to be run when IPython has started up
247 264 (just before running the scripts and -c arg on command line).
248 265
249 266 * ipy_user_conf.py: Added an example on how to change term
250 267 colors in config file (through using autoexec).
251 268
252 269 * completer.py, test_completer.py: Ability to specify custom
253 270 get_endidx to replace readline.get_endidx. For emacs users.
254 271
255 272 2008-01-10 Ville Vainio <vivainio@gmail.com>
256 273
257 274 * Prompts.py (set_p_str): do not crash on illegal prompt strings
258 275
259 276 2008-01-08 Ville Vainio <vivainio@gmail.com>
260 277
261 278 * '%macro -r' (raw mode) is now default in sh profile.
262 279
263 280 2007-12-31 Ville Vainio <vivainio@gmail.com>
264 281
265 282 * completer.py: custom completer matching is now case sensitive
266 283 (#207).
267 284
268 285 * ultraTB.py, iplib.py: Add some KeyboardInterrupt catching in
269 286 an attempt to prevent occasional crashes.
270 287
271 288 * CrashHandler.py: Crash log dump now asks user to press enter
272 289 before exiting.
273 290
274 291 * Store _ip in user_ns instead of __builtin__, enabling safer
275 292 coexistence of multiple IPython instances in the same python
276 293 interpreter (#197).
277 294
278 295 * Debugger.py, ipmaker.py: Need to add '-pydb' command line
279 296 switch to enable pydb in post-mortem debugging and %run -d.
280 297
281 298 2007-12-28 Ville Vainio <vivainio@gmail.com>
282 299
283 300 * ipy_server.py: TCP socket server for "remote control" of an IPython
284 301 instance.
285 302
286 303 * Debugger.py: Change to PSF license
287 304
288 305 * simplegeneric.py: Add license & author notes.
289 306
290 307 * ipy_fsops.py: Added PathObj and FileObj, an object-oriented way
291 308 to navigate file system with a custom completer. Run
292 309 ipy_fsops.test_pathobj() to play with it.
293 310
294 311 2007-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
295 312
296 313 * IPython/dtutils.py: Add utilities for interactively running
297 314 doctests. Still needs work to more easily handle the namespace of
298 315 the package one may be working on, but the basics are in place.
299 316
300 317 2007-12-27 Ville Vainio <vivainio@gmail.com>
301 318
302 319 * ipy_completers.py: Applied arno's patch to get proper list of
303 320 packages in import completer. Closes #196.
304 321
305 322 2007-12-20 Ville Vainio <vivainio@gmail.com>
306 323
307 324 * completer.py, generics.py(complete_object): Allow
308 325 custom complers based on python objects via simplegeneric.
309 326 See generics.py / my_demo_complete_object
310 327
311 328 2007-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
312 329
313 330 * IPython/Prompts.py (BasePrompt.__nonzero__): add proper boolean
314 331 behavior to prompt objects, useful for display hooks to adjust
315 332 themselves depending on whether prompts will be there or not.
316 333
317 334 2007-12-13 Ville Vainio <vivainio@gmail.com>
318 335
319 336 * iplib.py(raw_input): unix readline does not allow unicode in
320 337 history, encode to normal string. After patch by Tiago.
321 338 Close #201
322 339
323 340 2007-12-12 Ville Vainio <vivainio@gmail.com>
324 341
325 342 * genutils.py (abbrev_cwd): Terminal title now shows 2 levels of
326 343 current directory.
327 344
328 345 2007-12-12 Fernando Perez <Fernando.Perez@colorado.edu>
329 346
330 347 * IPython/Shell.py (_select_shell): add support for controlling
331 348 the pylab threading mode directly at the command line, without
332 349 having to modify MPL config files. Added unit tests for this
333 350 feature, though manual/docs update is still pending, will do later.
334 351
335 352 2007-12-11 Ville Vainio <vivainio@gmail.com>
336 353
337 354 * ext_rescapture.py: var = !cmd is no longer verbose (to facilitate
338 355 use in scripts)
339 356
340 357 2007-12-07 Ville Vainio <vivainio@gmail.com>
341 358
342 359 * iplib.py, ipy_profile_sh.py: Do not escape # on command lines
343 360 anymore (to \#) - even if it is a comment char that is implicitly
344 361 escaped in some unix shells in interactive mode, it is ok to leave
345 362 it in IPython as such.
346 363
347 364
348 365 2007-12-01 Robert Kern <robert.kern@gmail.com>
349 366
350 367 * IPython/ultraTB.py (findsource): Improve the monkeypatch to
351 368 inspect.findsource(). It can now find source lines inside zipped
352 369 packages.
353 370
354 371 * IPython/ultraTB.py: When constructing tracebacks, try to use __file__
355 372 in the frame's namespace before trusting the filename in the code object
356 373 which created the frame.
357 374
358 375 2007-11-29 *** Released version 0.8.2
359 376
360 377 2007-11-25 Fernando Perez <Fernando.Perez@colorado.edu>
361 378
362 379 * IPython/Logger.py (Logger.logstop): add a proper logstop()
363 380 method to fully stop the logger, along with a corresponding
364 381 %logstop magic for interactive use.
365 382
366 383 * IPython/Extensions/ipy_host_completers.py: added new host
367 384 completers functionality, contributed by Gael Pasgrimaud
368 385 <gawel-AT-afpy.org>.
369 386
370 387 2007-11-24 Fernando Perez <Fernando.Perez@colorado.edu>
371 388
372 389 * IPython/DPyGetOpt.py (ArgumentError): Apply patch by Paul Mueller
373 390 <gakusei-AT-dakotacom.net>, to fix deprecated string exceptions in
374 391 options handling. Unicode fix in %whos (committed a while ago)
375 392 was also contributed by Paul.
376 393
377 394 2007-11-23 Darren Dale <darren.dale@cornell.edu>
378 395 * ipy_traits_completer.py: let traits_completer respect the user's
379 396 readline_omit__names setting.
380 397
381 398 2007-11-08 Ville Vainio <vivainio@gmail.com>
382 399
383 400 * ipy_completers.py (import completer): assume 'xml' module exists.
384 401 Do not add every module twice anymore. Closes #196.
385 402
386 403 * ipy_completers.py, ipy_app_completers.py: Add proper apt-get
387 404 completer that uses apt-cache to search for existing packages.
388 405
389 406 2007-11-06 Ville Vainio <vivainio@gmail.com>
390 407
391 408 * Prompts.py: Do not update _oh and _123 when do_full_cache is not
392 409 true. Closes #194.
393 410
394 411 2007-11-01 Brian Granger <ellisonbg@gmail.com>
395 412
396 413 * iplib.py, rlineimpl.py: Applied Body Water's patches to get IPython
397 414 working with OS X 10.5 libedit implementation of readline.
398 415
399 416 2007-10-24 Ville Vainio <vivainio@gmail.com>
400 417
401 418 * iplib.py(user_setup): To route around buggy installations where
402 419 UserConfig is not available, create a minimal _ipython.
403 420
404 421 * iplib.py: Unicode fixes from Jorgen.
405 422
406 423 * genutils.py: Slist now has new method 'fields()' for extraction of
407 424 whitespace-separated fields from line-oriented data.
408 425
409 426 2007-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
410 427
411 428 * IPython/OInspect.py (Inspector.pinfo): fix bug that could arise
412 429 when querying objects with no __class__ attribute (such as
413 430 f2py-generated modules).
414 431
415 432 2007-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
416 433
417 434 * IPython/Magic.py (magic_time): track compilation time and report
418 435 it if longer than 0.1s (fix done to %time and %timeit). After a
419 436 SAGE bug report: http://trac.sagemath.org/sage_trac/ticket/632.
420 437
421 438 2007-09-18 Ville Vainio <vivainio@gmail.com>
422 439
423 440 * genutils.py(make_quoted_expr): Do not use Itpl, it does
424 441 not support unicode at the moment. Fixes (many) magic calls with
425 442 special characters.
426 443
427 444 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
428 445
429 446 * IPython/genutils.py (doctest_reload): expose the doctest
430 447 reloader to the user so that people can easily reset doctest while
431 448 using it interactively. Fixes a problem reported by Jorgen.
432 449
433 450 * IPython/iplib.py (InteractiveShell.__init__): protect the
434 451 FakeModule instances used for __main__ in %run calls from
435 452 deletion, so that user code defined in them isn't left with
436 453 dangling references due to the Python module deletion machinery.
437 454 This should fix the problems reported by Darren.
438 455
439 456 2007-09-10 Darren Dale <dd55@cornell.edu>
440 457
441 458 * Cleanup of IPShellQt and IPShellQt4
442 459
443 460 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
444 461
445 462 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
446 463 doctest support.
447 464
448 465 * IPython/iplib.py (safe_execfile): minor docstring improvements.
449 466
450 467 2007-09-08 Ville Vainio <vivainio@gmail.com>
451 468
452 469 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
453 470 directory, not the target directory.
454 471
455 472 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
456 473 exception that won't print the tracebacks. Switched many magics to
457 474 raise them on error situations, also GetoptError is not printed
458 475 anymore.
459 476
460 477 2007-09-07 Ville Vainio <vivainio@gmail.com>
461 478
462 479 * iplib.py: do not auto-alias "dir", it screws up other dir auto
463 480 aliases.
464 481
465 482 * genutils.py: SList.grep() implemented.
466 483
467 484 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
468 485 for easy "out of the box" setup of several common editors, so that
469 486 e.g. '%edit os.path.isfile' will jump to the correct line
470 487 automatically. Contributions for command lines of your favourite
471 488 editors welcome.
472 489
473 490 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
474 491
475 492 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
476 493 preventing source display in certain cases. In reality I think
477 494 the problem is with Ubuntu's Python build, but this change works
478 495 around the issue in some cases (not in all, unfortunately). I'd
479 496 filed a Python bug on this with more details, but in the change of
480 497 bug trackers it seems to have been lost.
481 498
482 499 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
483 500 not the same, it's not self-documenting, doesn't allow range
484 501 selection, and sorts alphabetically instead of numerically.
485 502 (magic_r): restore %r. No, "up + enter. One char magic" is not
486 503 the same thing, since %r takes parameters to allow fast retrieval
487 504 of old commands. I've received emails from users who use this a
488 505 LOT, so it stays.
489 506 (magic_automagic): restore %automagic. "use _ip.option.automagic"
490 507 is not a valid replacement b/c it doesn't provide an complete
491 508 explanation (which the automagic docstring does).
492 509 (magic_autocall): restore %autocall, with improved docstring.
493 510 Same argument as for others, "use _ip.options.autocall" is not a
494 511 valid replacement.
495 512 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
496 513 tutorials and online docs.
497 514
498 515 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
499 516
500 517 * IPython/usage.py (quick_reference): mention magics in quickref,
501 518 modified main banner to mention %quickref.
502 519
503 520 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
504 521
505 522 2007-09-06 Ville Vainio <vivainio@gmail.com>
506 523
507 524 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
508 525 Callable aliases now pass the _ip as first arg. This breaks
509 526 compatibility with earlier 0.8.2.svn series! (though they should
510 527 not have been in use yet outside these few extensions)
511 528
512 529 2007-09-05 Ville Vainio <vivainio@gmail.com>
513 530
514 531 * external/mglob.py: expand('dirname') => ['dirname'], instead
515 532 of ['dirname/foo','dirname/bar', ...].
516 533
517 534 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
518 535 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
519 536 is useful for others as well).
520 537
521 538 * iplib.py: on callable aliases (as opposed to old style aliases),
522 539 do var_expand() immediately, and use make_quoted_expr instead
523 540 of hardcoded r"""
524 541
525 542 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
526 543 if not available load ipy_fsops.py for cp, mv, etc. replacements
527 544
528 545 * OInspect.py, ipy_which.py: improve %which and obj? for callable
529 546 aliases
530 547
531 548 2007-09-04 Ville Vainio <vivainio@gmail.com>
532 549
533 550 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
534 551 Relicensed under BSD with the authors approval.
535 552
536 553 * ipmaker.py, usage.py: Remove %magic from default banner, improve
537 554 %quickref
538 555
539 556 2007-09-03 Ville Vainio <vivainio@gmail.com>
540 557
541 558 * Magic.py: %time now passes expression through prefilter,
542 559 allowing IPython syntax.
543 560
544 561 2007-09-01 Ville Vainio <vivainio@gmail.com>
545 562
546 563 * ipmaker.py: Always show full traceback when newstyle config fails
547 564
548 565 2007-08-27 Ville Vainio <vivainio@gmail.com>
549 566
550 567 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
551 568
552 569 2007-08-26 Ville Vainio <vivainio@gmail.com>
553 570
554 571 * ipmaker.py: Command line args have the highest priority again
555 572
556 573 * iplib.py, ipmaker.py: -i command line argument now behaves as in
557 574 normal python, i.e. leaves the IPython session running after -c
558 575 command or running a batch file from command line.
559 576
560 577 2007-08-22 Ville Vainio <vivainio@gmail.com>
561 578
562 579 * iplib.py: no extra empty (last) line in raw hist w/ multiline
563 580 statements
564 581
565 582 * logger.py: Fix bug where blank lines in history were not
566 583 added until AFTER adding the current line; translated and raw
567 584 history should finally be in sync with prompt now.
568 585
569 586 * ipy_completers.py: quick_completer now makes it easy to create
570 587 trivial custom completers
571 588
572 589 * clearcmd.py: shadow history compression & erasing, fixed input hist
573 590 clearing.
574 591
575 592 * envpersist.py, history.py: %env (sh profile only), %hist completers
576 593
577 594 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
578 595 term title now include the drive letter, and always use / instead of
579 596 os.sep (as per recommended approach for win32 ipython in general).
580 597
581 598 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
582 599 plain python scripts from ipykit command line by running
583 600 "py myscript.py", even w/o installed python.
584 601
585 602 2007-08-21 Ville Vainio <vivainio@gmail.com>
586 603
587 604 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
588 605 (for backwards compatibility)
589 606
590 607 * history.py: switch back to %hist -t from %hist -r as default.
591 608 At least until raw history is fixed for good.
592 609
593 610 2007-08-20 Ville Vainio <vivainio@gmail.com>
594 611
595 612 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
596 613 locate alias redeclarations etc. Also, avoid handling
597 614 _ip.IP.alias_table directly, prefer using _ip.defalias.
598 615
599 616
600 617 2007-08-15 Ville Vainio <vivainio@gmail.com>
601 618
602 619 * prefilter.py: ! is now always served first
603 620
604 621 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
605 622
606 623 * IPython/iplib.py (safe_execfile): fix the SystemExit
607 624 auto-suppression code to work in Python2.4 (the internal structure
608 625 of that exception changed and I'd only tested the code with 2.5).
609 626 Bug reported by a SciPy attendee.
610 627
611 628 2007-08-13 Ville Vainio <vivainio@gmail.com>
612 629
613 630 * prefilter.py: reverted !c:/bin/foo fix, made % in
614 631 multiline specials work again
615 632
616 633 2007-08-13 Ville Vainio <vivainio@gmail.com>
617 634
618 635 * prefilter.py: Take more care to special-case !, so that
619 636 !c:/bin/foo.exe works.
620 637
621 638 * setup.py: if we are building eggs, strip all docs and
622 639 examples (it doesn't make sense to bytecompile examples,
623 640 and docs would be in an awkward place anyway).
624 641
625 642 * Ryan Krauss' patch fixes start menu shortcuts when IPython
626 643 is installed into a directory that has spaces in the name.
627 644
628 645 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
629 646
630 647 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
631 648 doctest profile and %doctest_mode, so they actually generate the
632 649 blank lines needed by doctest to separate individual tests.
633 650
634 651 * IPython/iplib.py (safe_execfile): modify so that running code
635 652 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
636 653 doesn't get a printed traceback. Any other value in sys.exit(),
637 654 including the empty call, still generates a traceback. This
638 655 enables use of %run without having to pass '-e' for codes that
639 656 correctly set the exit status flag.
640 657
641 658 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
642 659
643 660 * IPython/iplib.py (InteractiveShell.post_config_initialization):
644 661 fix problems with doctests failing when run inside IPython due to
645 662 IPython's modifications of sys.displayhook.
646 663
647 664 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
648 665
649 666 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
650 667 a string with names.
651 668
652 669 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
653 670
654 671 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
655 672 magic to toggle on/off the doctest pasting support without having
656 673 to leave a session to switch to a separate profile.
657 674
658 675 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
659 676
660 677 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
661 678 introduce a blank line between inputs, to conform to doctest
662 679 requirements.
663 680
664 681 * IPython/OInspect.py (Inspector.pinfo): fix another part where
665 682 auto-generated docstrings for new-style classes were showing up.
666 683
667 684 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
668 685
669 686 * api_changes: Add new file to track backward-incompatible
670 687 user-visible changes.
671 688
672 689 2007-08-06 Ville Vainio <vivainio@gmail.com>
673 690
674 691 * ipmaker.py: fix bug where user_config_ns didn't exist at all
675 692 before all the config files were handled.
676 693
677 694 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
678 695
679 696 * IPython/irunner.py (RunnerFactory): Add new factory class for
680 697 creating reusable runners based on filenames.
681 698
682 699 * IPython/Extensions/ipy_profile_doctest.py: New profile for
683 700 doctest support. It sets prompts/exceptions as similar to
684 701 standard Python as possible, so that ipython sessions in this
685 702 profile can be easily pasted as doctests with minimal
686 703 modifications. It also enables pasting of doctests from external
687 704 sources (even if they have leading whitespace), so that you can
688 705 rerun doctests from existing sources.
689 706
690 707 * IPython/iplib.py (_prefilter): fix a buglet where after entering
691 708 some whitespace, the prompt would become a continuation prompt
692 709 with no way of exiting it other than Ctrl-C. This fix brings us
693 710 into conformity with how the default python prompt works.
694 711
695 712 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
696 713 Add support for pasting not only lines that start with '>>>', but
697 714 also with ' >>>'. That is, arbitrary whitespace can now precede
698 715 the prompts. This makes the system useful for pasting doctests
699 716 from docstrings back into a normal session.
700 717
701 718 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
702 719
703 720 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
704 721 r1357, which had killed multiple invocations of an embedded
705 722 ipython (this means that example-embed has been broken for over 1
706 723 year!!!). Rather than possibly breaking the batch stuff for which
707 724 the code in iplib.py/interact was introduced, I worked around the
708 725 problem in the embedding class in Shell.py. We really need a
709 726 bloody test suite for this code, I'm sick of finding stuff that
710 727 used to work breaking left and right every time I use an old
711 728 feature I hadn't touched in a few months.
712 729 (kill_embedded): Add a new magic that only shows up in embedded
713 730 mode, to allow users to permanently deactivate an embedded instance.
714 731
715 732 2007-08-01 Ville Vainio <vivainio@gmail.com>
716 733
717 734 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
718 735 history gets out of sync on runlines (e.g. when running macros).
719 736
720 737 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
721 738
722 739 * IPython/Magic.py (magic_colors): fix win32-related error message
723 740 that could appear under *nix when readline was missing. Patch by
724 741 Scott Jackson, closes #175.
725 742
726 743 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
727 744
728 745 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
729 746 completer that it traits-aware, so that traits objects don't show
730 747 all of their internal attributes all the time.
731 748
732 749 * IPython/genutils.py (dir2): moved this code from inside
733 750 completer.py to expose it publicly, so I could use it in the
734 751 wildcards bugfix.
735 752
736 753 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
737 754 Stefan with Traits.
738 755
739 756 * IPython/completer.py (Completer.attr_matches): change internal
740 757 var name from 'object' to 'obj', since 'object' is now a builtin
741 758 and this can lead to weird bugs if reusing this code elsewhere.
742 759
743 760 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
744 761
745 762 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
746 763 'foo?' and update the code to prevent printing of default
747 764 docstrings that started appearing after I added support for
748 765 new-style classes. The approach I'm using isn't ideal (I just
749 766 special-case those strings) but I'm not sure how to more robustly
750 767 differentiate between truly user-written strings and Python's
751 768 automatic ones.
752 769
753 770 2007-07-09 Ville Vainio <vivainio@gmail.com>
754 771
755 772 * completer.py: Applied Matthew Neeley's patch:
756 773 Dynamic attributes from trait_names and _getAttributeNames are added
757 774 to the list of tab completions, but when this happens, the attribute
758 775 list is turned into a set, so the attributes are unordered when
759 776 printed, which makes it hard to find the right completion. This patch
760 777 turns this set back into a list and sort it.
761 778
762 779 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
763 780
764 781 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
765 782 classes in various inspector functions.
766 783
767 784 2007-06-28 Ville Vainio <vivainio@gmail.com>
768 785
769 786 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
770 787 Implement "shadow" namespace, and callable aliases that reside there.
771 788 Use them by:
772 789
773 790 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
774 791
775 792 foo hello world
776 793 (gets translated to:)
777 794 _sh.foo(r"""hello world""")
778 795
779 796 In practice, this kind of alias can take the role of a magic function
780 797
781 798 * New generic inspect_object, called on obj? and obj??
782 799
783 800 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
784 801
785 802 * IPython/ultraTB.py (findsource): fix a problem with
786 803 inspect.getfile that can cause crashes during traceback construction.
787 804
788 805 2007-06-14 Ville Vainio <vivainio@gmail.com>
789 806
790 807 * iplib.py (handle_auto): Try to use ascii for printing "--->"
791 808 autocall rewrite indication, becausesometimes unicode fails to print
792 809 properly (and you get ' - - - '). Use plain uncoloured ---> for
793 810 unicode.
794 811
795 812 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
796 813
797 814 . pickleshare 'hash' commands (hget, hset, hcompress,
798 815 hdict) for efficient shadow history storage.
799 816
800 817 2007-06-13 Ville Vainio <vivainio@gmail.com>
801 818
802 819 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
803 820 Added kw arg 'interactive', tell whether vars should be visible
804 821 with %whos.
805 822
806 823 2007-06-11 Ville Vainio <vivainio@gmail.com>
807 824
808 825 * pspersistence.py, Magic.py, iplib.py: directory history now saved
809 826 to db
810 827
811 828 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
812 829 Also, it exits IPython immediately after evaluating the command (just like
813 830 std python)
814 831
815 832 2007-06-05 Walter Doerwald <walter@livinglogic.de>
816 833
817 834 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
818 835 Python string and captures the output. (Idea and original patch by
819 836 Stefan van der Walt)
820 837
821 838 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
822 839
823 840 * IPython/ultraTB.py (VerboseTB.text): update printing of
824 841 exception types for Python 2.5 (now all exceptions in the stdlib
825 842 are new-style classes).
826 843
827 844 2007-05-31 Walter Doerwald <walter@livinglogic.de>
828 845
829 846 * IPython/Extensions/igrid.py: Add new commands refresh and
830 847 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
831 848 the iterator once (refresh) or after every x seconds (refresh_timer).
832 849 Add a working implementation of "searchexpression", where the text
833 850 entered is not the text to search for, but an expression that must
834 851 be true. Added display of shortcuts to the menu. Added commands "pickinput"
835 852 and "pickinputattr" that put the object or attribute under the cursor
836 853 in the input line. Split the statusbar to be able to display the currently
837 854 active refresh interval. (Patch by Nik Tautenhahn)
838 855
839 856 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
840 857
841 858 * fixing set_term_title to use ctypes as default
842 859
843 860 * fixing set_term_title fallback to work when curent dir
844 861 is on a windows network share
845 862
846 863 2007-05-28 Ville Vainio <vivainio@gmail.com>
847 864
848 865 * %cpaste: strip + with > from left (diffs).
849 866
850 867 * iplib.py: Fix crash when readline not installed
851 868
852 869 2007-05-26 Ville Vainio <vivainio@gmail.com>
853 870
854 871 * generics.py: introduce easy to extend result_display generic
855 872 function (using simplegeneric.py).
856 873
857 874 * Fixed the append functionality of %set.
858 875
859 876 2007-05-25 Ville Vainio <vivainio@gmail.com>
860 877
861 878 * New magic: %rep (fetch / run old commands from history)
862 879
863 880 * New extension: mglob (%mglob magic), for powerful glob / find /filter
864 881 like functionality
865 882
866 883 % maghistory.py: %hist -g PATTERM greps the history for pattern
867 884
868 885 2007-05-24 Walter Doerwald <walter@livinglogic.de>
869 886
870 887 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
871 888 browse the IPython input history
872 889
873 890 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
874 891 (mapped to "i") can be used to put the object under the curser in the input
875 892 line. pickinputattr (mapped to "I") does the same for the attribute under
876 893 the cursor.
877 894
878 895 2007-05-24 Ville Vainio <vivainio@gmail.com>
879 896
880 897 * Grand magic cleansing (changeset [2380]):
881 898
882 899 * Introduce ipy_legacy.py where the following magics were
883 900 moved:
884 901
885 902 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
886 903
887 904 If you need them, either use default profile or "import ipy_legacy"
888 905 in your ipy_user_conf.py
889 906
890 907 * Move sh and scipy profile to Extensions from UserConfig. this implies
891 908 you should not edit them, but you don't need to run %upgrade when
892 909 upgrading IPython anymore.
893 910
894 911 * %hist/%history now operates in "raw" mode by default. To get the old
895 912 behaviour, run '%hist -n' (native mode).
896 913
897 914 * split ipy_stock_completers.py to ipy_stock_completers.py and
898 915 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
899 916 installed as default.
900 917
901 918 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
902 919 handling.
903 920
904 921 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
905 922 input if readline is available.
906 923
907 924 2007-05-23 Ville Vainio <vivainio@gmail.com>
908 925
909 926 * macro.py: %store uses __getstate__ properly
910 927
911 928 * exesetup.py: added new setup script for creating
912 929 standalone IPython executables with py2exe (i.e.
913 930 no python installation required).
914 931
915 932 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
916 933 its place.
917 934
918 935 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
919 936
920 937 2007-05-21 Ville Vainio <vivainio@gmail.com>
921 938
922 939 * platutil_win32.py (set_term_title): handle
923 940 failure of 'title' system call properly.
924 941
925 942 2007-05-17 Walter Doerwald <walter@livinglogic.de>
926 943
927 944 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
928 945 (Bug detected by Paul Mueller).
929 946
930 947 2007-05-16 Ville Vainio <vivainio@gmail.com>
931 948
932 949 * ipy_profile_sci.py, ipython_win_post_install.py: Create
933 950 new "sci" profile, effectively a modern version of the old
934 951 "scipy" profile (which is now slated for deprecation).
935 952
936 953 2007-05-15 Ville Vainio <vivainio@gmail.com>
937 954
938 955 * pycolorize.py, pycolor.1: Paul Mueller's patches that
939 956 make pycolorize read input from stdin when run without arguments.
940 957
941 958 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
942 959
943 960 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
944 961 it in sh profile (instead of ipy_system_conf.py).
945 962
946 963 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
947 964 aliases are now lower case on windows (MyCommand.exe => mycommand).
948 965
949 966 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
950 967 Macros are now callable objects that inherit from ipapi.IPyAutocall,
951 968 i.e. get autocalled regardless of system autocall setting.
952 969
953 970 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
954 971
955 972 * IPython/rlineimpl.py: check for clear_history in readline and
956 973 make it a dummy no-op if not available. This function isn't
957 974 guaranteed to be in the API and appeared in Python 2.4, so we need
958 975 to check it ourselves. Also, clean up this file quite a bit.
959 976
960 977 * ipython.1: update man page and full manual with information
961 978 about threads (remove outdated warning). Closes #151.
962 979
963 980 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
964 981
965 982 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
966 983 in trunk (note that this made it into the 0.8.1 release already,
967 984 but the changelogs didn't get coordinated). Many thanks to Gael
968 985 Varoquaux <gael.varoquaux-AT-normalesup.org>
969 986
970 987 2007-05-09 *** Released version 0.8.1
971 988
972 989 2007-05-10 Walter Doerwald <walter@livinglogic.de>
973 990
974 991 * IPython/Extensions/igrid.py: Incorporate html help into
975 992 the module, so we don't have to search for the file.
976 993
977 994 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
978 995
979 996 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
980 997
981 998 2007-04-30 Ville Vainio <vivainio@gmail.com>
982 999
983 1000 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
984 1001 user has illegal (non-ascii) home directory name
985 1002
986 1003 2007-04-27 Ville Vainio <vivainio@gmail.com>
987 1004
988 1005 * platutils_win32.py: implement set_term_title for windows
989 1006
990 1007 * Update version number
991 1008
992 1009 * ipy_profile_sh.py: more informative prompt (2 dir levels)
993 1010
994 1011 2007-04-26 Walter Doerwald <walter@livinglogic.de>
995 1012
996 1013 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
997 1014 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
998 1015 bug discovered by Ville).
999 1016
1000 1017 2007-04-26 Ville Vainio <vivainio@gmail.com>
1001 1018
1002 1019 * Extensions/ipy_completers.py: Olivier's module completer now
1003 1020 saves the list of root modules if it takes > 4 secs on the first run.
1004 1021
1005 1022 * Magic.py (%rehashx): %rehashx now clears the completer cache
1006 1023
1007 1024
1008 1025 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
1009 1026
1010 1027 * ipython.el: fix incorrect color scheme, reported by Stefan.
1011 1028 Closes #149.
1012 1029
1013 1030 * IPython/PyColorize.py (Parser.format2): fix state-handling
1014 1031 logic. I still don't like how that code handles state, but at
1015 1032 least now it should be correct, if inelegant. Closes #146.
1016 1033
1017 1034 2007-04-25 Ville Vainio <vivainio@gmail.com>
1018 1035
1019 1036 * Extensions/ipy_which.py: added extension for %which magic, works
1020 1037 a lot like unix 'which' but also finds and expands aliases, and
1021 1038 allows wildcards.
1022 1039
1023 1040 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
1024 1041 as opposed to returning nothing.
1025 1042
1026 1043 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
1027 1044 ipy_stock_completers on default profile, do import on sh profile.
1028 1045
1029 1046 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1030 1047
1031 1048 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
1032 1049 like ipython.py foo.py which raised a IndexError.
1033 1050
1034 1051 2007-04-21 Ville Vainio <vivainio@gmail.com>
1035 1052
1036 1053 * Extensions/ipy_extutil.py: added extension to manage other ipython
1037 1054 extensions. Now only supports 'ls' == list extensions.
1038 1055
1039 1056 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
1040 1057
1041 1058 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
1042 1059 would prevent use of the exception system outside of a running
1043 1060 IPython instance.
1044 1061
1045 1062 2007-04-20 Ville Vainio <vivainio@gmail.com>
1046 1063
1047 1064 * Extensions/ipy_render.py: added extension for easy
1048 1065 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
1049 1066 'Iptl' template notation,
1050 1067
1051 1068 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
1052 1069 safer & faster 'import' completer.
1053 1070
1054 1071 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
1055 1072 and _ip.defalias(name, command).
1056 1073
1057 1074 * Extensions/ipy_exportdb.py: New extension for exporting all the
1058 1075 %store'd data in a portable format (normal ipapi calls like
1059 1076 defmacro() etc.)
1060 1077
1061 1078 2007-04-19 Ville Vainio <vivainio@gmail.com>
1062 1079
1063 1080 * upgrade_dir.py: skip junk files like *.pyc
1064 1081
1065 1082 * Release.py: version number to 0.8.1
1066 1083
1067 1084 2007-04-18 Ville Vainio <vivainio@gmail.com>
1068 1085
1069 1086 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
1070 1087 and later on win32.
1071 1088
1072 1089 2007-04-16 Ville Vainio <vivainio@gmail.com>
1073 1090
1074 1091 * iplib.py (showtraceback): Do not crash when running w/o readline.
1075 1092
1076 1093 2007-04-12 Walter Doerwald <walter@livinglogic.de>
1077 1094
1078 1095 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
1079 1096 sorted (case sensitive with files and dirs mixed).
1080 1097
1081 1098 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
1082 1099
1083 1100 * IPython/Release.py (version): Open trunk for 0.8.1 development.
1084 1101
1085 1102 2007-04-10 *** Released version 0.8.0
1086 1103
1087 1104 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
1088 1105
1089 1106 * Tag 0.8.0 for release.
1090 1107
1091 1108 * IPython/iplib.py (reloadhist): add API function to cleanly
1092 1109 reload the readline history, which was growing inappropriately on
1093 1110 every %run call.
1094 1111
1095 1112 * win32_manual_post_install.py (run): apply last part of Nicolas
1096 1113 Pernetty's patch (I'd accidentally applied it in a different
1097 1114 directory and this particular file didn't get patched).
1098 1115
1099 1116 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
1100 1117
1101 1118 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
1102 1119 find the main thread id and use the proper API call. Thanks to
1103 1120 Stefan for the fix.
1104 1121
1105 1122 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
1106 1123 unit tests to reflect fixed ticket #52, and add more tests sent by
1107 1124 him.
1108 1125
1109 1126 * IPython/iplib.py (raw_input): restore the readline completer
1110 1127 state on every input, in case third-party code messed it up.
1111 1128 (_prefilter): revert recent addition of early-escape checks which
1112 1129 prevent many valid alias calls from working.
1113 1130
1114 1131 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
1115 1132 flag for sigint handler so we don't run a full signal() call on
1116 1133 each runcode access.
1117 1134
1118 1135 * IPython/Magic.py (magic_whos): small improvement to diagnostic
1119 1136 message.
1120 1137
1121 1138 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
1122 1139
1123 1140 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
1124 1141 asynchronous exceptions working, i.e., Ctrl-C can actually
1125 1142 interrupt long-running code in the multithreaded shells.
1126 1143
1127 1144 This is using Tomer Filiba's great ctypes-based trick:
1128 1145 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
1129 1146 this in the past, but hadn't been able to make it work before. So
1130 1147 far it looks like it's actually running, but this needs more
1131 1148 testing. If it really works, I'll be *very* happy, and we'll owe
1132 1149 a huge thank you to Tomer. My current implementation is ugly,
1133 1150 hackish and uses nasty globals, but I don't want to try and clean
1134 1151 anything up until we know if it actually works.
1135 1152
1136 1153 NOTE: this feature needs ctypes to work. ctypes is included in
1137 1154 Python2.5, but 2.4 users will need to manually install it. This
1138 1155 feature makes multi-threaded shells so much more usable that it's
1139 1156 a minor price to pay (ctypes is very easy to install, already a
1140 1157 requirement for win32 and available in major linux distros).
1141 1158
1142 1159 2007-04-04 Ville Vainio <vivainio@gmail.com>
1143 1160
1144 1161 * Extensions/ipy_completers.py, ipy_stock_completers.py:
1145 1162 Moved implementations of 'bundled' completers to ipy_completers.py,
1146 1163 they are only enabled in ipy_stock_completers.py.
1147 1164
1148 1165 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
1149 1166
1150 1167 * IPython/PyColorize.py (Parser.format2): Fix identation of
1151 1168 colorzied output and return early if color scheme is NoColor, to
1152 1169 avoid unnecessary and expensive tokenization. Closes #131.
1153 1170
1154 1171 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
1155 1172
1156 1173 * IPython/Debugger.py: disable the use of pydb version 1.17. It
1157 1174 has a critical bug (a missing import that makes post-mortem not
1158 1175 work at all). Unfortunately as of this time, this is the version
1159 1176 shipped with Ubuntu Edgy, so quite a few people have this one. I
1160 1177 hope Edgy will update to a more recent package.
1161 1178
1162 1179 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
1163 1180
1164 1181 * IPython/iplib.py (_prefilter): close #52, second part of a patch
1165 1182 set by Stefan (only the first part had been applied before).
1166 1183
1167 1184 * IPython/Extensions/ipy_stock_completers.py (module_completer):
1168 1185 remove usage of the dangerous pkgutil.walk_packages(). See
1169 1186 details in comments left in the code.
1170 1187
1171 1188 * IPython/Magic.py (magic_whos): add support for numpy arrays
1172 1189 similar to what we had for Numeric.
1173 1190
1174 1191 * IPython/completer.py (IPCompleter.complete): extend the
1175 1192 complete() call API to support completions by other mechanisms
1176 1193 than readline. Closes #109.
1177 1194
1178 1195 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
1179 1196 protect against a bug in Python's execfile(). Closes #123.
1180 1197
1181 1198 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
1182 1199
1183 1200 * IPython/iplib.py (split_user_input): ensure that when splitting
1184 1201 user input, the part that can be treated as a python name is pure
1185 1202 ascii (Python identifiers MUST be pure ascii). Part of the
1186 1203 ongoing Unicode support work.
1187 1204
1188 1205 * IPython/Prompts.py (prompt_specials_color): Add \N for the
1189 1206 actual prompt number, without any coloring. This allows users to
1190 1207 produce numbered prompts with their own colors. Added after a
1191 1208 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
1192 1209
1193 1210 2007-03-31 Walter Doerwald <walter@livinglogic.de>
1194 1211
1195 1212 * IPython/Extensions/igrid.py: Map the return key
1196 1213 to enter() and shift-return to enterattr().
1197 1214
1198 1215 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
1199 1216
1200 1217 * IPython/Magic.py (magic_psearch): add unicode support by
1201 1218 encoding to ascii the input, since this routine also only deals
1202 1219 with valid Python names. Fixes a bug reported by Stefan.
1203 1220
1204 1221 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
1205 1222
1206 1223 * IPython/Magic.py (_inspect): convert unicode input into ascii
1207 1224 before trying to evaluate it as a Python identifier. This fixes a
1208 1225 problem that the new unicode support had introduced when analyzing
1209 1226 long definition lines for functions.
1210 1227
1211 1228 2007-03-24 Walter Doerwald <walter@livinglogic.de>
1212 1229
1213 1230 * IPython/Extensions/igrid.py: Fix picking. Using
1214 1231 igrid with wxPython 2.6 and -wthread should work now.
1215 1232 igrid.display() simply tries to create a frame without
1216 1233 an application. Only if this fails an application is created.
1217 1234
1218 1235 2007-03-23 Walter Doerwald <walter@livinglogic.de>
1219 1236
1220 1237 * IPython/Extensions/path.py: Updated to version 2.2.
1221 1238
1222 1239 2007-03-23 Ville Vainio <vivainio@gmail.com>
1223 1240
1224 1241 * iplib.py: recursive alias expansion now works better, so that
1225 1242 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
1226 1243 doesn't trip up the process, if 'd' has been aliased to 'ls'.
1227 1244
1228 1245 * Extensions/ipy_gnuglobal.py added, provides %global magic
1229 1246 for users of http://www.gnu.org/software/global
1230 1247
1231 1248 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
1232 1249 Closes #52. Patch by Stefan van der Walt.
1233 1250
1234 1251 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
1235 1252
1236 1253 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
1237 1254 respect the __file__ attribute when using %run. Thanks to a bug
1238 1255 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
1239 1256
1240 1257 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
1241 1258
1242 1259 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
1243 1260 input. Patch sent by Stefan.
1244 1261
1245 1262 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1246 1263 * IPython/Extensions/ipy_stock_completer.py
1247 1264 shlex_split, fix bug in shlex_split. len function
1248 1265 call was missing an if statement. Caused shlex_split to
1249 1266 sometimes return "" as last element.
1250 1267
1251 1268 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
1252 1269
1253 1270 * IPython/completer.py
1254 1271 (IPCompleter.file_matches.single_dir_expand): fix a problem
1255 1272 reported by Stefan, where directories containign a single subdir
1256 1273 would be completed too early.
1257 1274
1258 1275 * IPython/Shell.py (_load_pylab): Make the execution of 'from
1259 1276 pylab import *' when -pylab is given be optional. A new flag,
1260 1277 pylab_import_all controls this behavior, the default is True for
1261 1278 backwards compatibility.
1262 1279
1263 1280 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
1264 1281 modified) R. Bernstein's patch for fully syntax highlighted
1265 1282 tracebacks. The functionality is also available under ultraTB for
1266 1283 non-ipython users (someone using ultraTB but outside an ipython
1267 1284 session). They can select the color scheme by setting the
1268 1285 module-level global DEFAULT_SCHEME. The highlight functionality
1269 1286 also works when debugging.
1270 1287
1271 1288 * IPython/genutils.py (IOStream.close): small patch by
1272 1289 R. Bernstein for improved pydb support.
1273 1290
1274 1291 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
1275 1292 DaveS <davls@telus.net> to improve support of debugging under
1276 1293 NTEmacs, including improved pydb behavior.
1277 1294
1278 1295 * IPython/Magic.py (magic_prun): Fix saving of profile info for
1279 1296 Python 2.5, where the stats object API changed a little. Thanks
1280 1297 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
1281 1298
1282 1299 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
1283 1300 Pernetty's patch to improve support for (X)Emacs under Win32.
1284 1301
1285 1302 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
1286 1303
1287 1304 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
1288 1305 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
1289 1306 a report by Nik Tautenhahn.
1290 1307
1291 1308 2007-03-16 Walter Doerwald <walter@livinglogic.de>
1292 1309
1293 1310 * setup.py: Add the igrid help files to the list of data files
1294 1311 to be installed alongside igrid.
1295 1312 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
1296 1313 Show the input object of the igrid browser as the window tile.
1297 1314 Show the object the cursor is on in the statusbar.
1298 1315
1299 1316 2007-03-15 Ville Vainio <vivainio@gmail.com>
1300 1317
1301 1318 * Extensions/ipy_stock_completers.py: Fixed exception
1302 1319 on mismatching quotes in %run completer. Patch by
1303 1320 Jorgen Stenarson. Closes #127.
1304 1321
1305 1322 2007-03-14 Ville Vainio <vivainio@gmail.com>
1306 1323
1307 1324 * Extensions/ext_rehashdir.py: Do not do auto_alias
1308 1325 in %rehashdir, it clobbers %store'd aliases.
1309 1326
1310 1327 * UserConfig/ipy_profile_sh.py: envpersist.py extension
1311 1328 (beefed up %env) imported for sh profile.
1312 1329
1313 1330 2007-03-10 Walter Doerwald <walter@livinglogic.de>
1314 1331
1315 1332 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
1316 1333 as the default browser.
1317 1334 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
1318 1335 As igrid displays all attributes it ever encounters, fetch() (which has
1319 1336 been renamed to _fetch()) doesn't have to recalculate the display attributes
1320 1337 every time a new item is fetched. This should speed up scrolling.
1321 1338
1322 1339 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
1323 1340
1324 1341 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
1325 1342 Schmolck's recently reported tab-completion bug (my previous one
1326 1343 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
1327 1344
1328 1345 2007-03-09 Walter Doerwald <walter@livinglogic.de>
1329 1346
1330 1347 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
1331 1348 Close help window if exiting igrid.
1332 1349
1333 1350 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
1334 1351
1335 1352 * IPython/Extensions/ipy_defaults.py: Check if readline is available
1336 1353 before calling functions from readline.
1337 1354
1338 1355 2007-03-02 Walter Doerwald <walter@livinglogic.de>
1339 1356
1340 1357 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
1341 1358 igrid is a wxPython-based display object for ipipe. If your system has
1342 1359 wx installed igrid will be the default display. Without wx ipipe falls
1343 1360 back to ibrowse (which needs curses). If no curses is installed ipipe
1344 1361 falls back to idump.
1345 1362
1346 1363 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
1347 1364
1348 1365 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
1349 1366 my changes from yesterday, they introduced bugs. Will reactivate
1350 1367 once I get a correct solution, which will be much easier thanks to
1351 1368 Dan Milstein's new prefilter test suite.
1352 1369
1353 1370 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
1354 1371
1355 1372 * IPython/iplib.py (split_user_input): fix input splitting so we
1356 1373 don't attempt attribute accesses on things that can't possibly be
1357 1374 valid Python attributes. After a bug report by Alex Schmolck.
1358 1375 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
1359 1376 %magic with explicit % prefix.
1360 1377
1361 1378 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
1362 1379
1363 1380 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
1364 1381 avoid a DeprecationWarning from GTK.
1365 1382
1366 1383 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
1367 1384
1368 1385 * IPython/genutils.py (clock): I modified clock() to return total
1369 1386 time, user+system. This is a more commonly needed metric. I also
1370 1387 introduced the new clocku/clocks to get only user/system time if
1371 1388 one wants those instead.
1372 1389
1373 1390 ***WARNING: API CHANGE*** clock() used to return only user time,
1374 1391 so if you want exactly the same results as before, use clocku
1375 1392 instead.
1376 1393
1377 1394 2007-02-22 Ville Vainio <vivainio@gmail.com>
1378 1395
1379 1396 * IPython/Extensions/ipy_p4.py: Extension for improved
1380 1397 p4 (perforce version control system) experience.
1381 1398 Adds %p4 magic with p4 command completion and
1382 1399 automatic -G argument (marshall output as python dict)
1383 1400
1384 1401 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
1385 1402
1386 1403 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
1387 1404 stop marks.
1388 1405 (ClearingMixin): a simple mixin to easily make a Demo class clear
1389 1406 the screen in between blocks and have empty marquees. The
1390 1407 ClearDemo and ClearIPDemo classes that use it are included.
1391 1408
1392 1409 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
1393 1410
1394 1411 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
1395 1412 protect against exceptions at Python shutdown time. Patch
1396 1413 sumbmitted to upstream.
1397 1414
1398 1415 2007-02-14 Walter Doerwald <walter@livinglogic.de>
1399 1416
1400 1417 * IPython/Extensions/ibrowse.py: If entering the first object level
1401 1418 (i.e. the object for which the browser has been started) fails,
1402 1419 now the error is raised directly (aborting the browser) instead of
1403 1420 running into an empty levels list later.
1404 1421
1405 1422 2007-02-03 Walter Doerwald <walter@livinglogic.de>
1406 1423
1407 1424 * IPython/Extensions/ipipe.py: Add an xrepr implementation
1408 1425 for the noitem object.
1409 1426
1410 1427 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
1411 1428
1412 1429 * IPython/completer.py (Completer.attr_matches): Fix small
1413 1430 tab-completion bug with Enthought Traits objects with units.
1414 1431 Thanks to a bug report by Tom Denniston
1415 1432 <tom.denniston-AT-alum.dartmouth.org>.
1416 1433
1417 1434 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
1418 1435
1419 1436 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
1420 1437 bug where only .ipy or .py would be completed. Once the first
1421 1438 argument to %run has been given, all completions are valid because
1422 1439 they are the arguments to the script, which may well be non-python
1423 1440 filenames.
1424 1441
1425 1442 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1426 1443 to irunner to allow it to correctly support real doctesting of
1427 1444 out-of-process ipython code.
1428 1445
1429 1446 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1430 1447 title an option (-noterm_title) because it completely breaks
1431 1448 doctesting.
1432 1449
1433 1450 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1434 1451
1435 1452 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1436 1453
1437 1454 * IPython/irunner.py (main): fix small bug where extensions were
1438 1455 not being correctly recognized.
1439 1456
1440 1457 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1441 1458
1442 1459 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1443 1460 a string containing a single line yields the string itself as the
1444 1461 only item.
1445 1462
1446 1463 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1447 1464 object if it's the same as the one on the last level (This avoids
1448 1465 infinite recursion for one line strings).
1449 1466
1450 1467 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1451 1468
1452 1469 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1453 1470 all output streams before printing tracebacks. This ensures that
1454 1471 user output doesn't end up interleaved with traceback output.
1455 1472
1456 1473 2007-01-10 Ville Vainio <vivainio@gmail.com>
1457 1474
1458 1475 * Extensions/envpersist.py: Turbocharged %env that remembers
1459 1476 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1460 1477 "%env VISUAL=jed".
1461 1478
1462 1479 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1463 1480
1464 1481 * IPython/iplib.py (showtraceback): ensure that we correctly call
1465 1482 custom handlers in all cases (some with pdb were slipping through,
1466 1483 but I'm not exactly sure why).
1467 1484
1468 1485 * IPython/Debugger.py (Tracer.__init__): added new class to
1469 1486 support set_trace-like usage of IPython's enhanced debugger.
1470 1487
1471 1488 2006-12-24 Ville Vainio <vivainio@gmail.com>
1472 1489
1473 1490 * ipmaker.py: more informative message when ipy_user_conf
1474 1491 import fails (suggest running %upgrade).
1475 1492
1476 1493 * tools/run_ipy_in_profiler.py: Utility to see where
1477 1494 the time during IPython startup is spent.
1478 1495
1479 1496 2006-12-20 Ville Vainio <vivainio@gmail.com>
1480 1497
1481 1498 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1482 1499
1483 1500 * ipapi.py: Add new ipapi method, expand_alias.
1484 1501
1485 1502 * Release.py: Bump up version to 0.7.4.svn
1486 1503
1487 1504 2006-12-17 Ville Vainio <vivainio@gmail.com>
1488 1505
1489 1506 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1490 1507 to work properly on posix too
1491 1508
1492 1509 * Release.py: Update revnum (version is still just 0.7.3).
1493 1510
1494 1511 2006-12-15 Ville Vainio <vivainio@gmail.com>
1495 1512
1496 1513 * scripts/ipython_win_post_install: create ipython.py in
1497 1514 prefix + "/scripts".
1498 1515
1499 1516 * Release.py: Update version to 0.7.3.
1500 1517
1501 1518 2006-12-14 Ville Vainio <vivainio@gmail.com>
1502 1519
1503 1520 * scripts/ipython_win_post_install: Overwrite old shortcuts
1504 1521 if they already exist
1505 1522
1506 1523 * Release.py: release 0.7.3rc2
1507 1524
1508 1525 2006-12-13 Ville Vainio <vivainio@gmail.com>
1509 1526
1510 1527 * Branch and update Release.py for 0.7.3rc1
1511 1528
1512 1529 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1513 1530
1514 1531 * IPython/Shell.py (IPShellWX): update for current WX naming
1515 1532 conventions, to avoid a deprecation warning with current WX
1516 1533 versions. Thanks to a report by Danny Shevitz.
1517 1534
1518 1535 2006-12-12 Ville Vainio <vivainio@gmail.com>
1519 1536
1520 1537 * ipmaker.py: apply david cournapeau's patch to make
1521 1538 import_some work properly even when ipythonrc does
1522 1539 import_some on empty list (it was an old bug!).
1523 1540
1524 1541 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1525 1542 Add deprecation note to ipythonrc and a url to wiki
1526 1543 in ipy_user_conf.py
1527 1544
1528 1545
1529 1546 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1530 1547 as if it was typed on IPython command prompt, i.e.
1531 1548 as IPython script.
1532 1549
1533 1550 * example-magic.py, magic_grepl.py: remove outdated examples
1534 1551
1535 1552 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1536 1553
1537 1554 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1538 1555 is called before any exception has occurred.
1539 1556
1540 1557 2006-12-08 Ville Vainio <vivainio@gmail.com>
1541 1558
1542 1559 * Extensions/ipy_stock_completers.py: fix cd completer
1543 1560 to translate /'s to \'s again.
1544 1561
1545 1562 * completer.py: prevent traceback on file completions w/
1546 1563 backslash.
1547 1564
1548 1565 * Release.py: Update release number to 0.7.3b3 for release
1549 1566
1550 1567 2006-12-07 Ville Vainio <vivainio@gmail.com>
1551 1568
1552 1569 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1553 1570 while executing external code. Provides more shell-like behaviour
1554 1571 and overall better response to ctrl + C / ctrl + break.
1555 1572
1556 1573 * tools/make_tarball.py: new script to create tarball straight from svn
1557 1574 (setup.py sdist doesn't work on win32).
1558 1575
1559 1576 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1560 1577 on dirnames with spaces and use the default completer instead.
1561 1578
1562 1579 * Revision.py: Change version to 0.7.3b2 for release.
1563 1580
1564 1581 2006-12-05 Ville Vainio <vivainio@gmail.com>
1565 1582
1566 1583 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1567 1584 pydb patch 4 (rm debug printing, py 2.5 checking)
1568 1585
1569 1586 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1570 1587 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1571 1588 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1572 1589 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1573 1590 object the cursor was on before the refresh. The command "markrange" is
1574 1591 mapped to "%" now.
1575 1592 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1576 1593
1577 1594 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1578 1595
1579 1596 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1580 1597 interactive debugger on the last traceback, without having to call
1581 1598 %pdb and rerun your code. Made minor changes in various modules,
1582 1599 should automatically recognize pydb if available.
1583 1600
1584 1601 2006-11-28 Ville Vainio <vivainio@gmail.com>
1585 1602
1586 1603 * completer.py: If the text start with !, show file completions
1587 1604 properly. This helps when trying to complete command name
1588 1605 for shell escapes.
1589 1606
1590 1607 2006-11-27 Ville Vainio <vivainio@gmail.com>
1591 1608
1592 1609 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1593 1610 der Walt. Clean up svn and hg completers by using a common
1594 1611 vcs_completer.
1595 1612
1596 1613 2006-11-26 Ville Vainio <vivainio@gmail.com>
1597 1614
1598 1615 * Remove ipconfig and %config; you should use _ip.options structure
1599 1616 directly instead!
1600 1617
1601 1618 * genutils.py: add wrap_deprecated function for deprecating callables
1602 1619
1603 1620 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1604 1621 _ip.system instead. ipalias is redundant.
1605 1622
1606 1623 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1607 1624 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1608 1625 explicit.
1609 1626
1610 1627 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1611 1628 completer. Try it by entering 'hg ' and pressing tab.
1612 1629
1613 1630 * macro.py: Give Macro a useful __repr__ method
1614 1631
1615 1632 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1616 1633
1617 1634 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1618 1635 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1619 1636 we don't get a duplicate ipipe module, where registration of the xrepr
1620 1637 implementation for Text is useless.
1621 1638
1622 1639 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1623 1640
1624 1641 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1625 1642
1626 1643 2006-11-24 Ville Vainio <vivainio@gmail.com>
1627 1644
1628 1645 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1629 1646 try to use "cProfile" instead of the slower pure python
1630 1647 "profile"
1631 1648
1632 1649 2006-11-23 Ville Vainio <vivainio@gmail.com>
1633 1650
1634 1651 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1635 1652 Qt+IPython+Designer link in documentation.
1636 1653
1637 1654 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1638 1655 correct Pdb object to %pydb.
1639 1656
1640 1657
1641 1658 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1642 1659 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1643 1660 generic xrepr(), otherwise the list implementation would kick in.
1644 1661
1645 1662 2006-11-21 Ville Vainio <vivainio@gmail.com>
1646 1663
1647 1664 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1648 1665 with one from UserConfig.
1649 1666
1650 1667 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1651 1668 it was missing which broke the sh profile.
1652 1669
1653 1670 * completer.py: file completer now uses explicit '/' instead
1654 1671 of os.path.join, expansion of 'foo' was broken on win32
1655 1672 if there was one directory with name 'foobar'.
1656 1673
1657 1674 * A bunch of patches from Kirill Smelkov:
1658 1675
1659 1676 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1660 1677
1661 1678 * [patch 7/9] Implement %page -r (page in raw mode) -
1662 1679
1663 1680 * [patch 5/9] ScientificPython webpage has moved
1664 1681
1665 1682 * [patch 4/9] The manual mentions %ds, should be %dhist
1666 1683
1667 1684 * [patch 3/9] Kill old bits from %prun doc.
1668 1685
1669 1686 * [patch 1/9] Fix typos here and there.
1670 1687
1671 1688 2006-11-08 Ville Vainio <vivainio@gmail.com>
1672 1689
1673 1690 * completer.py (attr_matches): catch all exceptions raised
1674 1691 by eval of expr with dots.
1675 1692
1676 1693 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1677 1694
1678 1695 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1679 1696 input if it starts with whitespace. This allows you to paste
1680 1697 indented input from any editor without manually having to type in
1681 1698 the 'if 1:', which is convenient when working interactively.
1682 1699 Slightly modifed version of a patch by Bo Peng
1683 1700 <bpeng-AT-rice.edu>.
1684 1701
1685 1702 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1686 1703
1687 1704 * IPython/irunner.py (main): modified irunner so it automatically
1688 1705 recognizes the right runner to use based on the extension (.py for
1689 1706 python, .ipy for ipython and .sage for sage).
1690 1707
1691 1708 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1692 1709 visible in ipapi as ip.config(), to programatically control the
1693 1710 internal rc object. There's an accompanying %config magic for
1694 1711 interactive use, which has been enhanced to match the
1695 1712 funtionality in ipconfig.
1696 1713
1697 1714 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1698 1715 so it's not just a toggle, it now takes an argument. Add support
1699 1716 for a customizable header when making system calls, as the new
1700 1717 system_header variable in the ipythonrc file.
1701 1718
1702 1719 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1703 1720
1704 1721 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1705 1722 generic functions (using Philip J. Eby's simplegeneric package).
1706 1723 This makes it possible to customize the display of third-party classes
1707 1724 without having to monkeypatch them. xiter() no longer supports a mode
1708 1725 argument and the XMode class has been removed. The same functionality can
1709 1726 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1710 1727 One consequence of the switch to generic functions is that xrepr() and
1711 1728 xattrs() implementation must define the default value for the mode
1712 1729 argument themselves and xattrs() implementations must return real
1713 1730 descriptors.
1714 1731
1715 1732 * IPython/external: This new subpackage will contain all third-party
1716 1733 packages that are bundled with IPython. (The first one is simplegeneric).
1717 1734
1718 1735 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1719 1736 directory which as been dropped in r1703.
1720 1737
1721 1738 * IPython/Extensions/ipipe.py (iless): Fixed.
1722 1739
1723 1740 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1724 1741
1725 1742 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1726 1743
1727 1744 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1728 1745 handling in variable expansion so that shells and magics recognize
1729 1746 function local scopes correctly. Bug reported by Brian.
1730 1747
1731 1748 * scripts/ipython: remove the very first entry in sys.path which
1732 1749 Python auto-inserts for scripts, so that sys.path under IPython is
1733 1750 as similar as possible to that under plain Python.
1734 1751
1735 1752 * IPython/completer.py (IPCompleter.file_matches): Fix
1736 1753 tab-completion so that quotes are not closed unless the completion
1737 1754 is unambiguous. After a request by Stefan. Minor cleanups in
1738 1755 ipy_stock_completers.
1739 1756
1740 1757 2006-11-02 Ville Vainio <vivainio@gmail.com>
1741 1758
1742 1759 * ipy_stock_completers.py: Add %run and %cd completers.
1743 1760
1744 1761 * completer.py: Try running custom completer for both
1745 1762 "foo" and "%foo" if the command is just "foo". Ignore case
1746 1763 when filtering possible completions.
1747 1764
1748 1765 * UserConfig/ipy_user_conf.py: install stock completers as default
1749 1766
1750 1767 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1751 1768 simplified readline history save / restore through a wrapper
1752 1769 function
1753 1770
1754 1771
1755 1772 2006-10-31 Ville Vainio <vivainio@gmail.com>
1756 1773
1757 1774 * strdispatch.py, completer.py, ipy_stock_completers.py:
1758 1775 Allow str_key ("command") in completer hooks. Implement
1759 1776 trivial completer for 'import' (stdlib modules only). Rename
1760 1777 ipy_linux_package_managers.py to ipy_stock_completers.py.
1761 1778 SVN completer.
1762 1779
1763 1780 * Extensions/ledit.py: %magic line editor for easily and
1764 1781 incrementally manipulating lists of strings. The magic command
1765 1782 name is %led.
1766 1783
1767 1784 2006-10-30 Ville Vainio <vivainio@gmail.com>
1768 1785
1769 1786 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1770 1787 Bernsteins's patches for pydb integration.
1771 1788 http://bashdb.sourceforge.net/pydb/
1772 1789
1773 1790 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1774 1791 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1775 1792 custom completer hook to allow the users to implement their own
1776 1793 completers. See ipy_linux_package_managers.py for example. The
1777 1794 hook name is 'complete_command'.
1778 1795
1779 1796 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1780 1797
1781 1798 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1782 1799 Numeric leftovers.
1783 1800
1784 1801 * ipython.el (py-execute-region): apply Stefan's patch to fix
1785 1802 garbled results if the python shell hasn't been previously started.
1786 1803
1787 1804 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1788 1805 pretty generic function and useful for other things.
1789 1806
1790 1807 * IPython/OInspect.py (getsource): Add customizable source
1791 1808 extractor. After a request/patch form W. Stein (SAGE).
1792 1809
1793 1810 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1794 1811 window size to a more reasonable value from what pexpect does,
1795 1812 since their choice causes wrapping bugs with long input lines.
1796 1813
1797 1814 2006-10-28 Ville Vainio <vivainio@gmail.com>
1798 1815
1799 1816 * Magic.py (%run): Save and restore the readline history from
1800 1817 file around %run commands to prevent side effects from
1801 1818 %runned programs that might use readline (e.g. pydb).
1802 1819
1803 1820 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1804 1821 invoking the pydb enhanced debugger.
1805 1822
1806 1823 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1807 1824
1808 1825 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1809 1826 call the base class method and propagate the return value to
1810 1827 ifile. This is now done by path itself.
1811 1828
1812 1829 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1813 1830
1814 1831 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1815 1832 api: set_crash_handler(), to expose the ability to change the
1816 1833 internal crash handler.
1817 1834
1818 1835 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1819 1836 the various parameters of the crash handler so that apps using
1820 1837 IPython as their engine can customize crash handling. Ipmlemented
1821 1838 at the request of SAGE.
1822 1839
1823 1840 2006-10-14 Ville Vainio <vivainio@gmail.com>
1824 1841
1825 1842 * Magic.py, ipython.el: applied first "safe" part of Rocky
1826 1843 Bernstein's patch set for pydb integration.
1827 1844
1828 1845 * Magic.py (%unalias, %alias): %store'd aliases can now be
1829 1846 removed with '%unalias'. %alias w/o args now shows most
1830 1847 interesting (stored / manually defined) aliases last
1831 1848 where they catch the eye w/o scrolling.
1832 1849
1833 1850 * Magic.py (%rehashx), ext_rehashdir.py: files with
1834 1851 'py' extension are always considered executable, even
1835 1852 when not in PATHEXT environment variable.
1836 1853
1837 1854 2006-10-12 Ville Vainio <vivainio@gmail.com>
1838 1855
1839 1856 * jobctrl.py: Add new "jobctrl" extension for spawning background
1840 1857 processes with "&find /". 'import jobctrl' to try it out. Requires
1841 1858 'subprocess' module, standard in python 2.4+.
1842 1859
1843 1860 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1844 1861 so if foo -> bar and bar -> baz, then foo -> baz.
1845 1862
1846 1863 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1847 1864
1848 1865 * IPython/Magic.py (Magic.parse_options): add a new posix option
1849 1866 to allow parsing of input args in magics that doesn't strip quotes
1850 1867 (if posix=False). This also closes %timeit bug reported by
1851 1868 Stefan.
1852 1869
1853 1870 2006-10-03 Ville Vainio <vivainio@gmail.com>
1854 1871
1855 1872 * iplib.py (raw_input, interact): Return ValueError catching for
1856 1873 raw_input. Fixes infinite loop for sys.stdin.close() or
1857 1874 sys.stdout.close().
1858 1875
1859 1876 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1860 1877
1861 1878 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1862 1879 to help in handling doctests. irunner is now pretty useful for
1863 1880 running standalone scripts and simulate a full interactive session
1864 1881 in a format that can be then pasted as a doctest.
1865 1882
1866 1883 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1867 1884 on top of the default (useless) ones. This also fixes the nasty
1868 1885 way in which 2.5's Quitter() exits (reverted [1785]).
1869 1886
1870 1887 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1871 1888 2.5.
1872 1889
1873 1890 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1874 1891 color scheme is updated as well when color scheme is changed
1875 1892 interactively.
1876 1893
1877 1894 2006-09-27 Ville Vainio <vivainio@gmail.com>
1878 1895
1879 1896 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1880 1897 infinite loop and just exit. It's a hack, but will do for a while.
1881 1898
1882 1899 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1883 1900
1884 1901 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1885 1902 the constructor, this makes it possible to get a list of only directories
1886 1903 or only files.
1887 1904
1888 1905 2006-08-12 Ville Vainio <vivainio@gmail.com>
1889 1906
1890 1907 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1891 1908 they broke unittest
1892 1909
1893 1910 2006-08-11 Ville Vainio <vivainio@gmail.com>
1894 1911
1895 1912 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1896 1913 by resolving issue properly, i.e. by inheriting FakeModule
1897 1914 from types.ModuleType. Pickling ipython interactive data
1898 1915 should still work as usual (testing appreciated).
1899 1916
1900 1917 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1901 1918
1902 1919 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1903 1920 running under python 2.3 with code from 2.4 to fix a bug with
1904 1921 help(). Reported by the Debian maintainers, Norbert Tretkowski
1905 1922 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1906 1923 <afayolle-AT-debian.org>.
1907 1924
1908 1925 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1909 1926
1910 1927 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1911 1928 (which was displaying "quit" twice).
1912 1929
1913 1930 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1914 1931
1915 1932 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1916 1933 the mode argument).
1917 1934
1918 1935 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1919 1936
1920 1937 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1921 1938 not running under IPython.
1922 1939
1923 1940 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1924 1941 and make it iterable (iterating over the attribute itself). Add two new
1925 1942 magic strings for __xattrs__(): If the string starts with "-", the attribute
1926 1943 will not be displayed in ibrowse's detail view (but it can still be
1927 1944 iterated over). This makes it possible to add attributes that are large
1928 1945 lists or generator methods to the detail view. Replace magic attribute names
1929 1946 and _attrname() and _getattr() with "descriptors": For each type of magic
1930 1947 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1931 1948 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1932 1949 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1933 1950 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1934 1951 are still supported.
1935 1952
1936 1953 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1937 1954 fails in ibrowse.fetch(), the exception object is added as the last item
1938 1955 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1939 1956 a generator throws an exception midway through execution.
1940 1957
1941 1958 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1942 1959 encoding into methods.
1943 1960
1944 1961 2006-07-26 Ville Vainio <vivainio@gmail.com>
1945 1962
1946 1963 * iplib.py: history now stores multiline input as single
1947 1964 history entries. Patch by Jorgen Cederlof.
1948 1965
1949 1966 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1950 1967
1951 1968 * IPython/Extensions/ibrowse.py: Make cursor visible over
1952 1969 non existing attributes.
1953 1970
1954 1971 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1955 1972
1956 1973 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1957 1974 error output of the running command doesn't mess up the screen.
1958 1975
1959 1976 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1960 1977
1961 1978 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1962 1979 argument. This sorts the items themselves.
1963 1980
1964 1981 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1965 1982
1966 1983 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1967 1984 Compile expression strings into code objects. This should speed
1968 1985 up ifilter and friends somewhat.
1969 1986
1970 1987 2006-07-08 Ville Vainio <vivainio@gmail.com>
1971 1988
1972 1989 * Magic.py: %cpaste now strips > from the beginning of lines
1973 1990 to ease pasting quoted code from emails. Contributed by
1974 1991 Stefan van der Walt.
1975 1992
1976 1993 2006-06-29 Ville Vainio <vivainio@gmail.com>
1977 1994
1978 1995 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1979 1996 mode, patch contributed by Darren Dale. NEEDS TESTING!
1980 1997
1981 1998 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1982 1999
1983 2000 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1984 2001 a blue background. Fix fetching new display rows when the browser
1985 2002 scrolls more than a screenful (e.g. by using the goto command).
1986 2003
1987 2004 2006-06-27 Ville Vainio <vivainio@gmail.com>
1988 2005
1989 2006 * Magic.py (_inspect, _ofind) Apply David Huard's
1990 2007 patch for displaying the correct docstring for 'property'
1991 2008 attributes.
1992 2009
1993 2010 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1994 2011
1995 2012 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1996 2013 commands into the methods implementing them.
1997 2014
1998 2015 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1999 2016
2000 2017 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
2001 2018 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
2002 2019 autoindent support was authored by Jin Liu.
2003 2020
2004 2021 2006-06-22 Walter Doerwald <walter@livinglogic.de>
2005 2022
2006 2023 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
2007 2024 for keymaps with a custom class that simplifies handling.
2008 2025
2009 2026 2006-06-19 Walter Doerwald <walter@livinglogic.de>
2010 2027
2011 2028 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
2012 2029 resizing. This requires Python 2.5 to work.
2013 2030
2014 2031 2006-06-16 Walter Doerwald <walter@livinglogic.de>
2015 2032
2016 2033 * IPython/Extensions/ibrowse.py: Add two new commands to
2017 2034 ibrowse: "hideattr" (mapped to "h") hides the attribute under
2018 2035 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
2019 2036 attributes again. Remapped the help command to "?". Display
2020 2037 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
2021 2038 as keys for the "home" and "end" commands. Add three new commands
2022 2039 to the input mode for "find" and friends: "delend" (CTRL-K)
2023 2040 deletes to the end of line. "incsearchup" searches upwards in the
2024 2041 command history for an input that starts with the text before the cursor.
2025 2042 "incsearchdown" does the same downwards. Removed a bogus mapping of
2026 2043 the x key to "delete".
2027 2044
2028 2045 2006-06-15 Ville Vainio <vivainio@gmail.com>
2029 2046
2030 2047 * iplib.py, hooks.py: Added new generate_prompt hook that can be
2031 2048 used to create prompts dynamically, instead of the "old" way of
2032 2049 assigning "magic" strings to prompt_in1 and prompt_in2. The old
2033 2050 way still works (it's invoked by the default hook), of course.
2034 2051
2035 2052 * Prompts.py: added generate_output_prompt hook for altering output
2036 2053 prompt
2037 2054
2038 2055 * Release.py: Changed version string to 0.7.3.svn.
2039 2056
2040 2057 2006-06-15 Walter Doerwald <walter@livinglogic.de>
2041 2058
2042 2059 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
2043 2060 the call to fetch() always tries to fetch enough data for at least one
2044 2061 full screen. This makes it possible to simply call moveto(0,0,True) in
2045 2062 the constructor. Fix typos and removed the obsolete goto attribute.
2046 2063
2047 2064 2006-06-12 Ville Vainio <vivainio@gmail.com>
2048 2065
2049 2066 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
2050 2067 allowing $variable interpolation within multiline statements,
2051 2068 though so far only with "sh" profile for a testing period.
2052 2069 The patch also enables splitting long commands with \ but it
2053 2070 doesn't work properly yet.
2054 2071
2055 2072 2006-06-12 Walter Doerwald <walter@livinglogic.de>
2056 2073
2057 2074 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
2058 2075 input history and the position of the cursor in the input history for
2059 2076 the find, findbackwards and goto command.
2060 2077
2061 2078 2006-06-10 Walter Doerwald <walter@livinglogic.de>
2062 2079
2063 2080 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
2064 2081 implements the basic functionality of browser commands that require
2065 2082 input. Reimplement the goto, find and findbackwards commands as
2066 2083 subclasses of _CommandInput. Add an input history and keymaps to those
2067 2084 commands. Add "\r" as a keyboard shortcut for the enterdefault and
2068 2085 execute commands.
2069 2086
2070 2087 2006-06-07 Ville Vainio <vivainio@gmail.com>
2071 2088
2072 2089 * iplib.py: ipython mybatch.ipy exits ipython immediately after
2073 2090 running the batch files instead of leaving the session open.
2074 2091
2075 2092 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
2076 2093
2077 2094 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
2078 2095 the original fix was incomplete. Patch submitted by W. Maier.
2079 2096
2080 2097 2006-06-07 Ville Vainio <vivainio@gmail.com>
2081 2098
2082 2099 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
2083 2100 Confirmation prompts can be supressed by 'quiet' option.
2084 2101 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
2085 2102
2086 2103 2006-06-06 *** Released version 0.7.2
2087 2104
2088 2105 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
2089 2106
2090 2107 * IPython/Release.py (version): Made 0.7.2 final for release.
2091 2108 Repo tagged and release cut.
2092 2109
2093 2110 2006-06-05 Ville Vainio <vivainio@gmail.com>
2094 2111
2095 2112 * Magic.py (magic_rehashx): Honor no_alias list earlier in
2096 2113 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
2097 2114
2098 2115 * upgrade_dir.py: try import 'path' module a bit harder
2099 2116 (for %upgrade)
2100 2117
2101 2118 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
2102 2119
2103 2120 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
2104 2121 instead of looping 20 times.
2105 2122
2106 2123 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
2107 2124 correctly at initialization time. Bug reported by Krishna Mohan
2108 2125 Gundu <gkmohan-AT-gmail.com> on the user list.
2109 2126
2110 2127 * IPython/Release.py (version): Mark 0.7.2 version to start
2111 2128 testing for release on 06/06.
2112 2129
2113 2130 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
2114 2131
2115 2132 * scripts/irunner: thin script interface so users don't have to
2116 2133 find the module and call it as an executable, since modules rarely
2117 2134 live in people's PATH.
2118 2135
2119 2136 * IPython/irunner.py (InteractiveRunner.__init__): added
2120 2137 delaybeforesend attribute to control delays with newer versions of
2121 2138 pexpect. Thanks to detailed help from pexpect's author, Noah
2122 2139 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
2123 2140 correctly (it works in NoColor mode).
2124 2141
2125 2142 * IPython/iplib.py (handle_normal): fix nasty crash reported on
2126 2143 SAGE list, from improper log() calls.
2127 2144
2128 2145 2006-05-31 Ville Vainio <vivainio@gmail.com>
2129 2146
2130 2147 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
2131 2148 with args in parens to work correctly with dirs that have spaces.
2132 2149
2133 2150 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
2134 2151
2135 2152 * IPython/Logger.py (Logger.logstart): add option to log raw input
2136 2153 instead of the processed one. A -r flag was added to the
2137 2154 %logstart magic used for controlling logging.
2138 2155
2139 2156 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
2140 2157
2141 2158 * IPython/iplib.py (InteractiveShell.__init__): add check for the
2142 2159 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
2143 2160 recognize the option. After a bug report by Will Maier. This
2144 2161 closes #64 (will do it after confirmation from W. Maier).
2145 2162
2146 2163 * IPython/irunner.py: New module to run scripts as if manually
2147 2164 typed into an interactive environment, based on pexpect. After a
2148 2165 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
2149 2166 ipython-user list. Simple unittests in the tests/ directory.
2150 2167
2151 2168 * tools/release: add Will Maier, OpenBSD port maintainer, to
2152 2169 recepients list. We are now officially part of the OpenBSD ports:
2153 2170 http://www.openbsd.org/ports.html ! Many thanks to Will for the
2154 2171 work.
2155 2172
2156 2173 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
2157 2174
2158 2175 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
2159 2176 so that it doesn't break tkinter apps.
2160 2177
2161 2178 * IPython/iplib.py (_prefilter): fix bug where aliases would
2162 2179 shadow variables when autocall was fully off. Reported by SAGE
2163 2180 author William Stein.
2164 2181
2165 2182 * IPython/OInspect.py (Inspector.__init__): add a flag to control
2166 2183 at what detail level strings are computed when foo? is requested.
2167 2184 This allows users to ask for example that the string form of an
2168 2185 object is only computed when foo?? is called, or even never, by
2169 2186 setting the object_info_string_level >= 2 in the configuration
2170 2187 file. This new option has been added and documented. After a
2171 2188 request by SAGE to be able to control the printing of very large
2172 2189 objects more easily.
2173 2190
2174 2191 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
2175 2192
2176 2193 * IPython/ipmaker.py (make_IPython): remove the ipython call path
2177 2194 from sys.argv, to be 100% consistent with how Python itself works
2178 2195 (as seen for example with python -i file.py). After a bug report
2179 2196 by Jeffrey Collins.
2180 2197
2181 2198 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
2182 2199 nasty bug which was preventing custom namespaces with -pylab,
2183 2200 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
2184 2201 compatibility (long gone from mpl).
2185 2202
2186 2203 * IPython/ipapi.py (make_session): name change: create->make. We
2187 2204 use make in other places (ipmaker,...), it's shorter and easier to
2188 2205 type and say, etc. I'm trying to clean things before 0.7.2 so
2189 2206 that I can keep things stable wrt to ipapi in the chainsaw branch.
2190 2207
2191 2208 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
2192 2209 python-mode recognizes our debugger mode. Add support for
2193 2210 autoindent inside (X)emacs. After a patch sent in by Jin Liu
2194 2211 <m.liu.jin-AT-gmail.com> originally written by
2195 2212 doxgen-AT-newsmth.net (with minor modifications for xemacs
2196 2213 compatibility)
2197 2214
2198 2215 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
2199 2216 tracebacks when walking the stack so that the stack tracking system
2200 2217 in emacs' python-mode can identify the frames correctly.
2201 2218
2202 2219 * IPython/ipmaker.py (make_IPython): make the internal (and
2203 2220 default config) autoedit_syntax value false by default. Too many
2204 2221 users have complained to me (both on and off-list) about problems
2205 2222 with this option being on by default, so I'm making it default to
2206 2223 off. It can still be enabled by anyone via the usual mechanisms.
2207 2224
2208 2225 * IPython/completer.py (Completer.attr_matches): add support for
2209 2226 PyCrust-style _getAttributeNames magic method. Patch contributed
2210 2227 by <mscott-AT-goldenspud.com>. Closes #50.
2211 2228
2212 2229 * IPython/iplib.py (InteractiveShell.__init__): remove the
2213 2230 deletion of exit/quit from __builtin__, which can break
2214 2231 third-party tools like the Zope debugging console. The
2215 2232 %exit/%quit magics remain. In general, it's probably a good idea
2216 2233 not to delete anything from __builtin__, since we never know what
2217 2234 that will break. In any case, python now (for 2.5) will support
2218 2235 'real' exit/quit, so this issue is moot. Closes #55.
2219 2236
2220 2237 * IPython/genutils.py (with_obj): rename the 'with' function to
2221 2238 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
2222 2239 becomes a language keyword. Closes #53.
2223 2240
2224 2241 * IPython/FakeModule.py (FakeModule.__init__): add a proper
2225 2242 __file__ attribute to this so it fools more things into thinking
2226 2243 it is a real module. Closes #59.
2227 2244
2228 2245 * IPython/Magic.py (magic_edit): add -n option to open the editor
2229 2246 at a specific line number. After a patch by Stefan van der Walt.
2230 2247
2231 2248 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
2232 2249
2233 2250 * IPython/iplib.py (edit_syntax_error): fix crash when for some
2234 2251 reason the file could not be opened. After automatic crash
2235 2252 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
2236 2253 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
2237 2254 (_should_recompile): Don't fire editor if using %bg, since there
2238 2255 is no file in the first place. From the same report as above.
2239 2256 (raw_input): protect against faulty third-party prefilters. After
2240 2257 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
2241 2258 while running under SAGE.
2242 2259
2243 2260 2006-05-23 Ville Vainio <vivainio@gmail.com>
2244 2261
2245 2262 * ipapi.py: Stripped down ip.to_user_ns() to work only as
2246 2263 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
2247 2264 now returns None (again), unless dummy is specifically allowed by
2248 2265 ipapi.get(allow_dummy=True).
2249 2266
2250 2267 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
2251 2268
2252 2269 * IPython: remove all 2.2-compatibility objects and hacks from
2253 2270 everywhere, since we only support 2.3 at this point. Docs
2254 2271 updated.
2255 2272
2256 2273 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
2257 2274 Anything requiring extra validation can be turned into a Python
2258 2275 property in the future. I used a property for the db one b/c
2259 2276 there was a nasty circularity problem with the initialization
2260 2277 order, which right now I don't have time to clean up.
2261 2278
2262 2279 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
2263 2280 another locking bug reported by Jorgen. I'm not 100% sure though,
2264 2281 so more testing is needed...
2265 2282
2266 2283 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
2267 2284
2268 2285 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
2269 2286 local variables from any routine in user code (typically executed
2270 2287 with %run) directly into the interactive namespace. Very useful
2271 2288 when doing complex debugging.
2272 2289 (IPythonNotRunning): Changed the default None object to a dummy
2273 2290 whose attributes can be queried as well as called without
2274 2291 exploding, to ease writing code which works transparently both in
2275 2292 and out of ipython and uses some of this API.
2276 2293
2277 2294 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
2278 2295
2279 2296 * IPython/hooks.py (result_display): Fix the fact that our display
2280 2297 hook was using str() instead of repr(), as the default python
2281 2298 console does. This had gone unnoticed b/c it only happened if
2282 2299 %Pprint was off, but the inconsistency was there.
2283 2300
2284 2301 2006-05-15 Ville Vainio <vivainio@gmail.com>
2285 2302
2286 2303 * Oinspect.py: Only show docstring for nonexisting/binary files
2287 2304 when doing object??, closing ticket #62
2288 2305
2289 2306 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
2290 2307
2291 2308 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
2292 2309 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
2293 2310 was being released in a routine which hadn't checked if it had
2294 2311 been the one to acquire it.
2295 2312
2296 2313 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
2297 2314
2298 2315 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
2299 2316
2300 2317 2006-04-11 Ville Vainio <vivainio@gmail.com>
2301 2318
2302 2319 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
2303 2320 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
2304 2321 prefilters, allowing stuff like magics and aliases in the file.
2305 2322
2306 2323 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
2307 2324 added. Supported now are "%clear in" and "%clear out" (clear input and
2308 2325 output history, respectively). Also fixed CachedOutput.flush to
2309 2326 properly flush the output cache.
2310 2327
2311 2328 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
2312 2329 half-success (and fail explicitly).
2313 2330
2314 2331 2006-03-28 Ville Vainio <vivainio@gmail.com>
2315 2332
2316 2333 * iplib.py: Fix quoting of aliases so that only argless ones
2317 2334 are quoted
2318 2335
2319 2336 2006-03-28 Ville Vainio <vivainio@gmail.com>
2320 2337
2321 2338 * iplib.py: Quote aliases with spaces in the name.
2322 2339 "c:\program files\blah\bin" is now legal alias target.
2323 2340
2324 2341 * ext_rehashdir.py: Space no longer allowed as arg
2325 2342 separator, since space is legal in path names.
2326 2343
2327 2344 2006-03-16 Ville Vainio <vivainio@gmail.com>
2328 2345
2329 2346 * upgrade_dir.py: Take path.py from Extensions, correcting
2330 2347 %upgrade magic
2331 2348
2332 2349 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
2333 2350
2334 2351 * hooks.py: Only enclose editor binary in quotes if legal and
2335 2352 necessary (space in the name, and is an existing file). Fixes a bug
2336 2353 reported by Zachary Pincus.
2337 2354
2338 2355 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
2339 2356
2340 2357 * Manual: thanks to a tip on proper color handling for Emacs, by
2341 2358 Eric J Haywiser <ejh1-AT-MIT.EDU>.
2342 2359
2343 2360 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
2344 2361 by applying the provided patch. Thanks to Liu Jin
2345 2362 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
2346 2363 XEmacs/Linux, I'm trusting the submitter that it actually helps
2347 2364 under win32/GNU Emacs. Will revisit if any problems are reported.
2348 2365
2349 2366 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2350 2367
2351 2368 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
2352 2369 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
2353 2370
2354 2371 2006-03-12 Ville Vainio <vivainio@gmail.com>
2355 2372
2356 2373 * Magic.py (magic_timeit): Added %timeit magic, contributed by
2357 2374 Torsten Marek.
2358 2375
2359 2376 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
2360 2377
2361 2378 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
2362 2379 line ranges works again.
2363 2380
2364 2381 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
2365 2382
2366 2383 * IPython/iplib.py (showtraceback): add back sys.last_traceback
2367 2384 and friends, after a discussion with Zach Pincus on ipython-user.
2368 2385 I'm not 100% sure, but after thinking about it quite a bit, it may
2369 2386 be OK. Testing with the multithreaded shells didn't reveal any
2370 2387 problems, but let's keep an eye out.
2371 2388
2372 2389 In the process, I fixed a few things which were calling
2373 2390 self.InteractiveTB() directly (like safe_execfile), which is a
2374 2391 mistake: ALL exception reporting should be done by calling
2375 2392 self.showtraceback(), which handles state and tab-completion and
2376 2393 more.
2377 2394
2378 2395 2006-03-01 Ville Vainio <vivainio@gmail.com>
2379 2396
2380 2397 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
2381 2398 To use, do "from ipipe import *".
2382 2399
2383 2400 2006-02-24 Ville Vainio <vivainio@gmail.com>
2384 2401
2385 2402 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
2386 2403 "cleanly" and safely than the older upgrade mechanism.
2387 2404
2388 2405 2006-02-21 Ville Vainio <vivainio@gmail.com>
2389 2406
2390 2407 * Magic.py: %save works again.
2391 2408
2392 2409 2006-02-15 Ville Vainio <vivainio@gmail.com>
2393 2410
2394 2411 * Magic.py: %Pprint works again
2395 2412
2396 2413 * Extensions/ipy_sane_defaults.py: Provide everything provided
2397 2414 in default ipythonrc, to make it possible to have a completely empty
2398 2415 ipythonrc (and thus completely rc-file free configuration)
2399 2416
2400 2417 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
2401 2418
2402 2419 * IPython/hooks.py (editor): quote the call to the editor command,
2403 2420 to allow commands with spaces in them. Problem noted by watching
2404 2421 Ian Oswald's video about textpad under win32 at
2405 2422 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
2406 2423
2407 2424 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
2408 2425 describing magics (we haven't used @ for a loong time).
2409 2426
2410 2427 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
2411 2428 contributed by marienz to close
2412 2429 http://www.scipy.net/roundup/ipython/issue53.
2413 2430
2414 2431 2006-02-10 Ville Vainio <vivainio@gmail.com>
2415 2432
2416 2433 * genutils.py: getoutput now works in win32 too
2417 2434
2418 2435 * completer.py: alias and magic completion only invoked
2419 2436 at the first "item" in the line, to avoid "cd %store"
2420 2437 nonsense.
2421 2438
2422 2439 2006-02-09 Ville Vainio <vivainio@gmail.com>
2423 2440
2424 2441 * test/*: Added a unit testing framework (finally).
2425 2442 '%run runtests.py' to run test_*.
2426 2443
2427 2444 * ipapi.py: Exposed runlines and set_custom_exc
2428 2445
2429 2446 2006-02-07 Ville Vainio <vivainio@gmail.com>
2430 2447
2431 2448 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2432 2449 instead use "f(1 2)" as before.
2433 2450
2434 2451 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2435 2452
2436 2453 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2437 2454 facilities, for demos processed by the IPython input filter
2438 2455 (IPythonDemo), and for running a script one-line-at-a-time as a
2439 2456 demo, both for pure Python (LineDemo) and for IPython-processed
2440 2457 input (IPythonLineDemo). After a request by Dave Kohel, from the
2441 2458 SAGE team.
2442 2459 (Demo.edit): added an edit() method to the demo objects, to edit
2443 2460 the in-memory copy of the last executed block.
2444 2461
2445 2462 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2446 2463 processing to %edit, %macro and %save. These commands can now be
2447 2464 invoked on the unprocessed input as it was typed by the user
2448 2465 (without any prefilters applied). After requests by the SAGE team
2449 2466 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2450 2467
2451 2468 2006-02-01 Ville Vainio <vivainio@gmail.com>
2452 2469
2453 2470 * setup.py, eggsetup.py: easy_install ipython==dev works
2454 2471 correctly now (on Linux)
2455 2472
2456 2473 * ipy_user_conf,ipmaker: user config changes, removed spurious
2457 2474 warnings
2458 2475
2459 2476 * iplib: if rc.banner is string, use it as is.
2460 2477
2461 2478 * Magic: %pycat accepts a string argument and pages it's contents.
2462 2479
2463 2480
2464 2481 2006-01-30 Ville Vainio <vivainio@gmail.com>
2465 2482
2466 2483 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2467 2484 Now %store and bookmarks work through PickleShare, meaning that
2468 2485 concurrent access is possible and all ipython sessions see the
2469 2486 same database situation all the time, instead of snapshot of
2470 2487 the situation when the session was started. Hence, %bookmark
2471 2488 results are immediately accessible from othes sessions. The database
2472 2489 is also available for use by user extensions. See:
2473 2490 http://www.python.org/pypi/pickleshare
2474 2491
2475 2492 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2476 2493
2477 2494 * aliases can now be %store'd
2478 2495
2479 2496 * path.py moved to Extensions so that pickleshare does not need
2480 2497 IPython-specific import. Extensions added to pythonpath right
2481 2498 at __init__.
2482 2499
2483 2500 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2484 2501 called with _ip.system and the pre-transformed command string.
2485 2502
2486 2503 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2487 2504
2488 2505 * IPython/iplib.py (interact): Fix that we were not catching
2489 2506 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2490 2507 logic here had to change, but it's fixed now.
2491 2508
2492 2509 2006-01-29 Ville Vainio <vivainio@gmail.com>
2493 2510
2494 2511 * iplib.py: Try to import pyreadline on Windows.
2495 2512
2496 2513 2006-01-27 Ville Vainio <vivainio@gmail.com>
2497 2514
2498 2515 * iplib.py: Expose ipapi as _ip in builtin namespace.
2499 2516 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2500 2517 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2501 2518 syntax now produce _ip.* variant of the commands.
2502 2519
2503 2520 * "_ip.options().autoedit_syntax = 2" automatically throws
2504 2521 user to editor for syntax error correction without prompting.
2505 2522
2506 2523 2006-01-27 Ville Vainio <vivainio@gmail.com>
2507 2524
2508 2525 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2509 2526 'ipython' at argv[0]) executed through command line.
2510 2527 NOTE: this DEPRECATES calling ipython with multiple scripts
2511 2528 ("ipython a.py b.py c.py")
2512 2529
2513 2530 * iplib.py, hooks.py: Added configurable input prefilter,
2514 2531 named 'input_prefilter'. See ext_rescapture.py for example
2515 2532 usage.
2516 2533
2517 2534 * ext_rescapture.py, Magic.py: Better system command output capture
2518 2535 through 'var = !ls' (deprecates user-visible %sc). Same notation
2519 2536 applies for magics, 'var = %alias' assigns alias list to var.
2520 2537
2521 2538 * ipapi.py: added meta() for accessing extension-usable data store.
2522 2539
2523 2540 * iplib.py: added InteractiveShell.getapi(). New magics should be
2524 2541 written doing self.getapi() instead of using the shell directly.
2525 2542
2526 2543 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2527 2544 %store foo >> ~/myfoo.txt to store variables to files (in clean
2528 2545 textual form, not a restorable pickle).
2529 2546
2530 2547 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2531 2548
2532 2549 * usage.py, Magic.py: added %quickref
2533 2550
2534 2551 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2535 2552
2536 2553 * GetoptErrors when invoking magics etc. with wrong args
2537 2554 are now more helpful:
2538 2555 GetoptError: option -l not recognized (allowed: "qb" )
2539 2556
2540 2557 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2541 2558
2542 2559 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2543 2560 computationally intensive blocks don't appear to stall the demo.
2544 2561
2545 2562 2006-01-24 Ville Vainio <vivainio@gmail.com>
2546 2563
2547 2564 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2548 2565 value to manipulate resulting history entry.
2549 2566
2550 2567 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2551 2568 to instance methods of IPApi class, to make extending an embedded
2552 2569 IPython feasible. See ext_rehashdir.py for example usage.
2553 2570
2554 2571 * Merged 1071-1076 from branches/0.7.1
2555 2572
2556 2573
2557 2574 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2558 2575
2559 2576 * tools/release (daystamp): Fix build tools to use the new
2560 2577 eggsetup.py script to build lightweight eggs.
2561 2578
2562 2579 * Applied changesets 1062 and 1064 before 0.7.1 release.
2563 2580
2564 2581 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2565 2582 see the raw input history (without conversions like %ls ->
2566 2583 ipmagic("ls")). After a request from W. Stein, SAGE
2567 2584 (http://modular.ucsd.edu/sage) developer. This information is
2568 2585 stored in the input_hist_raw attribute of the IPython instance, so
2569 2586 developers can access it if needed (it's an InputList instance).
2570 2587
2571 2588 * Versionstring = 0.7.2.svn
2572 2589
2573 2590 * eggsetup.py: A separate script for constructing eggs, creates
2574 2591 proper launch scripts even on Windows (an .exe file in
2575 2592 \python24\scripts).
2576 2593
2577 2594 * ipapi.py: launch_new_instance, launch entry point needed for the
2578 2595 egg.
2579 2596
2580 2597 2006-01-23 Ville Vainio <vivainio@gmail.com>
2581 2598
2582 2599 * Added %cpaste magic for pasting python code
2583 2600
2584 2601 2006-01-22 Ville Vainio <vivainio@gmail.com>
2585 2602
2586 2603 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2587 2604
2588 2605 * Versionstring = 0.7.2.svn
2589 2606
2590 2607 * eggsetup.py: A separate script for constructing eggs, creates
2591 2608 proper launch scripts even on Windows (an .exe file in
2592 2609 \python24\scripts).
2593 2610
2594 2611 * ipapi.py: launch_new_instance, launch entry point needed for the
2595 2612 egg.
2596 2613
2597 2614 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2598 2615
2599 2616 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2600 2617 %pfile foo would print the file for foo even if it was a binary.
2601 2618 Now, extensions '.so' and '.dll' are skipped.
2602 2619
2603 2620 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2604 2621 bug, where macros would fail in all threaded modes. I'm not 100%
2605 2622 sure, so I'm going to put out an rc instead of making a release
2606 2623 today, and wait for feedback for at least a few days.
2607 2624
2608 2625 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2609 2626 it...) the handling of pasting external code with autoindent on.
2610 2627 To get out of a multiline input, the rule will appear for most
2611 2628 users unchanged: two blank lines or change the indent level
2612 2629 proposed by IPython. But there is a twist now: you can
2613 2630 add/subtract only *one or two spaces*. If you add/subtract three
2614 2631 or more (unless you completely delete the line), IPython will
2615 2632 accept that line, and you'll need to enter a second one of pure
2616 2633 whitespace. I know it sounds complicated, but I can't find a
2617 2634 different solution that covers all the cases, with the right
2618 2635 heuristics. Hopefully in actual use, nobody will really notice
2619 2636 all these strange rules and things will 'just work'.
2620 2637
2621 2638 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2622 2639
2623 2640 * IPython/iplib.py (interact): catch exceptions which can be
2624 2641 triggered asynchronously by signal handlers. Thanks to an
2625 2642 automatic crash report, submitted by Colin Kingsley
2626 2643 <tercel-AT-gentoo.org>.
2627 2644
2628 2645 2006-01-20 Ville Vainio <vivainio@gmail.com>
2629 2646
2630 2647 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2631 2648 (%rehashdir, very useful, try it out) of how to extend ipython
2632 2649 with new magics. Also added Extensions dir to pythonpath to make
2633 2650 importing extensions easy.
2634 2651
2635 2652 * %store now complains when trying to store interactively declared
2636 2653 classes / instances of those classes.
2637 2654
2638 2655 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2639 2656 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2640 2657 if they exist, and ipy_user_conf.py with some defaults is created for
2641 2658 the user.
2642 2659
2643 2660 * Startup rehashing done by the config file, not InterpreterExec.
2644 2661 This means system commands are available even without selecting the
2645 2662 pysh profile. It's the sensible default after all.
2646 2663
2647 2664 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2648 2665
2649 2666 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2650 2667 multiline code with autoindent on working. But I am really not
2651 2668 sure, so this needs more testing. Will commit a debug-enabled
2652 2669 version for now, while I test it some more, so that Ville and
2653 2670 others may also catch any problems. Also made
2654 2671 self.indent_current_str() a method, to ensure that there's no
2655 2672 chance of the indent space count and the corresponding string
2656 2673 falling out of sync. All code needing the string should just call
2657 2674 the method.
2658 2675
2659 2676 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2660 2677
2661 2678 * IPython/Magic.py (magic_edit): fix check for when users don't
2662 2679 save their output files, the try/except was in the wrong section.
2663 2680
2664 2681 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2665 2682
2666 2683 * IPython/Magic.py (magic_run): fix __file__ global missing from
2667 2684 script's namespace when executed via %run. After a report by
2668 2685 Vivian.
2669 2686
2670 2687 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2671 2688 when using python 2.4. The parent constructor changed in 2.4, and
2672 2689 we need to track it directly (we can't call it, as it messes up
2673 2690 readline and tab-completion inside our pdb would stop working).
2674 2691 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2675 2692
2676 2693 2006-01-16 Ville Vainio <vivainio@gmail.com>
2677 2694
2678 2695 * Ipython/magic.py: Reverted back to old %edit functionality
2679 2696 that returns file contents on exit.
2680 2697
2681 2698 * IPython/path.py: Added Jason Orendorff's "path" module to
2682 2699 IPython tree, http://www.jorendorff.com/articles/python/path/.
2683 2700 You can get path objects conveniently through %sc, and !!, e.g.:
2684 2701 sc files=ls
2685 2702 for p in files.paths: # or files.p
2686 2703 print p,p.mtime
2687 2704
2688 2705 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2689 2706 now work again without considering the exclusion regexp -
2690 2707 hence, things like ',foo my/path' turn to 'foo("my/path")'
2691 2708 instead of syntax error.
2692 2709
2693 2710
2694 2711 2006-01-14 Ville Vainio <vivainio@gmail.com>
2695 2712
2696 2713 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2697 2714 ipapi decorators for python 2.4 users, options() provides access to rc
2698 2715 data.
2699 2716
2700 2717 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2701 2718 as path separators (even on Linux ;-). Space character after
2702 2719 backslash (as yielded by tab completer) is still space;
2703 2720 "%cd long\ name" works as expected.
2704 2721
2705 2722 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2706 2723 as "chain of command", with priority. API stays the same,
2707 2724 TryNext exception raised by a hook function signals that
2708 2725 current hook failed and next hook should try handling it, as
2709 2726 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
2710 2727 requested configurable display hook, which is now implemented.
2711 2728
2712 2729 2006-01-13 Ville Vainio <vivainio@gmail.com>
2713 2730
2714 2731 * IPython/platutils*.py: platform specific utility functions,
2715 2732 so far only set_term_title is implemented (change terminal
2716 2733 label in windowing systems). %cd now changes the title to
2717 2734 current dir.
2718 2735
2719 2736 * IPython/Release.py: Added myself to "authors" list,
2720 2737 had to create new files.
2721 2738
2722 2739 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2723 2740 shell escape; not a known bug but had potential to be one in the
2724 2741 future.
2725 2742
2726 2743 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2727 2744 extension API for IPython! See the module for usage example. Fix
2728 2745 OInspect for docstring-less magic functions.
2729 2746
2730 2747
2731 2748 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2732 2749
2733 2750 * IPython/iplib.py (raw_input): temporarily deactivate all
2734 2751 attempts at allowing pasting of code with autoindent on. It
2735 2752 introduced bugs (reported by Prabhu) and I can't seem to find a
2736 2753 robust combination which works in all cases. Will have to revisit
2737 2754 later.
2738 2755
2739 2756 * IPython/genutils.py: remove isspace() function. We've dropped
2740 2757 2.2 compatibility, so it's OK to use the string method.
2741 2758
2742 2759 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2743 2760
2744 2761 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2745 2762 matching what NOT to autocall on, to include all python binary
2746 2763 operators (including things like 'and', 'or', 'is' and 'in').
2747 2764 Prompted by a bug report on 'foo & bar', but I realized we had
2748 2765 many more potential bug cases with other operators. The regexp is
2749 2766 self.re_exclude_auto, it's fairly commented.
2750 2767
2751 2768 2006-01-12 Ville Vainio <vivainio@gmail.com>
2752 2769
2753 2770 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2754 2771 Prettified and hardened string/backslash quoting with ipsystem(),
2755 2772 ipalias() and ipmagic(). Now even \ characters are passed to
2756 2773 %magics, !shell escapes and aliases exactly as they are in the
2757 2774 ipython command line. Should improve backslash experience,
2758 2775 particularly in Windows (path delimiter for some commands that
2759 2776 won't understand '/'), but Unix benefits as well (regexps). %cd
2760 2777 magic still doesn't support backslash path delimiters, though. Also
2761 2778 deleted all pretense of supporting multiline command strings in
2762 2779 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2763 2780
2764 2781 * doc/build_doc_instructions.txt added. Documentation on how to
2765 2782 use doc/update_manual.py, added yesterday. Both files contributed
2766 2783 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2767 2784 doc/*.sh for deprecation at a later date.
2768 2785
2769 2786 * /ipython.py Added ipython.py to root directory for
2770 2787 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2771 2788 ipython.py) and development convenience (no need to keep doing
2772 2789 "setup.py install" between changes).
2773 2790
2774 2791 * Made ! and !! shell escapes work (again) in multiline expressions:
2775 2792 if 1:
2776 2793 !ls
2777 2794 !!ls
2778 2795
2779 2796 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2780 2797
2781 2798 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2782 2799 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2783 2800 module in case-insensitive installation. Was causing crashes
2784 2801 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2785 2802
2786 2803 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2787 2804 <marienz-AT-gentoo.org>, closes
2788 2805 http://www.scipy.net/roundup/ipython/issue51.
2789 2806
2790 2807 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2791 2808
2792 2809 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2793 2810 problem of excessive CPU usage under *nix and keyboard lag under
2794 2811 win32.
2795 2812
2796 2813 2006-01-10 *** Released version 0.7.0
2797 2814
2798 2815 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2799 2816
2800 2817 * IPython/Release.py (revision): tag version number to 0.7.0,
2801 2818 ready for release.
2802 2819
2803 2820 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2804 2821 it informs the user of the name of the temp. file used. This can
2805 2822 help if you decide later to reuse that same file, so you know
2806 2823 where to copy the info from.
2807 2824
2808 2825 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2809 2826
2810 2827 * setup_bdist_egg.py: little script to build an egg. Added
2811 2828 support in the release tools as well.
2812 2829
2813 2830 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2814 2831
2815 2832 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2816 2833 version selection (new -wxversion command line and ipythonrc
2817 2834 parameter). Patch contributed by Arnd Baecker
2818 2835 <arnd.baecker-AT-web.de>.
2819 2836
2820 2837 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2821 2838 embedded instances, for variables defined at the interactive
2822 2839 prompt of the embedded ipython. Reported by Arnd.
2823 2840
2824 2841 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2825 2842 it can be used as a (stateful) toggle, or with a direct parameter.
2826 2843
2827 2844 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2828 2845 could be triggered in certain cases and cause the traceback
2829 2846 printer not to work.
2830 2847
2831 2848 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2832 2849
2833 2850 * IPython/iplib.py (_should_recompile): Small fix, closes
2834 2851 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2835 2852
2836 2853 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2837 2854
2838 2855 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2839 2856 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2840 2857 Moad for help with tracking it down.
2841 2858
2842 2859 * IPython/iplib.py (handle_auto): fix autocall handling for
2843 2860 objects which support BOTH __getitem__ and __call__ (so that f [x]
2844 2861 is left alone, instead of becoming f([x]) automatically).
2845 2862
2846 2863 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2847 2864 Ville's patch.
2848 2865
2849 2866 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2850 2867
2851 2868 * IPython/iplib.py (handle_auto): changed autocall semantics to
2852 2869 include 'smart' mode, where the autocall transformation is NOT
2853 2870 applied if there are no arguments on the line. This allows you to
2854 2871 just type 'foo' if foo is a callable to see its internal form,
2855 2872 instead of having it called with no arguments (typically a
2856 2873 mistake). The old 'full' autocall still exists: for that, you
2857 2874 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2858 2875
2859 2876 * IPython/completer.py (Completer.attr_matches): add
2860 2877 tab-completion support for Enthoughts' traits. After a report by
2861 2878 Arnd and a patch by Prabhu.
2862 2879
2863 2880 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2864 2881
2865 2882 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2866 2883 Schmolck's patch to fix inspect.getinnerframes().
2867 2884
2868 2885 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2869 2886 for embedded instances, regarding handling of namespaces and items
2870 2887 added to the __builtin__ one. Multiple embedded instances and
2871 2888 recursive embeddings should work better now (though I'm not sure
2872 2889 I've got all the corner cases fixed, that code is a bit of a brain
2873 2890 twister).
2874 2891
2875 2892 * IPython/Magic.py (magic_edit): added support to edit in-memory
2876 2893 macros (automatically creates the necessary temp files). %edit
2877 2894 also doesn't return the file contents anymore, it's just noise.
2878 2895
2879 2896 * IPython/completer.py (Completer.attr_matches): revert change to
2880 2897 complete only on attributes listed in __all__. I realized it
2881 2898 cripples the tab-completion system as a tool for exploring the
2882 2899 internals of unknown libraries (it renders any non-__all__
2883 2900 attribute off-limits). I got bit by this when trying to see
2884 2901 something inside the dis module.
2885 2902
2886 2903 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2887 2904
2888 2905 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2889 2906 namespace for users and extension writers to hold data in. This
2890 2907 follows the discussion in
2891 2908 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2892 2909
2893 2910 * IPython/completer.py (IPCompleter.complete): small patch to help
2894 2911 tab-completion under Emacs, after a suggestion by John Barnard
2895 2912 <barnarj-AT-ccf.org>.
2896 2913
2897 2914 * IPython/Magic.py (Magic.extract_input_slices): added support for
2898 2915 the slice notation in magics to use N-M to represent numbers N...M
2899 2916 (closed endpoints). This is used by %macro and %save.
2900 2917
2901 2918 * IPython/completer.py (Completer.attr_matches): for modules which
2902 2919 define __all__, complete only on those. After a patch by Jeffrey
2903 2920 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2904 2921 speed up this routine.
2905 2922
2906 2923 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2907 2924 don't know if this is the end of it, but the behavior now is
2908 2925 certainly much more correct. Note that coupled with macros,
2909 2926 slightly surprising (at first) behavior may occur: a macro will in
2910 2927 general expand to multiple lines of input, so upon exiting, the
2911 2928 in/out counters will both be bumped by the corresponding amount
2912 2929 (as if the macro's contents had been typed interactively). Typing
2913 2930 %hist will reveal the intermediate (silently processed) lines.
2914 2931
2915 2932 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2916 2933 pickle to fail (%run was overwriting __main__ and not restoring
2917 2934 it, but pickle relies on __main__ to operate).
2918 2935
2919 2936 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2920 2937 using properties, but forgot to make the main InteractiveShell
2921 2938 class a new-style class. Properties fail silently, and
2922 2939 mysteriously, with old-style class (getters work, but
2923 2940 setters don't do anything).
2924 2941
2925 2942 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2926 2943
2927 2944 * IPython/Magic.py (magic_history): fix history reporting bug (I
2928 2945 know some nasties are still there, I just can't seem to find a
2929 2946 reproducible test case to track them down; the input history is
2930 2947 falling out of sync...)
2931 2948
2932 2949 * IPython/iplib.py (handle_shell_escape): fix bug where both
2933 2950 aliases and system accesses where broken for indented code (such
2934 2951 as loops).
2935 2952
2936 2953 * IPython/genutils.py (shell): fix small but critical bug for
2937 2954 win32 system access.
2938 2955
2939 2956 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2940 2957
2941 2958 * IPython/iplib.py (showtraceback): remove use of the
2942 2959 sys.last_{type/value/traceback} structures, which are non
2943 2960 thread-safe.
2944 2961 (_prefilter): change control flow to ensure that we NEVER
2945 2962 introspect objects when autocall is off. This will guarantee that
2946 2963 having an input line of the form 'x.y', where access to attribute
2947 2964 'y' has side effects, doesn't trigger the side effect TWICE. It
2948 2965 is important to note that, with autocall on, these side effects
2949 2966 can still happen.
2950 2967 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2951 2968 trio. IPython offers these three kinds of special calls which are
2952 2969 not python code, and it's a good thing to have their call method
2953 2970 be accessible as pure python functions (not just special syntax at
2954 2971 the command line). It gives us a better internal implementation
2955 2972 structure, as well as exposing these for user scripting more
2956 2973 cleanly.
2957 2974
2958 2975 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2959 2976 file. Now that they'll be more likely to be used with the
2960 2977 persistance system (%store), I want to make sure their module path
2961 2978 doesn't change in the future, so that we don't break things for
2962 2979 users' persisted data.
2963 2980
2964 2981 * IPython/iplib.py (autoindent_update): move indentation
2965 2982 management into the _text_ processing loop, not the keyboard
2966 2983 interactive one. This is necessary to correctly process non-typed
2967 2984 multiline input (such as macros).
2968 2985
2969 2986 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2970 2987 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2971 2988 which was producing problems in the resulting manual.
2972 2989 (magic_whos): improve reporting of instances (show their class,
2973 2990 instead of simply printing 'instance' which isn't terribly
2974 2991 informative).
2975 2992
2976 2993 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2977 2994 (minor mods) to support network shares under win32.
2978 2995
2979 2996 * IPython/winconsole.py (get_console_size): add new winconsole
2980 2997 module and fixes to page_dumb() to improve its behavior under
2981 2998 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2982 2999
2983 3000 * IPython/Magic.py (Macro): simplified Macro class to just
2984 3001 subclass list. We've had only 2.2 compatibility for a very long
2985 3002 time, yet I was still avoiding subclassing the builtin types. No
2986 3003 more (I'm also starting to use properties, though I won't shift to
2987 3004 2.3-specific features quite yet).
2988 3005 (magic_store): added Ville's patch for lightweight variable
2989 3006 persistence, after a request on the user list by Matt Wilkie
2990 3007 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2991 3008 details.
2992 3009
2993 3010 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2994 3011 changed the default logfile name from 'ipython.log' to
2995 3012 'ipython_log.py'. These logs are real python files, and now that
2996 3013 we have much better multiline support, people are more likely to
2997 3014 want to use them as such. Might as well name them correctly.
2998 3015
2999 3016 * IPython/Magic.py: substantial cleanup. While we can't stop
3000 3017 using magics as mixins, due to the existing customizations 'out
3001 3018 there' which rely on the mixin naming conventions, at least I
3002 3019 cleaned out all cross-class name usage. So once we are OK with
3003 3020 breaking compatibility, the two systems can be separated.
3004 3021
3005 3022 * IPython/Logger.py: major cleanup. This one is NOT a mixin
3006 3023 anymore, and the class is a fair bit less hideous as well. New
3007 3024 features were also introduced: timestamping of input, and logging
3008 3025 of output results. These are user-visible with the -t and -o
3009 3026 options to %logstart. Closes
3010 3027 http://www.scipy.net/roundup/ipython/issue11 and a request by
3011 3028 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
3012 3029
3013 3030 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
3014 3031
3015 3032 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
3016 3033 better handle backslashes in paths. See the thread 'More Windows
3017 3034 questions part 2 - \/ characters revisited' on the iypthon user
3018 3035 list:
3019 3036 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
3020 3037
3021 3038 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
3022 3039
3023 3040 (InteractiveShell.__init__): change threaded shells to not use the
3024 3041 ipython crash handler. This was causing more problems than not,
3025 3042 as exceptions in the main thread (GUI code, typically) would
3026 3043 always show up as a 'crash', when they really weren't.
3027 3044
3028 3045 The colors and exception mode commands (%colors/%xmode) have been
3029 3046 synchronized to also take this into account, so users can get
3030 3047 verbose exceptions for their threaded code as well. I also added
3031 3048 support for activating pdb inside this exception handler as well,
3032 3049 so now GUI authors can use IPython's enhanced pdb at runtime.
3033 3050
3034 3051 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
3035 3052 true by default, and add it to the shipped ipythonrc file. Since
3036 3053 this asks the user before proceeding, I think it's OK to make it
3037 3054 true by default.
3038 3055
3039 3056 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
3040 3057 of the previous special-casing of input in the eval loop. I think
3041 3058 this is cleaner, as they really are commands and shouldn't have
3042 3059 a special role in the middle of the core code.
3043 3060
3044 3061 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
3045 3062
3046 3063 * IPython/iplib.py (edit_syntax_error): added support for
3047 3064 automatically reopening the editor if the file had a syntax error
3048 3065 in it. Thanks to scottt who provided the patch at:
3049 3066 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
3050 3067 version committed).
3051 3068
3052 3069 * IPython/iplib.py (handle_normal): add suport for multi-line
3053 3070 input with emtpy lines. This fixes
3054 3071 http://www.scipy.net/roundup/ipython/issue43 and a similar
3055 3072 discussion on the user list.
3056 3073
3057 3074 WARNING: a behavior change is necessarily introduced to support
3058 3075 blank lines: now a single blank line with whitespace does NOT
3059 3076 break the input loop, which means that when autoindent is on, by
3060 3077 default hitting return on the next (indented) line does NOT exit.
3061 3078
3062 3079 Instead, to exit a multiline input you can either have:
3063 3080
3064 3081 - TWO whitespace lines (just hit return again), or
3065 3082 - a single whitespace line of a different length than provided
3066 3083 by the autoindent (add or remove a space).
3067 3084
3068 3085 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
3069 3086 module to better organize all readline-related functionality.
3070 3087 I've deleted FlexCompleter and put all completion clases here.
3071 3088
3072 3089 * IPython/iplib.py (raw_input): improve indentation management.
3073 3090 It is now possible to paste indented code with autoindent on, and
3074 3091 the code is interpreted correctly (though it still looks bad on
3075 3092 screen, due to the line-oriented nature of ipython).
3076 3093 (MagicCompleter.complete): change behavior so that a TAB key on an
3077 3094 otherwise empty line actually inserts a tab, instead of completing
3078 3095 on the entire global namespace. This makes it easier to use the
3079 3096 TAB key for indentation. After a request by Hans Meine
3080 3097 <hans_meine-AT-gmx.net>
3081 3098 (_prefilter): add support so that typing plain 'exit' or 'quit'
3082 3099 does a sensible thing. Originally I tried to deviate as little as
3083 3100 possible from the default python behavior, but even that one may
3084 3101 change in this direction (thread on python-dev to that effect).
3085 3102 Regardless, ipython should do the right thing even if CPython's
3086 3103 '>>>' prompt doesn't.
3087 3104 (InteractiveShell): removed subclassing code.InteractiveConsole
3088 3105 class. By now we'd overridden just about all of its methods: I've
3089 3106 copied the remaining two over, and now ipython is a standalone
3090 3107 class. This will provide a clearer picture for the chainsaw
3091 3108 branch refactoring.
3092 3109
3093 3110 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
3094 3111
3095 3112 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
3096 3113 failures for objects which break when dir() is called on them.
3097 3114
3098 3115 * IPython/FlexCompleter.py (Completer.__init__): Added support for
3099 3116 distinct local and global namespaces in the completer API. This
3100 3117 change allows us to properly handle completion with distinct
3101 3118 scopes, including in embedded instances (this had never really
3102 3119 worked correctly).
3103 3120
3104 3121 Note: this introduces a change in the constructor for
3105 3122 MagicCompleter, as a new global_namespace parameter is now the
3106 3123 second argument (the others were bumped one position).
3107 3124
3108 3125 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
3109 3126
3110 3127 * IPython/iplib.py (embed_mainloop): fix tab-completion in
3111 3128 embedded instances (which can be done now thanks to Vivian's
3112 3129 frame-handling fixes for pdb).
3113 3130 (InteractiveShell.__init__): Fix namespace handling problem in
3114 3131 embedded instances. We were overwriting __main__ unconditionally,
3115 3132 and this should only be done for 'full' (non-embedded) IPython;
3116 3133 embedded instances must respect the caller's __main__. Thanks to
3117 3134 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
3118 3135
3119 3136 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
3120 3137
3121 3138 * setup.py: added download_url to setup(). This registers the
3122 3139 download address at PyPI, which is not only useful to humans
3123 3140 browsing the site, but is also picked up by setuptools (the Eggs
3124 3141 machinery). Thanks to Ville and R. Kern for the info/discussion
3125 3142 on this.
3126 3143
3127 3144 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
3128 3145
3129 3146 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
3130 3147 This brings a lot of nice functionality to the pdb mode, which now
3131 3148 has tab-completion, syntax highlighting, and better stack handling
3132 3149 than before. Many thanks to Vivian De Smedt
3133 3150 <vivian-AT-vdesmedt.com> for the original patches.
3134 3151
3135 3152 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
3136 3153
3137 3154 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
3138 3155 sequence to consistently accept the banner argument. The
3139 3156 inconsistency was tripping SAGE, thanks to Gary Zablackis
3140 3157 <gzabl-AT-yahoo.com> for the report.
3141 3158
3142 3159 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
3143 3160
3144 3161 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3145 3162 Fix bug where a naked 'alias' call in the ipythonrc file would
3146 3163 cause a crash. Bug reported by Jorgen Stenarson.
3147 3164
3148 3165 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
3149 3166
3150 3167 * IPython/ipmaker.py (make_IPython): cleanups which should improve
3151 3168 startup time.
3152 3169
3153 3170 * IPython/iplib.py (runcode): my globals 'fix' for embedded
3154 3171 instances had introduced a bug with globals in normal code. Now
3155 3172 it's working in all cases.
3156 3173
3157 3174 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
3158 3175 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
3159 3176 has been introduced to set the default case sensitivity of the
3160 3177 searches. Users can still select either mode at runtime on a
3161 3178 per-search basis.
3162 3179
3163 3180 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
3164 3181
3165 3182 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
3166 3183 attributes in wildcard searches for subclasses. Modified version
3167 3184 of a patch by Jorgen.
3168 3185
3169 3186 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
3170 3187
3171 3188 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
3172 3189 embedded instances. I added a user_global_ns attribute to the
3173 3190 InteractiveShell class to handle this.
3174 3191
3175 3192 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
3176 3193
3177 3194 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
3178 3195 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
3179 3196 (reported under win32, but may happen also in other platforms).
3180 3197 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
3181 3198
3182 3199 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
3183 3200
3184 3201 * IPython/Magic.py (magic_psearch): new support for wildcard
3185 3202 patterns. Now, typing ?a*b will list all names which begin with a
3186 3203 and end in b, for example. The %psearch magic has full
3187 3204 docstrings. Many thanks to Jörgen Stenarson
3188 3205 <jorgen.stenarson-AT-bostream.nu>, author of the patches
3189 3206 implementing this functionality.
3190 3207
3191 3208 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3192 3209
3193 3210 * Manual: fixed long-standing annoyance of double-dashes (as in
3194 3211 --prefix=~, for example) being stripped in the HTML version. This
3195 3212 is a latex2html bug, but a workaround was provided. Many thanks
3196 3213 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
3197 3214 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
3198 3215 rolling. This seemingly small issue had tripped a number of users
3199 3216 when first installing, so I'm glad to see it gone.
3200 3217
3201 3218 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
3202 3219
3203 3220 * IPython/Extensions/numeric_formats.py: fix missing import,
3204 3221 reported by Stephen Walton.
3205 3222
3206 3223 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
3207 3224
3208 3225 * IPython/demo.py: finish demo module, fully documented now.
3209 3226
3210 3227 * IPython/genutils.py (file_read): simple little utility to read a
3211 3228 file and ensure it's closed afterwards.
3212 3229
3213 3230 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
3214 3231
3215 3232 * IPython/demo.py (Demo.__init__): added support for individually
3216 3233 tagging blocks for automatic execution.
3217 3234
3218 3235 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
3219 3236 syntax-highlighted python sources, requested by John.
3220 3237
3221 3238 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
3222 3239
3223 3240 * IPython/demo.py (Demo.again): fix bug where again() blocks after
3224 3241 finishing.
3225 3242
3226 3243 * IPython/genutils.py (shlex_split): moved from Magic to here,
3227 3244 where all 2.2 compatibility stuff lives. I needed it for demo.py.
3228 3245
3229 3246 * IPython/demo.py (Demo.__init__): added support for silent
3230 3247 blocks, improved marks as regexps, docstrings written.
3231 3248 (Demo.__init__): better docstring, added support for sys.argv.
3232 3249
3233 3250 * IPython/genutils.py (marquee): little utility used by the demo
3234 3251 code, handy in general.
3235 3252
3236 3253 * IPython/demo.py (Demo.__init__): new class for interactive
3237 3254 demos. Not documented yet, I just wrote it in a hurry for
3238 3255 scipy'05. Will docstring later.
3239 3256
3240 3257 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
3241 3258
3242 3259 * IPython/Shell.py (sigint_handler): Drastic simplification which
3243 3260 also seems to make Ctrl-C work correctly across threads! This is
3244 3261 so simple, that I can't beleive I'd missed it before. Needs more
3245 3262 testing, though.
3246 3263 (KBINT): Never mind, revert changes. I'm sure I'd tried something
3247 3264 like this before...
3248 3265
3249 3266 * IPython/genutils.py (get_home_dir): add protection against
3250 3267 non-dirs in win32 registry.
3251 3268
3252 3269 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
3253 3270 bug where dict was mutated while iterating (pysh crash).
3254 3271
3255 3272 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
3256 3273
3257 3274 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
3258 3275 spurious newlines added by this routine. After a report by
3259 3276 F. Mantegazza.
3260 3277
3261 3278 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
3262 3279
3263 3280 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
3264 3281 calls. These were a leftover from the GTK 1.x days, and can cause
3265 3282 problems in certain cases (after a report by John Hunter).
3266 3283
3267 3284 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
3268 3285 os.getcwd() fails at init time. Thanks to patch from David Remahl
3269 3286 <chmod007-AT-mac.com>.
3270 3287 (InteractiveShell.__init__): prevent certain special magics from
3271 3288 being shadowed by aliases. Closes
3272 3289 http://www.scipy.net/roundup/ipython/issue41.
3273 3290
3274 3291 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
3275 3292
3276 3293 * IPython/iplib.py (InteractiveShell.complete): Added new
3277 3294 top-level completion method to expose the completion mechanism
3278 3295 beyond readline-based environments.
3279 3296
3280 3297 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
3281 3298
3282 3299 * tools/ipsvnc (svnversion): fix svnversion capture.
3283 3300
3284 3301 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
3285 3302 attribute to self, which was missing. Before, it was set by a
3286 3303 routine which in certain cases wasn't being called, so the
3287 3304 instance could end up missing the attribute. This caused a crash.
3288 3305 Closes http://www.scipy.net/roundup/ipython/issue40.
3289 3306
3290 3307 2005-08-16 Fernando Perez <fperez@colorado.edu>
3291 3308
3292 3309 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
3293 3310 contains non-string attribute. Closes
3294 3311 http://www.scipy.net/roundup/ipython/issue38.
3295 3312
3296 3313 2005-08-14 Fernando Perez <fperez@colorado.edu>
3297 3314
3298 3315 * tools/ipsvnc: Minor improvements, to add changeset info.
3299 3316
3300 3317 2005-08-12 Fernando Perez <fperez@colorado.edu>
3301 3318
3302 3319 * IPython/iplib.py (runsource): remove self.code_to_run_src
3303 3320 attribute. I realized this is nothing more than
3304 3321 '\n'.join(self.buffer), and having the same data in two different
3305 3322 places is just asking for synchronization bugs. This may impact
3306 3323 people who have custom exception handlers, so I need to warn
3307 3324 ipython-dev about it (F. Mantegazza may use them).
3308 3325
3309 3326 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
3310 3327
3311 3328 * IPython/genutils.py: fix 2.2 compatibility (generators)
3312 3329
3313 3330 2005-07-18 Fernando Perez <fperez@colorado.edu>
3314 3331
3315 3332 * IPython/genutils.py (get_home_dir): fix to help users with
3316 3333 invalid $HOME under win32.
3317 3334
3318 3335 2005-07-17 Fernando Perez <fperez@colorado.edu>
3319 3336
3320 3337 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
3321 3338 some old hacks and clean up a bit other routines; code should be
3322 3339 simpler and a bit faster.
3323 3340
3324 3341 * IPython/iplib.py (interact): removed some last-resort attempts
3325 3342 to survive broken stdout/stderr. That code was only making it
3326 3343 harder to abstract out the i/o (necessary for gui integration),
3327 3344 and the crashes it could prevent were extremely rare in practice
3328 3345 (besides being fully user-induced in a pretty violent manner).
3329 3346
3330 3347 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
3331 3348 Nothing major yet, but the code is simpler to read; this should
3332 3349 make it easier to do more serious modifications in the future.
3333 3350
3334 3351 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
3335 3352 which broke in .15 (thanks to a report by Ville).
3336 3353
3337 3354 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
3338 3355 be quite correct, I know next to nothing about unicode). This
3339 3356 will allow unicode strings to be used in prompts, amongst other
3340 3357 cases. It also will prevent ipython from crashing when unicode
3341 3358 shows up unexpectedly in many places. If ascii encoding fails, we
3342 3359 assume utf_8. Currently the encoding is not a user-visible
3343 3360 setting, though it could be made so if there is demand for it.
3344 3361
3345 3362 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
3346 3363
3347 3364 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
3348 3365
3349 3366 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
3350 3367
3351 3368 * IPython/genutils.py: Add 2.2 compatibility here, so all other
3352 3369 code can work transparently for 2.2/2.3.
3353 3370
3354 3371 2005-07-16 Fernando Perez <fperez@colorado.edu>
3355 3372
3356 3373 * IPython/ultraTB.py (ExceptionColors): Make a global variable
3357 3374 out of the color scheme table used for coloring exception
3358 3375 tracebacks. This allows user code to add new schemes at runtime.
3359 3376 This is a minimally modified version of the patch at
3360 3377 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
3361 3378 for the contribution.
3362 3379
3363 3380 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
3364 3381 slightly modified version of the patch in
3365 3382 http://www.scipy.net/roundup/ipython/issue34, which also allows me
3366 3383 to remove the previous try/except solution (which was costlier).
3367 3384 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
3368 3385
3369 3386 2005-06-08 Fernando Perez <fperez@colorado.edu>
3370 3387
3371 3388 * IPython/iplib.py (write/write_err): Add methods to abstract all
3372 3389 I/O a bit more.
3373 3390
3374 3391 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
3375 3392 warning, reported by Aric Hagberg, fix by JD Hunter.
3376 3393
3377 3394 2005-06-02 *** Released version 0.6.15
3378 3395
3379 3396 2005-06-01 Fernando Perez <fperez@colorado.edu>
3380 3397
3381 3398 * IPython/iplib.py (MagicCompleter.file_matches): Fix
3382 3399 tab-completion of filenames within open-quoted strings. Note that
3383 3400 this requires that in ~/.ipython/ipythonrc, users change the
3384 3401 readline delimiters configuration to read:
3385 3402
3386 3403 readline_remove_delims -/~
3387 3404
3388 3405
3389 3406 2005-05-31 *** Released version 0.6.14
3390 3407
3391 3408 2005-05-29 Fernando Perez <fperez@colorado.edu>
3392 3409
3393 3410 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
3394 3411 with files not on the filesystem. Reported by Eliyahu Sandler
3395 3412 <eli@gondolin.net>
3396 3413
3397 3414 2005-05-22 Fernando Perez <fperez@colorado.edu>
3398 3415
3399 3416 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
3400 3417 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
3401 3418
3402 3419 2005-05-19 Fernando Perez <fperez@colorado.edu>
3403 3420
3404 3421 * IPython/iplib.py (safe_execfile): close a file which could be
3405 3422 left open (causing problems in win32, which locks open files).
3406 3423 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
3407 3424
3408 3425 2005-05-18 Fernando Perez <fperez@colorado.edu>
3409 3426
3410 3427 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
3411 3428 keyword arguments correctly to safe_execfile().
3412 3429
3413 3430 2005-05-13 Fernando Perez <fperez@colorado.edu>
3414 3431
3415 3432 * ipython.1: Added info about Qt to manpage, and threads warning
3416 3433 to usage page (invoked with --help).
3417 3434
3418 3435 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
3419 3436 new matcher (it goes at the end of the priority list) to do
3420 3437 tab-completion on named function arguments. Submitted by George
3421 3438 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
3422 3439 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
3423 3440 for more details.
3424 3441
3425 3442 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3426 3443 SystemExit exceptions in the script being run. Thanks to a report
3427 3444 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3428 3445 producing very annoying behavior when running unit tests.
3429 3446
3430 3447 2005-05-12 Fernando Perez <fperez@colorado.edu>
3431 3448
3432 3449 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3433 3450 which I'd broken (again) due to a changed regexp. In the process,
3434 3451 added ';' as an escape to auto-quote the whole line without
3435 3452 splitting its arguments. Thanks to a report by Jerry McRae
3436 3453 <qrs0xyc02-AT-sneakemail.com>.
3437 3454
3438 3455 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3439 3456 possible crashes caused by a TokenError. Reported by Ed Schofield
3440 3457 <schofield-AT-ftw.at>.
3441 3458
3442 3459 2005-05-06 Fernando Perez <fperez@colorado.edu>
3443 3460
3444 3461 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3445 3462
3446 3463 2005-04-29 Fernando Perez <fperez@colorado.edu>
3447 3464
3448 3465 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3449 3466 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3450 3467 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3451 3468 which provides support for Qt interactive usage (similar to the
3452 3469 existing one for WX and GTK). This had been often requested.
3453 3470
3454 3471 2005-04-14 *** Released version 0.6.13
3455 3472
3456 3473 2005-04-08 Fernando Perez <fperez@colorado.edu>
3457 3474
3458 3475 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3459 3476 from _ofind, which gets called on almost every input line. Now,
3460 3477 we only try to get docstrings if they are actually going to be
3461 3478 used (the overhead of fetching unnecessary docstrings can be
3462 3479 noticeable for certain objects, such as Pyro proxies).
3463 3480
3464 3481 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3465 3482 for completers. For some reason I had been passing them the state
3466 3483 variable, which completers never actually need, and was in
3467 3484 conflict with the rlcompleter API. Custom completers ONLY need to
3468 3485 take the text parameter.
3469 3486
3470 3487 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3471 3488 work correctly in pysh. I've also moved all the logic which used
3472 3489 to be in pysh.py here, which will prevent problems with future
3473 3490 upgrades. However, this time I must warn users to update their
3474 3491 pysh profile to include the line
3475 3492
3476 3493 import_all IPython.Extensions.InterpreterExec
3477 3494
3478 3495 because otherwise things won't work for them. They MUST also
3479 3496 delete pysh.py and the line
3480 3497
3481 3498 execfile pysh.py
3482 3499
3483 3500 from their ipythonrc-pysh.
3484 3501
3485 3502 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3486 3503 robust in the face of objects whose dir() returns non-strings
3487 3504 (which it shouldn't, but some broken libs like ITK do). Thanks to
3488 3505 a patch by John Hunter (implemented differently, though). Also
3489 3506 minor improvements by using .extend instead of + on lists.
3490 3507
3491 3508 * pysh.py:
3492 3509
3493 3510 2005-04-06 Fernando Perez <fperez@colorado.edu>
3494 3511
3495 3512 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3496 3513 by default, so that all users benefit from it. Those who don't
3497 3514 want it can still turn it off.
3498 3515
3499 3516 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3500 3517 config file, I'd forgotten about this, so users were getting it
3501 3518 off by default.
3502 3519
3503 3520 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3504 3521 consistency. Now magics can be called in multiline statements,
3505 3522 and python variables can be expanded in magic calls via $var.
3506 3523 This makes the magic system behave just like aliases or !system
3507 3524 calls.
3508 3525
3509 3526 2005-03-28 Fernando Perez <fperez@colorado.edu>
3510 3527
3511 3528 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3512 3529 expensive string additions for building command. Add support for
3513 3530 trailing ';' when autocall is used.
3514 3531
3515 3532 2005-03-26 Fernando Perez <fperez@colorado.edu>
3516 3533
3517 3534 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3518 3535 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3519 3536 ipython.el robust against prompts with any number of spaces
3520 3537 (including 0) after the ':' character.
3521 3538
3522 3539 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3523 3540 continuation prompt, which misled users to think the line was
3524 3541 already indented. Closes debian Bug#300847, reported to me by
3525 3542 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3526 3543
3527 3544 2005-03-23 Fernando Perez <fperez@colorado.edu>
3528 3545
3529 3546 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3530 3547 properly aligned if they have embedded newlines.
3531 3548
3532 3549 * IPython/iplib.py (runlines): Add a public method to expose
3533 3550 IPython's code execution machinery, so that users can run strings
3534 3551 as if they had been typed at the prompt interactively.
3535 3552 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3536 3553 methods which can call the system shell, but with python variable
3537 3554 expansion. The three such methods are: __IPYTHON__.system,
3538 3555 .getoutput and .getoutputerror. These need to be documented in a
3539 3556 'public API' section (to be written) of the manual.
3540 3557
3541 3558 2005-03-20 Fernando Perez <fperez@colorado.edu>
3542 3559
3543 3560 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3544 3561 for custom exception handling. This is quite powerful, and it
3545 3562 allows for user-installable exception handlers which can trap
3546 3563 custom exceptions at runtime and treat them separately from
3547 3564 IPython's default mechanisms. At the request of Frédéric
3548 3565 Mantegazza <mantegazza-AT-ill.fr>.
3549 3566 (InteractiveShell.set_custom_completer): public API function to
3550 3567 add new completers at runtime.
3551 3568
3552 3569 2005-03-19 Fernando Perez <fperez@colorado.edu>
3553 3570
3554 3571 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3555 3572 allow objects which provide their docstrings via non-standard
3556 3573 mechanisms (like Pyro proxies) to still be inspected by ipython's
3557 3574 ? system.
3558 3575
3559 3576 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3560 3577 automatic capture system. I tried quite hard to make it work
3561 3578 reliably, and simply failed. I tried many combinations with the
3562 3579 subprocess module, but eventually nothing worked in all needed
3563 3580 cases (not blocking stdin for the child, duplicating stdout
3564 3581 without blocking, etc). The new %sc/%sx still do capture to these
3565 3582 magical list/string objects which make shell use much more
3566 3583 conveninent, so not all is lost.
3567 3584
3568 3585 XXX - FIX MANUAL for the change above!
3569 3586
3570 3587 (runsource): I copied code.py's runsource() into ipython to modify
3571 3588 it a bit. Now the code object and source to be executed are
3572 3589 stored in ipython. This makes this info accessible to third-party
3573 3590 tools, like custom exception handlers. After a request by Frédéric
3574 3591 Mantegazza <mantegazza-AT-ill.fr>.
3575 3592
3576 3593 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3577 3594 history-search via readline (like C-p/C-n). I'd wanted this for a
3578 3595 long time, but only recently found out how to do it. For users
3579 3596 who already have their ipythonrc files made and want this, just
3580 3597 add:
3581 3598
3582 3599 readline_parse_and_bind "\e[A": history-search-backward
3583 3600 readline_parse_and_bind "\e[B": history-search-forward
3584 3601
3585 3602 2005-03-18 Fernando Perez <fperez@colorado.edu>
3586 3603
3587 3604 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3588 3605 LSString and SList classes which allow transparent conversions
3589 3606 between list mode and whitespace-separated string.
3590 3607 (magic_r): Fix recursion problem in %r.
3591 3608
3592 3609 * IPython/genutils.py (LSString): New class to be used for
3593 3610 automatic storage of the results of all alias/system calls in _o
3594 3611 and _e (stdout/err). These provide a .l/.list attribute which
3595 3612 does automatic splitting on newlines. This means that for most
3596 3613 uses, you'll never need to do capturing of output with %sc/%sx
3597 3614 anymore, since ipython keeps this always done for you. Note that
3598 3615 only the LAST results are stored, the _o/e variables are
3599 3616 overwritten on each call. If you need to save their contents
3600 3617 further, simply bind them to any other name.
3601 3618
3602 3619 2005-03-17 Fernando Perez <fperez@colorado.edu>
3603 3620
3604 3621 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3605 3622 prompt namespace handling.
3606 3623
3607 3624 2005-03-16 Fernando Perez <fperez@colorado.edu>
3608 3625
3609 3626 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3610 3627 classic prompts to be '>>> ' (final space was missing, and it
3611 3628 trips the emacs python mode).
3612 3629 (BasePrompt.__str__): Added safe support for dynamic prompt
3613 3630 strings. Now you can set your prompt string to be '$x', and the
3614 3631 value of x will be printed from your interactive namespace. The
3615 3632 interpolation syntax includes the full Itpl support, so
3616 3633 ${foo()+x+bar()} is a valid prompt string now, and the function
3617 3634 calls will be made at runtime.
3618 3635
3619 3636 2005-03-15 Fernando Perez <fperez@colorado.edu>
3620 3637
3621 3638 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3622 3639 avoid name clashes in pylab. %hist still works, it just forwards
3623 3640 the call to %history.
3624 3641
3625 3642 2005-03-02 *** Released version 0.6.12
3626 3643
3627 3644 2005-03-02 Fernando Perez <fperez@colorado.edu>
3628 3645
3629 3646 * IPython/iplib.py (handle_magic): log magic calls properly as
3630 3647 ipmagic() function calls.
3631 3648
3632 3649 * IPython/Magic.py (magic_time): Improved %time to support
3633 3650 statements and provide wall-clock as well as CPU time.
3634 3651
3635 3652 2005-02-27 Fernando Perez <fperez@colorado.edu>
3636 3653
3637 3654 * IPython/hooks.py: New hooks module, to expose user-modifiable
3638 3655 IPython functionality in a clean manner. For now only the editor
3639 3656 hook is actually written, and other thigns which I intend to turn
3640 3657 into proper hooks aren't yet there. The display and prefilter
3641 3658 stuff, for example, should be hooks. But at least now the
3642 3659 framework is in place, and the rest can be moved here with more
3643 3660 time later. IPython had had a .hooks variable for a long time for
3644 3661 this purpose, but I'd never actually used it for anything.
3645 3662
3646 3663 2005-02-26 Fernando Perez <fperez@colorado.edu>
3647 3664
3648 3665 * IPython/ipmaker.py (make_IPython): make the default ipython
3649 3666 directory be called _ipython under win32, to follow more the
3650 3667 naming peculiarities of that platform (where buggy software like
3651 3668 Visual Sourcesafe breaks with .named directories). Reported by
3652 3669 Ville Vainio.
3653 3670
3654 3671 2005-02-23 Fernando Perez <fperez@colorado.edu>
3655 3672
3656 3673 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3657 3674 auto_aliases for win32 which were causing problems. Users can
3658 3675 define the ones they personally like.
3659 3676
3660 3677 2005-02-21 Fernando Perez <fperez@colorado.edu>
3661 3678
3662 3679 * IPython/Magic.py (magic_time): new magic to time execution of
3663 3680 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3664 3681
3665 3682 2005-02-19 Fernando Perez <fperez@colorado.edu>
3666 3683
3667 3684 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3668 3685 into keys (for prompts, for example).
3669 3686
3670 3687 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3671 3688 prompts in case users want them. This introduces a small behavior
3672 3689 change: ipython does not automatically add a space to all prompts
3673 3690 anymore. To get the old prompts with a space, users should add it
3674 3691 manually to their ipythonrc file, so for example prompt_in1 should
3675 3692 now read 'In [\#]: ' instead of 'In [\#]:'.
3676 3693 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3677 3694 file) to control left-padding of secondary prompts.
3678 3695
3679 3696 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3680 3697 the profiler can't be imported. Fix for Debian, which removed
3681 3698 profile.py because of License issues. I applied a slightly
3682 3699 modified version of the original Debian patch at
3683 3700 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3684 3701
3685 3702 2005-02-17 Fernando Perez <fperez@colorado.edu>
3686 3703
3687 3704 * IPython/genutils.py (native_line_ends): Fix bug which would
3688 3705 cause improper line-ends under win32 b/c I was not opening files
3689 3706 in binary mode. Bug report and fix thanks to Ville.
3690 3707
3691 3708 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3692 3709 trying to catch spurious foo[1] autocalls. My fix actually broke
3693 3710 ',/' autoquote/call with explicit escape (bad regexp).
3694 3711
3695 3712 2005-02-15 *** Released version 0.6.11
3696 3713
3697 3714 2005-02-14 Fernando Perez <fperez@colorado.edu>
3698 3715
3699 3716 * IPython/background_jobs.py: New background job management
3700 3717 subsystem. This is implemented via a new set of classes, and
3701 3718 IPython now provides a builtin 'jobs' object for background job
3702 3719 execution. A convenience %bg magic serves as a lightweight
3703 3720 frontend for starting the more common type of calls. This was
3704 3721 inspired by discussions with B. Granger and the BackgroundCommand
3705 3722 class described in the book Python Scripting for Computational
3706 3723 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3707 3724 (although ultimately no code from this text was used, as IPython's
3708 3725 system is a separate implementation).
3709 3726
3710 3727 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3711 3728 to control the completion of single/double underscore names
3712 3729 separately. As documented in the example ipytonrc file, the
3713 3730 readline_omit__names variable can now be set to 2, to omit even
3714 3731 single underscore names. Thanks to a patch by Brian Wong
3715 3732 <BrianWong-AT-AirgoNetworks.Com>.
3716 3733 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3717 3734 be autocalled as foo([1]) if foo were callable. A problem for
3718 3735 things which are both callable and implement __getitem__.
3719 3736 (init_readline): Fix autoindentation for win32. Thanks to a patch
3720 3737 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3721 3738
3722 3739 2005-02-12 Fernando Perez <fperez@colorado.edu>
3723 3740
3724 3741 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3725 3742 which I had written long ago to sort out user error messages which
3726 3743 may occur during startup. This seemed like a good idea initially,
3727 3744 but it has proven a disaster in retrospect. I don't want to
3728 3745 change much code for now, so my fix is to set the internal 'debug'
3729 3746 flag to true everywhere, whose only job was precisely to control
3730 3747 this subsystem. This closes issue 28 (as well as avoiding all
3731 3748 sorts of strange hangups which occur from time to time).
3732 3749
3733 3750 2005-02-07 Fernando Perez <fperez@colorado.edu>
3734 3751
3735 3752 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3736 3753 previous call produced a syntax error.
3737 3754
3738 3755 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3739 3756 classes without constructor.
3740 3757
3741 3758 2005-02-06 Fernando Perez <fperez@colorado.edu>
3742 3759
3743 3760 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3744 3761 completions with the results of each matcher, so we return results
3745 3762 to the user from all namespaces. This breaks with ipython
3746 3763 tradition, but I think it's a nicer behavior. Now you get all
3747 3764 possible completions listed, from all possible namespaces (python,
3748 3765 filesystem, magics...) After a request by John Hunter
3749 3766 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3750 3767
3751 3768 2005-02-05 Fernando Perez <fperez@colorado.edu>
3752 3769
3753 3770 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3754 3771 the call had quote characters in it (the quotes were stripped).
3755 3772
3756 3773 2005-01-31 Fernando Perez <fperez@colorado.edu>
3757 3774
3758 3775 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3759 3776 Itpl.itpl() to make the code more robust against psyco
3760 3777 optimizations.
3761 3778
3762 3779 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3763 3780 of causing an exception. Quicker, cleaner.
3764 3781
3765 3782 2005-01-28 Fernando Perez <fperez@colorado.edu>
3766 3783
3767 3784 * scripts/ipython_win_post_install.py (install): hardcode
3768 3785 sys.prefix+'python.exe' as the executable path. It turns out that
3769 3786 during the post-installation run, sys.executable resolves to the
3770 3787 name of the binary installer! I should report this as a distutils
3771 3788 bug, I think. I updated the .10 release with this tiny fix, to
3772 3789 avoid annoying the lists further.
3773 3790
3774 3791 2005-01-27 *** Released version 0.6.10
3775 3792
3776 3793 2005-01-27 Fernando Perez <fperez@colorado.edu>
3777 3794
3778 3795 * IPython/numutils.py (norm): Added 'inf' as optional name for
3779 3796 L-infinity norm, included references to mathworld.com for vector
3780 3797 norm definitions.
3781 3798 (amin/amax): added amin/amax for array min/max. Similar to what
3782 3799 pylab ships with after the recent reorganization of names.
3783 3800 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3784 3801
3785 3802 * ipython.el: committed Alex's recent fixes and improvements.
3786 3803 Tested with python-mode from CVS, and it looks excellent. Since
3787 3804 python-mode hasn't released anything in a while, I'm temporarily
3788 3805 putting a copy of today's CVS (v 4.70) of python-mode in:
3789 3806 http://ipython.scipy.org/tmp/python-mode.el
3790 3807
3791 3808 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3792 3809 sys.executable for the executable name, instead of assuming it's
3793 3810 called 'python.exe' (the post-installer would have produced broken
3794 3811 setups on systems with a differently named python binary).
3795 3812
3796 3813 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3797 3814 references to os.linesep, to make the code more
3798 3815 platform-independent. This is also part of the win32 coloring
3799 3816 fixes.
3800 3817
3801 3818 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3802 3819 lines, which actually cause coloring bugs because the length of
3803 3820 the line is very difficult to correctly compute with embedded
3804 3821 escapes. This was the source of all the coloring problems under
3805 3822 Win32. I think that _finally_, Win32 users have a properly
3806 3823 working ipython in all respects. This would never have happened
3807 3824 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3808 3825
3809 3826 2005-01-26 *** Released version 0.6.9
3810 3827
3811 3828 2005-01-25 Fernando Perez <fperez@colorado.edu>
3812 3829
3813 3830 * setup.py: finally, we have a true Windows installer, thanks to
3814 3831 the excellent work of Viktor Ransmayr
3815 3832 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3816 3833 Windows users. The setup routine is quite a bit cleaner thanks to
3817 3834 this, and the post-install script uses the proper functions to
3818 3835 allow a clean de-installation using the standard Windows Control
3819 3836 Panel.
3820 3837
3821 3838 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3822 3839 environment variable under all OSes (including win32) if
3823 3840 available. This will give consistency to win32 users who have set
3824 3841 this variable for any reason. If os.environ['HOME'] fails, the
3825 3842 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3826 3843
3827 3844 2005-01-24 Fernando Perez <fperez@colorado.edu>
3828 3845
3829 3846 * IPython/numutils.py (empty_like): add empty_like(), similar to
3830 3847 zeros_like() but taking advantage of the new empty() Numeric routine.
3831 3848
3832 3849 2005-01-23 *** Released version 0.6.8
3833 3850
3834 3851 2005-01-22 Fernando Perez <fperez@colorado.edu>
3835 3852
3836 3853 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3837 3854 automatic show() calls. After discussing things with JDH, it
3838 3855 turns out there are too many corner cases where this can go wrong.
3839 3856 It's best not to try to be 'too smart', and simply have ipython
3840 3857 reproduce as much as possible the default behavior of a normal
3841 3858 python shell.
3842 3859
3843 3860 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3844 3861 line-splitting regexp and _prefilter() to avoid calling getattr()
3845 3862 on assignments. This closes
3846 3863 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3847 3864 readline uses getattr(), so a simple <TAB> keypress is still
3848 3865 enough to trigger getattr() calls on an object.
3849 3866
3850 3867 2005-01-21 Fernando Perez <fperez@colorado.edu>
3851 3868
3852 3869 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3853 3870 docstring under pylab so it doesn't mask the original.
3854 3871
3855 3872 2005-01-21 *** Released version 0.6.7
3856 3873
3857 3874 2005-01-21 Fernando Perez <fperez@colorado.edu>
3858 3875
3859 3876 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3860 3877 signal handling for win32 users in multithreaded mode.
3861 3878
3862 3879 2005-01-17 Fernando Perez <fperez@colorado.edu>
3863 3880
3864 3881 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3865 3882 instances with no __init__. After a crash report by Norbert Nemec
3866 3883 <Norbert-AT-nemec-online.de>.
3867 3884
3868 3885 2005-01-14 Fernando Perez <fperez@colorado.edu>
3869 3886
3870 3887 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3871 3888 names for verbose exceptions, when multiple dotted names and the
3872 3889 'parent' object were present on the same line.
3873 3890
3874 3891 2005-01-11 Fernando Perez <fperez@colorado.edu>
3875 3892
3876 3893 * IPython/genutils.py (flag_calls): new utility to trap and flag
3877 3894 calls in functions. I need it to clean up matplotlib support.
3878 3895 Also removed some deprecated code in genutils.
3879 3896
3880 3897 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3881 3898 that matplotlib scripts called with %run, which don't call show()
3882 3899 themselves, still have their plotting windows open.
3883 3900
3884 3901 2005-01-05 Fernando Perez <fperez@colorado.edu>
3885 3902
3886 3903 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3887 3904 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3888 3905
3889 3906 2004-12-19 Fernando Perez <fperez@colorado.edu>
3890 3907
3891 3908 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3892 3909 parent_runcode, which was an eyesore. The same result can be
3893 3910 obtained with Python's regular superclass mechanisms.
3894 3911
3895 3912 2004-12-17 Fernando Perez <fperez@colorado.edu>
3896 3913
3897 3914 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3898 3915 reported by Prabhu.
3899 3916 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3900 3917 sys.stderr) instead of explicitly calling sys.stderr. This helps
3901 3918 maintain our I/O abstractions clean, for future GUI embeddings.
3902 3919
3903 3920 * IPython/genutils.py (info): added new utility for sys.stderr
3904 3921 unified info message handling (thin wrapper around warn()).
3905 3922
3906 3923 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3907 3924 composite (dotted) names on verbose exceptions.
3908 3925 (VerboseTB.nullrepr): harden against another kind of errors which
3909 3926 Python's inspect module can trigger, and which were crashing
3910 3927 IPython. Thanks to a report by Marco Lombardi
3911 3928 <mlombard-AT-ma010192.hq.eso.org>.
3912 3929
3913 3930 2004-12-13 *** Released version 0.6.6
3914 3931
3915 3932 2004-12-12 Fernando Perez <fperez@colorado.edu>
3916 3933
3917 3934 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3918 3935 generated by pygtk upon initialization if it was built without
3919 3936 threads (for matplotlib users). After a crash reported by
3920 3937 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3921 3938
3922 3939 * IPython/ipmaker.py (make_IPython): fix small bug in the
3923 3940 import_some parameter for multiple imports.
3924 3941
3925 3942 * IPython/iplib.py (ipmagic): simplified the interface of
3926 3943 ipmagic() to take a single string argument, just as it would be
3927 3944 typed at the IPython cmd line.
3928 3945 (ipalias): Added new ipalias() with an interface identical to
3929 3946 ipmagic(). This completes exposing a pure python interface to the
3930 3947 alias and magic system, which can be used in loops or more complex
3931 3948 code where IPython's automatic line mangling is not active.
3932 3949
3933 3950 * IPython/genutils.py (timing): changed interface of timing to
3934 3951 simply run code once, which is the most common case. timings()
3935 3952 remains unchanged, for the cases where you want multiple runs.
3936 3953
3937 3954 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3938 3955 bug where Python2.2 crashes with exec'ing code which does not end
3939 3956 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3940 3957 before.
3941 3958
3942 3959 2004-12-10 Fernando Perez <fperez@colorado.edu>
3943 3960
3944 3961 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3945 3962 -t to -T, to accomodate the new -t flag in %run (the %run and
3946 3963 %prun options are kind of intermixed, and it's not easy to change
3947 3964 this with the limitations of python's getopt).
3948 3965
3949 3966 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3950 3967 the execution of scripts. It's not as fine-tuned as timeit.py,
3951 3968 but it works from inside ipython (and under 2.2, which lacks
3952 3969 timeit.py). Optionally a number of runs > 1 can be given for
3953 3970 timing very short-running code.
3954 3971
3955 3972 * IPython/genutils.py (uniq_stable): new routine which returns a
3956 3973 list of unique elements in any iterable, but in stable order of
3957 3974 appearance. I needed this for the ultraTB fixes, and it's a handy
3958 3975 utility.
3959 3976
3960 3977 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3961 3978 dotted names in Verbose exceptions. This had been broken since
3962 3979 the very start, now x.y will properly be printed in a Verbose
3963 3980 traceback, instead of x being shown and y appearing always as an
3964 3981 'undefined global'. Getting this to work was a bit tricky,
3965 3982 because by default python tokenizers are stateless. Saved by
3966 3983 python's ability to easily add a bit of state to an arbitrary
3967 3984 function (without needing to build a full-blown callable object).
3968 3985
3969 3986 Also big cleanup of this code, which had horrendous runtime
3970 3987 lookups of zillions of attributes for colorization. Moved all
3971 3988 this code into a few templates, which make it cleaner and quicker.
3972 3989
3973 3990 Printout quality was also improved for Verbose exceptions: one
3974 3991 variable per line, and memory addresses are printed (this can be
3975 3992 quite handy in nasty debugging situations, which is what Verbose
3976 3993 is for).
3977 3994
3978 3995 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3979 3996 the command line as scripts to be loaded by embedded instances.
3980 3997 Doing so has the potential for an infinite recursion if there are
3981 3998 exceptions thrown in the process. This fixes a strange crash
3982 3999 reported by Philippe MULLER <muller-AT-irit.fr>.
3983 4000
3984 4001 2004-12-09 Fernando Perez <fperez@colorado.edu>
3985 4002
3986 4003 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3987 4004 to reflect new names in matplotlib, which now expose the
3988 4005 matlab-compatible interface via a pylab module instead of the
3989 4006 'matlab' name. The new code is backwards compatible, so users of
3990 4007 all matplotlib versions are OK. Patch by J. Hunter.
3991 4008
3992 4009 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3993 4010 of __init__ docstrings for instances (class docstrings are already
3994 4011 automatically printed). Instances with customized docstrings
3995 4012 (indep. of the class) are also recognized and all 3 separate
3996 4013 docstrings are printed (instance, class, constructor). After some
3997 4014 comments/suggestions by J. Hunter.
3998 4015
3999 4016 2004-12-05 Fernando Perez <fperez@colorado.edu>
4000 4017
4001 4018 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
4002 4019 warnings when tab-completion fails and triggers an exception.
4003 4020
4004 4021 2004-12-03 Fernando Perez <fperez@colorado.edu>
4005 4022
4006 4023 * IPython/Magic.py (magic_prun): Fix bug where an exception would
4007 4024 be triggered when using 'run -p'. An incorrect option flag was
4008 4025 being set ('d' instead of 'D').
4009 4026 (manpage): fix missing escaped \- sign.
4010 4027
4011 4028 2004-11-30 *** Released version 0.6.5
4012 4029
4013 4030 2004-11-30 Fernando Perez <fperez@colorado.edu>
4014 4031
4015 4032 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
4016 4033 setting with -d option.
4017 4034
4018 4035 * setup.py (docfiles): Fix problem where the doc glob I was using
4019 4036 was COMPLETELY BROKEN. It was giving the right files by pure
4020 4037 accident, but failed once I tried to include ipython.el. Note:
4021 4038 glob() does NOT allow you to do exclusion on multiple endings!
4022 4039
4023 4040 2004-11-29 Fernando Perez <fperez@colorado.edu>
4024 4041
4025 4042 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
4026 4043 the manpage as the source. Better formatting & consistency.
4027 4044
4028 4045 * IPython/Magic.py (magic_run): Added new -d option, to run
4029 4046 scripts under the control of the python pdb debugger. Note that
4030 4047 this required changing the %prun option -d to -D, to avoid a clash
4031 4048 (since %run must pass options to %prun, and getopt is too dumb to
4032 4049 handle options with string values with embedded spaces). Thanks
4033 4050 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
4034 4051 (magic_who_ls): added type matching to %who and %whos, so that one
4035 4052 can filter their output to only include variables of certain
4036 4053 types. Another suggestion by Matthew.
4037 4054 (magic_whos): Added memory summaries in kb and Mb for arrays.
4038 4055 (magic_who): Improve formatting (break lines every 9 vars).
4039 4056
4040 4057 2004-11-28 Fernando Perez <fperez@colorado.edu>
4041 4058
4042 4059 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
4043 4060 cache when empty lines were present.
4044 4061
4045 4062 2004-11-24 Fernando Perez <fperez@colorado.edu>
4046 4063
4047 4064 * IPython/usage.py (__doc__): document the re-activated threading
4048 4065 options for WX and GTK.
4049 4066
4050 4067 2004-11-23 Fernando Perez <fperez@colorado.edu>
4051 4068
4052 4069 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
4053 4070 the -wthread and -gthread options, along with a new -tk one to try
4054 4071 and coordinate Tk threading with wx/gtk. The tk support is very
4055 4072 platform dependent, since it seems to require Tcl and Tk to be
4056 4073 built with threads (Fedora1/2 appears NOT to have it, but in
4057 4074 Prabhu's Debian boxes it works OK). But even with some Tk
4058 4075 limitations, this is a great improvement.
4059 4076
4060 4077 * IPython/Prompts.py (prompt_specials_color): Added \t for time
4061 4078 info in user prompts. Patch by Prabhu.
4062 4079
4063 4080 2004-11-18 Fernando Perez <fperez@colorado.edu>
4064 4081
4065 4082 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
4066 4083 EOFErrors and bail, to avoid infinite loops if a non-terminating
4067 4084 file is fed into ipython. Patch submitted in issue 19 by user,
4068 4085 many thanks.
4069 4086
4070 4087 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
4071 4088 autoquote/parens in continuation prompts, which can cause lots of
4072 4089 problems. Closes roundup issue 20.
4073 4090
4074 4091 2004-11-17 Fernando Perez <fperez@colorado.edu>
4075 4092
4076 4093 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
4077 4094 reported as debian bug #280505. I'm not sure my local changelog
4078 4095 entry has the proper debian format (Jack?).
4079 4096
4080 4097 2004-11-08 *** Released version 0.6.4
4081 4098
4082 4099 2004-11-08 Fernando Perez <fperez@colorado.edu>
4083 4100
4084 4101 * IPython/iplib.py (init_readline): Fix exit message for Windows
4085 4102 when readline is active. Thanks to a report by Eric Jones
4086 4103 <eric-AT-enthought.com>.
4087 4104
4088 4105 2004-11-07 Fernando Perez <fperez@colorado.edu>
4089 4106
4090 4107 * IPython/genutils.py (page): Add a trap for OSError exceptions,
4091 4108 sometimes seen by win2k/cygwin users.
4092 4109
4093 4110 2004-11-06 Fernando Perez <fperez@colorado.edu>
4094 4111
4095 4112 * IPython/iplib.py (interact): Change the handling of %Exit from
4096 4113 trying to propagate a SystemExit to an internal ipython flag.
4097 4114 This is less elegant than using Python's exception mechanism, but
4098 4115 I can't get that to work reliably with threads, so under -pylab
4099 4116 %Exit was hanging IPython. Cross-thread exception handling is
4100 4117 really a bitch. Thaks to a bug report by Stephen Walton
4101 4118 <stephen.walton-AT-csun.edu>.
4102 4119
4103 4120 2004-11-04 Fernando Perez <fperez@colorado.edu>
4104 4121
4105 4122 * IPython/iplib.py (raw_input_original): store a pointer to the
4106 4123 true raw_input to harden against code which can modify it
4107 4124 (wx.py.PyShell does this and would otherwise crash ipython).
4108 4125 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
4109 4126
4110 4127 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
4111 4128 Ctrl-C problem, which does not mess up the input line.
4112 4129
4113 4130 2004-11-03 Fernando Perez <fperez@colorado.edu>
4114 4131
4115 4132 * IPython/Release.py: Changed licensing to BSD, in all files.
4116 4133 (name): lowercase name for tarball/RPM release.
4117 4134
4118 4135 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
4119 4136 use throughout ipython.
4120 4137
4121 4138 * IPython/Magic.py (Magic._ofind): Switch to using the new
4122 4139 OInspect.getdoc() function.
4123 4140
4124 4141 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
4125 4142 of the line currently being canceled via Ctrl-C. It's extremely
4126 4143 ugly, but I don't know how to do it better (the problem is one of
4127 4144 handling cross-thread exceptions).
4128 4145
4129 4146 2004-10-28 Fernando Perez <fperez@colorado.edu>
4130 4147
4131 4148 * IPython/Shell.py (signal_handler): add signal handlers to trap
4132 4149 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
4133 4150 report by Francesc Alted.
4134 4151
4135 4152 2004-10-21 Fernando Perez <fperez@colorado.edu>
4136 4153
4137 4154 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
4138 4155 to % for pysh syntax extensions.
4139 4156
4140 4157 2004-10-09 Fernando Perez <fperez@colorado.edu>
4141 4158
4142 4159 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
4143 4160 arrays to print a more useful summary, without calling str(arr).
4144 4161 This avoids the problem of extremely lengthy computations which
4145 4162 occur if arr is large, and appear to the user as a system lockup
4146 4163 with 100% cpu activity. After a suggestion by Kristian Sandberg
4147 4164 <Kristian.Sandberg@colorado.edu>.
4148 4165 (Magic.__init__): fix bug in global magic escapes not being
4149 4166 correctly set.
4150 4167
4151 4168 2004-10-08 Fernando Perez <fperez@colorado.edu>
4152 4169
4153 4170 * IPython/Magic.py (__license__): change to absolute imports of
4154 4171 ipython's own internal packages, to start adapting to the absolute
4155 4172 import requirement of PEP-328.
4156 4173
4157 4174 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
4158 4175 files, and standardize author/license marks through the Release
4159 4176 module instead of having per/file stuff (except for files with
4160 4177 particular licenses, like the MIT/PSF-licensed codes).
4161 4178
4162 4179 * IPython/Debugger.py: remove dead code for python 2.1
4163 4180
4164 4181 2004-10-04 Fernando Perez <fperez@colorado.edu>
4165 4182
4166 4183 * IPython/iplib.py (ipmagic): New function for accessing magics
4167 4184 via a normal python function call.
4168 4185
4169 4186 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
4170 4187 from '@' to '%', to accomodate the new @decorator syntax of python
4171 4188 2.4.
4172 4189
4173 4190 2004-09-29 Fernando Perez <fperez@colorado.edu>
4174 4191
4175 4192 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
4176 4193 matplotlib.use to prevent running scripts which try to switch
4177 4194 interactive backends from within ipython. This will just crash
4178 4195 the python interpreter, so we can't allow it (but a detailed error
4179 4196 is given to the user).
4180 4197
4181 4198 2004-09-28 Fernando Perez <fperez@colorado.edu>
4182 4199
4183 4200 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
4184 4201 matplotlib-related fixes so that using @run with non-matplotlib
4185 4202 scripts doesn't pop up spurious plot windows. This requires
4186 4203 matplotlib >= 0.63, where I had to make some changes as well.
4187 4204
4188 4205 * IPython/ipmaker.py (make_IPython): update version requirement to
4189 4206 python 2.2.
4190 4207
4191 4208 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
4192 4209 banner arg for embedded customization.
4193 4210
4194 4211 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
4195 4212 explicit uses of __IP as the IPython's instance name. Now things
4196 4213 are properly handled via the shell.name value. The actual code
4197 4214 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
4198 4215 is much better than before. I'll clean things completely when the
4199 4216 magic stuff gets a real overhaul.
4200 4217
4201 4218 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
4202 4219 minor changes to debian dir.
4203 4220
4204 4221 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
4205 4222 pointer to the shell itself in the interactive namespace even when
4206 4223 a user-supplied dict is provided. This is needed for embedding
4207 4224 purposes (found by tests with Michel Sanner).
4208 4225
4209 4226 2004-09-27 Fernando Perez <fperez@colorado.edu>
4210 4227
4211 4228 * IPython/UserConfig/ipythonrc: remove []{} from
4212 4229 readline_remove_delims, so that things like [modname.<TAB> do
4213 4230 proper completion. This disables [].TAB, but that's a less common
4214 4231 case than module names in list comprehensions, for example.
4215 4232 Thanks to a report by Andrea Riciputi.
4216 4233
4217 4234 2004-09-09 Fernando Perez <fperez@colorado.edu>
4218 4235
4219 4236 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
4220 4237 blocking problems in win32 and osx. Fix by John.
4221 4238
4222 4239 2004-09-08 Fernando Perez <fperez@colorado.edu>
4223 4240
4224 4241 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
4225 4242 for Win32 and OSX. Fix by John Hunter.
4226 4243
4227 4244 2004-08-30 *** Released version 0.6.3
4228 4245
4229 4246 2004-08-30 Fernando Perez <fperez@colorado.edu>
4230 4247
4231 4248 * setup.py (isfile): Add manpages to list of dependent files to be
4232 4249 updated.
4233 4250
4234 4251 2004-08-27 Fernando Perez <fperez@colorado.edu>
4235 4252
4236 4253 * IPython/Shell.py (start): I've disabled -wthread and -gthread
4237 4254 for now. They don't really work with standalone WX/GTK code
4238 4255 (though matplotlib IS working fine with both of those backends).
4239 4256 This will neeed much more testing. I disabled most things with
4240 4257 comments, so turning it back on later should be pretty easy.
4241 4258
4242 4259 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
4243 4260 autocalling of expressions like r'foo', by modifying the line
4244 4261 split regexp. Closes
4245 4262 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
4246 4263 Riley <ipythonbugs-AT-sabi.net>.
4247 4264 (InteractiveShell.mainloop): honor --nobanner with banner
4248 4265 extensions.
4249 4266
4250 4267 * IPython/Shell.py: Significant refactoring of all classes, so
4251 4268 that we can really support ALL matplotlib backends and threading
4252 4269 models (John spotted a bug with Tk which required this). Now we
4253 4270 should support single-threaded, WX-threads and GTK-threads, both
4254 4271 for generic code and for matplotlib.
4255 4272
4256 4273 * IPython/ipmaker.py (__call__): Changed -mpthread option to
4257 4274 -pylab, to simplify things for users. Will also remove the pylab
4258 4275 profile, since now all of matplotlib configuration is directly
4259 4276 handled here. This also reduces startup time.
4260 4277
4261 4278 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
4262 4279 shell wasn't being correctly called. Also in IPShellWX.
4263 4280
4264 4281 * IPython/iplib.py (InteractiveShell.__init__): Added option to
4265 4282 fine-tune banner.
4266 4283
4267 4284 * IPython/numutils.py (spike): Deprecate these spike functions,
4268 4285 delete (long deprecated) gnuplot_exec handler.
4269 4286
4270 4287 2004-08-26 Fernando Perez <fperez@colorado.edu>
4271 4288
4272 4289 * ipython.1: Update for threading options, plus some others which
4273 4290 were missing.
4274 4291
4275 4292 * IPython/ipmaker.py (__call__): Added -wthread option for
4276 4293 wxpython thread handling. Make sure threading options are only
4277 4294 valid at the command line.
4278 4295
4279 4296 * scripts/ipython: moved shell selection into a factory function
4280 4297 in Shell.py, to keep the starter script to a minimum.
4281 4298
4282 4299 2004-08-25 Fernando Perez <fperez@colorado.edu>
4283 4300
4284 4301 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
4285 4302 John. Along with some recent changes he made to matplotlib, the
4286 4303 next versions of both systems should work very well together.
4287 4304
4288 4305 2004-08-24 Fernando Perez <fperez@colorado.edu>
4289 4306
4290 4307 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
4291 4308 tried to switch the profiling to using hotshot, but I'm getting
4292 4309 strange errors from prof.runctx() there. I may be misreading the
4293 4310 docs, but it looks weird. For now the profiling code will
4294 4311 continue to use the standard profiler.
4295 4312
4296 4313 2004-08-23 Fernando Perez <fperez@colorado.edu>
4297 4314
4298 4315 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
4299 4316 threaded shell, by John Hunter. It's not quite ready yet, but
4300 4317 close.
4301 4318
4302 4319 2004-08-22 Fernando Perez <fperez@colorado.edu>
4303 4320
4304 4321 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
4305 4322 in Magic and ultraTB.
4306 4323
4307 4324 * ipython.1: document threading options in manpage.
4308 4325
4309 4326 * scripts/ipython: Changed name of -thread option to -gthread,
4310 4327 since this is GTK specific. I want to leave the door open for a
4311 4328 -wthread option for WX, which will most likely be necessary. This
4312 4329 change affects usage and ipmaker as well.
4313 4330
4314 4331 * IPython/Shell.py (matplotlib_shell): Add a factory function to
4315 4332 handle the matplotlib shell issues. Code by John Hunter
4316 4333 <jdhunter-AT-nitace.bsd.uchicago.edu>.
4317 4334 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
4318 4335 broken (and disabled for end users) for now, but it puts the
4319 4336 infrastructure in place.
4320 4337
4321 4338 2004-08-21 Fernando Perez <fperez@colorado.edu>
4322 4339
4323 4340 * ipythonrc-pylab: Add matplotlib support.
4324 4341
4325 4342 * matplotlib_config.py: new files for matplotlib support, part of
4326 4343 the pylab profile.
4327 4344
4328 4345 * IPython/usage.py (__doc__): documented the threading options.
4329 4346
4330 4347 2004-08-20 Fernando Perez <fperez@colorado.edu>
4331 4348
4332 4349 * ipython: Modified the main calling routine to handle the -thread
4333 4350 and -mpthread options. This needs to be done as a top-level hack,
4334 4351 because it determines which class to instantiate for IPython
4335 4352 itself.
4336 4353
4337 4354 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
4338 4355 classes to support multithreaded GTK operation without blocking,
4339 4356 and matplotlib with all backends. This is a lot of still very
4340 4357 experimental code, and threads are tricky. So it may still have a
4341 4358 few rough edges... This code owes a lot to
4342 4359 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
4343 4360 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
4344 4361 to John Hunter for all the matplotlib work.
4345 4362
4346 4363 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
4347 4364 options for gtk thread and matplotlib support.
4348 4365
4349 4366 2004-08-16 Fernando Perez <fperez@colorado.edu>
4350 4367
4351 4368 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
4352 4369 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
4353 4370 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
4354 4371
4355 4372 2004-08-11 Fernando Perez <fperez@colorado.edu>
4356 4373
4357 4374 * setup.py (isfile): Fix build so documentation gets updated for
4358 4375 rpms (it was only done for .tgz builds).
4359 4376
4360 4377 2004-08-10 Fernando Perez <fperez@colorado.edu>
4361 4378
4362 4379 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
4363 4380
4364 4381 * iplib.py : Silence syntax error exceptions in tab-completion.
4365 4382
4366 4383 2004-08-05 Fernando Perez <fperez@colorado.edu>
4367 4384
4368 4385 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
4369 4386 'color off' mark for continuation prompts. This was causing long
4370 4387 continuation lines to mis-wrap.
4371 4388
4372 4389 2004-08-01 Fernando Perez <fperez@colorado.edu>
4373 4390
4374 4391 * IPython/ipmaker.py (make_IPython): Allow the shell class used
4375 4392 for building ipython to be a parameter. All this is necessary
4376 4393 right now to have a multithreaded version, but this insane
4377 4394 non-design will be cleaned up soon. For now, it's a hack that
4378 4395 works.
4379 4396
4380 4397 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
4381 4398 args in various places. No bugs so far, but it's a dangerous
4382 4399 practice.
4383 4400
4384 4401 2004-07-31 Fernando Perez <fperez@colorado.edu>
4385 4402
4386 4403 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
4387 4404 fix completion of files with dots in their names under most
4388 4405 profiles (pysh was OK because the completion order is different).
4389 4406
4390 4407 2004-07-27 Fernando Perez <fperez@colorado.edu>
4391 4408
4392 4409 * IPython/iplib.py (InteractiveShell.__init__): build dict of
4393 4410 keywords manually, b/c the one in keyword.py was removed in python
4394 4411 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
4395 4412 This is NOT a bug under python 2.3 and earlier.
4396 4413
4397 4414 2004-07-26 Fernando Perez <fperez@colorado.edu>
4398 4415
4399 4416 * IPython/ultraTB.py (VerboseTB.text): Add another
4400 4417 linecache.checkcache() call to try to prevent inspect.py from
4401 4418 crashing under python 2.3. I think this fixes
4402 4419 http://www.scipy.net/roundup/ipython/issue17.
4403 4420
4404 4421 2004-07-26 *** Released version 0.6.2
4405 4422
4406 4423 2004-07-26 Fernando Perez <fperez@colorado.edu>
4407 4424
4408 4425 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
4409 4426 fail for any number.
4410 4427 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
4411 4428 empty bookmarks.
4412 4429
4413 4430 2004-07-26 *** Released version 0.6.1
4414 4431
4415 4432 2004-07-26 Fernando Perez <fperez@colorado.edu>
4416 4433
4417 4434 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
4418 4435
4419 4436 * IPython/iplib.py (protect_filename): Applied Ville's patch for
4420 4437 escaping '()[]{}' in filenames.
4421 4438
4422 4439 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
4423 4440 Python 2.2 users who lack a proper shlex.split.
4424 4441
4425 4442 2004-07-19 Fernando Perez <fperez@colorado.edu>
4426 4443
4427 4444 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4428 4445 for reading readline's init file. I follow the normal chain:
4429 4446 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4430 4447 report by Mike Heeter. This closes
4431 4448 http://www.scipy.net/roundup/ipython/issue16.
4432 4449
4433 4450 2004-07-18 Fernando Perez <fperez@colorado.edu>
4434 4451
4435 4452 * IPython/iplib.py (__init__): Add better handling of '\' under
4436 4453 Win32 for filenames. After a patch by Ville.
4437 4454
4438 4455 2004-07-17 Fernando Perez <fperez@colorado.edu>
4439 4456
4440 4457 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4441 4458 autocalling would be triggered for 'foo is bar' if foo is
4442 4459 callable. I also cleaned up the autocall detection code to use a
4443 4460 regexp, which is faster. Bug reported by Alexander Schmolck.
4444 4461
4445 4462 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4446 4463 '?' in them would confuse the help system. Reported by Alex
4447 4464 Schmolck.
4448 4465
4449 4466 2004-07-16 Fernando Perez <fperez@colorado.edu>
4450 4467
4451 4468 * IPython/GnuplotInteractive.py (__all__): added plot2.
4452 4469
4453 4470 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4454 4471 plotting dictionaries, lists or tuples of 1d arrays.
4455 4472
4456 4473 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4457 4474 optimizations.
4458 4475
4459 4476 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4460 4477 the information which was there from Janko's original IPP code:
4461 4478
4462 4479 03.05.99 20:53 porto.ifm.uni-kiel.de
4463 4480 --Started changelog.
4464 4481 --make clear do what it say it does
4465 4482 --added pretty output of lines from inputcache
4466 4483 --Made Logger a mixin class, simplifies handling of switches
4467 4484 --Added own completer class. .string<TAB> expands to last history
4468 4485 line which starts with string. The new expansion is also present
4469 4486 with Ctrl-r from the readline library. But this shows, who this
4470 4487 can be done for other cases.
4471 4488 --Added convention that all shell functions should accept a
4472 4489 parameter_string This opens the door for different behaviour for
4473 4490 each function. @cd is a good example of this.
4474 4491
4475 4492 04.05.99 12:12 porto.ifm.uni-kiel.de
4476 4493 --added logfile rotation
4477 4494 --added new mainloop method which freezes first the namespace
4478 4495
4479 4496 07.05.99 21:24 porto.ifm.uni-kiel.de
4480 4497 --added the docreader classes. Now there is a help system.
4481 4498 -This is only a first try. Currently it's not easy to put new
4482 4499 stuff in the indices. But this is the way to go. Info would be
4483 4500 better, but HTML is every where and not everybody has an info
4484 4501 system installed and it's not so easy to change html-docs to info.
4485 4502 --added global logfile option
4486 4503 --there is now a hook for object inspection method pinfo needs to
4487 4504 be provided for this. Can be reached by two '??'.
4488 4505
4489 4506 08.05.99 20:51 porto.ifm.uni-kiel.de
4490 4507 --added a README
4491 4508 --bug in rc file. Something has changed so functions in the rc
4492 4509 file need to reference the shell and not self. Not clear if it's a
4493 4510 bug or feature.
4494 4511 --changed rc file for new behavior
4495 4512
4496 4513 2004-07-15 Fernando Perez <fperez@colorado.edu>
4497 4514
4498 4515 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4499 4516 cache was falling out of sync in bizarre manners when multi-line
4500 4517 input was present. Minor optimizations and cleanup.
4501 4518
4502 4519 (Logger): Remove old Changelog info for cleanup. This is the
4503 4520 information which was there from Janko's original code:
4504 4521
4505 4522 Changes to Logger: - made the default log filename a parameter
4506 4523
4507 4524 - put a check for lines beginning with !@? in log(). Needed
4508 4525 (even if the handlers properly log their lines) for mid-session
4509 4526 logging activation to work properly. Without this, lines logged
4510 4527 in mid session, which get read from the cache, would end up
4511 4528 'bare' (with !@? in the open) in the log. Now they are caught
4512 4529 and prepended with a #.
4513 4530
4514 4531 * IPython/iplib.py (InteractiveShell.init_readline): added check
4515 4532 in case MagicCompleter fails to be defined, so we don't crash.
4516 4533
4517 4534 2004-07-13 Fernando Perez <fperez@colorado.edu>
4518 4535
4519 4536 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4520 4537 of EPS if the requested filename ends in '.eps'.
4521 4538
4522 4539 2004-07-04 Fernando Perez <fperez@colorado.edu>
4523 4540
4524 4541 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4525 4542 escaping of quotes when calling the shell.
4526 4543
4527 4544 2004-07-02 Fernando Perez <fperez@colorado.edu>
4528 4545
4529 4546 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4530 4547 gettext not working because we were clobbering '_'. Fixes
4531 4548 http://www.scipy.net/roundup/ipython/issue6.
4532 4549
4533 4550 2004-07-01 Fernando Perez <fperez@colorado.edu>
4534 4551
4535 4552 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4536 4553 into @cd. Patch by Ville.
4537 4554
4538 4555 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4539 4556 new function to store things after ipmaker runs. Patch by Ville.
4540 4557 Eventually this will go away once ipmaker is removed and the class
4541 4558 gets cleaned up, but for now it's ok. Key functionality here is
4542 4559 the addition of the persistent storage mechanism, a dict for
4543 4560 keeping data across sessions (for now just bookmarks, but more can
4544 4561 be implemented later).
4545 4562
4546 4563 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4547 4564 persistent across sections. Patch by Ville, I modified it
4548 4565 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4549 4566 added a '-l' option to list all bookmarks.
4550 4567
4551 4568 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4552 4569 center for cleanup. Registered with atexit.register(). I moved
4553 4570 here the old exit_cleanup(). After a patch by Ville.
4554 4571
4555 4572 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4556 4573 characters in the hacked shlex_split for python 2.2.
4557 4574
4558 4575 * IPython/iplib.py (file_matches): more fixes to filenames with
4559 4576 whitespace in them. It's not perfect, but limitations in python's
4560 4577 readline make it impossible to go further.
4561 4578
4562 4579 2004-06-29 Fernando Perez <fperez@colorado.edu>
4563 4580
4564 4581 * IPython/iplib.py (file_matches): escape whitespace correctly in
4565 4582 filename completions. Bug reported by Ville.
4566 4583
4567 4584 2004-06-28 Fernando Perez <fperez@colorado.edu>
4568 4585
4569 4586 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4570 4587 the history file will be called 'history-PROFNAME' (or just
4571 4588 'history' if no profile is loaded). I was getting annoyed at
4572 4589 getting my Numerical work history clobbered by pysh sessions.
4573 4590
4574 4591 * IPython/iplib.py (InteractiveShell.__init__): Internal
4575 4592 getoutputerror() function so that we can honor the system_verbose
4576 4593 flag for _all_ system calls. I also added escaping of #
4577 4594 characters here to avoid confusing Itpl.
4578 4595
4579 4596 * IPython/Magic.py (shlex_split): removed call to shell in
4580 4597 parse_options and replaced it with shlex.split(). The annoying
4581 4598 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4582 4599 to backport it from 2.3, with several frail hacks (the shlex
4583 4600 module is rather limited in 2.2). Thanks to a suggestion by Ville
4584 4601 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4585 4602 problem.
4586 4603
4587 4604 (Magic.magic_system_verbose): new toggle to print the actual
4588 4605 system calls made by ipython. Mainly for debugging purposes.
4589 4606
4590 4607 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4591 4608 doesn't support persistence. Reported (and fix suggested) by
4592 4609 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4593 4610
4594 4611 2004-06-26 Fernando Perez <fperez@colorado.edu>
4595 4612
4596 4613 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4597 4614 continue prompts.
4598 4615
4599 4616 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4600 4617 function (basically a big docstring) and a few more things here to
4601 4618 speedup startup. pysh.py is now very lightweight. We want because
4602 4619 it gets execfile'd, while InterpreterExec gets imported, so
4603 4620 byte-compilation saves time.
4604 4621
4605 4622 2004-06-25 Fernando Perez <fperez@colorado.edu>
4606 4623
4607 4624 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4608 4625 -NUM', which was recently broken.
4609 4626
4610 4627 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4611 4628 in multi-line input (but not !!, which doesn't make sense there).
4612 4629
4613 4630 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4614 4631 It's just too useful, and people can turn it off in the less
4615 4632 common cases where it's a problem.
4616 4633
4617 4634 2004-06-24 Fernando Perez <fperez@colorado.edu>
4618 4635
4619 4636 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4620 4637 special syntaxes (like alias calling) is now allied in multi-line
4621 4638 input. This is still _very_ experimental, but it's necessary for
4622 4639 efficient shell usage combining python looping syntax with system
4623 4640 calls. For now it's restricted to aliases, I don't think it
4624 4641 really even makes sense to have this for magics.
4625 4642
4626 4643 2004-06-23 Fernando Perez <fperez@colorado.edu>
4627 4644
4628 4645 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4629 4646 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4630 4647
4631 4648 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4632 4649 extensions under Windows (after code sent by Gary Bishop). The
4633 4650 extensions considered 'executable' are stored in IPython's rc
4634 4651 structure as win_exec_ext.
4635 4652
4636 4653 * IPython/genutils.py (shell): new function, like system() but
4637 4654 without return value. Very useful for interactive shell work.
4638 4655
4639 4656 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4640 4657 delete aliases.
4641 4658
4642 4659 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4643 4660 sure that the alias table doesn't contain python keywords.
4644 4661
4645 4662 2004-06-21 Fernando Perez <fperez@colorado.edu>
4646 4663
4647 4664 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4648 4665 non-existent items are found in $PATH. Reported by Thorsten.
4649 4666
4650 4667 2004-06-20 Fernando Perez <fperez@colorado.edu>
4651 4668
4652 4669 * IPython/iplib.py (complete): modified the completer so that the
4653 4670 order of priorities can be easily changed at runtime.
4654 4671
4655 4672 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4656 4673 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4657 4674
4658 4675 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4659 4676 expand Python variables prepended with $ in all system calls. The
4660 4677 same was done to InteractiveShell.handle_shell_escape. Now all
4661 4678 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4662 4679 expansion of python variables and expressions according to the
4663 4680 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4664 4681
4665 4682 Though PEP-215 has been rejected, a similar (but simpler) one
4666 4683 seems like it will go into Python 2.4, PEP-292 -
4667 4684 http://www.python.org/peps/pep-0292.html.
4668 4685
4669 4686 I'll keep the full syntax of PEP-215, since IPython has since the
4670 4687 start used Ka-Ping Yee's reference implementation discussed there
4671 4688 (Itpl), and I actually like the powerful semantics it offers.
4672 4689
4673 4690 In order to access normal shell variables, the $ has to be escaped
4674 4691 via an extra $. For example:
4675 4692
4676 4693 In [7]: PATH='a python variable'
4677 4694
4678 4695 In [8]: !echo $PATH
4679 4696 a python variable
4680 4697
4681 4698 In [9]: !echo $$PATH
4682 4699 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4683 4700
4684 4701 (Magic.parse_options): escape $ so the shell doesn't evaluate
4685 4702 things prematurely.
4686 4703
4687 4704 * IPython/iplib.py (InteractiveShell.call_alias): added the
4688 4705 ability for aliases to expand python variables via $.
4689 4706
4690 4707 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4691 4708 system, now there's a @rehash/@rehashx pair of magics. These work
4692 4709 like the csh rehash command, and can be invoked at any time. They
4693 4710 build a table of aliases to everything in the user's $PATH
4694 4711 (@rehash uses everything, @rehashx is slower but only adds
4695 4712 executable files). With this, the pysh.py-based shell profile can
4696 4713 now simply call rehash upon startup, and full access to all
4697 4714 programs in the user's path is obtained.
4698 4715
4699 4716 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4700 4717 functionality is now fully in place. I removed the old dynamic
4701 4718 code generation based approach, in favor of a much lighter one
4702 4719 based on a simple dict. The advantage is that this allows me to
4703 4720 now have thousands of aliases with negligible cost (unthinkable
4704 4721 with the old system).
4705 4722
4706 4723 2004-06-19 Fernando Perez <fperez@colorado.edu>
4707 4724
4708 4725 * IPython/iplib.py (__init__): extended MagicCompleter class to
4709 4726 also complete (last in priority) on user aliases.
4710 4727
4711 4728 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4712 4729 call to eval.
4713 4730 (ItplNS.__init__): Added a new class which functions like Itpl,
4714 4731 but allows configuring the namespace for the evaluation to occur
4715 4732 in.
4716 4733
4717 4734 2004-06-18 Fernando Perez <fperez@colorado.edu>
4718 4735
4719 4736 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4720 4737 better message when 'exit' or 'quit' are typed (a common newbie
4721 4738 confusion).
4722 4739
4723 4740 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4724 4741 check for Windows users.
4725 4742
4726 4743 * IPython/iplib.py (InteractiveShell.user_setup): removed
4727 4744 disabling of colors for Windows. I'll test at runtime and issue a
4728 4745 warning if Gary's readline isn't found, as to nudge users to
4729 4746 download it.
4730 4747
4731 4748 2004-06-16 Fernando Perez <fperez@colorado.edu>
4732 4749
4733 4750 * IPython/genutils.py (Stream.__init__): changed to print errors
4734 4751 to sys.stderr. I had a circular dependency here. Now it's
4735 4752 possible to run ipython as IDLE's shell (consider this pre-alpha,
4736 4753 since true stdout things end up in the starting terminal instead
4737 4754 of IDLE's out).
4738 4755
4739 4756 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4740 4757 users who haven't # updated their prompt_in2 definitions. Remove
4741 4758 eventually.
4742 4759 (multiple_replace): added credit to original ASPN recipe.
4743 4760
4744 4761 2004-06-15 Fernando Perez <fperez@colorado.edu>
4745 4762
4746 4763 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4747 4764 list of auto-defined aliases.
4748 4765
4749 4766 2004-06-13 Fernando Perez <fperez@colorado.edu>
4750 4767
4751 4768 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4752 4769 install was really requested (so setup.py can be used for other
4753 4770 things under Windows).
4754 4771
4755 4772 2004-06-10 Fernando Perez <fperez@colorado.edu>
4756 4773
4757 4774 * IPython/Logger.py (Logger.create_log): Manually remove any old
4758 4775 backup, since os.remove may fail under Windows. Fixes bug
4759 4776 reported by Thorsten.
4760 4777
4761 4778 2004-06-09 Fernando Perez <fperez@colorado.edu>
4762 4779
4763 4780 * examples/example-embed.py: fixed all references to %n (replaced
4764 4781 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4765 4782 for all examples and the manual as well.
4766 4783
4767 4784 2004-06-08 Fernando Perez <fperez@colorado.edu>
4768 4785
4769 4786 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4770 4787 alignment and color management. All 3 prompt subsystems now
4771 4788 inherit from BasePrompt.
4772 4789
4773 4790 * tools/release: updates for windows installer build and tag rpms
4774 4791 with python version (since paths are fixed).
4775 4792
4776 4793 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4777 4794 which will become eventually obsolete. Also fixed the default
4778 4795 prompt_in2 to use \D, so at least new users start with the correct
4779 4796 defaults.
4780 4797 WARNING: Users with existing ipythonrc files will need to apply
4781 4798 this fix manually!
4782 4799
4783 4800 * setup.py: make windows installer (.exe). This is finally the
4784 4801 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4785 4802 which I hadn't included because it required Python 2.3 (or recent
4786 4803 distutils).
4787 4804
4788 4805 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4789 4806 usage of new '\D' escape.
4790 4807
4791 4808 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4792 4809 lacks os.getuid())
4793 4810 (CachedOutput.set_colors): Added the ability to turn coloring
4794 4811 on/off with @colors even for manually defined prompt colors. It
4795 4812 uses a nasty global, but it works safely and via the generic color
4796 4813 handling mechanism.
4797 4814 (Prompt2.__init__): Introduced new escape '\D' for continuation
4798 4815 prompts. It represents the counter ('\#') as dots.
4799 4816 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4800 4817 need to update their ipythonrc files and replace '%n' with '\D' in
4801 4818 their prompt_in2 settings everywhere. Sorry, but there's
4802 4819 otherwise no clean way to get all prompts to properly align. The
4803 4820 ipythonrc shipped with IPython has been updated.
4804 4821
4805 4822 2004-06-07 Fernando Perez <fperez@colorado.edu>
4806 4823
4807 4824 * setup.py (isfile): Pass local_icons option to latex2html, so the
4808 4825 resulting HTML file is self-contained. Thanks to
4809 4826 dryice-AT-liu.com.cn for the tip.
4810 4827
4811 4828 * pysh.py: I created a new profile 'shell', which implements a
4812 4829 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4813 4830 system shell, nor will it become one anytime soon. It's mainly
4814 4831 meant to illustrate the use of the new flexible bash-like prompts.
4815 4832 I guess it could be used by hardy souls for true shell management,
4816 4833 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4817 4834 profile. This uses the InterpreterExec extension provided by
4818 4835 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4819 4836
4820 4837 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4821 4838 auto-align itself with the length of the previous input prompt
4822 4839 (taking into account the invisible color escapes).
4823 4840 (CachedOutput.__init__): Large restructuring of this class. Now
4824 4841 all three prompts (primary1, primary2, output) are proper objects,
4825 4842 managed by the 'parent' CachedOutput class. The code is still a
4826 4843 bit hackish (all prompts share state via a pointer to the cache),
4827 4844 but it's overall far cleaner than before.
4828 4845
4829 4846 * IPython/genutils.py (getoutputerror): modified to add verbose,
4830 4847 debug and header options. This makes the interface of all getout*
4831 4848 functions uniform.
4832 4849 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4833 4850
4834 4851 * IPython/Magic.py (Magic.default_option): added a function to
4835 4852 allow registering default options for any magic command. This
4836 4853 makes it easy to have profiles which customize the magics globally
4837 4854 for a certain use. The values set through this function are
4838 4855 picked up by the parse_options() method, which all magics should
4839 4856 use to parse their options.
4840 4857
4841 4858 * IPython/genutils.py (warn): modified the warnings framework to
4842 4859 use the Term I/O class. I'm trying to slowly unify all of
4843 4860 IPython's I/O operations to pass through Term.
4844 4861
4845 4862 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4846 4863 the secondary prompt to correctly match the length of the primary
4847 4864 one for any prompt. Now multi-line code will properly line up
4848 4865 even for path dependent prompts, such as the new ones available
4849 4866 via the prompt_specials.
4850 4867
4851 4868 2004-06-06 Fernando Perez <fperez@colorado.edu>
4852 4869
4853 4870 * IPython/Prompts.py (prompt_specials): Added the ability to have
4854 4871 bash-like special sequences in the prompts, which get
4855 4872 automatically expanded. Things like hostname, current working
4856 4873 directory and username are implemented already, but it's easy to
4857 4874 add more in the future. Thanks to a patch by W.J. van der Laan
4858 4875 <gnufnork-AT-hetdigitalegat.nl>
4859 4876 (prompt_specials): Added color support for prompt strings, so
4860 4877 users can define arbitrary color setups for their prompts.
4861 4878
4862 4879 2004-06-05 Fernando Perez <fperez@colorado.edu>
4863 4880
4864 4881 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4865 4882 code to load Gary Bishop's readline and configure it
4866 4883 automatically. Thanks to Gary for help on this.
4867 4884
4868 4885 2004-06-01 Fernando Perez <fperez@colorado.edu>
4869 4886
4870 4887 * IPython/Logger.py (Logger.create_log): fix bug for logging
4871 4888 with no filename (previous fix was incomplete).
4872 4889
4873 4890 2004-05-25 Fernando Perez <fperez@colorado.edu>
4874 4891
4875 4892 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4876 4893 parens would get passed to the shell.
4877 4894
4878 4895 2004-05-20 Fernando Perez <fperez@colorado.edu>
4879 4896
4880 4897 * IPython/Magic.py (Magic.magic_prun): changed default profile
4881 4898 sort order to 'time' (the more common profiling need).
4882 4899
4883 4900 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4884 4901 so that source code shown is guaranteed in sync with the file on
4885 4902 disk (also changed in psource). Similar fix to the one for
4886 4903 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4887 4904 <yann.ledu-AT-noos.fr>.
4888 4905
4889 4906 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4890 4907 with a single option would not be correctly parsed. Closes
4891 4908 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4892 4909 introduced in 0.6.0 (on 2004-05-06).
4893 4910
4894 4911 2004-05-13 *** Released version 0.6.0
4895 4912
4896 4913 2004-05-13 Fernando Perez <fperez@colorado.edu>
4897 4914
4898 4915 * debian/: Added debian/ directory to CVS, so that debian support
4899 4916 is publicly accessible. The debian package is maintained by Jack
4900 4917 Moffit <jack-AT-xiph.org>.
4901 4918
4902 4919 * Documentation: included the notes about an ipython-based system
4903 4920 shell (the hypothetical 'pysh') into the new_design.pdf document,
4904 4921 so that these ideas get distributed to users along with the
4905 4922 official documentation.
4906 4923
4907 4924 2004-05-10 Fernando Perez <fperez@colorado.edu>
4908 4925
4909 4926 * IPython/Logger.py (Logger.create_log): fix recently introduced
4910 4927 bug (misindented line) where logstart would fail when not given an
4911 4928 explicit filename.
4912 4929
4913 4930 2004-05-09 Fernando Perez <fperez@colorado.edu>
4914 4931
4915 4932 * IPython/Magic.py (Magic.parse_options): skip system call when
4916 4933 there are no options to look for. Faster, cleaner for the common
4917 4934 case.
4918 4935
4919 4936 * Documentation: many updates to the manual: describing Windows
4920 4937 support better, Gnuplot updates, credits, misc small stuff. Also
4921 4938 updated the new_design doc a bit.
4922 4939
4923 4940 2004-05-06 *** Released version 0.6.0.rc1
4924 4941
4925 4942 2004-05-06 Fernando Perez <fperez@colorado.edu>
4926 4943
4927 4944 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4928 4945 operations to use the vastly more efficient list/''.join() method.
4929 4946 (FormattedTB.text): Fix
4930 4947 http://www.scipy.net/roundup/ipython/issue12 - exception source
4931 4948 extract not updated after reload. Thanks to Mike Salib
4932 4949 <msalib-AT-mit.edu> for pinning the source of the problem.
4933 4950 Fortunately, the solution works inside ipython and doesn't require
4934 4951 any changes to python proper.
4935 4952
4936 4953 * IPython/Magic.py (Magic.parse_options): Improved to process the
4937 4954 argument list as a true shell would (by actually using the
4938 4955 underlying system shell). This way, all @magics automatically get
4939 4956 shell expansion for variables. Thanks to a comment by Alex
4940 4957 Schmolck.
4941 4958
4942 4959 2004-04-04 Fernando Perez <fperez@colorado.edu>
4943 4960
4944 4961 * IPython/iplib.py (InteractiveShell.interact): Added a special
4945 4962 trap for a debugger quit exception, which is basically impossible
4946 4963 to handle by normal mechanisms, given what pdb does to the stack.
4947 4964 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4948 4965
4949 4966 2004-04-03 Fernando Perez <fperez@colorado.edu>
4950 4967
4951 4968 * IPython/genutils.py (Term): Standardized the names of the Term
4952 4969 class streams to cin/cout/cerr, following C++ naming conventions
4953 4970 (I can't use in/out/err because 'in' is not a valid attribute
4954 4971 name).
4955 4972
4956 4973 * IPython/iplib.py (InteractiveShell.interact): don't increment
4957 4974 the prompt if there's no user input. By Daniel 'Dang' Griffith
4958 4975 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4959 4976 Francois Pinard.
4960 4977
4961 4978 2004-04-02 Fernando Perez <fperez@colorado.edu>
4962 4979
4963 4980 * IPython/genutils.py (Stream.__init__): Modified to survive at
4964 4981 least importing in contexts where stdin/out/err aren't true file
4965 4982 objects, such as PyCrust (they lack fileno() and mode). However,
4966 4983 the recovery facilities which rely on these things existing will
4967 4984 not work.
4968 4985
4969 4986 2004-04-01 Fernando Perez <fperez@colorado.edu>
4970 4987
4971 4988 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4972 4989 use the new getoutputerror() function, so it properly
4973 4990 distinguishes stdout/err.
4974 4991
4975 4992 * IPython/genutils.py (getoutputerror): added a function to
4976 4993 capture separately the standard output and error of a command.
4977 4994 After a comment from dang on the mailing lists. This code is
4978 4995 basically a modified version of commands.getstatusoutput(), from
4979 4996 the standard library.
4980 4997
4981 4998 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4982 4999 '!!' as a special syntax (shorthand) to access @sx.
4983 5000
4984 5001 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4985 5002 command and return its output as a list split on '\n'.
4986 5003
4987 5004 2004-03-31 Fernando Perez <fperez@colorado.edu>
4988 5005
4989 5006 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4990 5007 method to dictionaries used as FakeModule instances if they lack
4991 5008 it. At least pydoc in python2.3 breaks for runtime-defined
4992 5009 functions without this hack. At some point I need to _really_
4993 5010 understand what FakeModule is doing, because it's a gross hack.
4994 5011 But it solves Arnd's problem for now...
4995 5012
4996 5013 2004-02-27 Fernando Perez <fperez@colorado.edu>
4997 5014
4998 5015 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4999 5016 mode would behave erratically. Also increased the number of
5000 5017 possible logs in rotate mod to 999. Thanks to Rod Holland
5001 5018 <rhh@StructureLABS.com> for the report and fixes.
5002 5019
5003 5020 2004-02-26 Fernando Perez <fperez@colorado.edu>
5004 5021
5005 5022 * IPython/genutils.py (page): Check that the curses module really
5006 5023 has the initscr attribute before trying to use it. For some
5007 5024 reason, the Solaris curses module is missing this. I think this
5008 5025 should be considered a Solaris python bug, but I'm not sure.
5009 5026
5010 5027 2004-01-17 Fernando Perez <fperez@colorado.edu>
5011 5028
5012 5029 * IPython/genutils.py (Stream.__init__): Changes to try to make
5013 5030 ipython robust against stdin/out/err being closed by the user.
5014 5031 This is 'user error' (and blocks a normal python session, at least
5015 5032 the stdout case). However, Ipython should be able to survive such
5016 5033 instances of abuse as gracefully as possible. To simplify the
5017 5034 coding and maintain compatibility with Gary Bishop's Term
5018 5035 contributions, I've made use of classmethods for this. I think
5019 5036 this introduces a dependency on python 2.2.
5020 5037
5021 5038 2004-01-13 Fernando Perez <fperez@colorado.edu>
5022 5039
5023 5040 * IPython/numutils.py (exp_safe): simplified the code a bit and
5024 5041 removed the need for importing the kinds module altogether.
5025 5042
5026 5043 2004-01-06 Fernando Perez <fperez@colorado.edu>
5027 5044
5028 5045 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
5029 5046 a magic function instead, after some community feedback. No
5030 5047 special syntax will exist for it, but its name is deliberately
5031 5048 very short.
5032 5049
5033 5050 2003-12-20 Fernando Perez <fperez@colorado.edu>
5034 5051
5035 5052 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
5036 5053 new functionality, to automagically assign the result of a shell
5037 5054 command to a variable. I'll solicit some community feedback on
5038 5055 this before making it permanent.
5039 5056
5040 5057 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
5041 5058 requested about callables for which inspect couldn't obtain a
5042 5059 proper argspec. Thanks to a crash report sent by Etienne
5043 5060 Posthumus <etienne-AT-apple01.cs.vu.nl>.
5044 5061
5045 5062 2003-12-09 Fernando Perez <fperez@colorado.edu>
5046 5063
5047 5064 * IPython/genutils.py (page): patch for the pager to work across
5048 5065 various versions of Windows. By Gary Bishop.
5049 5066
5050 5067 2003-12-04 Fernando Perez <fperez@colorado.edu>
5051 5068
5052 5069 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
5053 5070 Gnuplot.py version 1.7, whose internal names changed quite a bit.
5054 5071 While I tested this and it looks ok, there may still be corner
5055 5072 cases I've missed.
5056 5073
5057 5074 2003-12-01 Fernando Perez <fperez@colorado.edu>
5058 5075
5059 5076 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
5060 5077 where a line like 'p,q=1,2' would fail because the automagic
5061 5078 system would be triggered for @p.
5062 5079
5063 5080 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
5064 5081 cleanups, code unmodified.
5065 5082
5066 5083 * IPython/genutils.py (Term): added a class for IPython to handle
5067 5084 output. In most cases it will just be a proxy for stdout/err, but
5068 5085 having this allows modifications to be made for some platforms,
5069 5086 such as handling color escapes under Windows. All of this code
5070 5087 was contributed by Gary Bishop, with minor modifications by me.
5071 5088 The actual changes affect many files.
5072 5089
5073 5090 2003-11-30 Fernando Perez <fperez@colorado.edu>
5074 5091
5075 5092 * IPython/iplib.py (file_matches): new completion code, courtesy
5076 5093 of Jeff Collins. This enables filename completion again under
5077 5094 python 2.3, which disabled it at the C level.
5078 5095
5079 5096 2003-11-11 Fernando Perez <fperez@colorado.edu>
5080 5097
5081 5098 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
5082 5099 for Numeric.array(map(...)), but often convenient.
5083 5100
5084 5101 2003-11-05 Fernando Perez <fperez@colorado.edu>
5085 5102
5086 5103 * IPython/numutils.py (frange): Changed a call from int() to
5087 5104 int(round()) to prevent a problem reported with arange() in the
5088 5105 numpy list.
5089 5106
5090 5107 2003-10-06 Fernando Perez <fperez@colorado.edu>
5091 5108
5092 5109 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
5093 5110 prevent crashes if sys lacks an argv attribute (it happens with
5094 5111 embedded interpreters which build a bare-bones sys module).
5095 5112 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
5096 5113
5097 5114 2003-09-24 Fernando Perez <fperez@colorado.edu>
5098 5115
5099 5116 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
5100 5117 to protect against poorly written user objects where __getattr__
5101 5118 raises exceptions other than AttributeError. Thanks to a bug
5102 5119 report by Oliver Sander <osander-AT-gmx.de>.
5103 5120
5104 5121 * IPython/FakeModule.py (FakeModule.__repr__): this method was
5105 5122 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
5106 5123
5107 5124 2003-09-09 Fernando Perez <fperez@colorado.edu>
5108 5125
5109 5126 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
5110 5127 unpacking a list whith a callable as first element would
5111 5128 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
5112 5129 Collins.
5113 5130
5114 5131 2003-08-25 *** Released version 0.5.0
5115 5132
5116 5133 2003-08-22 Fernando Perez <fperez@colorado.edu>
5117 5134
5118 5135 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
5119 5136 improperly defined user exceptions. Thanks to feedback from Mark
5120 5137 Russell <mrussell-AT-verio.net>.
5121 5138
5122 5139 2003-08-20 Fernando Perez <fperez@colorado.edu>
5123 5140
5124 5141 * IPython/OInspect.py (Inspector.pinfo): changed String Form
5125 5142 printing so that it would print multi-line string forms starting
5126 5143 with a new line. This way the formatting is better respected for
5127 5144 objects which work hard to make nice string forms.
5128 5145
5129 5146 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
5130 5147 autocall would overtake data access for objects with both
5131 5148 __getitem__ and __call__.
5132 5149
5133 5150 2003-08-19 *** Released version 0.5.0-rc1
5134 5151
5135 5152 2003-08-19 Fernando Perez <fperez@colorado.edu>
5136 5153
5137 5154 * IPython/deep_reload.py (load_tail): single tiny change here
5138 5155 seems to fix the long-standing bug of dreload() failing to work
5139 5156 for dotted names. But this module is pretty tricky, so I may have
5140 5157 missed some subtlety. Needs more testing!.
5141 5158
5142 5159 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
5143 5160 exceptions which have badly implemented __str__ methods.
5144 5161 (VerboseTB.text): harden against inspect.getinnerframes crashing,
5145 5162 which I've been getting reports about from Python 2.3 users. I
5146 5163 wish I had a simple test case to reproduce the problem, so I could
5147 5164 either write a cleaner workaround or file a bug report if
5148 5165 necessary.
5149 5166
5150 5167 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
5151 5168 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
5152 5169 a bug report by Tjabo Kloppenburg.
5153 5170
5154 5171 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
5155 5172 crashes. Wrapped the pdb call in a blanket try/except, since pdb
5156 5173 seems rather unstable. Thanks to a bug report by Tjabo
5157 5174 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
5158 5175
5159 5176 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
5160 5177 this out soon because of the critical fixes in the inner loop for
5161 5178 generators.
5162 5179
5163 5180 * IPython/Magic.py (Magic.getargspec): removed. This (and
5164 5181 _get_def) have been obsoleted by OInspect for a long time, I
5165 5182 hadn't noticed that they were dead code.
5166 5183 (Magic._ofind): restored _ofind functionality for a few literals
5167 5184 (those in ["''",'""','[]','{}','()']). But it won't work anymore
5168 5185 for things like "hello".capitalize?, since that would require a
5169 5186 potentially dangerous eval() again.
5170 5187
5171 5188 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
5172 5189 logic a bit more to clean up the escapes handling and minimize the
5173 5190 use of _ofind to only necessary cases. The interactive 'feel' of
5174 5191 IPython should have improved quite a bit with the changes in
5175 5192 _prefilter and _ofind (besides being far safer than before).
5176 5193
5177 5194 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
5178 5195 obscure, never reported). Edit would fail to find the object to
5179 5196 edit under some circumstances.
5180 5197 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
5181 5198 which were causing double-calling of generators. Those eval calls
5182 5199 were _very_ dangerous, since code with side effects could be
5183 5200 triggered. As they say, 'eval is evil'... These were the
5184 5201 nastiest evals in IPython. Besides, _ofind is now far simpler,
5185 5202 and it should also be quite a bit faster. Its use of inspect is
5186 5203 also safer, so perhaps some of the inspect-related crashes I've
5187 5204 seen lately with Python 2.3 might be taken care of. That will
5188 5205 need more testing.
5189 5206
5190 5207 2003-08-17 Fernando Perez <fperez@colorado.edu>
5191 5208
5192 5209 * IPython/iplib.py (InteractiveShell._prefilter): significant
5193 5210 simplifications to the logic for handling user escapes. Faster
5194 5211 and simpler code.
5195 5212
5196 5213 2003-08-14 Fernando Perez <fperez@colorado.edu>
5197 5214
5198 5215 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
5199 5216 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
5200 5217 but it should be quite a bit faster. And the recursive version
5201 5218 generated O(log N) intermediate storage for all rank>1 arrays,
5202 5219 even if they were contiguous.
5203 5220 (l1norm): Added this function.
5204 5221 (norm): Added this function for arbitrary norms (including
5205 5222 l-infinity). l1 and l2 are still special cases for convenience
5206 5223 and speed.
5207 5224
5208 5225 2003-08-03 Fernando Perez <fperez@colorado.edu>
5209 5226
5210 5227 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
5211 5228 exceptions, which now raise PendingDeprecationWarnings in Python
5212 5229 2.3. There were some in Magic and some in Gnuplot2.
5213 5230
5214 5231 2003-06-30 Fernando Perez <fperez@colorado.edu>
5215 5232
5216 5233 * IPython/genutils.py (page): modified to call curses only for
5217 5234 terminals where TERM=='xterm'. After problems under many other
5218 5235 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
5219 5236
5220 5237 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
5221 5238 would be triggered when readline was absent. This was just an old
5222 5239 debugging statement I'd forgotten to take out.
5223 5240
5224 5241 2003-06-20 Fernando Perez <fperez@colorado.edu>
5225 5242
5226 5243 * IPython/genutils.py (clock): modified to return only user time
5227 5244 (not counting system time), after a discussion on scipy. While
5228 5245 system time may be a useful quantity occasionally, it may much
5229 5246 more easily be skewed by occasional swapping or other similar
5230 5247 activity.
5231 5248
5232 5249 2003-06-05 Fernando Perez <fperez@colorado.edu>
5233 5250
5234 5251 * IPython/numutils.py (identity): new function, for building
5235 5252 arbitrary rank Kronecker deltas (mostly backwards compatible with
5236 5253 Numeric.identity)
5237 5254
5238 5255 2003-06-03 Fernando Perez <fperez@colorado.edu>
5239 5256
5240 5257 * IPython/iplib.py (InteractiveShell.handle_magic): protect
5241 5258 arguments passed to magics with spaces, to allow trailing '\' to
5242 5259 work normally (mainly for Windows users).
5243 5260
5244 5261 2003-05-29 Fernando Perez <fperez@colorado.edu>
5245 5262
5246 5263 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
5247 5264 instead of pydoc.help. This fixes a bizarre behavior where
5248 5265 printing '%s' % locals() would trigger the help system. Now
5249 5266 ipython behaves like normal python does.
5250 5267
5251 5268 Note that if one does 'from pydoc import help', the bizarre
5252 5269 behavior returns, but this will also happen in normal python, so
5253 5270 it's not an ipython bug anymore (it has to do with how pydoc.help
5254 5271 is implemented).
5255 5272
5256 5273 2003-05-22 Fernando Perez <fperez@colorado.edu>
5257 5274
5258 5275 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
5259 5276 return [] instead of None when nothing matches, also match to end
5260 5277 of line. Patch by Gary Bishop.
5261 5278
5262 5279 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
5263 5280 protection as before, for files passed on the command line. This
5264 5281 prevents the CrashHandler from kicking in if user files call into
5265 5282 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
5266 5283 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
5267 5284
5268 5285 2003-05-20 *** Released version 0.4.0
5269 5286
5270 5287 2003-05-20 Fernando Perez <fperez@colorado.edu>
5271 5288
5272 5289 * setup.py: added support for manpages. It's a bit hackish b/c of
5273 5290 a bug in the way the bdist_rpm distutils target handles gzipped
5274 5291 manpages, but it works. After a patch by Jack.
5275 5292
5276 5293 2003-05-19 Fernando Perez <fperez@colorado.edu>
5277 5294
5278 5295 * IPython/numutils.py: added a mockup of the kinds module, since
5279 5296 it was recently removed from Numeric. This way, numutils will
5280 5297 work for all users even if they are missing kinds.
5281 5298
5282 5299 * IPython/Magic.py (Magic._ofind): Harden against an inspect
5283 5300 failure, which can occur with SWIG-wrapped extensions. After a
5284 5301 crash report from Prabhu.
5285 5302
5286 5303 2003-05-16 Fernando Perez <fperez@colorado.edu>
5287 5304
5288 5305 * IPython/iplib.py (InteractiveShell.excepthook): New method to
5289 5306 protect ipython from user code which may call directly
5290 5307 sys.excepthook (this looks like an ipython crash to the user, even
5291 5308 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5292 5309 This is especially important to help users of WxWindows, but may
5293 5310 also be useful in other cases.
5294 5311
5295 5312 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
5296 5313 an optional tb_offset to be specified, and to preserve exception
5297 5314 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
5298 5315
5299 5316 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
5300 5317
5301 5318 2003-05-15 Fernando Perez <fperez@colorado.edu>
5302 5319
5303 5320 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
5304 5321 installing for a new user under Windows.
5305 5322
5306 5323 2003-05-12 Fernando Perez <fperez@colorado.edu>
5307 5324
5308 5325 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
5309 5326 handler for Emacs comint-based lines. Currently it doesn't do
5310 5327 much (but importantly, it doesn't update the history cache). In
5311 5328 the future it may be expanded if Alex needs more functionality
5312 5329 there.
5313 5330
5314 5331 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
5315 5332 info to crash reports.
5316 5333
5317 5334 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
5318 5335 just like Python's -c. Also fixed crash with invalid -color
5319 5336 option value at startup. Thanks to Will French
5320 5337 <wfrench-AT-bestweb.net> for the bug report.
5321 5338
5322 5339 2003-05-09 Fernando Perez <fperez@colorado.edu>
5323 5340
5324 5341 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
5325 5342 to EvalDict (it's a mapping, after all) and simplified its code
5326 5343 quite a bit, after a nice discussion on c.l.py where Gustavo
5327 5344 Córdova <gcordova-AT-sismex.com> suggested the new version.
5328 5345
5329 5346 2003-04-30 Fernando Perez <fperez@colorado.edu>
5330 5347
5331 5348 * IPython/genutils.py (timings_out): modified it to reduce its
5332 5349 overhead in the common reps==1 case.
5333 5350
5334 5351 2003-04-29 Fernando Perez <fperez@colorado.edu>
5335 5352
5336 5353 * IPython/genutils.py (timings_out): Modified to use the resource
5337 5354 module, which avoids the wraparound problems of time.clock().
5338 5355
5339 5356 2003-04-17 *** Released version 0.2.15pre4
5340 5357
5341 5358 2003-04-17 Fernando Perez <fperez@colorado.edu>
5342 5359
5343 5360 * setup.py (scriptfiles): Split windows-specific stuff over to a
5344 5361 separate file, in an attempt to have a Windows GUI installer.
5345 5362 That didn't work, but part of the groundwork is done.
5346 5363
5347 5364 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
5348 5365 indent/unindent with 4 spaces. Particularly useful in combination
5349 5366 with the new auto-indent option.
5350 5367
5351 5368 2003-04-16 Fernando Perez <fperez@colorado.edu>
5352 5369
5353 5370 * IPython/Magic.py: various replacements of self.rc for
5354 5371 self.shell.rc. A lot more remains to be done to fully disentangle
5355 5372 this class from the main Shell class.
5356 5373
5357 5374 * IPython/GnuplotRuntime.py: added checks for mouse support so
5358 5375 that we don't try to enable it if the current gnuplot doesn't
5359 5376 really support it. Also added checks so that we don't try to
5360 5377 enable persist under Windows (where Gnuplot doesn't recognize the
5361 5378 option).
5362 5379
5363 5380 * IPython/iplib.py (InteractiveShell.interact): Added optional
5364 5381 auto-indenting code, after a patch by King C. Shu
5365 5382 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
5366 5383 get along well with pasting indented code. If I ever figure out
5367 5384 how to make that part go well, it will become on by default.
5368 5385
5369 5386 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
5370 5387 crash ipython if there was an unmatched '%' in the user's prompt
5371 5388 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5372 5389
5373 5390 * IPython/iplib.py (InteractiveShell.interact): removed the
5374 5391 ability to ask the user whether he wants to crash or not at the
5375 5392 'last line' exception handler. Calling functions at that point
5376 5393 changes the stack, and the error reports would have incorrect
5377 5394 tracebacks.
5378 5395
5379 5396 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
5380 5397 pass through a peger a pretty-printed form of any object. After a
5381 5398 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
5382 5399
5383 5400 2003-04-14 Fernando Perez <fperez@colorado.edu>
5384 5401
5385 5402 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
5386 5403 all files in ~ would be modified at first install (instead of
5387 5404 ~/.ipython). This could be potentially disastrous, as the
5388 5405 modification (make line-endings native) could damage binary files.
5389 5406
5390 5407 2003-04-10 Fernando Perez <fperez@colorado.edu>
5391 5408
5392 5409 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
5393 5410 handle only lines which are invalid python. This now means that
5394 5411 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
5395 5412 for the bug report.
5396 5413
5397 5414 2003-04-01 Fernando Perez <fperez@colorado.edu>
5398 5415
5399 5416 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
5400 5417 where failing to set sys.last_traceback would crash pdb.pm().
5401 5418 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
5402 5419 report.
5403 5420
5404 5421 2003-03-25 Fernando Perez <fperez@colorado.edu>
5405 5422
5406 5423 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
5407 5424 before printing it (it had a lot of spurious blank lines at the
5408 5425 end).
5409 5426
5410 5427 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
5411 5428 output would be sent 21 times! Obviously people don't use this
5412 5429 too often, or I would have heard about it.
5413 5430
5414 5431 2003-03-24 Fernando Perez <fperez@colorado.edu>
5415 5432
5416 5433 * setup.py (scriptfiles): renamed the data_files parameter from
5417 5434 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
5418 5435 for the patch.
5419 5436
5420 5437 2003-03-20 Fernando Perez <fperez@colorado.edu>
5421 5438
5422 5439 * IPython/genutils.py (error): added error() and fatal()
5423 5440 functions.
5424 5441
5425 5442 2003-03-18 *** Released version 0.2.15pre3
5426 5443
5427 5444 2003-03-18 Fernando Perez <fperez@colorado.edu>
5428 5445
5429 5446 * setupext/install_data_ext.py
5430 5447 (install_data_ext.initialize_options): Class contributed by Jack
5431 5448 Moffit for fixing the old distutils hack. He is sending this to
5432 5449 the distutils folks so in the future we may not need it as a
5433 5450 private fix.
5434 5451
5435 5452 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5436 5453 changes for Debian packaging. See his patch for full details.
5437 5454 The old distutils hack of making the ipythonrc* files carry a
5438 5455 bogus .py extension is gone, at last. Examples were moved to a
5439 5456 separate subdir under doc/, and the separate executable scripts
5440 5457 now live in their own directory. Overall a great cleanup. The
5441 5458 manual was updated to use the new files, and setup.py has been
5442 5459 fixed for this setup.
5443 5460
5444 5461 * IPython/PyColorize.py (Parser.usage): made non-executable and
5445 5462 created a pycolor wrapper around it to be included as a script.
5446 5463
5447 5464 2003-03-12 *** Released version 0.2.15pre2
5448 5465
5449 5466 2003-03-12 Fernando Perez <fperez@colorado.edu>
5450 5467
5451 5468 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5452 5469 long-standing problem with garbage characters in some terminals.
5453 5470 The issue was really that the \001 and \002 escapes must _only_ be
5454 5471 passed to input prompts (which call readline), but _never_ to
5455 5472 normal text to be printed on screen. I changed ColorANSI to have
5456 5473 two classes: TermColors and InputTermColors, each with the
5457 5474 appropriate escapes for input prompts or normal text. The code in
5458 5475 Prompts.py got slightly more complicated, but this very old and
5459 5476 annoying bug is finally fixed.
5460 5477
5461 5478 All the credit for nailing down the real origin of this problem
5462 5479 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5463 5480 *Many* thanks to him for spending quite a bit of effort on this.
5464 5481
5465 5482 2003-03-05 *** Released version 0.2.15pre1
5466 5483
5467 5484 2003-03-03 Fernando Perez <fperez@colorado.edu>
5468 5485
5469 5486 * IPython/FakeModule.py: Moved the former _FakeModule to a
5470 5487 separate file, because it's also needed by Magic (to fix a similar
5471 5488 pickle-related issue in @run).
5472 5489
5473 5490 2003-03-02 Fernando Perez <fperez@colorado.edu>
5474 5491
5475 5492 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5476 5493 the autocall option at runtime.
5477 5494 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5478 5495 across Magic.py to start separating Magic from InteractiveShell.
5479 5496 (Magic._ofind): Fixed to return proper namespace for dotted
5480 5497 names. Before, a dotted name would always return 'not currently
5481 5498 defined', because it would find the 'parent'. s.x would be found,
5482 5499 but since 'x' isn't defined by itself, it would get confused.
5483 5500 (Magic.magic_run): Fixed pickling problems reported by Ralf
5484 5501 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5485 5502 that I'd used when Mike Heeter reported similar issues at the
5486 5503 top-level, but now for @run. It boils down to injecting the
5487 5504 namespace where code is being executed with something that looks
5488 5505 enough like a module to fool pickle.dump(). Since a pickle stores
5489 5506 a named reference to the importing module, we need this for
5490 5507 pickles to save something sensible.
5491 5508
5492 5509 * IPython/ipmaker.py (make_IPython): added an autocall option.
5493 5510
5494 5511 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5495 5512 the auto-eval code. Now autocalling is an option, and the code is
5496 5513 also vastly safer. There is no more eval() involved at all.
5497 5514
5498 5515 2003-03-01 Fernando Perez <fperez@colorado.edu>
5499 5516
5500 5517 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5501 5518 dict with named keys instead of a tuple.
5502 5519
5503 5520 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5504 5521
5505 5522 * setup.py (make_shortcut): Fixed message about directories
5506 5523 created during Windows installation (the directories were ok, just
5507 5524 the printed message was misleading). Thanks to Chris Liechti
5508 5525 <cliechti-AT-gmx.net> for the heads up.
5509 5526
5510 5527 2003-02-21 Fernando Perez <fperez@colorado.edu>
5511 5528
5512 5529 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5513 5530 of ValueError exception when checking for auto-execution. This
5514 5531 one is raised by things like Numeric arrays arr.flat when the
5515 5532 array is non-contiguous.
5516 5533
5517 5534 2003-01-31 Fernando Perez <fperez@colorado.edu>
5518 5535
5519 5536 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5520 5537 not return any value at all (even though the command would get
5521 5538 executed).
5522 5539 (xsys): Flush stdout right after printing the command to ensure
5523 5540 proper ordering of commands and command output in the total
5524 5541 output.
5525 5542 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5526 5543 system/getoutput as defaults. The old ones are kept for
5527 5544 compatibility reasons, so no code which uses this library needs
5528 5545 changing.
5529 5546
5530 5547 2003-01-27 *** Released version 0.2.14
5531 5548
5532 5549 2003-01-25 Fernando Perez <fperez@colorado.edu>
5533 5550
5534 5551 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5535 5552 functions defined in previous edit sessions could not be re-edited
5536 5553 (because the temp files were immediately removed). Now temp files
5537 5554 are removed only at IPython's exit.
5538 5555 (Magic.magic_run): Improved @run to perform shell-like expansions
5539 5556 on its arguments (~users and $VARS). With this, @run becomes more
5540 5557 like a normal command-line.
5541 5558
5542 5559 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5543 5560 bugs related to embedding and cleaned up that code. A fairly
5544 5561 important one was the impossibility to access the global namespace
5545 5562 through the embedded IPython (only local variables were visible).
5546 5563
5547 5564 2003-01-14 Fernando Perez <fperez@colorado.edu>
5548 5565
5549 5566 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5550 5567 auto-calling to be a bit more conservative. Now it doesn't get
5551 5568 triggered if any of '!=()<>' are in the rest of the input line, to
5552 5569 allow comparing callables. Thanks to Alex for the heads up.
5553 5570
5554 5571 2003-01-07 Fernando Perez <fperez@colorado.edu>
5555 5572
5556 5573 * IPython/genutils.py (page): fixed estimation of the number of
5557 5574 lines in a string to be paged to simply count newlines. This
5558 5575 prevents over-guessing due to embedded escape sequences. A better
5559 5576 long-term solution would involve stripping out the control chars
5560 5577 for the count, but it's potentially so expensive I just don't
5561 5578 think it's worth doing.
5562 5579
5563 5580 2002-12-19 *** Released version 0.2.14pre50
5564 5581
5565 5582 2002-12-19 Fernando Perez <fperez@colorado.edu>
5566 5583
5567 5584 * tools/release (version): Changed release scripts to inform
5568 5585 Andrea and build a NEWS file with a list of recent changes.
5569 5586
5570 5587 * IPython/ColorANSI.py (__all__): changed terminal detection
5571 5588 code. Seems to work better for xterms without breaking
5572 5589 konsole. Will need more testing to determine if WinXP and Mac OSX
5573 5590 also work ok.
5574 5591
5575 5592 2002-12-18 *** Released version 0.2.14pre49
5576 5593
5577 5594 2002-12-18 Fernando Perez <fperez@colorado.edu>
5578 5595
5579 5596 * Docs: added new info about Mac OSX, from Andrea.
5580 5597
5581 5598 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5582 5599 allow direct plotting of python strings whose format is the same
5583 5600 of gnuplot data files.
5584 5601
5585 5602 2002-12-16 Fernando Perez <fperez@colorado.edu>
5586 5603
5587 5604 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5588 5605 value of exit question to be acknowledged.
5589 5606
5590 5607 2002-12-03 Fernando Perez <fperez@colorado.edu>
5591 5608
5592 5609 * IPython/ipmaker.py: removed generators, which had been added
5593 5610 by mistake in an earlier debugging run. This was causing trouble
5594 5611 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5595 5612 for pointing this out.
5596 5613
5597 5614 2002-11-17 Fernando Perez <fperez@colorado.edu>
5598 5615
5599 5616 * Manual: updated the Gnuplot section.
5600 5617
5601 5618 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5602 5619 a much better split of what goes in Runtime and what goes in
5603 5620 Interactive.
5604 5621
5605 5622 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5606 5623 being imported from iplib.
5607 5624
5608 5625 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5609 5626 for command-passing. Now the global Gnuplot instance is called
5610 5627 'gp' instead of 'g', which was really a far too fragile and
5611 5628 common name.
5612 5629
5613 5630 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5614 5631 bounding boxes generated by Gnuplot for square plots.
5615 5632
5616 5633 * IPython/genutils.py (popkey): new function added. I should
5617 5634 suggest this on c.l.py as a dict method, it seems useful.
5618 5635
5619 5636 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5620 5637 to transparently handle PostScript generation. MUCH better than
5621 5638 the previous plot_eps/replot_eps (which I removed now). The code
5622 5639 is also fairly clean and well documented now (including
5623 5640 docstrings).
5624 5641
5625 5642 2002-11-13 Fernando Perez <fperez@colorado.edu>
5626 5643
5627 5644 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5628 5645 (inconsistent with options).
5629 5646
5630 5647 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5631 5648 manually disabled, I don't know why. Fixed it.
5632 5649 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5633 5650 eps output.
5634 5651
5635 5652 2002-11-12 Fernando Perez <fperez@colorado.edu>
5636 5653
5637 5654 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5638 5655 don't propagate up to caller. Fixes crash reported by François
5639 5656 Pinard.
5640 5657
5641 5658 2002-11-09 Fernando Perez <fperez@colorado.edu>
5642 5659
5643 5660 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5644 5661 history file for new users.
5645 5662 (make_IPython): fixed bug where initial install would leave the
5646 5663 user running in the .ipython dir.
5647 5664 (make_IPython): fixed bug where config dir .ipython would be
5648 5665 created regardless of the given -ipythondir option. Thanks to Cory
5649 5666 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5650 5667
5651 5668 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5652 5669 type confirmations. Will need to use it in all of IPython's code
5653 5670 consistently.
5654 5671
5655 5672 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5656 5673 context to print 31 lines instead of the default 5. This will make
5657 5674 the crash reports extremely detailed in case the problem is in
5658 5675 libraries I don't have access to.
5659 5676
5660 5677 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5661 5678 line of defense' code to still crash, but giving users fair
5662 5679 warning. I don't want internal errors to go unreported: if there's
5663 5680 an internal problem, IPython should crash and generate a full
5664 5681 report.
5665 5682
5666 5683 2002-11-08 Fernando Perez <fperez@colorado.edu>
5667 5684
5668 5685 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5669 5686 otherwise uncaught exceptions which can appear if people set
5670 5687 sys.stdout to something badly broken. Thanks to a crash report
5671 5688 from henni-AT-mail.brainbot.com.
5672 5689
5673 5690 2002-11-04 Fernando Perez <fperez@colorado.edu>
5674 5691
5675 5692 * IPython/iplib.py (InteractiveShell.interact): added
5676 5693 __IPYTHON__active to the builtins. It's a flag which goes on when
5677 5694 the interaction starts and goes off again when it stops. This
5678 5695 allows embedding code to detect being inside IPython. Before this
5679 5696 was done via __IPYTHON__, but that only shows that an IPython
5680 5697 instance has been created.
5681 5698
5682 5699 * IPython/Magic.py (Magic.magic_env): I realized that in a
5683 5700 UserDict, instance.data holds the data as a normal dict. So I
5684 5701 modified @env to return os.environ.data instead of rebuilding a
5685 5702 dict by hand.
5686 5703
5687 5704 2002-11-02 Fernando Perez <fperez@colorado.edu>
5688 5705
5689 5706 * IPython/genutils.py (warn): changed so that level 1 prints no
5690 5707 header. Level 2 is now the default (with 'WARNING' header, as
5691 5708 before). I think I tracked all places where changes were needed in
5692 5709 IPython, but outside code using the old level numbering may have
5693 5710 broken.
5694 5711
5695 5712 * IPython/iplib.py (InteractiveShell.runcode): added this to
5696 5713 handle the tracebacks in SystemExit traps correctly. The previous
5697 5714 code (through interact) was printing more of the stack than
5698 5715 necessary, showing IPython internal code to the user.
5699 5716
5700 5717 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5701 5718 default. Now that the default at the confirmation prompt is yes,
5702 5719 it's not so intrusive. François' argument that ipython sessions
5703 5720 tend to be complex enough not to lose them from an accidental C-d,
5704 5721 is a valid one.
5705 5722
5706 5723 * IPython/iplib.py (InteractiveShell.interact): added a
5707 5724 showtraceback() call to the SystemExit trap, and modified the exit
5708 5725 confirmation to have yes as the default.
5709 5726
5710 5727 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5711 5728 this file. It's been gone from the code for a long time, this was
5712 5729 simply leftover junk.
5713 5730
5714 5731 2002-11-01 Fernando Perez <fperez@colorado.edu>
5715 5732
5716 5733 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5717 5734 added. If set, IPython now traps EOF and asks for
5718 5735 confirmation. After a request by François Pinard.
5719 5736
5720 5737 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5721 5738 of @abort, and with a new (better) mechanism for handling the
5722 5739 exceptions.
5723 5740
5724 5741 2002-10-27 Fernando Perez <fperez@colorado.edu>
5725 5742
5726 5743 * IPython/usage.py (__doc__): updated the --help information and
5727 5744 the ipythonrc file to indicate that -log generates
5728 5745 ./ipython.log. Also fixed the corresponding info in @logstart.
5729 5746 This and several other fixes in the manuals thanks to reports by
5730 5747 François Pinard <pinard-AT-iro.umontreal.ca>.
5731 5748
5732 5749 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5733 5750 refer to @logstart (instead of @log, which doesn't exist).
5734 5751
5735 5752 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5736 5753 AttributeError crash. Thanks to Christopher Armstrong
5737 5754 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5738 5755 introduced recently (in 0.2.14pre37) with the fix to the eval
5739 5756 problem mentioned below.
5740 5757
5741 5758 2002-10-17 Fernando Perez <fperez@colorado.edu>
5742 5759
5743 5760 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5744 5761 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5745 5762
5746 5763 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5747 5764 this function to fix a problem reported by Alex Schmolck. He saw
5748 5765 it with list comprehensions and generators, which were getting
5749 5766 called twice. The real problem was an 'eval' call in testing for
5750 5767 automagic which was evaluating the input line silently.
5751 5768
5752 5769 This is a potentially very nasty bug, if the input has side
5753 5770 effects which must not be repeated. The code is much cleaner now,
5754 5771 without any blanket 'except' left and with a regexp test for
5755 5772 actual function names.
5756 5773
5757 5774 But an eval remains, which I'm not fully comfortable with. I just
5758 5775 don't know how to find out if an expression could be a callable in
5759 5776 the user's namespace without doing an eval on the string. However
5760 5777 that string is now much more strictly checked so that no code
5761 5778 slips by, so the eval should only happen for things that can
5762 5779 really be only function/method names.
5763 5780
5764 5781 2002-10-15 Fernando Perez <fperez@colorado.edu>
5765 5782
5766 5783 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5767 5784 OSX information to main manual, removed README_Mac_OSX file from
5768 5785 distribution. Also updated credits for recent additions.
5769 5786
5770 5787 2002-10-10 Fernando Perez <fperez@colorado.edu>
5771 5788
5772 5789 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5773 5790 terminal-related issues. Many thanks to Andrea Riciputi
5774 5791 <andrea.riciputi-AT-libero.it> for writing it.
5775 5792
5776 5793 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5777 5794 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5778 5795
5779 5796 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5780 5797 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5781 5798 <syver-en-AT-online.no> who both submitted patches for this problem.
5782 5799
5783 5800 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5784 5801 global embedding to make sure that things don't overwrite user
5785 5802 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5786 5803
5787 5804 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5788 5805 compatibility. Thanks to Hayden Callow
5789 5806 <h.callow-AT-elec.canterbury.ac.nz>
5790 5807
5791 5808 2002-10-04 Fernando Perez <fperez@colorado.edu>
5792 5809
5793 5810 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5794 5811 Gnuplot.File objects.
5795 5812
5796 5813 2002-07-23 Fernando Perez <fperez@colorado.edu>
5797 5814
5798 5815 * IPython/genutils.py (timing): Added timings() and timing() for
5799 5816 quick access to the most commonly needed data, the execution
5800 5817 times. Old timing() renamed to timings_out().
5801 5818
5802 5819 2002-07-18 Fernando Perez <fperez@colorado.edu>
5803 5820
5804 5821 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5805 5822 bug with nested instances disrupting the parent's tab completion.
5806 5823
5807 5824 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5808 5825 all_completions code to begin the emacs integration.
5809 5826
5810 5827 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5811 5828 argument to allow titling individual arrays when plotting.
5812 5829
5813 5830 2002-07-15 Fernando Perez <fperez@colorado.edu>
5814 5831
5815 5832 * setup.py (make_shortcut): changed to retrieve the value of
5816 5833 'Program Files' directory from the registry (this value changes in
5817 5834 non-english versions of Windows). Thanks to Thomas Fanslau
5818 5835 <tfanslau-AT-gmx.de> for the report.
5819 5836
5820 5837 2002-07-10 Fernando Perez <fperez@colorado.edu>
5821 5838
5822 5839 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5823 5840 a bug in pdb, which crashes if a line with only whitespace is
5824 5841 entered. Bug report submitted to sourceforge.
5825 5842
5826 5843 2002-07-09 Fernando Perez <fperez@colorado.edu>
5827 5844
5828 5845 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5829 5846 reporting exceptions (it's a bug in inspect.py, I just set a
5830 5847 workaround).
5831 5848
5832 5849 2002-07-08 Fernando Perez <fperez@colorado.edu>
5833 5850
5834 5851 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5835 5852 __IPYTHON__ in __builtins__ to show up in user_ns.
5836 5853
5837 5854 2002-07-03 Fernando Perez <fperez@colorado.edu>
5838 5855
5839 5856 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5840 5857 name from @gp_set_instance to @gp_set_default.
5841 5858
5842 5859 * IPython/ipmaker.py (make_IPython): default editor value set to
5843 5860 '0' (a string), to match the rc file. Otherwise will crash when
5844 5861 .strip() is called on it.
5845 5862
5846 5863
5847 5864 2002-06-28 Fernando Perez <fperez@colorado.edu>
5848 5865
5849 5866 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5850 5867 of files in current directory when a file is executed via
5851 5868 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5852 5869
5853 5870 * setup.py (manfiles): fix for rpm builds, submitted by RA
5854 5871 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5855 5872
5856 5873 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5857 5874 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5858 5875 string!). A. Schmolck caught this one.
5859 5876
5860 5877 2002-06-27 Fernando Perez <fperez@colorado.edu>
5861 5878
5862 5879 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5863 5880 defined files at the cmd line. __name__ wasn't being set to
5864 5881 __main__.
5865 5882
5866 5883 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5867 5884 regular lists and tuples besides Numeric arrays.
5868 5885
5869 5886 * IPython/Prompts.py (CachedOutput.__call__): Added output
5870 5887 supression for input ending with ';'. Similar to Mathematica and
5871 5888 Matlab. The _* vars and Out[] list are still updated, just like
5872 5889 Mathematica behaves.
5873 5890
5874 5891 2002-06-25 Fernando Perez <fperez@colorado.edu>
5875 5892
5876 5893 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5877 5894 .ini extensions for profiels under Windows.
5878 5895
5879 5896 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5880 5897 string form. Fix contributed by Alexander Schmolck
5881 5898 <a.schmolck-AT-gmx.net>
5882 5899
5883 5900 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5884 5901 pre-configured Gnuplot instance.
5885 5902
5886 5903 2002-06-21 Fernando Perez <fperez@colorado.edu>
5887 5904
5888 5905 * IPython/numutils.py (exp_safe): new function, works around the
5889 5906 underflow problems in Numeric.
5890 5907 (log2): New fn. Safe log in base 2: returns exact integer answer
5891 5908 for exact integer powers of 2.
5892 5909
5893 5910 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5894 5911 properly.
5895 5912
5896 5913 2002-06-20 Fernando Perez <fperez@colorado.edu>
5897 5914
5898 5915 * IPython/genutils.py (timing): new function like
5899 5916 Mathematica's. Similar to time_test, but returns more info.
5900 5917
5901 5918 2002-06-18 Fernando Perez <fperez@colorado.edu>
5902 5919
5903 5920 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5904 5921 according to Mike Heeter's suggestions.
5905 5922
5906 5923 2002-06-16 Fernando Perez <fperez@colorado.edu>
5907 5924
5908 5925 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5909 5926 system. GnuplotMagic is gone as a user-directory option. New files
5910 5927 make it easier to use all the gnuplot stuff both from external
5911 5928 programs as well as from IPython. Had to rewrite part of
5912 5929 hardcopy() b/c of a strange bug: often the ps files simply don't
5913 5930 get created, and require a repeat of the command (often several
5914 5931 times).
5915 5932
5916 5933 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5917 5934 resolve output channel at call time, so that if sys.stderr has
5918 5935 been redirected by user this gets honored.
5919 5936
5920 5937 2002-06-13 Fernando Perez <fperez@colorado.edu>
5921 5938
5922 5939 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5923 5940 IPShell. Kept a copy with the old names to avoid breaking people's
5924 5941 embedded code.
5925 5942
5926 5943 * IPython/ipython: simplified it to the bare minimum after
5927 5944 Holger's suggestions. Added info about how to use it in
5928 5945 PYTHONSTARTUP.
5929 5946
5930 5947 * IPython/Shell.py (IPythonShell): changed the options passing
5931 5948 from a string with funky %s replacements to a straight list. Maybe
5932 5949 a bit more typing, but it follows sys.argv conventions, so there's
5933 5950 less special-casing to remember.
5934 5951
5935 5952 2002-06-12 Fernando Perez <fperez@colorado.edu>
5936 5953
5937 5954 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5938 5955 command. Thanks to a suggestion by Mike Heeter.
5939 5956 (Magic.magic_pfile): added behavior to look at filenames if given
5940 5957 arg is not a defined object.
5941 5958 (Magic.magic_save): New @save function to save code snippets. Also
5942 5959 a Mike Heeter idea.
5943 5960
5944 5961 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5945 5962 plot() and replot(). Much more convenient now, especially for
5946 5963 interactive use.
5947 5964
5948 5965 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5949 5966 filenames.
5950 5967
5951 5968 2002-06-02 Fernando Perez <fperez@colorado.edu>
5952 5969
5953 5970 * IPython/Struct.py (Struct.__init__): modified to admit
5954 5971 initialization via another struct.
5955 5972
5956 5973 * IPython/genutils.py (SystemExec.__init__): New stateful
5957 5974 interface to xsys and bq. Useful for writing system scripts.
5958 5975
5959 5976 2002-05-30 Fernando Perez <fperez@colorado.edu>
5960 5977
5961 5978 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5962 5979 documents. This will make the user download smaller (it's getting
5963 5980 too big).
5964 5981
5965 5982 2002-05-29 Fernando Perez <fperez@colorado.edu>
5966 5983
5967 5984 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5968 5985 fix problems with shelve and pickle. Seems to work, but I don't
5969 5986 know if corner cases break it. Thanks to Mike Heeter
5970 5987 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5971 5988
5972 5989 2002-05-24 Fernando Perez <fperez@colorado.edu>
5973 5990
5974 5991 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5975 5992 macros having broken.
5976 5993
5977 5994 2002-05-21 Fernando Perez <fperez@colorado.edu>
5978 5995
5979 5996 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5980 5997 introduced logging bug: all history before logging started was
5981 5998 being written one character per line! This came from the redesign
5982 5999 of the input history as a special list which slices to strings,
5983 6000 not to lists.
5984 6001
5985 6002 2002-05-20 Fernando Perez <fperez@colorado.edu>
5986 6003
5987 6004 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5988 6005 be an attribute of all classes in this module. The design of these
5989 6006 classes needs some serious overhauling.
5990 6007
5991 6008 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5992 6009 which was ignoring '_' in option names.
5993 6010
5994 6011 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5995 6012 'Verbose_novars' to 'Context' and made it the new default. It's a
5996 6013 bit more readable and also safer than verbose.
5997 6014
5998 6015 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5999 6016 triple-quoted strings.
6000 6017
6001 6018 * IPython/OInspect.py (__all__): new module exposing the object
6002 6019 introspection facilities. Now the corresponding magics are dummy
6003 6020 wrappers around this. Having this module will make it much easier
6004 6021 to put these functions into our modified pdb.
6005 6022 This new object inspector system uses the new colorizing module,
6006 6023 so source code and other things are nicely syntax highlighted.
6007 6024
6008 6025 2002-05-18 Fernando Perez <fperez@colorado.edu>
6009 6026
6010 6027 * IPython/ColorANSI.py: Split the coloring tools into a separate
6011 6028 module so I can use them in other code easier (they were part of
6012 6029 ultraTB).
6013 6030
6014 6031 2002-05-17 Fernando Perez <fperez@colorado.edu>
6015 6032
6016 6033 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
6017 6034 fixed it to set the global 'g' also to the called instance, as
6018 6035 long as 'g' was still a gnuplot instance (so it doesn't overwrite
6019 6036 user's 'g' variables).
6020 6037
6021 6038 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
6022 6039 global variables (aliases to _ih,_oh) so that users which expect
6023 6040 In[5] or Out[7] to work aren't unpleasantly surprised.
6024 6041 (InputList.__getslice__): new class to allow executing slices of
6025 6042 input history directly. Very simple class, complements the use of
6026 6043 macros.
6027 6044
6028 6045 2002-05-16 Fernando Perez <fperez@colorado.edu>
6029 6046
6030 6047 * setup.py (docdirbase): make doc directory be just doc/IPython
6031 6048 without version numbers, it will reduce clutter for users.
6032 6049
6033 6050 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
6034 6051 execfile call to prevent possible memory leak. See for details:
6035 6052 http://mail.python.org/pipermail/python-list/2002-February/088476.html
6036 6053
6037 6054 2002-05-15 Fernando Perez <fperez@colorado.edu>
6038 6055
6039 6056 * IPython/Magic.py (Magic.magic_psource): made the object
6040 6057 introspection names be more standard: pdoc, pdef, pfile and
6041 6058 psource. They all print/page their output, and it makes
6042 6059 remembering them easier. Kept old names for compatibility as
6043 6060 aliases.
6044 6061
6045 6062 2002-05-14 Fernando Perez <fperez@colorado.edu>
6046 6063
6047 6064 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
6048 6065 what the mouse problem was. The trick is to use gnuplot with temp
6049 6066 files and NOT with pipes (for data communication), because having
6050 6067 both pipes and the mouse on is bad news.
6051 6068
6052 6069 2002-05-13 Fernando Perez <fperez@colorado.edu>
6053 6070
6054 6071 * IPython/Magic.py (Magic._ofind): fixed namespace order search
6055 6072 bug. Information would be reported about builtins even when
6056 6073 user-defined functions overrode them.
6057 6074
6058 6075 2002-05-11 Fernando Perez <fperez@colorado.edu>
6059 6076
6060 6077 * IPython/__init__.py (__all__): removed FlexCompleter from
6061 6078 __all__ so that things don't fail in platforms without readline.
6062 6079
6063 6080 2002-05-10 Fernando Perez <fperez@colorado.edu>
6064 6081
6065 6082 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
6066 6083 it requires Numeric, effectively making Numeric a dependency for
6067 6084 IPython.
6068 6085
6069 6086 * Released 0.2.13
6070 6087
6071 6088 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
6072 6089 profiler interface. Now all the major options from the profiler
6073 6090 module are directly supported in IPython, both for single
6074 6091 expressions (@prun) and for full programs (@run -p).
6075 6092
6076 6093 2002-05-09 Fernando Perez <fperez@colorado.edu>
6077 6094
6078 6095 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
6079 6096 magic properly formatted for screen.
6080 6097
6081 6098 * setup.py (make_shortcut): Changed things to put pdf version in
6082 6099 doc/ instead of doc/manual (had to change lyxport a bit).
6083 6100
6084 6101 * IPython/Magic.py (Profile.string_stats): made profile runs go
6085 6102 through pager (they are long and a pager allows searching, saving,
6086 6103 etc.)
6087 6104
6088 6105 2002-05-08 Fernando Perez <fperez@colorado.edu>
6089 6106
6090 6107 * Released 0.2.12
6091 6108
6092 6109 2002-05-06 Fernando Perez <fperez@colorado.edu>
6093 6110
6094 6111 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
6095 6112 introduced); 'hist n1 n2' was broken.
6096 6113 (Magic.magic_pdb): added optional on/off arguments to @pdb
6097 6114 (Magic.magic_run): added option -i to @run, which executes code in
6098 6115 the IPython namespace instead of a clean one. Also added @irun as
6099 6116 an alias to @run -i.
6100 6117
6101 6118 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
6102 6119 fixed (it didn't really do anything, the namespaces were wrong).
6103 6120
6104 6121 * IPython/Debugger.py (__init__): Added workaround for python 2.1
6105 6122
6106 6123 * IPython/__init__.py (__all__): Fixed package namespace, now
6107 6124 'import IPython' does give access to IPython.<all> as
6108 6125 expected. Also renamed __release__ to Release.
6109 6126
6110 6127 * IPython/Debugger.py (__license__): created new Pdb class which
6111 6128 functions like a drop-in for the normal pdb.Pdb but does NOT
6112 6129 import readline by default. This way it doesn't muck up IPython's
6113 6130 readline handling, and now tab-completion finally works in the
6114 6131 debugger -- sort of. It completes things globally visible, but the
6115 6132 completer doesn't track the stack as pdb walks it. That's a bit
6116 6133 tricky, and I'll have to implement it later.
6117 6134
6118 6135 2002-05-05 Fernando Perez <fperez@colorado.edu>
6119 6136
6120 6137 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
6121 6138 magic docstrings when printed via ? (explicit \'s were being
6122 6139 printed).
6123 6140
6124 6141 * IPython/ipmaker.py (make_IPython): fixed namespace
6125 6142 identification bug. Now variables loaded via logs or command-line
6126 6143 files are recognized in the interactive namespace by @who.
6127 6144
6128 6145 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
6129 6146 log replay system stemming from the string form of Structs.
6130 6147
6131 6148 * IPython/Magic.py (Macro.__init__): improved macros to properly
6132 6149 handle magic commands in them.
6133 6150 (Magic.magic_logstart): usernames are now expanded so 'logstart
6134 6151 ~/mylog' now works.
6135 6152
6136 6153 * IPython/iplib.py (complete): fixed bug where paths starting with
6137 6154 '/' would be completed as magic names.
6138 6155
6139 6156 2002-05-04 Fernando Perez <fperez@colorado.edu>
6140 6157
6141 6158 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
6142 6159 allow running full programs under the profiler's control.
6143 6160
6144 6161 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
6145 6162 mode to report exceptions verbosely but without formatting
6146 6163 variables. This addresses the issue of ipython 'freezing' (it's
6147 6164 not frozen, but caught in an expensive formatting loop) when huge
6148 6165 variables are in the context of an exception.
6149 6166 (VerboseTB.text): Added '--->' markers at line where exception was
6150 6167 triggered. Much clearer to read, especially in NoColor modes.
6151 6168
6152 6169 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
6153 6170 implemented in reverse when changing to the new parse_options().
6154 6171
6155 6172 2002-05-03 Fernando Perez <fperez@colorado.edu>
6156 6173
6157 6174 * IPython/Magic.py (Magic.parse_options): new function so that
6158 6175 magics can parse options easier.
6159 6176 (Magic.magic_prun): new function similar to profile.run(),
6160 6177 suggested by Chris Hart.
6161 6178 (Magic.magic_cd): fixed behavior so that it only changes if
6162 6179 directory actually is in history.
6163 6180
6164 6181 * IPython/usage.py (__doc__): added information about potential
6165 6182 slowness of Verbose exception mode when there are huge data
6166 6183 structures to be formatted (thanks to Archie Paulson).
6167 6184
6168 6185 * IPython/ipmaker.py (make_IPython): Changed default logging
6169 6186 (when simply called with -log) to use curr_dir/ipython.log in
6170 6187 rotate mode. Fixed crash which was occuring with -log before
6171 6188 (thanks to Jim Boyle).
6172 6189
6173 6190 2002-05-01 Fernando Perez <fperez@colorado.edu>
6174 6191
6175 6192 * Released 0.2.11 for these fixes (mainly the ultraTB one which
6176 6193 was nasty -- though somewhat of a corner case).
6177 6194
6178 6195 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
6179 6196 text (was a bug).
6180 6197
6181 6198 2002-04-30 Fernando Perez <fperez@colorado.edu>
6182 6199
6183 6200 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
6184 6201 a print after ^D or ^C from the user so that the In[] prompt
6185 6202 doesn't over-run the gnuplot one.
6186 6203
6187 6204 2002-04-29 Fernando Perez <fperez@colorado.edu>
6188 6205
6189 6206 * Released 0.2.10
6190 6207
6191 6208 * IPython/__release__.py (version): get date dynamically.
6192 6209
6193 6210 * Misc. documentation updates thanks to Arnd's comments. Also ran
6194 6211 a full spellcheck on the manual (hadn't been done in a while).
6195 6212
6196 6213 2002-04-27 Fernando Perez <fperez@colorado.edu>
6197 6214
6198 6215 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
6199 6216 starting a log in mid-session would reset the input history list.
6200 6217
6201 6218 2002-04-26 Fernando Perez <fperez@colorado.edu>
6202 6219
6203 6220 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
6204 6221 all files were being included in an update. Now anything in
6205 6222 UserConfig that matches [A-Za-z]*.py will go (this excludes
6206 6223 __init__.py)
6207 6224
6208 6225 2002-04-25 Fernando Perez <fperez@colorado.edu>
6209 6226
6210 6227 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
6211 6228 to __builtins__ so that any form of embedded or imported code can
6212 6229 test for being inside IPython.
6213 6230
6214 6231 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
6215 6232 changed to GnuplotMagic because it's now an importable module,
6216 6233 this makes the name follow that of the standard Gnuplot module.
6217 6234 GnuplotMagic can now be loaded at any time in mid-session.
6218 6235
6219 6236 2002-04-24 Fernando Perez <fperez@colorado.edu>
6220 6237
6221 6238 * IPython/numutils.py: removed SIUnits. It doesn't properly set
6222 6239 the globals (IPython has its own namespace) and the
6223 6240 PhysicalQuantity stuff is much better anyway.
6224 6241
6225 6242 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
6226 6243 embedding example to standard user directory for
6227 6244 distribution. Also put it in the manual.
6228 6245
6229 6246 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
6230 6247 instance as first argument (so it doesn't rely on some obscure
6231 6248 hidden global).
6232 6249
6233 6250 * IPython/UserConfig/ipythonrc.py: put () back in accepted
6234 6251 delimiters. While it prevents ().TAB from working, it allows
6235 6252 completions in open (... expressions. This is by far a more common
6236 6253 case.
6237 6254
6238 6255 2002-04-23 Fernando Perez <fperez@colorado.edu>
6239 6256
6240 6257 * IPython/Extensions/InterpreterPasteInput.py: new
6241 6258 syntax-processing module for pasting lines with >>> or ... at the
6242 6259 start.
6243 6260
6244 6261 * IPython/Extensions/PhysicalQ_Interactive.py
6245 6262 (PhysicalQuantityInteractive.__int__): fixed to work with either
6246 6263 Numeric or math.
6247 6264
6248 6265 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
6249 6266 provided profiles. Now we have:
6250 6267 -math -> math module as * and cmath with its own namespace.
6251 6268 -numeric -> Numeric as *, plus gnuplot & grace
6252 6269 -physics -> same as before
6253 6270
6254 6271 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
6255 6272 user-defined magics wouldn't be found by @magic if they were
6256 6273 defined as class methods. Also cleaned up the namespace search
6257 6274 logic and the string building (to use %s instead of many repeated
6258 6275 string adds).
6259 6276
6260 6277 * IPython/UserConfig/example-magic.py (magic_foo): updated example
6261 6278 of user-defined magics to operate with class methods (cleaner, in
6262 6279 line with the gnuplot code).
6263 6280
6264 6281 2002-04-22 Fernando Perez <fperez@colorado.edu>
6265 6282
6266 6283 * setup.py: updated dependency list so that manual is updated when
6267 6284 all included files change.
6268 6285
6269 6286 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
6270 6287 the delimiter removal option (the fix is ugly right now).
6271 6288
6272 6289 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
6273 6290 all of the math profile (quicker loading, no conflict between
6274 6291 g-9.8 and g-gnuplot).
6275 6292
6276 6293 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
6277 6294 name of post-mortem files to IPython_crash_report.txt.
6278 6295
6279 6296 * Cleanup/update of the docs. Added all the new readline info and
6280 6297 formatted all lists as 'real lists'.
6281 6298
6282 6299 * IPython/ipmaker.py (make_IPython): removed now-obsolete
6283 6300 tab-completion options, since the full readline parse_and_bind is
6284 6301 now accessible.
6285 6302
6286 6303 * IPython/iplib.py (InteractiveShell.init_readline): Changed
6287 6304 handling of readline options. Now users can specify any string to
6288 6305 be passed to parse_and_bind(), as well as the delimiters to be
6289 6306 removed.
6290 6307 (InteractiveShell.__init__): Added __name__ to the global
6291 6308 namespace so that things like Itpl which rely on its existence
6292 6309 don't crash.
6293 6310 (InteractiveShell._prefilter): Defined the default with a _ so
6294 6311 that prefilter() is easier to override, while the default one
6295 6312 remains available.
6296 6313
6297 6314 2002-04-18 Fernando Perez <fperez@colorado.edu>
6298 6315
6299 6316 * Added information about pdb in the docs.
6300 6317
6301 6318 2002-04-17 Fernando Perez <fperez@colorado.edu>
6302 6319
6303 6320 * IPython/ipmaker.py (make_IPython): added rc_override option to
6304 6321 allow passing config options at creation time which may override
6305 6322 anything set in the config files or command line. This is
6306 6323 particularly useful for configuring embedded instances.
6307 6324
6308 6325 2002-04-15 Fernando Perez <fperez@colorado.edu>
6309 6326
6310 6327 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
6311 6328 crash embedded instances because of the input cache falling out of
6312 6329 sync with the output counter.
6313 6330
6314 6331 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
6315 6332 mode which calls pdb after an uncaught exception in IPython itself.
6316 6333
6317 6334 2002-04-14 Fernando Perez <fperez@colorado.edu>
6318 6335
6319 6336 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
6320 6337 readline, fix it back after each call.
6321 6338
6322 6339 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
6323 6340 method to force all access via __call__(), which guarantees that
6324 6341 traceback references are properly deleted.
6325 6342
6326 6343 * IPython/Prompts.py (CachedOutput._display): minor fixes to
6327 6344 improve printing when pprint is in use.
6328 6345
6329 6346 2002-04-13 Fernando Perez <fperez@colorado.edu>
6330 6347
6331 6348 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
6332 6349 exceptions aren't caught anymore. If the user triggers one, he
6333 6350 should know why he's doing it and it should go all the way up,
6334 6351 just like any other exception. So now @abort will fully kill the
6335 6352 embedded interpreter and the embedding code (unless that happens
6336 6353 to catch SystemExit).
6337 6354
6338 6355 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
6339 6356 and a debugger() method to invoke the interactive pdb debugger
6340 6357 after printing exception information. Also added the corresponding
6341 6358 -pdb option and @pdb magic to control this feature, and updated
6342 6359 the docs. After a suggestion from Christopher Hart
6343 6360 (hart-AT-caltech.edu).
6344 6361
6345 6362 2002-04-12 Fernando Perez <fperez@colorado.edu>
6346 6363
6347 6364 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
6348 6365 the exception handlers defined by the user (not the CrashHandler)
6349 6366 so that user exceptions don't trigger an ipython bug report.
6350 6367
6351 6368 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
6352 6369 configurable (it should have always been so).
6353 6370
6354 6371 2002-03-26 Fernando Perez <fperez@colorado.edu>
6355 6372
6356 6373 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
6357 6374 and there to fix embedding namespace issues. This should all be
6358 6375 done in a more elegant way.
6359 6376
6360 6377 2002-03-25 Fernando Perez <fperez@colorado.edu>
6361 6378
6362 6379 * IPython/genutils.py (get_home_dir): Try to make it work under
6363 6380 win9x also.
6364 6381
6365 6382 2002-03-20 Fernando Perez <fperez@colorado.edu>
6366 6383
6367 6384 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
6368 6385 sys.displayhook untouched upon __init__.
6369 6386
6370 6387 2002-03-19 Fernando Perez <fperez@colorado.edu>
6371 6388
6372 6389 * Released 0.2.9 (for embedding bug, basically).
6373 6390
6374 6391 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
6375 6392 exceptions so that enclosing shell's state can be restored.
6376 6393
6377 6394 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
6378 6395 naming conventions in the .ipython/ dir.
6379 6396
6380 6397 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
6381 6398 from delimiters list so filenames with - in them get expanded.
6382 6399
6383 6400 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
6384 6401 sys.displayhook not being properly restored after an embedded call.
6385 6402
6386 6403 2002-03-18 Fernando Perez <fperez@colorado.edu>
6387 6404
6388 6405 * Released 0.2.8
6389 6406
6390 6407 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
6391 6408 some files weren't being included in a -upgrade.
6392 6409 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
6393 6410 on' so that the first tab completes.
6394 6411 (InteractiveShell.handle_magic): fixed bug with spaces around
6395 6412 quotes breaking many magic commands.
6396 6413
6397 6414 * setup.py: added note about ignoring the syntax error messages at
6398 6415 installation.
6399 6416
6400 6417 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
6401 6418 streamlining the gnuplot interface, now there's only one magic @gp.
6402 6419
6403 6420 2002-03-17 Fernando Perez <fperez@colorado.edu>
6404 6421
6405 6422 * IPython/UserConfig/magic_gnuplot.py: new name for the
6406 6423 example-magic_pm.py file. Much enhanced system, now with a shell
6407 6424 for communicating directly with gnuplot, one command at a time.
6408 6425
6409 6426 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
6410 6427 setting __name__=='__main__'.
6411 6428
6412 6429 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
6413 6430 mini-shell for accessing gnuplot from inside ipython. Should
6414 6431 extend it later for grace access too. Inspired by Arnd's
6415 6432 suggestion.
6416 6433
6417 6434 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
6418 6435 calling magic functions with () in their arguments. Thanks to Arnd
6419 6436 Baecker for pointing this to me.
6420 6437
6421 6438 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
6422 6439 infinitely for integer or complex arrays (only worked with floats).
6423 6440
6424 6441 2002-03-16 Fernando Perez <fperez@colorado.edu>
6425 6442
6426 6443 * setup.py: Merged setup and setup_windows into a single script
6427 6444 which properly handles things for windows users.
6428 6445
6429 6446 2002-03-15 Fernando Perez <fperez@colorado.edu>
6430 6447
6431 6448 * Big change to the manual: now the magics are all automatically
6432 6449 documented. This information is generated from their docstrings
6433 6450 and put in a latex file included by the manual lyx file. This way
6434 6451 we get always up to date information for the magics. The manual
6435 6452 now also has proper version information, also auto-synced.
6436 6453
6437 6454 For this to work, an undocumented --magic_docstrings option was added.
6438 6455
6439 6456 2002-03-13 Fernando Perez <fperez@colorado.edu>
6440 6457
6441 6458 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6442 6459 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6443 6460
6444 6461 2002-03-12 Fernando Perez <fperez@colorado.edu>
6445 6462
6446 6463 * IPython/ultraTB.py (TermColors): changed color escapes again to
6447 6464 fix the (old, reintroduced) line-wrapping bug. Basically, if
6448 6465 \001..\002 aren't given in the color escapes, lines get wrapped
6449 6466 weirdly. But giving those screws up old xterms and emacs terms. So
6450 6467 I added some logic for emacs terms to be ok, but I can't identify old
6451 6468 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6452 6469
6453 6470 2002-03-10 Fernando Perez <fperez@colorado.edu>
6454 6471
6455 6472 * IPython/usage.py (__doc__): Various documentation cleanups and
6456 6473 updates, both in usage docstrings and in the manual.
6457 6474
6458 6475 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6459 6476 handling of caching. Set minimum acceptabe value for having a
6460 6477 cache at 20 values.
6461 6478
6462 6479 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6463 6480 install_first_time function to a method, renamed it and added an
6464 6481 'upgrade' mode. Now people can update their config directory with
6465 6482 a simple command line switch (-upgrade, also new).
6466 6483
6467 6484 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6468 6485 @file (convenient for automagic users under Python >= 2.2).
6469 6486 Removed @files (it seemed more like a plural than an abbrev. of
6470 6487 'file show').
6471 6488
6472 6489 * IPython/iplib.py (install_first_time): Fixed crash if there were
6473 6490 backup files ('~') in .ipython/ install directory.
6474 6491
6475 6492 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6476 6493 system. Things look fine, but these changes are fairly
6477 6494 intrusive. Test them for a few days.
6478 6495
6479 6496 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6480 6497 the prompts system. Now all in/out prompt strings are user
6481 6498 controllable. This is particularly useful for embedding, as one
6482 6499 can tag embedded instances with particular prompts.
6483 6500
6484 6501 Also removed global use of sys.ps1/2, which now allows nested
6485 6502 embeddings without any problems. Added command-line options for
6486 6503 the prompt strings.
6487 6504
6488 6505 2002-03-08 Fernando Perez <fperez@colorado.edu>
6489 6506
6490 6507 * IPython/UserConfig/example-embed-short.py (ipshell): added
6491 6508 example file with the bare minimum code for embedding.
6492 6509
6493 6510 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6494 6511 functionality for the embeddable shell to be activated/deactivated
6495 6512 either globally or at each call.
6496 6513
6497 6514 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6498 6515 rewriting the prompt with '--->' for auto-inputs with proper
6499 6516 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6500 6517 this is handled by the prompts class itself, as it should.
6501 6518
6502 6519 2002-03-05 Fernando Perez <fperez@colorado.edu>
6503 6520
6504 6521 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6505 6522 @logstart to avoid name clashes with the math log function.
6506 6523
6507 6524 * Big updates to X/Emacs section of the manual.
6508 6525
6509 6526 * Removed ipython_emacs. Milan explained to me how to pass
6510 6527 arguments to ipython through Emacs. Some day I'm going to end up
6511 6528 learning some lisp...
6512 6529
6513 6530 2002-03-04 Fernando Perez <fperez@colorado.edu>
6514 6531
6515 6532 * IPython/ipython_emacs: Created script to be used as the
6516 6533 py-python-command Emacs variable so we can pass IPython
6517 6534 parameters. I can't figure out how to tell Emacs directly to pass
6518 6535 parameters to IPython, so a dummy shell script will do it.
6519 6536
6520 6537 Other enhancements made for things to work better under Emacs'
6521 6538 various types of terminals. Many thanks to Milan Zamazal
6522 6539 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6523 6540
6524 6541 2002-03-01 Fernando Perez <fperez@colorado.edu>
6525 6542
6526 6543 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6527 6544 that loading of readline is now optional. This gives better
6528 6545 control to emacs users.
6529 6546
6530 6547 * IPython/ultraTB.py (__date__): Modified color escape sequences
6531 6548 and now things work fine under xterm and in Emacs' term buffers
6532 6549 (though not shell ones). Well, in emacs you get colors, but all
6533 6550 seem to be 'light' colors (no difference between dark and light
6534 6551 ones). But the garbage chars are gone, and also in xterms. It
6535 6552 seems that now I'm using 'cleaner' ansi sequences.
6536 6553
6537 6554 2002-02-21 Fernando Perez <fperez@colorado.edu>
6538 6555
6539 6556 * Released 0.2.7 (mainly to publish the scoping fix).
6540 6557
6541 6558 * IPython/Logger.py (Logger.logstate): added. A corresponding
6542 6559 @logstate magic was created.
6543 6560
6544 6561 * IPython/Magic.py: fixed nested scoping problem under Python
6545 6562 2.1.x (automagic wasn't working).
6546 6563
6547 6564 2002-02-20 Fernando Perez <fperez@colorado.edu>
6548 6565
6549 6566 * Released 0.2.6.
6550 6567
6551 6568 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6552 6569 option so that logs can come out without any headers at all.
6553 6570
6554 6571 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6555 6572 SciPy.
6556 6573
6557 6574 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6558 6575 that embedded IPython calls don't require vars() to be explicitly
6559 6576 passed. Now they are extracted from the caller's frame (code
6560 6577 snatched from Eric Jones' weave). Added better documentation to
6561 6578 the section on embedding and the example file.
6562 6579
6563 6580 * IPython/genutils.py (page): Changed so that under emacs, it just
6564 6581 prints the string. You can then page up and down in the emacs
6565 6582 buffer itself. This is how the builtin help() works.
6566 6583
6567 6584 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6568 6585 macro scoping: macros need to be executed in the user's namespace
6569 6586 to work as if they had been typed by the user.
6570 6587
6571 6588 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6572 6589 execute automatically (no need to type 'exec...'). They then
6573 6590 behave like 'true macros'. The printing system was also modified
6574 6591 for this to work.
6575 6592
6576 6593 2002-02-19 Fernando Perez <fperez@colorado.edu>
6577 6594
6578 6595 * IPython/genutils.py (page_file): new function for paging files
6579 6596 in an OS-independent way. Also necessary for file viewing to work
6580 6597 well inside Emacs buffers.
6581 6598 (page): Added checks for being in an emacs buffer.
6582 6599 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6583 6600 same bug in iplib.
6584 6601
6585 6602 2002-02-18 Fernando Perez <fperez@colorado.edu>
6586 6603
6587 6604 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6588 6605 of readline so that IPython can work inside an Emacs buffer.
6589 6606
6590 6607 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6591 6608 method signatures (they weren't really bugs, but it looks cleaner
6592 6609 and keeps PyChecker happy).
6593 6610
6594 6611 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6595 6612 for implementing various user-defined hooks. Currently only
6596 6613 display is done.
6597 6614
6598 6615 * IPython/Prompts.py (CachedOutput._display): changed display
6599 6616 functions so that they can be dynamically changed by users easily.
6600 6617
6601 6618 * IPython/Extensions/numeric_formats.py (num_display): added an
6602 6619 extension for printing NumPy arrays in flexible manners. It
6603 6620 doesn't do anything yet, but all the structure is in
6604 6621 place. Ultimately the plan is to implement output format control
6605 6622 like in Octave.
6606 6623
6607 6624 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6608 6625 methods are found at run-time by all the automatic machinery.
6609 6626
6610 6627 2002-02-17 Fernando Perez <fperez@colorado.edu>
6611 6628
6612 6629 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6613 6630 whole file a little.
6614 6631
6615 6632 * ToDo: closed this document. Now there's a new_design.lyx
6616 6633 document for all new ideas. Added making a pdf of it for the
6617 6634 end-user distro.
6618 6635
6619 6636 * IPython/Logger.py (Logger.switch_log): Created this to replace
6620 6637 logon() and logoff(). It also fixes a nasty crash reported by
6621 6638 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6622 6639
6623 6640 * IPython/iplib.py (complete): got auto-completion to work with
6624 6641 automagic (I had wanted this for a long time).
6625 6642
6626 6643 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6627 6644 to @file, since file() is now a builtin and clashes with automagic
6628 6645 for @file.
6629 6646
6630 6647 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6631 6648 of this was previously in iplib, which had grown to more than 2000
6632 6649 lines, way too long. No new functionality, but it makes managing
6633 6650 the code a bit easier.
6634 6651
6635 6652 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6636 6653 information to crash reports.
6637 6654
6638 6655 2002-02-12 Fernando Perez <fperez@colorado.edu>
6639 6656
6640 6657 * Released 0.2.5.
6641 6658
6642 6659 2002-02-11 Fernando Perez <fperez@colorado.edu>
6643 6660
6644 6661 * Wrote a relatively complete Windows installer. It puts
6645 6662 everything in place, creates Start Menu entries and fixes the
6646 6663 color issues. Nothing fancy, but it works.
6647 6664
6648 6665 2002-02-10 Fernando Perez <fperez@colorado.edu>
6649 6666
6650 6667 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6651 6668 os.path.expanduser() call so that we can type @run ~/myfile.py and
6652 6669 have thigs work as expected.
6653 6670
6654 6671 * IPython/genutils.py (page): fixed exception handling so things
6655 6672 work both in Unix and Windows correctly. Quitting a pager triggers
6656 6673 an IOError/broken pipe in Unix, and in windows not finding a pager
6657 6674 is also an IOError, so I had to actually look at the return value
6658 6675 of the exception, not just the exception itself. Should be ok now.
6659 6676
6660 6677 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6661 6678 modified to allow case-insensitive color scheme changes.
6662 6679
6663 6680 2002-02-09 Fernando Perez <fperez@colorado.edu>
6664 6681
6665 6682 * IPython/genutils.py (native_line_ends): new function to leave
6666 6683 user config files with os-native line-endings.
6667 6684
6668 6685 * README and manual updates.
6669 6686
6670 6687 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6671 6688 instead of StringType to catch Unicode strings.
6672 6689
6673 6690 * IPython/genutils.py (filefind): fixed bug for paths with
6674 6691 embedded spaces (very common in Windows).
6675 6692
6676 6693 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6677 6694 files under Windows, so that they get automatically associated
6678 6695 with a text editor. Windows makes it a pain to handle
6679 6696 extension-less files.
6680 6697
6681 6698 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6682 6699 warning about readline only occur for Posix. In Windows there's no
6683 6700 way to get readline, so why bother with the warning.
6684 6701
6685 6702 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6686 6703 for __str__ instead of dir(self), since dir() changed in 2.2.
6687 6704
6688 6705 * Ported to Windows! Tested on XP, I suspect it should work fine
6689 6706 on NT/2000, but I don't think it will work on 98 et al. That
6690 6707 series of Windows is such a piece of junk anyway that I won't try
6691 6708 porting it there. The XP port was straightforward, showed a few
6692 6709 bugs here and there (fixed all), in particular some string
6693 6710 handling stuff which required considering Unicode strings (which
6694 6711 Windows uses). This is good, but hasn't been too tested :) No
6695 6712 fancy installer yet, I'll put a note in the manual so people at
6696 6713 least make manually a shortcut.
6697 6714
6698 6715 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6699 6716 into a single one, "colors". This now controls both prompt and
6700 6717 exception color schemes, and can be changed both at startup
6701 6718 (either via command-line switches or via ipythonrc files) and at
6702 6719 runtime, with @colors.
6703 6720 (Magic.magic_run): renamed @prun to @run and removed the old
6704 6721 @run. The two were too similar to warrant keeping both.
6705 6722
6706 6723 2002-02-03 Fernando Perez <fperez@colorado.edu>
6707 6724
6708 6725 * IPython/iplib.py (install_first_time): Added comment on how to
6709 6726 configure the color options for first-time users. Put a <return>
6710 6727 request at the end so that small-terminal users get a chance to
6711 6728 read the startup info.
6712 6729
6713 6730 2002-01-23 Fernando Perez <fperez@colorado.edu>
6714 6731
6715 6732 * IPython/iplib.py (CachedOutput.update): Changed output memory
6716 6733 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6717 6734 input history we still use _i. Did this b/c these variable are
6718 6735 very commonly used in interactive work, so the less we need to
6719 6736 type the better off we are.
6720 6737 (Magic.magic_prun): updated @prun to better handle the namespaces
6721 6738 the file will run in, including a fix for __name__ not being set
6722 6739 before.
6723 6740
6724 6741 2002-01-20 Fernando Perez <fperez@colorado.edu>
6725 6742
6726 6743 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6727 6744 extra garbage for Python 2.2. Need to look more carefully into
6728 6745 this later.
6729 6746
6730 6747 2002-01-19 Fernando Perez <fperez@colorado.edu>
6731 6748
6732 6749 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6733 6750 display SyntaxError exceptions properly formatted when they occur
6734 6751 (they can be triggered by imported code).
6735 6752
6736 6753 2002-01-18 Fernando Perez <fperez@colorado.edu>
6737 6754
6738 6755 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6739 6756 SyntaxError exceptions are reported nicely formatted, instead of
6740 6757 spitting out only offset information as before.
6741 6758 (Magic.magic_prun): Added the @prun function for executing
6742 6759 programs with command line args inside IPython.
6743 6760
6744 6761 2002-01-16 Fernando Perez <fperez@colorado.edu>
6745 6762
6746 6763 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6747 6764 to *not* include the last item given in a range. This brings their
6748 6765 behavior in line with Python's slicing:
6749 6766 a[n1:n2] -> a[n1]...a[n2-1]
6750 6767 It may be a bit less convenient, but I prefer to stick to Python's
6751 6768 conventions *everywhere*, so users never have to wonder.
6752 6769 (Magic.magic_macro): Added @macro function to ease the creation of
6753 6770 macros.
6754 6771
6755 6772 2002-01-05 Fernando Perez <fperez@colorado.edu>
6756 6773
6757 6774 * Released 0.2.4.
6758 6775
6759 6776 * IPython/iplib.py (Magic.magic_pdef):
6760 6777 (InteractiveShell.safe_execfile): report magic lines and error
6761 6778 lines without line numbers so one can easily copy/paste them for
6762 6779 re-execution.
6763 6780
6764 6781 * Updated manual with recent changes.
6765 6782
6766 6783 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6767 6784 docstring printing when class? is called. Very handy for knowing
6768 6785 how to create class instances (as long as __init__ is well
6769 6786 documented, of course :)
6770 6787 (Magic.magic_doc): print both class and constructor docstrings.
6771 6788 (Magic.magic_pdef): give constructor info if passed a class and
6772 6789 __call__ info for callable object instances.
6773 6790
6774 6791 2002-01-04 Fernando Perez <fperez@colorado.edu>
6775 6792
6776 6793 * Made deep_reload() off by default. It doesn't always work
6777 6794 exactly as intended, so it's probably safer to have it off. It's
6778 6795 still available as dreload() anyway, so nothing is lost.
6779 6796
6780 6797 2002-01-02 Fernando Perez <fperez@colorado.edu>
6781 6798
6782 6799 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6783 6800 so I wanted an updated release).
6784 6801
6785 6802 2001-12-27 Fernando Perez <fperez@colorado.edu>
6786 6803
6787 6804 * IPython/iplib.py (InteractiveShell.interact): Added the original
6788 6805 code from 'code.py' for this module in order to change the
6789 6806 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6790 6807 the history cache would break when the user hit Ctrl-C, and
6791 6808 interact() offers no way to add any hooks to it.
6792 6809
6793 6810 2001-12-23 Fernando Perez <fperez@colorado.edu>
6794 6811
6795 6812 * setup.py: added check for 'MANIFEST' before trying to remove
6796 6813 it. Thanks to Sean Reifschneider.
6797 6814
6798 6815 2001-12-22 Fernando Perez <fperez@colorado.edu>
6799 6816
6800 6817 * Released 0.2.2.
6801 6818
6802 6819 * Finished (reasonably) writing the manual. Later will add the
6803 6820 python-standard navigation stylesheets, but for the time being
6804 6821 it's fairly complete. Distribution will include html and pdf
6805 6822 versions.
6806 6823
6807 6824 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6808 6825 (MayaVi author).
6809 6826
6810 6827 2001-12-21 Fernando Perez <fperez@colorado.edu>
6811 6828
6812 6829 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6813 6830 good public release, I think (with the manual and the distutils
6814 6831 installer). The manual can use some work, but that can go
6815 6832 slowly. Otherwise I think it's quite nice for end users. Next
6816 6833 summer, rewrite the guts of it...
6817 6834
6818 6835 * Changed format of ipythonrc files to use whitespace as the
6819 6836 separator instead of an explicit '='. Cleaner.
6820 6837
6821 6838 2001-12-20 Fernando Perez <fperez@colorado.edu>
6822 6839
6823 6840 * Started a manual in LyX. For now it's just a quick merge of the
6824 6841 various internal docstrings and READMEs. Later it may grow into a
6825 6842 nice, full-blown manual.
6826 6843
6827 6844 * Set up a distutils based installer. Installation should now be
6828 6845 trivially simple for end-users.
6829 6846
6830 6847 2001-12-11 Fernando Perez <fperez@colorado.edu>
6831 6848
6832 6849 * Released 0.2.0. First public release, announced it at
6833 6850 comp.lang.python. From now on, just bugfixes...
6834 6851
6835 6852 * Went through all the files, set copyright/license notices and
6836 6853 cleaned up things. Ready for release.
6837 6854
6838 6855 2001-12-10 Fernando Perez <fperez@colorado.edu>
6839 6856
6840 6857 * Changed the first-time installer not to use tarfiles. It's more
6841 6858 robust now and less unix-dependent. Also makes it easier for
6842 6859 people to later upgrade versions.
6843 6860
6844 6861 * Changed @exit to @abort to reflect the fact that it's pretty
6845 6862 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6846 6863 becomes significant only when IPyhton is embedded: in that case,
6847 6864 C-D closes IPython only, but @abort kills the enclosing program
6848 6865 too (unless it had called IPython inside a try catching
6849 6866 SystemExit).
6850 6867
6851 6868 * Created Shell module which exposes the actuall IPython Shell
6852 6869 classes, currently the normal and the embeddable one. This at
6853 6870 least offers a stable interface we won't need to change when
6854 6871 (later) the internals are rewritten. That rewrite will be confined
6855 6872 to iplib and ipmaker, but the Shell interface should remain as is.
6856 6873
6857 6874 * Added embed module which offers an embeddable IPShell object,
6858 6875 useful to fire up IPython *inside* a running program. Great for
6859 6876 debugging or dynamical data analysis.
6860 6877
6861 6878 2001-12-08 Fernando Perez <fperez@colorado.edu>
6862 6879
6863 6880 * Fixed small bug preventing seeing info from methods of defined
6864 6881 objects (incorrect namespace in _ofind()).
6865 6882
6866 6883 * Documentation cleanup. Moved the main usage docstrings to a
6867 6884 separate file, usage.py (cleaner to maintain, and hopefully in the
6868 6885 future some perlpod-like way of producing interactive, man and
6869 6886 html docs out of it will be found).
6870 6887
6871 6888 * Added @profile to see your profile at any time.
6872 6889
6873 6890 * Added @p as an alias for 'print'. It's especially convenient if
6874 6891 using automagic ('p x' prints x).
6875 6892
6876 6893 * Small cleanups and fixes after a pychecker run.
6877 6894
6878 6895 * Changed the @cd command to handle @cd - and @cd -<n> for
6879 6896 visiting any directory in _dh.
6880 6897
6881 6898 * Introduced _dh, a history of visited directories. @dhist prints
6882 6899 it out with numbers.
6883 6900
6884 6901 2001-12-07 Fernando Perez <fperez@colorado.edu>
6885 6902
6886 6903 * Released 0.1.22
6887 6904
6888 6905 * Made initialization a bit more robust against invalid color
6889 6906 options in user input (exit, not traceback-crash).
6890 6907
6891 6908 * Changed the bug crash reporter to write the report only in the
6892 6909 user's .ipython directory. That way IPython won't litter people's
6893 6910 hard disks with crash files all over the place. Also print on
6894 6911 screen the necessary mail command.
6895 6912
6896 6913 * With the new ultraTB, implemented LightBG color scheme for light
6897 6914 background terminals. A lot of people like white backgrounds, so I
6898 6915 guess we should at least give them something readable.
6899 6916
6900 6917 2001-12-06 Fernando Perez <fperez@colorado.edu>
6901 6918
6902 6919 * Modified the structure of ultraTB. Now there's a proper class
6903 6920 for tables of color schemes which allow adding schemes easily and
6904 6921 switching the active scheme without creating a new instance every
6905 6922 time (which was ridiculous). The syntax for creating new schemes
6906 6923 is also cleaner. I think ultraTB is finally done, with a clean
6907 6924 class structure. Names are also much cleaner (now there's proper
6908 6925 color tables, no need for every variable to also have 'color' in
6909 6926 its name).
6910 6927
6911 6928 * Broke down genutils into separate files. Now genutils only
6912 6929 contains utility functions, and classes have been moved to their
6913 6930 own files (they had enough independent functionality to warrant
6914 6931 it): ConfigLoader, OutputTrap, Struct.
6915 6932
6916 6933 2001-12-05 Fernando Perez <fperez@colorado.edu>
6917 6934
6918 6935 * IPython turns 21! Released version 0.1.21, as a candidate for
6919 6936 public consumption. If all goes well, release in a few days.
6920 6937
6921 6938 * Fixed path bug (files in Extensions/ directory wouldn't be found
6922 6939 unless IPython/ was explicitly in sys.path).
6923 6940
6924 6941 * Extended the FlexCompleter class as MagicCompleter to allow
6925 6942 completion of @-starting lines.
6926 6943
6927 6944 * Created __release__.py file as a central repository for release
6928 6945 info that other files can read from.
6929 6946
6930 6947 * Fixed small bug in logging: when logging was turned on in
6931 6948 mid-session, old lines with special meanings (!@?) were being
6932 6949 logged without the prepended comment, which is necessary since
6933 6950 they are not truly valid python syntax. This should make session
6934 6951 restores produce less errors.
6935 6952
6936 6953 * The namespace cleanup forced me to make a FlexCompleter class
6937 6954 which is nothing but a ripoff of rlcompleter, but with selectable
6938 6955 namespace (rlcompleter only works in __main__.__dict__). I'll try
6939 6956 to submit a note to the authors to see if this change can be
6940 6957 incorporated in future rlcompleter releases (Dec.6: done)
6941 6958
6942 6959 * More fixes to namespace handling. It was a mess! Now all
6943 6960 explicit references to __main__.__dict__ are gone (except when
6944 6961 really needed) and everything is handled through the namespace
6945 6962 dicts in the IPython instance. We seem to be getting somewhere
6946 6963 with this, finally...
6947 6964
6948 6965 * Small documentation updates.
6949 6966
6950 6967 * Created the Extensions directory under IPython (with an
6951 6968 __init__.py). Put the PhysicalQ stuff there. This directory should
6952 6969 be used for all special-purpose extensions.
6953 6970
6954 6971 * File renaming:
6955 6972 ipythonlib --> ipmaker
6956 6973 ipplib --> iplib
6957 6974 This makes a bit more sense in terms of what these files actually do.
6958 6975
6959 6976 * Moved all the classes and functions in ipythonlib to ipplib, so
6960 6977 now ipythonlib only has make_IPython(). This will ease up its
6961 6978 splitting in smaller functional chunks later.
6962 6979
6963 6980 * Cleaned up (done, I think) output of @whos. Better column
6964 6981 formatting, and now shows str(var) for as much as it can, which is
6965 6982 typically what one gets with a 'print var'.
6966 6983
6967 6984 2001-12-04 Fernando Perez <fperez@colorado.edu>
6968 6985
6969 6986 * Fixed namespace problems. Now builtin/IPyhton/user names get
6970 6987 properly reported in their namespace. Internal namespace handling
6971 6988 is finally getting decent (not perfect yet, but much better than
6972 6989 the ad-hoc mess we had).
6973 6990
6974 6991 * Removed -exit option. If people just want to run a python
6975 6992 script, that's what the normal interpreter is for. Less
6976 6993 unnecessary options, less chances for bugs.
6977 6994
6978 6995 * Added a crash handler which generates a complete post-mortem if
6979 6996 IPython crashes. This will help a lot in tracking bugs down the
6980 6997 road.
6981 6998
6982 6999 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6983 7000 which were boud to functions being reassigned would bypass the
6984 7001 logger, breaking the sync of _il with the prompt counter. This
6985 7002 would then crash IPython later when a new line was logged.
6986 7003
6987 7004 2001-12-02 Fernando Perez <fperez@colorado.edu>
6988 7005
6989 7006 * Made IPython a package. This means people don't have to clutter
6990 7007 their sys.path with yet another directory. Changed the INSTALL
6991 7008 file accordingly.
6992 7009
6993 7010 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6994 7011 sorts its output (so @who shows it sorted) and @whos formats the
6995 7012 table according to the width of the first column. Nicer, easier to
6996 7013 read. Todo: write a generic table_format() which takes a list of
6997 7014 lists and prints it nicely formatted, with optional row/column
6998 7015 separators and proper padding and justification.
6999 7016
7000 7017 * Released 0.1.20
7001 7018
7002 7019 * Fixed bug in @log which would reverse the inputcache list (a
7003 7020 copy operation was missing).
7004 7021
7005 7022 * Code cleanup. @config was changed to use page(). Better, since
7006 7023 its output is always quite long.
7007 7024
7008 7025 * Itpl is back as a dependency. I was having too many problems
7009 7026 getting the parametric aliases to work reliably, and it's just
7010 7027 easier to code weird string operations with it than playing %()s
7011 7028 games. It's only ~6k, so I don't think it's too big a deal.
7012 7029
7013 7030 * Found (and fixed) a very nasty bug with history. !lines weren't
7014 7031 getting cached, and the out of sync caches would crash
7015 7032 IPython. Fixed it by reorganizing the prefilter/handlers/logger
7016 7033 division of labor a bit better. Bug fixed, cleaner structure.
7017 7034
7018 7035 2001-12-01 Fernando Perez <fperez@colorado.edu>
7019 7036
7020 7037 * Released 0.1.19
7021 7038
7022 7039 * Added option -n to @hist to prevent line number printing. Much
7023 7040 easier to copy/paste code this way.
7024 7041
7025 7042 * Created global _il to hold the input list. Allows easy
7026 7043 re-execution of blocks of code by slicing it (inspired by Janko's
7027 7044 comment on 'macros').
7028 7045
7029 7046 * Small fixes and doc updates.
7030 7047
7031 7048 * Rewrote @history function (was @h). Renamed it to @hist, @h is
7032 7049 much too fragile with automagic. Handles properly multi-line
7033 7050 statements and takes parameters.
7034 7051
7035 7052 2001-11-30 Fernando Perez <fperez@colorado.edu>
7036 7053
7037 7054 * Version 0.1.18 released.
7038 7055
7039 7056 * Fixed nasty namespace bug in initial module imports.
7040 7057
7041 7058 * Added copyright/license notes to all code files (except
7042 7059 DPyGetOpt). For the time being, LGPL. That could change.
7043 7060
7044 7061 * Rewrote a much nicer README, updated INSTALL, cleaned up
7045 7062 ipythonrc-* samples.
7046 7063
7047 7064 * Overall code/documentation cleanup. Basically ready for
7048 7065 release. Only remaining thing: licence decision (LGPL?).
7049 7066
7050 7067 * Converted load_config to a class, ConfigLoader. Now recursion
7051 7068 control is better organized. Doesn't include the same file twice.
7052 7069
7053 7070 2001-11-29 Fernando Perez <fperez@colorado.edu>
7054 7071
7055 7072 * Got input history working. Changed output history variables from
7056 7073 _p to _o so that _i is for input and _o for output. Just cleaner
7057 7074 convention.
7058 7075
7059 7076 * Implemented parametric aliases. This pretty much allows the
7060 7077 alias system to offer full-blown shell convenience, I think.
7061 7078
7062 7079 * Version 0.1.17 released, 0.1.18 opened.
7063 7080
7064 7081 * dot_ipython/ipythonrc (alias): added documentation.
7065 7082 (xcolor): Fixed small bug (xcolors -> xcolor)
7066 7083
7067 7084 * Changed the alias system. Now alias is a magic command to define
7068 7085 aliases just like the shell. Rationale: the builtin magics should
7069 7086 be there for things deeply connected to IPython's
7070 7087 architecture. And this is a much lighter system for what I think
7071 7088 is the really important feature: allowing users to define quickly
7072 7089 magics that will do shell things for them, so they can customize
7073 7090 IPython easily to match their work habits. If someone is really
7074 7091 desperate to have another name for a builtin alias, they can
7075 7092 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
7076 7093 works.
7077 7094
7078 7095 2001-11-28 Fernando Perez <fperez@colorado.edu>
7079 7096
7080 7097 * Changed @file so that it opens the source file at the proper
7081 7098 line. Since it uses less, if your EDITOR environment is
7082 7099 configured, typing v will immediately open your editor of choice
7083 7100 right at the line where the object is defined. Not as quick as
7084 7101 having a direct @edit command, but for all intents and purposes it
7085 7102 works. And I don't have to worry about writing @edit to deal with
7086 7103 all the editors, less does that.
7087 7104
7088 7105 * Version 0.1.16 released, 0.1.17 opened.
7089 7106
7090 7107 * Fixed some nasty bugs in the page/page_dumb combo that could
7091 7108 crash IPython.
7092 7109
7093 7110 2001-11-27 Fernando Perez <fperez@colorado.edu>
7094 7111
7095 7112 * Version 0.1.15 released, 0.1.16 opened.
7096 7113
7097 7114 * Finally got ? and ?? to work for undefined things: now it's
7098 7115 possible to type {}.get? and get information about the get method
7099 7116 of dicts, or os.path? even if only os is defined (so technically
7100 7117 os.path isn't). Works at any level. For example, after import os,
7101 7118 os?, os.path?, os.path.abspath? all work. This is great, took some
7102 7119 work in _ofind.
7103 7120
7104 7121 * Fixed more bugs with logging. The sanest way to do it was to add
7105 7122 to @log a 'mode' parameter. Killed two in one shot (this mode
7106 7123 option was a request of Janko's). I think it's finally clean
7107 7124 (famous last words).
7108 7125
7109 7126 * Added a page_dumb() pager which does a decent job of paging on
7110 7127 screen, if better things (like less) aren't available. One less
7111 7128 unix dependency (someday maybe somebody will port this to
7112 7129 windows).
7113 7130
7114 7131 * Fixed problem in magic_log: would lock of logging out if log
7115 7132 creation failed (because it would still think it had succeeded).
7116 7133
7117 7134 * Improved the page() function using curses to auto-detect screen
7118 7135 size. Now it can make a much better decision on whether to print
7119 7136 or page a string. Option screen_length was modified: a value 0
7120 7137 means auto-detect, and that's the default now.
7121 7138
7122 7139 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
7123 7140 go out. I'll test it for a few days, then talk to Janko about
7124 7141 licences and announce it.
7125 7142
7126 7143 * Fixed the length of the auto-generated ---> prompt which appears
7127 7144 for auto-parens and auto-quotes. Getting this right isn't trivial,
7128 7145 with all the color escapes, different prompt types and optional
7129 7146 separators. But it seems to be working in all the combinations.
7130 7147
7131 7148 2001-11-26 Fernando Perez <fperez@colorado.edu>
7132 7149
7133 7150 * Wrote a regexp filter to get option types from the option names
7134 7151 string. This eliminates the need to manually keep two duplicate
7135 7152 lists.
7136 7153
7137 7154 * Removed the unneeded check_option_names. Now options are handled
7138 7155 in a much saner manner and it's easy to visually check that things
7139 7156 are ok.
7140 7157
7141 7158 * Updated version numbers on all files I modified to carry a
7142 7159 notice so Janko and Nathan have clear version markers.
7143 7160
7144 7161 * Updated docstring for ultraTB with my changes. I should send
7145 7162 this to Nathan.
7146 7163
7147 7164 * Lots of small fixes. Ran everything through pychecker again.
7148 7165
7149 7166 * Made loading of deep_reload an cmd line option. If it's not too
7150 7167 kosher, now people can just disable it. With -nodeep_reload it's
7151 7168 still available as dreload(), it just won't overwrite reload().
7152 7169
7153 7170 * Moved many options to the no| form (-opt and -noopt
7154 7171 accepted). Cleaner.
7155 7172
7156 7173 * Changed magic_log so that if called with no parameters, it uses
7157 7174 'rotate' mode. That way auto-generated logs aren't automatically
7158 7175 over-written. For normal logs, now a backup is made if it exists
7159 7176 (only 1 level of backups). A new 'backup' mode was added to the
7160 7177 Logger class to support this. This was a request by Janko.
7161 7178
7162 7179 * Added @logoff/@logon to stop/restart an active log.
7163 7180
7164 7181 * Fixed a lot of bugs in log saving/replay. It was pretty
7165 7182 broken. Now special lines (!@,/) appear properly in the command
7166 7183 history after a log replay.
7167 7184
7168 7185 * Tried and failed to implement full session saving via pickle. My
7169 7186 idea was to pickle __main__.__dict__, but modules can't be
7170 7187 pickled. This would be a better alternative to replaying logs, but
7171 7188 seems quite tricky to get to work. Changed -session to be called
7172 7189 -logplay, which more accurately reflects what it does. And if we
7173 7190 ever get real session saving working, -session is now available.
7174 7191
7175 7192 * Implemented color schemes for prompts also. As for tracebacks,
7176 7193 currently only NoColor and Linux are supported. But now the
7177 7194 infrastructure is in place, based on a generic ColorScheme
7178 7195 class. So writing and activating new schemes both for the prompts
7179 7196 and the tracebacks should be straightforward.
7180 7197
7181 7198 * Version 0.1.13 released, 0.1.14 opened.
7182 7199
7183 7200 * Changed handling of options for output cache. Now counter is
7184 7201 hardwired starting at 1 and one specifies the maximum number of
7185 7202 entries *in the outcache* (not the max prompt counter). This is
7186 7203 much better, since many statements won't increase the cache
7187 7204 count. It also eliminated some confusing options, now there's only
7188 7205 one: cache_size.
7189 7206
7190 7207 * Added 'alias' magic function and magic_alias option in the
7191 7208 ipythonrc file. Now the user can easily define whatever names he
7192 7209 wants for the magic functions without having to play weird
7193 7210 namespace games. This gives IPython a real shell-like feel.
7194 7211
7195 7212 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
7196 7213 @ or not).
7197 7214
7198 7215 This was one of the last remaining 'visible' bugs (that I know
7199 7216 of). I think if I can clean up the session loading so it works
7200 7217 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
7201 7218 about licensing).
7202 7219
7203 7220 2001-11-25 Fernando Perez <fperez@colorado.edu>
7204 7221
7205 7222 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
7206 7223 there's a cleaner distinction between what ? and ?? show.
7207 7224
7208 7225 * Added screen_length option. Now the user can define his own
7209 7226 screen size for page() operations.
7210 7227
7211 7228 * Implemented magic shell-like functions with automatic code
7212 7229 generation. Now adding another function is just a matter of adding
7213 7230 an entry to a dict, and the function is dynamically generated at
7214 7231 run-time. Python has some really cool features!
7215 7232
7216 7233 * Renamed many options to cleanup conventions a little. Now all
7217 7234 are lowercase, and only underscores where needed. Also in the code
7218 7235 option name tables are clearer.
7219 7236
7220 7237 * Changed prompts a little. Now input is 'In [n]:' instead of
7221 7238 'In[n]:='. This allows it the numbers to be aligned with the
7222 7239 Out[n] numbers, and removes usage of ':=' which doesn't exist in
7223 7240 Python (it was a Mathematica thing). The '...' continuation prompt
7224 7241 was also changed a little to align better.
7225 7242
7226 7243 * Fixed bug when flushing output cache. Not all _p<n> variables
7227 7244 exist, so their deletion needs to be wrapped in a try:
7228 7245
7229 7246 * Figured out how to properly use inspect.formatargspec() (it
7230 7247 requires the args preceded by *). So I removed all the code from
7231 7248 _get_pdef in Magic, which was just replicating that.
7232 7249
7233 7250 * Added test to prefilter to allow redefining magic function names
7234 7251 as variables. This is ok, since the @ form is always available,
7235 7252 but whe should allow the user to define a variable called 'ls' if
7236 7253 he needs it.
7237 7254
7238 7255 * Moved the ToDo information from README into a separate ToDo.
7239 7256
7240 7257 * General code cleanup and small bugfixes. I think it's close to a
7241 7258 state where it can be released, obviously with a big 'beta'
7242 7259 warning on it.
7243 7260
7244 7261 * Got the magic function split to work. Now all magics are defined
7245 7262 in a separate class. It just organizes things a bit, and now
7246 7263 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
7247 7264 was too long).
7248 7265
7249 7266 * Changed @clear to @reset to avoid potential confusions with
7250 7267 the shell command clear. Also renamed @cl to @clear, which does
7251 7268 exactly what people expect it to from their shell experience.
7252 7269
7253 7270 Added a check to the @reset command (since it's so
7254 7271 destructive, it's probably a good idea to ask for confirmation).
7255 7272 But now reset only works for full namespace resetting. Since the
7256 7273 del keyword is already there for deleting a few specific
7257 7274 variables, I don't see the point of having a redundant magic
7258 7275 function for the same task.
7259 7276
7260 7277 2001-11-24 Fernando Perez <fperez@colorado.edu>
7261 7278
7262 7279 * Updated the builtin docs (esp. the ? ones).
7263 7280
7264 7281 * Ran all the code through pychecker. Not terribly impressed with
7265 7282 it: lots of spurious warnings and didn't really find anything of
7266 7283 substance (just a few modules being imported and not used).
7267 7284
7268 7285 * Implemented the new ultraTB functionality into IPython. New
7269 7286 option: xcolors. This chooses color scheme. xmode now only selects
7270 7287 between Plain and Verbose. Better orthogonality.
7271 7288
7272 7289 * Large rewrite of ultraTB. Much cleaner now, with a separation of
7273 7290 mode and color scheme for the exception handlers. Now it's
7274 7291 possible to have the verbose traceback with no coloring.
7275 7292
7276 7293 2001-11-23 Fernando Perez <fperez@colorado.edu>
7277 7294
7278 7295 * Version 0.1.12 released, 0.1.13 opened.
7279 7296
7280 7297 * Removed option to set auto-quote and auto-paren escapes by
7281 7298 user. The chances of breaking valid syntax are just too high. If
7282 7299 someone *really* wants, they can always dig into the code.
7283 7300
7284 7301 * Made prompt separators configurable.
7285 7302
7286 7303 2001-11-22 Fernando Perez <fperez@colorado.edu>
7287 7304
7288 7305 * Small bugfixes in many places.
7289 7306
7290 7307 * Removed the MyCompleter class from ipplib. It seemed redundant
7291 7308 with the C-p,C-n history search functionality. Less code to
7292 7309 maintain.
7293 7310
7294 7311 * Moved all the original ipython.py code into ipythonlib.py. Right
7295 7312 now it's just one big dump into a function called make_IPython, so
7296 7313 no real modularity has been gained. But at least it makes the
7297 7314 wrapper script tiny, and since ipythonlib is a module, it gets
7298 7315 compiled and startup is much faster.
7299 7316
7300 7317 This is a reasobably 'deep' change, so we should test it for a
7301 7318 while without messing too much more with the code.
7302 7319
7303 7320 2001-11-21 Fernando Perez <fperez@colorado.edu>
7304 7321
7305 7322 * Version 0.1.11 released, 0.1.12 opened for further work.
7306 7323
7307 7324 * Removed dependency on Itpl. It was only needed in one place. It
7308 7325 would be nice if this became part of python, though. It makes life
7309 7326 *a lot* easier in some cases.
7310 7327
7311 7328 * Simplified the prefilter code a bit. Now all handlers are
7312 7329 expected to explicitly return a value (at least a blank string).
7313 7330
7314 7331 * Heavy edits in ipplib. Removed the help system altogether. Now
7315 7332 obj?/?? is used for inspecting objects, a magic @doc prints
7316 7333 docstrings, and full-blown Python help is accessed via the 'help'
7317 7334 keyword. This cleans up a lot of code (less to maintain) and does
7318 7335 the job. Since 'help' is now a standard Python component, might as
7319 7336 well use it and remove duplicate functionality.
7320 7337
7321 7338 Also removed the option to use ipplib as a standalone program. By
7322 7339 now it's too dependent on other parts of IPython to function alone.
7323 7340
7324 7341 * Fixed bug in genutils.pager. It would crash if the pager was
7325 7342 exited immediately after opening (broken pipe).
7326 7343
7327 7344 * Trimmed down the VerboseTB reporting a little. The header is
7328 7345 much shorter now and the repeated exception arguments at the end
7329 7346 have been removed. For interactive use the old header seemed a bit
7330 7347 excessive.
7331 7348
7332 7349 * Fixed small bug in output of @whos for variables with multi-word
7333 7350 types (only first word was displayed).
7334 7351
7335 7352 2001-11-17 Fernando Perez <fperez@colorado.edu>
7336 7353
7337 7354 * Version 0.1.10 released, 0.1.11 opened for further work.
7338 7355
7339 7356 * Modified dirs and friends. dirs now *returns* the stack (not
7340 7357 prints), so one can manipulate it as a variable. Convenient to
7341 7358 travel along many directories.
7342 7359
7343 7360 * Fixed bug in magic_pdef: would only work with functions with
7344 7361 arguments with default values.
7345 7362
7346 7363 2001-11-14 Fernando Perez <fperez@colorado.edu>
7347 7364
7348 7365 * Added the PhysicsInput stuff to dot_ipython so it ships as an
7349 7366 example with IPython. Various other minor fixes and cleanups.
7350 7367
7351 7368 * Version 0.1.9 released, 0.1.10 opened for further work.
7352 7369
7353 7370 * Added sys.path to the list of directories searched in the
7354 7371 execfile= option. It used to be the current directory and the
7355 7372 user's IPYTHONDIR only.
7356 7373
7357 7374 2001-11-13 Fernando Perez <fperez@colorado.edu>
7358 7375
7359 7376 * Reinstated the raw_input/prefilter separation that Janko had
7360 7377 initially. This gives a more convenient setup for extending the
7361 7378 pre-processor from the outside: raw_input always gets a string,
7362 7379 and prefilter has to process it. We can then redefine prefilter
7363 7380 from the outside and implement extensions for special
7364 7381 purposes.
7365 7382
7366 7383 Today I got one for inputting PhysicalQuantity objects
7367 7384 (from Scientific) without needing any function calls at
7368 7385 all. Extremely convenient, and it's all done as a user-level
7369 7386 extension (no IPython code was touched). Now instead of:
7370 7387 a = PhysicalQuantity(4.2,'m/s**2')
7371 7388 one can simply say
7372 7389 a = 4.2 m/s**2
7373 7390 or even
7374 7391 a = 4.2 m/s^2
7375 7392
7376 7393 I use this, but it's also a proof of concept: IPython really is
7377 7394 fully user-extensible, even at the level of the parsing of the
7378 7395 command line. It's not trivial, but it's perfectly doable.
7379 7396
7380 7397 * Added 'add_flip' method to inclusion conflict resolver. Fixes
7381 7398 the problem of modules being loaded in the inverse order in which
7382 7399 they were defined in
7383 7400
7384 7401 * Version 0.1.8 released, 0.1.9 opened for further work.
7385 7402
7386 7403 * Added magics pdef, source and file. They respectively show the
7387 7404 definition line ('prototype' in C), source code and full python
7388 7405 file for any callable object. The object inspector oinfo uses
7389 7406 these to show the same information.
7390 7407
7391 7408 * Version 0.1.7 released, 0.1.8 opened for further work.
7392 7409
7393 7410 * Separated all the magic functions into a class called Magic. The
7394 7411 InteractiveShell class was becoming too big for Xemacs to handle
7395 7412 (de-indenting a line would lock it up for 10 seconds while it
7396 7413 backtracked on the whole class!)
7397 7414
7398 7415 FIXME: didn't work. It can be done, but right now namespaces are
7399 7416 all messed up. Do it later (reverted it for now, so at least
7400 7417 everything works as before).
7401 7418
7402 7419 * Got the object introspection system (magic_oinfo) working! I
7403 7420 think this is pretty much ready for release to Janko, so he can
7404 7421 test it for a while and then announce it. Pretty much 100% of what
7405 7422 I wanted for the 'phase 1' release is ready. Happy, tired.
7406 7423
7407 7424 2001-11-12 Fernando Perez <fperez@colorado.edu>
7408 7425
7409 7426 * Version 0.1.6 released, 0.1.7 opened for further work.
7410 7427
7411 7428 * Fixed bug in printing: it used to test for truth before
7412 7429 printing, so 0 wouldn't print. Now checks for None.
7413 7430
7414 7431 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
7415 7432 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
7416 7433 reaches by hand into the outputcache. Think of a better way to do
7417 7434 this later.
7418 7435
7419 7436 * Various small fixes thanks to Nathan's comments.
7420 7437
7421 7438 * Changed magic_pprint to magic_Pprint. This way it doesn't
7422 7439 collide with pprint() and the name is consistent with the command
7423 7440 line option.
7424 7441
7425 7442 * Changed prompt counter behavior to be fully like
7426 7443 Mathematica's. That is, even input that doesn't return a result
7427 7444 raises the prompt counter. The old behavior was kind of confusing
7428 7445 (getting the same prompt number several times if the operation
7429 7446 didn't return a result).
7430 7447
7431 7448 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7432 7449
7433 7450 * Fixed -Classic mode (wasn't working anymore).
7434 7451
7435 7452 * Added colored prompts using Nathan's new code. Colors are
7436 7453 currently hardwired, they can be user-configurable. For
7437 7454 developers, they can be chosen in file ipythonlib.py, at the
7438 7455 beginning of the CachedOutput class def.
7439 7456
7440 7457 2001-11-11 Fernando Perez <fperez@colorado.edu>
7441 7458
7442 7459 * Version 0.1.5 released, 0.1.6 opened for further work.
7443 7460
7444 7461 * Changed magic_env to *return* the environment as a dict (not to
7445 7462 print it). This way it prints, but it can also be processed.
7446 7463
7447 7464 * Added Verbose exception reporting to interactive
7448 7465 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7449 7466 traceback. Had to make some changes to the ultraTB file. This is
7450 7467 probably the last 'big' thing in my mental todo list. This ties
7451 7468 in with the next entry:
7452 7469
7453 7470 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7454 7471 has to specify is Plain, Color or Verbose for all exception
7455 7472 handling.
7456 7473
7457 7474 * Removed ShellServices option. All this can really be done via
7458 7475 the magic system. It's easier to extend, cleaner and has automatic
7459 7476 namespace protection and documentation.
7460 7477
7461 7478 2001-11-09 Fernando Perez <fperez@colorado.edu>
7462 7479
7463 7480 * Fixed bug in output cache flushing (missing parameter to
7464 7481 __init__). Other small bugs fixed (found using pychecker).
7465 7482
7466 7483 * Version 0.1.4 opened for bugfixing.
7467 7484
7468 7485 2001-11-07 Fernando Perez <fperez@colorado.edu>
7469 7486
7470 7487 * Version 0.1.3 released, mainly because of the raw_input bug.
7471 7488
7472 7489 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7473 7490 and when testing for whether things were callable, a call could
7474 7491 actually be made to certain functions. They would get called again
7475 7492 once 'really' executed, with a resulting double call. A disaster
7476 7493 in many cases (list.reverse() would never work!).
7477 7494
7478 7495 * Removed prefilter() function, moved its code to raw_input (which
7479 7496 after all was just a near-empty caller for prefilter). This saves
7480 7497 a function call on every prompt, and simplifies the class a tiny bit.
7481 7498
7482 7499 * Fix _ip to __ip name in magic example file.
7483 7500
7484 7501 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7485 7502 work with non-gnu versions of tar.
7486 7503
7487 7504 2001-11-06 Fernando Perez <fperez@colorado.edu>
7488 7505
7489 7506 * Version 0.1.2. Just to keep track of the recent changes.
7490 7507
7491 7508 * Fixed nasty bug in output prompt routine. It used to check 'if
7492 7509 arg != None...'. Problem is, this fails if arg implements a
7493 7510 special comparison (__cmp__) which disallows comparing to
7494 7511 None. Found it when trying to use the PhysicalQuantity module from
7495 7512 ScientificPython.
7496 7513
7497 7514 2001-11-05 Fernando Perez <fperez@colorado.edu>
7498 7515
7499 7516 * Also added dirs. Now the pushd/popd/dirs family functions
7500 7517 basically like the shell, with the added convenience of going home
7501 7518 when called with no args.
7502 7519
7503 7520 * pushd/popd slightly modified to mimic shell behavior more
7504 7521 closely.
7505 7522
7506 7523 * Added env,pushd,popd from ShellServices as magic functions. I
7507 7524 think the cleanest will be to port all desired functions from
7508 7525 ShellServices as magics and remove ShellServices altogether. This
7509 7526 will provide a single, clean way of adding functionality
7510 7527 (shell-type or otherwise) to IP.
7511 7528
7512 7529 2001-11-04 Fernando Perez <fperez@colorado.edu>
7513 7530
7514 7531 * Added .ipython/ directory to sys.path. This way users can keep
7515 7532 customizations there and access them via import.
7516 7533
7517 7534 2001-11-03 Fernando Perez <fperez@colorado.edu>
7518 7535
7519 7536 * Opened version 0.1.1 for new changes.
7520 7537
7521 7538 * Changed version number to 0.1.0: first 'public' release, sent to
7522 7539 Nathan and Janko.
7523 7540
7524 7541 * Lots of small fixes and tweaks.
7525 7542
7526 7543 * Minor changes to whos format. Now strings are shown, snipped if
7527 7544 too long.
7528 7545
7529 7546 * Changed ShellServices to work on __main__ so they show up in @who
7530 7547
7531 7548 * Help also works with ? at the end of a line:
7532 7549 ?sin and sin?
7533 7550 both produce the same effect. This is nice, as often I use the
7534 7551 tab-complete to find the name of a method, but I used to then have
7535 7552 to go to the beginning of the line to put a ? if I wanted more
7536 7553 info. Now I can just add the ? and hit return. Convenient.
7537 7554
7538 7555 2001-11-02 Fernando Perez <fperez@colorado.edu>
7539 7556
7540 7557 * Python version check (>=2.1) added.
7541 7558
7542 7559 * Added LazyPython documentation. At this point the docs are quite
7543 7560 a mess. A cleanup is in order.
7544 7561
7545 7562 * Auto-installer created. For some bizarre reason, the zipfiles
7546 7563 module isn't working on my system. So I made a tar version
7547 7564 (hopefully the command line options in various systems won't kill
7548 7565 me).
7549 7566
7550 7567 * Fixes to Struct in genutils. Now all dictionary-like methods are
7551 7568 protected (reasonably).
7552 7569
7553 7570 * Added pager function to genutils and changed ? to print usage
7554 7571 note through it (it was too long).
7555 7572
7556 7573 * Added the LazyPython functionality. Works great! I changed the
7557 7574 auto-quote escape to ';', it's on home row and next to '. But
7558 7575 both auto-quote and auto-paren (still /) escapes are command-line
7559 7576 parameters.
7560 7577
7561 7578
7562 7579 2001-11-01 Fernando Perez <fperez@colorado.edu>
7563 7580
7564 7581 * Version changed to 0.0.7. Fairly large change: configuration now
7565 7582 is all stored in a directory, by default .ipython. There, all
7566 7583 config files have normal looking names (not .names)
7567 7584
7568 7585 * Version 0.0.6 Released first to Lucas and Archie as a test
7569 7586 run. Since it's the first 'semi-public' release, change version to
7570 7587 > 0.0.6 for any changes now.
7571 7588
7572 7589 * Stuff I had put in the ipplib.py changelog:
7573 7590
7574 7591 Changes to InteractiveShell:
7575 7592
7576 7593 - Made the usage message a parameter.
7577 7594
7578 7595 - Require the name of the shell variable to be given. It's a bit
7579 7596 of a hack, but allows the name 'shell' not to be hardwired in the
7580 7597 magic (@) handler, which is problematic b/c it requires
7581 7598 polluting the global namespace with 'shell'. This in turn is
7582 7599 fragile: if a user redefines a variable called shell, things
7583 7600 break.
7584 7601
7585 7602 - magic @: all functions available through @ need to be defined
7586 7603 as magic_<name>, even though they can be called simply as
7587 7604 @<name>. This allows the special command @magic to gather
7588 7605 information automatically about all existing magic functions,
7589 7606 even if they are run-time user extensions, by parsing the shell
7590 7607 instance __dict__ looking for special magic_ names.
7591 7608
7592 7609 - mainloop: added *two* local namespace parameters. This allows
7593 7610 the class to differentiate between parameters which were there
7594 7611 before and after command line initialization was processed. This
7595 7612 way, later @who can show things loaded at startup by the
7596 7613 user. This trick was necessary to make session saving/reloading
7597 7614 really work: ideally after saving/exiting/reloading a session,
7598 7615 *everything* should look the same, including the output of @who. I
7599 7616 was only able to make this work with this double namespace
7600 7617 trick.
7601 7618
7602 7619 - added a header to the logfile which allows (almost) full
7603 7620 session restoring.
7604 7621
7605 7622 - prepend lines beginning with @ or !, with a and log
7606 7623 them. Why? !lines: may be useful to know what you did @lines:
7607 7624 they may affect session state. So when restoring a session, at
7608 7625 least inform the user of their presence. I couldn't quite get
7609 7626 them to properly re-execute, but at least the user is warned.
7610 7627
7611 7628 * Started ChangeLog.
1 NO CONTENT: file renamed from doc/ipnb_google_soc.lyx to doc/attic/ipnb_google_soc.lyx
1 NO CONTENT: file renamed from doc/nbexample.py to doc/attic/nbexample.py
1 NO CONTENT: file renamed from doc/nbexample_latex.py to doc/attic/nbexample_latex.py
1 NO CONTENT: file renamed from doc/nbexample_output.py to doc/attic/nbexample_output.py
1 NO CONTENT: file renamed from doc/new_design.lyx to doc/attic/new_design.lyx
@@ -1,64 +1,74 b''
1 #!/usr/bin/env python
2 """Script to build documentation using Sphinx.
3 """
4
1 5 import fileinput,os,sys
2 6
3 7 def oscmd(c):
4 8 os.system(c)
5 9
6 10 # html manual.
7 11 oscmd('sphinx-build -d build/doctrees source build/html')
8 12
9 13 if sys.platform != 'win32':
10 14 # LaTeX format.
11 15 oscmd('sphinx-build -b latex -d build/doctrees source build/latex')
12 16
13 17 # Produce pdf.
18 topdir = os.getcwd()
14 19 os.chdir('build/latex')
15 20
16 21 # Change chapter style to section style: allows chapters to start on
17 22 # the current page. Works much better for the short chapters we have.
18 23 # This must go in the class file rather than the preamble, so we modify
19 24 # manual.cls at runtime.
20 25 chapter_cmds=r'''
21 26 % Local changes.
22 27 \renewcommand\chapter{
23 28 \thispagestyle{plain}
24 29 \global\@topnum\z@
25 30 \@afterindentfalse
26 31 \secdef\@chapter\@schapter
27 32 }
28 33 \def\@makechapterhead#1{
29 34 \vspace*{10\p@}
30 35 {\raggedright \reset@font \Huge \bfseries \thechapter \quad #1}
31 36 \par\nobreak
32 37 \hrulefill
33 38 \par\nobreak
34 39 \vspace*{10\p@}
35 40 }
36 41 \def\@makeschapterhead#1{
37 42 \vspace*{10\p@}
38 43 {\raggedright \reset@font \Huge \bfseries #1}
39 44 \par\nobreak
40 45 \hrulefill
41 46 \par\nobreak
42 47 \vspace*{10\p@}
43 48 }
44 49 '''
45 50
46 51 unmodified=True
47 52 for line in fileinput.FileInput('manual.cls',inplace=1):
48 53 if 'Support for module synopsis' in line and unmodified:
49 54 line=chapter_cmds+line
50 55 elif 'makechapterhead' in line:
51 56 # Already have altered manual.cls: don't need to again.
52 57 unmodified=False
53 58 print line,
54 59
55 60 # Copying the makefile produced by sphinx...
56 61 oscmd('pdflatex ipython.tex')
57 62 oscmd('pdflatex ipython.tex')
58 63 oscmd('pdflatex ipython.tex')
59 64 oscmd('makeindex -s python.ist ipython.idx')
60 65 oscmd('makeindex -s python.ist modipython.idx')
61 66 oscmd('pdflatex ipython.tex')
62 67 oscmd('pdflatex ipython.tex')
63 oscmd('cp ipython.pdf ../html')
64 os.chdir('../..')
68
69 # Create a manual/ directory with final html/pdf output
70 os.chdir(topdir)
71 oscmd('rm -rf manual')
72 oscmd('mkdir manual')
73 oscmd('cp -r build/html/*.html build/html/_static manual/')
74 oscmd('cp build/latex/ipython.pdf manual/')
@@ -1,165 +1,186 b''
1 1 #!/usr/bin/env python
2 2 # -*- coding: utf-8 -*-
3 3 """Setup script for IPython.
4 4
5 5 Under Posix environments it works like a typical setup.py script.
6 6 Under Windows, the command sdist is not supported, since IPython
7 requires utilities, which are not available under Windows."""
7 requires utilities which are not available under Windows."""
8 8
9 9 #*****************************************************************************
10 10 # Copyright (C) 2001-2005 Fernando Perez <fperez@colorado.edu>
11 11 #
12 12 # Distributed under the terms of the BSD License. The full license is in
13 13 # the file COPYING, distributed as part of this software.
14 14 #*****************************************************************************
15 15
16 16 # Stdlib imports
17 17 import os
18 18 import sys
19 19
20 20 from glob import glob
21
22 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
23 # update it when the contents of directories change.
24 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
25
26 from distutils.core import setup
21 27 from setupext import install_data_ext
22 28
29 # Local imports
30 from IPython.genutils import target_update
31
23 32 # A few handy globals
24 33 isfile = os.path.isfile
25 34 pjoin = os.path.join
26 35
27 # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly
28 # update it when the contents of directories change.
29 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
36 ##############################################################################
37 # Utility functions
38 def oscmd(s):
39 print ">", s
40 os.system(s)
41
42 # A little utility we'll need below, since glob() does NOT allow you to do
43 # exclusion on multiple endings!
44 def file_doesnt_endwith(test,endings):
45 """Return true if test is a file and its name does NOT end with any
46 of the strings listed in endings."""
47 if not isfile(test):
48 return False
49 for e in endings:
50 if test.endswith(e):
51 return False
52 return True
53
54 ###############################################################################
55 # Main code begins
30 56
31 57 if os.name == 'posix':
32 58 os_name = 'posix'
33 59 elif os.name in ['nt','dos']:
34 60 os_name = 'windows'
35 61 else:
36 62 print 'Unsupported operating system:',os.name
37 63 sys.exit(1)
38 64
39 # Under Windows, 'sdist' is not supported, since it requires lyxport (and
40 # hence lyx,perl,latex,pdflatex,latex2html,sh,...)
65 # Under Windows, 'sdist' has not been supported. Now that the docs build with
66 # Sphinx it might work, but let's not turn it on until someone confirms that it
67 # actually works.
41 68 if os_name == 'windows' and 'sdist' in sys.argv:
42 69 print 'The sdist command is not available under Windows. Exiting.'
43 70 sys.exit(1)
44 71
45 from distutils.core import setup
46
47 72 # update the manuals when building a source dist
48 73 if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
49 74 import textwrap
50 from IPython.genutils import target_update
51 # list of things to be updated. Each entry is a triplet of args for
75
76 # List of things to be updated. Each entry is a triplet of args for
52 77 # target_update()
53
54 def oscmd(s):
55 print ">", s
56 os.system(s)
57
58 oscmd("cd doc && python do_sphinx.py")
59
60 oscmd("cd doc && gzip -9c ipython.1 > ipython.1.gz")
61 oscmd("cd doc && gzip -9c pycolor.1 > pycolor.1.gz")
78 to_update = [ # The do_sphinx scripts builds html and pdf, so just one
79 # target is enough to cover all manual generation
80 ('doc/manual/ipython.pdf',
81 ['IPython/Release.py','doc/source/ipython.rst'],
82 "cd doc && python do_sphinx.py" ),
83
84 # FIXME - Disabled for now: we need to redo an automatic way
85 # of generating the magic info inside the rst.
86 #('doc/magic.tex',
87 #['IPython/Magic.py'],
88 #"cd doc && ./update_magic.sh" ),
89
90 ('doc/ipython.1.gz',
91 ['doc/ipython.1'],
92 "cd doc && gzip -9c ipython.1 > ipython.1.gz"),
93
94 ('doc/pycolor.1.gz',
95 ['doc/pycolor.1'],
96 "cd doc && gzip -9c pycolor.1 > pycolor.1.gz"),
97 ]
98
99 [ target_update(*t) for t in to_update ]
62 100
63 101 # Release.py contains version, authors, license, url, keywords, etc.
64 102 execfile(pjoin('IPython','Release.py'))
65 103
66 # A little utility we'll need below, since glob() does NOT allow you to do
67 # exclusion on multiple endings!
68 def file_doesnt_endwith(test,endings):
69 """Return true if test is a file and its name does NOT end with any
70 of the strings listed in endings."""
71 if not isfile(test):
72 return False
73 for e in endings:
74 if test.endswith(e):
75 return False
76 return True
77
78 104 # I can't find how to make distutils create a nested dir. structure, so
79 105 # in the meantime do it manually. Butt ugly.
80 106 # Note that http://www.redbrick.dcu.ie/~noel/distutils.html, ex. 2/3, contain
81 107 # information on how to do this more cleanly once python 2.4 can be assumed.
82 108 # Thanks to Noel for the tip.
83 109 docdirbase = 'share/doc/ipython'
84 110 manpagebase = 'share/man/man1'
85 111
86 112 # We only need to exclude from this things NOT already excluded in the
87 113 # MANIFEST.in file.
88 114 exclude = ('.sh','.1.gz')
89 115 docfiles = filter(lambda f:file_doesnt_endwith(f,exclude),glob('doc/*'))
90
91 116 examfiles = filter(isfile, glob('doc/examples/*.py'))
92 manfiles = filter(isfile, glob('doc/build/html/*'))
93 manstatic = filter(isfile, glob('doc/build/html/_static/*'))
94
95 # filter(isfile, glob('doc/manual/*.css')) + \
96 # filter(isfile, glob('doc/manual/*.png'))
97
117 manfiles = filter(isfile, glob('doc/manual/*'))
118 manstatic = filter(isfile, glob('doc/manual/_static/*'))
98 119 manpages = filter(isfile, glob('doc/*.1.gz'))
120
99 121 cfgfiles = filter(isfile, glob('IPython/UserConfig/*'))
100 122 scriptfiles = filter(isfile, ['scripts/ipython','scripts/pycolor',
101 123 'scripts/irunner'])
124
102 125 igridhelpfiles = filter(isfile, glob('IPython/Extensions/igrid_help.*'))
103 126
104 127 # Script to be run by the windows binary installer after the default setup
105 128 # routine, to add shortcuts and similar windows-only things. Windows
106 129 # post-install scripts MUST reside in the scripts/ dir, otherwise distutils
107 130 # doesn't find them.
108 131 if 'bdist_wininst' in sys.argv:
109 132 if len(sys.argv) > 2 and ('sdist' in sys.argv or 'bdist_rpm' in sys.argv):
110 133 print >> sys.stderr,"ERROR: bdist_wininst must be run alone. Exiting."
111 134 sys.exit(1)
112 135 scriptfiles.append('scripts/ipython_win_post_install.py')
113 136
114 137 datafiles = [('data', docdirbase, docfiles),
115 138 ('data', pjoin(docdirbase, 'examples'),examfiles),
116 139 ('data', pjoin(docdirbase, 'manual'),manfiles),
117 140 ('data', pjoin(docdirbase, 'manual/_static'),manstatic),
118 141 ('data', manpagebase, manpages),
119 142 ('data',pjoin(docdirbase, 'extensions'),igridhelpfiles),
120 143 ]
121 144
122 145 if 'setuptools' in sys.modules:
123 146 # setuptools config for egg building
124 147 egg_extra_kwds = {
125 148 'entry_points': {
126 149 'console_scripts': [
127 150 'ipython = IPython.ipapi:launch_new_instance',
128 151 'pycolor = IPython.PyColorize:main'
129 152 ]}
130 153 }
131 154 scriptfiles = []
132 # eggs will lack docs, eaxmples
155 # eggs will lack docs, examples
133 156 datafiles = []
134
135 #datafiles = [('lib', 'IPython/UserConfig', cfgfiles)]
136 157 else:
158 # Normal, non-setuptools install
137 159 egg_extra_kwds = {}
138 160 # package_data of setuptools was introduced to distutils in 2.4
139 161 if sys.version_info < (2,4):
140 162 datafiles.append(('lib', 'IPython/UserConfig', cfgfiles))
141 163
142
143
144
145 164 # Call the setup() routine which does most of the work
146 165 setup(name = name,
147 166 version = version,
148 167 description = description,
149 168 long_description = long_description,
150 169 author = authors['Fernando'][0],
151 170 author_email = authors['Fernando'][1],
152 171 url = url,
153 172 download_url = download_url,
154 173 license = license,
155 174 platforms = platforms,
156 175 keywords = keywords,
157 packages = ['IPython', 'IPython.Extensions', 'IPython.external', 'IPython.gui', 'IPython.gui.wx', 'IPython.UserConfig'],
176 packages = ['IPython', 'IPython.Extensions', 'IPython.external',
177 'IPython.gui', 'IPython.gui.wx',
178 'IPython.UserConfig'],
158 179 scripts = scriptfiles,
159 180 package_data = {'IPython.UserConfig' : ['*'] },
160 181
161 182 cmdclass = {'install_data': install_data_ext},
162 183 data_files = datafiles,
163 184 # extra params needed for eggs
164 185 **egg_extra_kwds
165 186 )
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
1 NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now