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