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