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