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