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