##// END OF EJS Templates
%quickref
vivainio -
Show More
@@ -1,2866 +1,2869 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 $Id: Magic.py 1090 2006-01-27 21:24:05Z vivainio $"""
4 $Id: Magic.py 1092 2006-01-27 23:56:32Z vivainio $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 #****************************************************************************
15 15 # Modules and globals
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>\n%s <%s>' % \
19 19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 20 __license__ = Release.license
21 21
22 22 # Python standard modules
23 23 import __builtin__
24 24 import bdb
25 25 import inspect
26 26 import os
27 27 import pdb
28 28 import pydoc
29 29 import sys
30 30 import re
31 31 import tempfile
32 32 import time
33 33 import cPickle as pickle
34 34 import textwrap
35 35 from cStringIO import StringIO
36 36 from getopt import getopt
37 37 from pprint import pprint, pformat
38 38
39 39 # profile isn't bundled by default in Debian for license reasons
40 40 try:
41 41 import profile,pstats
42 42 except ImportError:
43 43 profile = pstats = None
44 44
45 45 # Homebrewed
46 46 from IPython import Debugger, OInspect, wildcard
47 47 from IPython.FakeModule import FakeModule
48 48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 49 from IPython.PyColorize import Parser
50 50 from IPython.ipstruct import Struct
51 51 from IPython.macro import Macro
52 52 from IPython.genutils import *
53 53 from IPython import platutils
54 54
55 55 #***************************************************************************
56 56 # Utility functions
57 57 def on_off(tag):
58 58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 59 return ['OFF','ON'][tag]
60 60
61 61 class Bunch: pass
62 62
63 63 #***************************************************************************
64 64 # Main class implementing Magic functionality
65 65 class Magic:
66 66 """Magic functions for InteractiveShell.
67 67
68 68 Shell functions which can be reached as %function_name. All magic
69 69 functions should accept a string, which they can parse for their own
70 70 needs. This can make some functions easier to type, eg `%cd ../`
71 71 vs. `%cd("../")`
72 72
73 73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 74 at the command line, but it is is needed in the definition. """
75 75
76 76 # class globals
77 77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 78 'Automagic is ON, % prefix NOT needed for magic functions.']
79 79
80 80 #......................................................................
81 81 # some utility functions
82 82
83 83 def __init__(self,shell):
84 84
85 85 self.options_table = {}
86 86 if profile is None:
87 87 self.magic_prun = self.profile_missing_notice
88 88 self.shell = shell
89 89
90 90 # namespace for holding state we may need
91 91 self._magic_state = Bunch()
92 92
93 93 def profile_missing_notice(self, *args, **kwargs):
94 94 error("""\
95 95 The profile module could not be found. If you are a Debian user,
96 96 it has been removed from the standard Debian package because of its non-free
97 97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98 98
99 99 def default_option(self,fn,optstr):
100 100 """Make an entry in the options_table for fn, with value optstr"""
101 101
102 102 if fn not in self.lsmagic():
103 103 error("%s is not a magic function" % fn)
104 104 self.options_table[fn] = optstr
105 105
106 106 def lsmagic(self):
107 107 """Return a list of currently available magic functions.
108 108
109 109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 110 ['magic_ls','magic_cd',...]"""
111 111
112 112 # FIXME. This needs a cleanup, in the way the magics list is built.
113 113
114 114 # magics in class definition
115 115 class_magic = lambda fn: fn.startswith('magic_') and \
116 116 callable(Magic.__dict__[fn])
117 117 # in instance namespace (run-time user additions)
118 118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 119 callable(self.__dict__[fn])
120 120 # and bound magics by user (so they can access self):
121 121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 122 callable(self.__class__.__dict__[fn])
123 123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 124 filter(inst_magic,self.__dict__.keys()) + \
125 125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 126 out = []
127 127 for fn in magics:
128 128 out.append(fn.replace('magic_','',1))
129 129 out.sort()
130 130 return out
131 131
132 132 def extract_input_slices(self,slices):
133 133 """Return as a string a set of input history slices.
134 134
135 135 The set of slices is given as a list of strings (like ['1','4:8','9'],
136 136 since this function is for use by magic functions which get their
137 137 arguments as strings.
138 138
139 139 Note that slices can be called with two notations:
140 140
141 141 N:M -> standard python form, means including items N...(M-1).
142 142
143 143 N-M -> include items N..M (closed endpoint)."""
144 144
145 145 cmds = []
146 146 for chunk in slices:
147 147 if ':' in chunk:
148 148 ini,fin = map(int,chunk.split(':'))
149 149 elif '-' in chunk:
150 150 ini,fin = map(int,chunk.split('-'))
151 151 fin += 1
152 152 else:
153 153 ini = int(chunk)
154 154 fin = ini+1
155 155 cmds.append(self.shell.input_hist[ini:fin])
156 156 return cmds
157 157
158 158 def _ofind(self,oname):
159 159 """Find an object in the available namespaces.
160 160
161 161 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
162 162
163 163 Has special code to detect magic functions.
164 164 """
165 165
166 166 oname = oname.strip()
167 167
168 168 # Namespaces to search in:
169 169 user_ns = self.shell.user_ns
170 170 internal_ns = self.shell.internal_ns
171 171 builtin_ns = __builtin__.__dict__
172 172 alias_ns = self.shell.alias_table
173 173
174 174 # Put them in a list. The order is important so that we find things in
175 175 # the same order that Python finds them.
176 176 namespaces = [ ('Interactive',user_ns),
177 177 ('IPython internal',internal_ns),
178 178 ('Python builtin',builtin_ns),
179 179 ('Alias',alias_ns),
180 180 ]
181 181
182 182 # initialize results to 'null'
183 183 found = 0; obj = None; ospace = None; ds = None;
184 184 ismagic = 0; isalias = 0
185 185
186 186 # Look for the given name by splitting it in parts. If the head is
187 187 # found, then we look for all the remaining parts as members, and only
188 188 # declare success if we can find them all.
189 189 oname_parts = oname.split('.')
190 190 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
191 191 for nsname,ns in namespaces:
192 192 try:
193 193 obj = ns[oname_head]
194 194 except KeyError:
195 195 continue
196 196 else:
197 197 for part in oname_rest:
198 198 try:
199 199 obj = getattr(obj,part)
200 200 except:
201 201 # Blanket except b/c some badly implemented objects
202 202 # allow __getattr__ to raise exceptions other than
203 203 # AttributeError, which then crashes IPython.
204 204 break
205 205 else:
206 206 # If we finish the for loop (no break), we got all members
207 207 found = 1
208 208 ospace = nsname
209 209 if ns == alias_ns:
210 210 isalias = 1
211 211 break # namespace loop
212 212
213 213 # Try to see if it's magic
214 214 if not found:
215 215 if oname.startswith(self.shell.ESC_MAGIC):
216 216 oname = oname[1:]
217 217 obj = getattr(self,'magic_'+oname,None)
218 218 if obj is not None:
219 219 found = 1
220 220 ospace = 'IPython internal'
221 221 ismagic = 1
222 222
223 223 # Last try: special-case some literals like '', [], {}, etc:
224 224 if not found and oname_head in ["''",'""','[]','{}','()']:
225 225 obj = eval(oname_head)
226 226 found = 1
227 227 ospace = 'Interactive'
228 228
229 229 return {'found':found, 'obj':obj, 'namespace':ospace,
230 230 'ismagic':ismagic, 'isalias':isalias}
231 231
232 232 def arg_err(self,func):
233 233 """Print docstring if incorrect arguments were passed"""
234 234 print 'Error in arguments:'
235 235 print OInspect.getdoc(func)
236 236
237 237 def format_latex(self,strng):
238 238 """Format a string for latex inclusion."""
239 239
240 240 # Characters that need to be escaped for latex:
241 241 escape_re = re.compile(r'(%|_|\$|#)',re.MULTILINE)
242 242 # Magic command names as headers:
243 243 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
244 244 re.MULTILINE)
245 245 # Magic commands
246 246 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
247 247 re.MULTILINE)
248 248 # Paragraph continue
249 249 par_re = re.compile(r'\\$',re.MULTILINE)
250 250
251 251 # The "\n" symbol
252 252 newline_re = re.compile(r'\\n')
253 253
254 254 # Now build the string for output:
255 255 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
256 256 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
257 257 strng)
258 258 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
259 259 strng = par_re.sub(r'\\\\',strng)
260 260 strng = escape_re.sub(r'\\\1',strng)
261 261 strng = newline_re.sub(r'\\textbackslash{}n',strng)
262 262 return strng
263 263
264 264 def format_screen(self,strng):
265 265 """Format a string for screen printing.
266 266
267 267 This removes some latex-type format codes."""
268 268 # Paragraph continue
269 269 par_re = re.compile(r'\\$',re.MULTILINE)
270 270 strng = par_re.sub('',strng)
271 271 return strng
272 272
273 273 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
274 274 """Parse options passed to an argument string.
275 275
276 276 The interface is similar to that of getopt(), but it returns back a
277 277 Struct with the options as keys and the stripped argument string still
278 278 as a string.
279 279
280 280 arg_str is quoted as a true sys.argv vector by using shlex.split.
281 281 This allows us to easily expand variables, glob files, quote
282 282 arguments, etc.
283 283
284 284 Options:
285 285 -mode: default 'string'. If given as 'list', the argument string is
286 286 returned as a list (split on whitespace) instead of a string.
287 287
288 288 -list_all: put all option values in lists. Normally only options
289 289 appearing more than once are put in a list."""
290 290
291 291 # inject default options at the beginning of the input line
292 292 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
293 293 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
294 294
295 295 mode = kw.get('mode','string')
296 296 if mode not in ['string','list']:
297 297 raise ValueError,'incorrect mode given: %s' % mode
298 298 # Get options
299 299 list_all = kw.get('list_all',0)
300 300
301 301 # Check if we have more than one argument to warrant extra processing:
302 302 odict = {} # Dictionary with options
303 303 args = arg_str.split()
304 304 if len(args) >= 1:
305 305 # If the list of inputs only has 0 or 1 thing in it, there's no
306 306 # need to look for options
307 307 argv = shlex_split(arg_str)
308 308 # Do regular option processing
309 309 opts,args = getopt(argv,opt_str,*long_opts)
310 310 for o,a in opts:
311 311 if o.startswith('--'):
312 312 o = o[2:]
313 313 else:
314 314 o = o[1:]
315 315 try:
316 316 odict[o].append(a)
317 317 except AttributeError:
318 318 odict[o] = [odict[o],a]
319 319 except KeyError:
320 320 if list_all:
321 321 odict[o] = [a]
322 322 else:
323 323 odict[o] = a
324 324
325 325 # Prepare opts,args for return
326 326 opts = Struct(odict)
327 327 if mode == 'string':
328 328 args = ' '.join(args)
329 329
330 330 return opts,args
331 331
332 332 #......................................................................
333 333 # And now the actual magic functions
334 334
335 335 # Functions for IPython shell work (vars,funcs, config, etc)
336 336 def magic_lsmagic(self, parameter_s = ''):
337 337 """List currently available magic functions."""
338 338 mesc = self.shell.ESC_MAGIC
339 339 print 'Available magic functions:\n'+mesc+\
340 340 (' '+mesc).join(self.lsmagic())
341 341 print '\n' + Magic.auto_status[self.shell.rc.automagic]
342 342 return None
343 343
344 344 def magic_magic(self, parameter_s = ''):
345 345 """Print information about the magic function system."""
346 346
347 347 mode = ''
348 348 try:
349 349 if parameter_s.split()[0] == '-latex':
350 350 mode = 'latex'
351 351 except:
352 352 pass
353 353
354 354 magic_docs = []
355 355 for fname in self.lsmagic():
356 356 mname = 'magic_' + fname
357 357 for space in (Magic,self,self.__class__):
358 358 try:
359 359 fn = space.__dict__[mname]
360 360 except KeyError:
361 361 pass
362 362 else:
363 363 break
364 364 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
365 365 fname,fn.__doc__))
366 366 magic_docs = ''.join(magic_docs)
367 367
368 368 if mode == 'latex':
369 369 print self.format_latex(magic_docs)
370 370 return
371 371 else:
372 372 magic_docs = self.format_screen(magic_docs)
373 373
374 374 outmsg = """
375 375 IPython's 'magic' functions
376 376 ===========================
377 377
378 378 The magic function system provides a series of functions which allow you to
379 379 control the behavior of IPython itself, plus a lot of system-type
380 380 features. All these functions are prefixed with a % character, but parameters
381 381 are given without parentheses or quotes.
382 382
383 383 NOTE: If you have 'automagic' enabled (via the command line option or with the
384 384 %automagic function), you don't need to type in the % explicitly. By default,
385 385 IPython ships with automagic on, so you should only rarely need the % escape.
386 386
387 387 Example: typing '%cd mydir' (without the quotes) changes you working directory
388 388 to 'mydir', if it exists.
389 389
390 390 You can define your own magic functions to extend the system. See the supplied
391 391 ipythonrc and example-magic.py files for details (in your ipython
392 392 configuration directory, typically $HOME/.ipython/).
393 393
394 394 You can also define your own aliased names for magic functions. In your
395 395 ipythonrc file, placing a line like:
396 396
397 397 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
398 398
399 399 will define %pf as a new name for %profile.
400 400
401 401 You can also call magics in code using the ipmagic() function, which IPython
402 402 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
403 403
404 404 For a list of the available magic functions, use %lsmagic. For a description
405 405 of any of them, type %magic_name?, e.g. '%cd?'.
406 406
407 407 Currently the magic system has the following functions:\n"""
408 408
409 409 mesc = self.shell.ESC_MAGIC
410 410 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
411 411 "\n\n%s%s\n\n%s" % (outmsg,
412 412 magic_docs,mesc,mesc,
413 413 (' '+mesc).join(self.lsmagic()),
414 414 Magic.auto_status[self.shell.rc.automagic] ) )
415 415
416 416 page(outmsg,screen_lines=self.shell.rc.screen_length)
417 417
418 418 def magic_automagic(self, parameter_s = ''):
419 419 """Make magic functions callable without having to type the initial %.
420 420
421 421 Toggles on/off (when off, you must call it as %automagic, of
422 422 course). Note that magic functions have lowest priority, so if there's
423 423 a variable whose name collides with that of a magic fn, automagic
424 424 won't work for that function (you get the variable instead). However,
425 425 if you delete the variable (del var), the previously shadowed magic
426 426 function becomes visible to automagic again."""
427 427
428 428 rc = self.shell.rc
429 429 rc.automagic = not rc.automagic
430 430 print '\n' + Magic.auto_status[rc.automagic]
431 431
432 432 def magic_autocall(self, parameter_s = ''):
433 433 """Make functions callable without having to type parentheses.
434 434
435 435 Usage:
436 436
437 437 %autocall [mode]
438 438
439 439 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
440 440 value is toggled on and off (remembering the previous state)."""
441 441
442 442 rc = self.shell.rc
443 443
444 444 if parameter_s:
445 445 arg = int(parameter_s)
446 446 else:
447 447 arg = 'toggle'
448 448
449 449 if not arg in (0,1,2,'toggle'):
450 450 error('Valid modes: (0->Off, 1->Smart, 2->Full')
451 451 return
452 452
453 453 if arg in (0,1,2):
454 454 rc.autocall = arg
455 455 else: # toggle
456 456 if rc.autocall:
457 457 self._magic_state.autocall_save = rc.autocall
458 458 rc.autocall = 0
459 459 else:
460 460 try:
461 461 rc.autocall = self._magic_state.autocall_save
462 462 except AttributeError:
463 463 rc.autocall = self._magic_state.autocall_save = 1
464 464
465 465 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
466 466
467 467 def magic_autoindent(self, parameter_s = ''):
468 468 """Toggle autoindent on/off (if available)."""
469 469
470 470 self.shell.set_autoindent()
471 471 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
472 472
473 473 def magic_system_verbose(self, parameter_s = ''):
474 474 """Toggle verbose printing of system calls on/off."""
475 475
476 476 self.shell.rc_set_toggle('system_verbose')
477 477 print "System verbose printing is:",\
478 478 ['OFF','ON'][self.shell.rc.system_verbose]
479 479
480 480 def magic_history(self, parameter_s = ''):
481 481 """Print input history (_i<n> variables), with most recent last.
482 482
483 483 %history -> print at most 40 inputs (some may be multi-line)\\
484 484 %history n -> print at most n inputs\\
485 485 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
486 486
487 487 Each input's number <n> is shown, and is accessible as the
488 488 automatically generated variable _i<n>. Multi-line statements are
489 489 printed starting at a new line for easy copy/paste.
490 490
491 491
492 492 Options:
493 493
494 494 -n: do NOT print line numbers. This is useful if you want to get a
495 495 printout of many lines which can be directly pasted into a text
496 496 editor.
497 497
498 498 This feature is only available if numbered prompts are in use.
499 499
500 500 -r: print the 'raw' history. IPython filters your input and
501 501 converts it all into valid Python source before executing it (things
502 502 like magics or aliases are turned into function calls, for
503 503 example). With this option, you'll see the unfiltered history
504 504 instead of the filtered version: '%cd /' will be seen as '%cd /'
505 505 instead of 'ipmagic("%cd /")'.
506 506 """
507 507
508 508 shell = self.shell
509 509 if not shell.outputcache.do_full_cache:
510 510 print 'This feature is only available if numbered prompts are in use.'
511 511 return
512 512 opts,args = self.parse_options(parameter_s,'nr',mode='list')
513 513
514 514 if opts.has_key('r'):
515 515 input_hist = shell.input_hist_raw
516 516 else:
517 517 input_hist = shell.input_hist
518 518
519 519 default_length = 40
520 520 if len(args) == 0:
521 521 final = len(input_hist)
522 522 init = max(1,final-default_length)
523 523 elif len(args) == 1:
524 524 final = len(input_hist)
525 525 init = max(1,final-int(args[0]))
526 526 elif len(args) == 2:
527 527 init,final = map(int,args)
528 528 else:
529 529 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
530 530 print self.magic_hist.__doc__
531 531 return
532 532 width = len(str(final))
533 533 line_sep = ['','\n']
534 534 print_nums = not opts.has_key('n')
535 535 for in_num in range(init,final):
536 536 inline = input_hist[in_num]
537 537 multiline = int(inline.count('\n') > 1)
538 538 if print_nums:
539 539 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
540 540 print inline,
541 541
542 542 def magic_hist(self, parameter_s=''):
543 543 """Alternate name for %history."""
544 544 return self.magic_history(parameter_s)
545 545
546 546 def magic_p(self, parameter_s=''):
547 547 """Just a short alias for Python's 'print'."""
548 548 exec 'print ' + parameter_s in self.shell.user_ns
549 549
550 550 def magic_r(self, parameter_s=''):
551 551 """Repeat previous input.
552 552
553 553 If given an argument, repeats the previous command which starts with
554 554 the same string, otherwise it just repeats the previous input.
555 555
556 556 Shell escaped commands (with ! as first character) are not recognized
557 557 by this system, only pure python code and magic commands.
558 558 """
559 559
560 560 start = parameter_s.strip()
561 561 esc_magic = self.shell.ESC_MAGIC
562 562 # Identify magic commands even if automagic is on (which means
563 563 # the in-memory version is different from that typed by the user).
564 564 if self.shell.rc.automagic:
565 565 start_magic = esc_magic+start
566 566 else:
567 567 start_magic = start
568 568 # Look through the input history in reverse
569 569 for n in range(len(self.shell.input_hist)-2,0,-1):
570 570 input = self.shell.input_hist[n]
571 571 # skip plain 'r' lines so we don't recurse to infinity
572 572 if input != 'ipmagic("r")\n' and \
573 573 (input.startswith(start) or input.startswith(start_magic)):
574 574 #print 'match',`input` # dbg
575 575 print 'Executing:',input,
576 576 self.shell.runlines(input)
577 577 return
578 578 print 'No previous input matching `%s` found.' % start
579 579
580 580 def magic_page(self, parameter_s=''):
581 581 """Pretty print the object and display it through a pager.
582 582
583 583 If no parameter is given, use _ (last output)."""
584 584 # After a function contributed by Olivier Aubert, slightly modified.
585 585
586 586 oname = parameter_s and parameter_s or '_'
587 587 info = self._ofind(oname)
588 588 if info['found']:
589 589 page(pformat(info['obj']))
590 590 else:
591 591 print 'Object `%s` not found' % oname
592 592
593 593 def magic_profile(self, parameter_s=''):
594 594 """Print your currently active IPyhton profile."""
595 595 if self.shell.rc.profile:
596 596 printpl('Current IPython profile: $self.shell.rc.profile.')
597 597 else:
598 598 print 'No profile active.'
599 599
600 600 def _inspect(self,meth,oname,**kw):
601 601 """Generic interface to the inspector system.
602 602
603 603 This function is meant to be called by pdef, pdoc & friends."""
604 604
605 605 oname = oname.strip()
606 606 info = Struct(self._ofind(oname))
607 607 if info.found:
608 608 pmethod = getattr(self.shell.inspector,meth)
609 609 formatter = info.ismagic and self.format_screen or None
610 610 if meth == 'pdoc':
611 611 pmethod(info.obj,oname,formatter)
612 612 elif meth == 'pinfo':
613 613 pmethod(info.obj,oname,formatter,info,**kw)
614 614 else:
615 615 pmethod(info.obj,oname)
616 616 else:
617 617 print 'Object `%s` not found.' % oname
618 618 return 'not found' # so callers can take other action
619 619
620 620 def magic_pdef(self, parameter_s=''):
621 621 """Print the definition header for any callable object.
622 622
623 623 If the object is a class, print the constructor information."""
624 624 self._inspect('pdef',parameter_s)
625 625
626 626 def magic_pdoc(self, parameter_s=''):
627 627 """Print the docstring for an object.
628 628
629 629 If the given object is a class, it will print both the class and the
630 630 constructor docstrings."""
631 631 self._inspect('pdoc',parameter_s)
632 632
633 633 def magic_psource(self, parameter_s=''):
634 634 """Print (or run through pager) the source code for an object."""
635 635 self._inspect('psource',parameter_s)
636 636
637 637 def magic_pfile(self, parameter_s=''):
638 638 """Print (or run through pager) the file where an object is defined.
639 639
640 640 The file opens at the line where the object definition begins. IPython
641 641 will honor the environment variable PAGER if set, and otherwise will
642 642 do its best to print the file in a convenient form.
643 643
644 644 If the given argument is not an object currently defined, IPython will
645 645 try to interpret it as a filename (automatically adding a .py extension
646 646 if needed). You can thus use %pfile as a syntax highlighting code
647 647 viewer."""
648 648
649 649 # first interpret argument as an object name
650 650 out = self._inspect('pfile',parameter_s)
651 651 # if not, try the input as a filename
652 652 if out == 'not found':
653 653 try:
654 654 filename = get_py_filename(parameter_s)
655 655 except IOError,msg:
656 656 print msg
657 657 return
658 658 page(self.shell.inspector.format(file(filename).read()))
659 659
660 660 def magic_pinfo(self, parameter_s=''):
661 661 """Provide detailed information about an object.
662 662
663 663 '%pinfo object' is just a synonym for object? or ?object."""
664 664
665 665 #print 'pinfo par: <%s>' % parameter_s # dbg
666 666
667 667 # detail_level: 0 -> obj? , 1 -> obj??
668 668 detail_level = 0
669 669 # We need to detect if we got called as 'pinfo pinfo foo', which can
670 670 # happen if the user types 'pinfo foo?' at the cmd line.
671 671 pinfo,qmark1,oname,qmark2 = \
672 672 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
673 673 if pinfo or qmark1 or qmark2:
674 674 detail_level = 1
675 675 if "*" in oname:
676 676 self.magic_psearch(oname)
677 677 else:
678 678 self._inspect('pinfo',oname,detail_level=detail_level)
679 679
680 680 def magic_psearch(self, parameter_s=''):
681 681 """Search for object in namespaces by wildcard.
682 682
683 683 %psearch [options] PATTERN [OBJECT TYPE]
684 684
685 685 Note: ? can be used as a synonym for %psearch, at the beginning or at
686 686 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
687 687 rest of the command line must be unchanged (options come first), so
688 688 for example the following forms are equivalent
689 689
690 690 %psearch -i a* function
691 691 -i a* function?
692 692 ?-i a* function
693 693
694 694 Arguments:
695 695
696 696 PATTERN
697 697
698 698 where PATTERN is a string containing * as a wildcard similar to its
699 699 use in a shell. The pattern is matched in all namespaces on the
700 700 search path. By default objects starting with a single _ are not
701 701 matched, many IPython generated objects have a single
702 702 underscore. The default is case insensitive matching. Matching is
703 703 also done on the attributes of objects and not only on the objects
704 704 in a module.
705 705
706 706 [OBJECT TYPE]
707 707
708 708 Is the name of a python type from the types module. The name is
709 709 given in lowercase without the ending type, ex. StringType is
710 710 written string. By adding a type here only objects matching the
711 711 given type are matched. Using all here makes the pattern match all
712 712 types (this is the default).
713 713
714 714 Options:
715 715
716 716 -a: makes the pattern match even objects whose names start with a
717 717 single underscore. These names are normally ommitted from the
718 718 search.
719 719
720 720 -i/-c: make the pattern case insensitive/sensitive. If neither of
721 721 these options is given, the default is read from your ipythonrc
722 722 file. The option name which sets this value is
723 723 'wildcards_case_sensitive'. If this option is not specified in your
724 724 ipythonrc file, IPython's internal default is to do a case sensitive
725 725 search.
726 726
727 727 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
728 728 specifiy can be searched in any of the following namespaces:
729 729 'builtin', 'user', 'user_global','internal', 'alias', where
730 730 'builtin' and 'user' are the search defaults. Note that you should
731 731 not use quotes when specifying namespaces.
732 732
733 733 'Builtin' contains the python module builtin, 'user' contains all
734 734 user data, 'alias' only contain the shell aliases and no python
735 735 objects, 'internal' contains objects used by IPython. The
736 736 'user_global' namespace is only used by embedded IPython instances,
737 737 and it contains module-level globals. You can add namespaces to the
738 738 search with -s or exclude them with -e (these options can be given
739 739 more than once).
740 740
741 741 Examples:
742 742
743 743 %psearch a* -> objects beginning with an a
744 744 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
745 745 %psearch a* function -> all functions beginning with an a
746 746 %psearch re.e* -> objects beginning with an e in module re
747 747 %psearch r*.e* -> objects that start with e in modules starting in r
748 748 %psearch r*.* string -> all strings in modules beginning with r
749 749
750 750 Case sensitve search:
751 751
752 752 %psearch -c a* list all object beginning with lower case a
753 753
754 754 Show objects beginning with a single _:
755 755
756 756 %psearch -a _* list objects beginning with a single underscore"""
757 757
758 758 # default namespaces to be searched
759 759 def_search = ['user','builtin']
760 760
761 761 # Process options/args
762 762 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
763 763 opt = opts.get
764 764 shell = self.shell
765 765 psearch = shell.inspector.psearch
766 766
767 767 # select case options
768 768 if opts.has_key('i'):
769 769 ignore_case = True
770 770 elif opts.has_key('c'):
771 771 ignore_case = False
772 772 else:
773 773 ignore_case = not shell.rc.wildcards_case_sensitive
774 774
775 775 # Build list of namespaces to search from user options
776 776 def_search.extend(opt('s',[]))
777 777 ns_exclude = ns_exclude=opt('e',[])
778 778 ns_search = [nm for nm in def_search if nm not in ns_exclude]
779 779
780 780 # Call the actual search
781 781 try:
782 782 psearch(args,shell.ns_table,ns_search,
783 783 show_all=opt('a'),ignore_case=ignore_case)
784 784 except:
785 785 shell.showtraceback()
786 786
787 787 def magic_who_ls(self, parameter_s=''):
788 788 """Return a sorted list of all interactive variables.
789 789
790 790 If arguments are given, only variables of types matching these
791 791 arguments are returned."""
792 792
793 793 user_ns = self.shell.user_ns
794 794 internal_ns = self.shell.internal_ns
795 795 user_config_ns = self.shell.user_config_ns
796 796 out = []
797 797 typelist = parameter_s.split()
798 798
799 799 for i in user_ns:
800 800 if not (i.startswith('_') or i.startswith('_i')) \
801 801 and not (i in internal_ns or i in user_config_ns):
802 802 if typelist:
803 803 if type(user_ns[i]).__name__ in typelist:
804 804 out.append(i)
805 805 else:
806 806 out.append(i)
807 807 out.sort()
808 808 return out
809 809
810 810 def magic_who(self, parameter_s=''):
811 811 """Print all interactive variables, with some minimal formatting.
812 812
813 813 If any arguments are given, only variables whose type matches one of
814 814 these are printed. For example:
815 815
816 816 %who function str
817 817
818 818 will only list functions and strings, excluding all other types of
819 819 variables. To find the proper type names, simply use type(var) at a
820 820 command line to see how python prints type names. For example:
821 821
822 822 In [1]: type('hello')\\
823 823 Out[1]: <type 'str'>
824 824
825 825 indicates that the type name for strings is 'str'.
826 826
827 827 %who always excludes executed names loaded through your configuration
828 828 file and things which are internal to IPython.
829 829
830 830 This is deliberate, as typically you may load many modules and the
831 831 purpose of %who is to show you only what you've manually defined."""
832 832
833 833 varlist = self.magic_who_ls(parameter_s)
834 834 if not varlist:
835 835 print 'Interactive namespace is empty.'
836 836 return
837 837
838 838 # if we have variables, move on...
839 839
840 840 # stupid flushing problem: when prompts have no separators, stdout is
841 841 # getting lost. I'm starting to think this is a python bug. I'm having
842 842 # to force a flush with a print because even a sys.stdout.flush
843 843 # doesn't seem to do anything!
844 844
845 845 count = 0
846 846 for i in varlist:
847 847 print i+'\t',
848 848 count += 1
849 849 if count > 8:
850 850 count = 0
851 851 print
852 852 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
853 853
854 854 print # well, this does force a flush at the expense of an extra \n
855 855
856 856 def magic_whos(self, parameter_s=''):
857 857 """Like %who, but gives some extra information about each variable.
858 858
859 859 The same type filtering of %who can be applied here.
860 860
861 861 For all variables, the type is printed. Additionally it prints:
862 862
863 863 - For {},[],(): their length.
864 864
865 865 - For Numeric arrays, a summary with shape, number of elements,
866 866 typecode and size in memory.
867 867
868 868 - Everything else: a string representation, snipping their middle if
869 869 too long."""
870 870
871 871 varnames = self.magic_who_ls(parameter_s)
872 872 if not varnames:
873 873 print 'Interactive namespace is empty.'
874 874 return
875 875
876 876 # if we have variables, move on...
877 877
878 878 # for these types, show len() instead of data:
879 879 seq_types = [types.DictType,types.ListType,types.TupleType]
880 880
881 881 # for Numeric arrays, display summary info
882 882 try:
883 883 import Numeric
884 884 except ImportError:
885 885 array_type = None
886 886 else:
887 887 array_type = Numeric.ArrayType.__name__
888 888
889 889 # Find all variable names and types so we can figure out column sizes
890 890 get_vars = lambda i: self.shell.user_ns[i]
891 891 type_name = lambda v: type(v).__name__
892 892 varlist = map(get_vars,varnames)
893 893
894 894 typelist = []
895 895 for vv in varlist:
896 896 tt = type_name(vv)
897 897 if tt=='instance':
898 898 typelist.append(str(vv.__class__))
899 899 else:
900 900 typelist.append(tt)
901 901
902 902 # column labels and # of spaces as separator
903 903 varlabel = 'Variable'
904 904 typelabel = 'Type'
905 905 datalabel = 'Data/Info'
906 906 colsep = 3
907 907 # variable format strings
908 908 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
909 909 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
910 910 aformat = "%s: %s elems, type `%s`, %s bytes"
911 911 # find the size of the columns to format the output nicely
912 912 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
913 913 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
914 914 # table header
915 915 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
916 916 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
917 917 # and the table itself
918 918 kb = 1024
919 919 Mb = 1048576 # kb**2
920 920 for vname,var,vtype in zip(varnames,varlist,typelist):
921 921 print itpl(vformat),
922 922 if vtype in seq_types:
923 923 print len(var)
924 924 elif vtype==array_type:
925 925 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
926 926 vsize = Numeric.size(var)
927 927 vbytes = vsize*var.itemsize()
928 928 if vbytes < 100000:
929 929 print aformat % (vshape,vsize,var.typecode(),vbytes)
930 930 else:
931 931 print aformat % (vshape,vsize,var.typecode(),vbytes),
932 932 if vbytes < Mb:
933 933 print '(%s kb)' % (vbytes/kb,)
934 934 else:
935 935 print '(%s Mb)' % (vbytes/Mb,)
936 936 else:
937 937 vstr = str(var).replace('\n','\\n')
938 938 if len(vstr) < 50:
939 939 print vstr
940 940 else:
941 941 printpl(vfmt_short)
942 942
943 943 def magic_reset(self, parameter_s=''):
944 944 """Resets the namespace by removing all names defined by the user.
945 945
946 946 Input/Output history are left around in case you need them."""
947 947
948 948 ans = raw_input(
949 949 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
950 950 if not ans.lower() == 'y':
951 951 print 'Nothing done.'
952 952 return
953 953 user_ns = self.shell.user_ns
954 954 for i in self.magic_who_ls():
955 955 del(user_ns[i])
956 956
957 957 def magic_config(self,parameter_s=''):
958 958 """Show IPython's internal configuration."""
959 959
960 960 page('Current configuration structure:\n'+
961 961 pformat(self.shell.rc.dict()))
962 962
963 963 def magic_logstart(self,parameter_s=''):
964 964 """Start logging anywhere in a session.
965 965
966 966 %logstart [-o|-t] [log_name [log_mode]]
967 967
968 968 If no name is given, it defaults to a file named 'ipython_log.py' in your
969 969 current directory, in 'rotate' mode (see below).
970 970
971 971 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
972 972 history up to that point and then continues logging.
973 973
974 974 %logstart takes a second optional parameter: logging mode. This can be one
975 975 of (note that the modes are given unquoted):\\
976 976 append: well, that says it.\\
977 977 backup: rename (if exists) to name~ and start name.\\
978 978 global: single logfile in your home dir, appended to.\\
979 979 over : overwrite existing log.\\
980 980 rotate: create rotating logs name.1~, name.2~, etc.
981 981
982 982 Options:
983 983
984 984 -o: log also IPython's output. In this mode, all commands which
985 985 generate an Out[NN] prompt are recorded to the logfile, right after
986 986 their corresponding input line. The output lines are always
987 987 prepended with a '#[Out]# ' marker, so that the log remains valid
988 988 Python code.
989 989
990 990 Since this marker is always the same, filtering only the output from
991 991 a log is very easy, using for example a simple awk call:
992 992
993 993 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
994 994
995 995 -t: put timestamps before each input line logged (these are put in
996 996 comments)."""
997 997
998 998 opts,par = self.parse_options(parameter_s,'ot')
999 999 log_output = 'o' in opts
1000 1000 timestamp = 't' in opts
1001 1001
1002 1002 rc = self.shell.rc
1003 1003 logger = self.shell.logger
1004 1004
1005 1005 # if no args are given, the defaults set in the logger constructor by
1006 1006 # ipytohn remain valid
1007 1007 if par:
1008 1008 try:
1009 1009 logfname,logmode = par.split()
1010 1010 except:
1011 1011 logfname = par
1012 1012 logmode = 'backup'
1013 1013 else:
1014 1014 logfname = logger.logfname
1015 1015 logmode = logger.logmode
1016 1016 # put logfname into rc struct as if it had been called on the command
1017 1017 # line, so it ends up saved in the log header Save it in case we need
1018 1018 # to restore it...
1019 1019 old_logfile = rc.opts.get('logfile','')
1020 1020 if logfname:
1021 1021 logfname = os.path.expanduser(logfname)
1022 1022 rc.opts.logfile = logfname
1023 1023 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1024 1024 try:
1025 1025 started = logger.logstart(logfname,loghead,logmode,
1026 1026 log_output,timestamp)
1027 1027 except:
1028 1028 rc.opts.logfile = old_logfile
1029 1029 warn("Couldn't start log: %s" % sys.exc_info()[1])
1030 1030 else:
1031 1031 # log input history up to this point, optionally interleaving
1032 1032 # output if requested
1033 1033
1034 1034 if timestamp:
1035 1035 # disable timestamping for the previous history, since we've
1036 1036 # lost those already (no time machine here).
1037 1037 logger.timestamp = False
1038 1038 if log_output:
1039 1039 log_write = logger.log_write
1040 1040 input_hist = self.shell.input_hist
1041 1041 output_hist = self.shell.output_hist
1042 1042 for n in range(1,len(input_hist)-1):
1043 1043 log_write(input_hist[n].rstrip())
1044 1044 if n in output_hist:
1045 1045 log_write(repr(output_hist[n]),'output')
1046 1046 else:
1047 1047 logger.log_write(self.shell.input_hist[1:])
1048 1048 if timestamp:
1049 1049 # re-enable timestamping
1050 1050 logger.timestamp = True
1051 1051
1052 1052 print ('Activating auto-logging. '
1053 1053 'Current session state plus future input saved.')
1054 1054 logger.logstate()
1055 1055
1056 1056 def magic_logoff(self,parameter_s=''):
1057 1057 """Temporarily stop logging.
1058 1058
1059 1059 You must have previously started logging."""
1060 1060 self.shell.logger.switch_log(0)
1061 1061
1062 1062 def magic_logon(self,parameter_s=''):
1063 1063 """Restart logging.
1064 1064
1065 1065 This function is for restarting logging which you've temporarily
1066 1066 stopped with %logoff. For starting logging for the first time, you
1067 1067 must use the %logstart function, which allows you to specify an
1068 1068 optional log filename."""
1069 1069
1070 1070 self.shell.logger.switch_log(1)
1071 1071
1072 1072 def magic_logstate(self,parameter_s=''):
1073 1073 """Print the status of the logging system."""
1074 1074
1075 1075 self.shell.logger.logstate()
1076 1076
1077 1077 def magic_pdb(self, parameter_s=''):
1078 1078 """Control the calling of the pdb interactive debugger.
1079 1079
1080 1080 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1081 1081 argument it works as a toggle.
1082 1082
1083 1083 When an exception is triggered, IPython can optionally call the
1084 1084 interactive pdb debugger after the traceback printout. %pdb toggles
1085 1085 this feature on and off."""
1086 1086
1087 1087 par = parameter_s.strip().lower()
1088 1088
1089 1089 if par:
1090 1090 try:
1091 1091 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1092 1092 except KeyError:
1093 1093 print ('Incorrect argument. Use on/1, off/0, '
1094 1094 'or nothing for a toggle.')
1095 1095 return
1096 1096 else:
1097 1097 # toggle
1098 1098 new_pdb = not self.shell.InteractiveTB.call_pdb
1099 1099
1100 1100 # set on the shell
1101 1101 self.shell.call_pdb = new_pdb
1102 1102 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1103 1103
1104 1104 def magic_prun(self, parameter_s ='',user_mode=1,
1105 1105 opts=None,arg_lst=None,prog_ns=None):
1106 1106
1107 1107 """Run a statement through the python code profiler.
1108 1108
1109 1109 Usage:\\
1110 1110 %prun [options] statement
1111 1111
1112 1112 The given statement (which doesn't require quote marks) is run via the
1113 1113 python profiler in a manner similar to the profile.run() function.
1114 1114 Namespaces are internally managed to work correctly; profile.run
1115 1115 cannot be used in IPython because it makes certain assumptions about
1116 1116 namespaces which do not hold under IPython.
1117 1117
1118 1118 Options:
1119 1119
1120 1120 -l <limit>: you can place restrictions on what or how much of the
1121 1121 profile gets printed. The limit value can be:
1122 1122
1123 1123 * A string: only information for function names containing this string
1124 1124 is printed.
1125 1125
1126 1126 * An integer: only these many lines are printed.
1127 1127
1128 1128 * A float (between 0 and 1): this fraction of the report is printed
1129 1129 (for example, use a limit of 0.4 to see the topmost 40% only).
1130 1130
1131 1131 You can combine several limits with repeated use of the option. For
1132 1132 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1133 1133 information about class constructors.
1134 1134
1135 1135 -r: return the pstats.Stats object generated by the profiling. This
1136 1136 object has all the information about the profile in it, and you can
1137 1137 later use it for further analysis or in other functions.
1138 1138
1139 1139 Since magic functions have a particular form of calling which prevents
1140 1140 you from writing something like:\\
1141 1141 In [1]: p = %prun -r print 4 # invalid!\\
1142 1142 you must instead use IPython's automatic variables to assign this:\\
1143 1143 In [1]: %prun -r print 4 \\
1144 1144 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1145 1145 In [2]: stats = _
1146 1146
1147 1147 If you really need to assign this value via an explicit function call,
1148 1148 you can always tap directly into the true name of the magic function
1149 1149 by using the ipmagic function (which IPython automatically adds to the
1150 1150 builtins):\\
1151 1151 In [3]: stats = ipmagic('prun','-r print 4')
1152 1152
1153 1153 You can type ipmagic? for more details on ipmagic.
1154 1154
1155 1155 -s <key>: sort profile by given key. You can provide more than one key
1156 1156 by using the option several times: '-s key1 -s key2 -s key3...'. The
1157 1157 default sorting key is 'time'.
1158 1158
1159 1159 The following is copied verbatim from the profile documentation
1160 1160 referenced below:
1161 1161
1162 1162 When more than one key is provided, additional keys are used as
1163 1163 secondary criteria when the there is equality in all keys selected
1164 1164 before them.
1165 1165
1166 1166 Abbreviations can be used for any key names, as long as the
1167 1167 abbreviation is unambiguous. The following are the keys currently
1168 1168 defined:
1169 1169
1170 1170 Valid Arg Meaning\\
1171 1171 "calls" call count\\
1172 1172 "cumulative" cumulative time\\
1173 1173 "file" file name\\
1174 1174 "module" file name\\
1175 1175 "pcalls" primitive call count\\
1176 1176 "line" line number\\
1177 1177 "name" function name\\
1178 1178 "nfl" name/file/line\\
1179 1179 "stdname" standard name\\
1180 1180 "time" internal time
1181 1181
1182 1182 Note that all sorts on statistics are in descending order (placing
1183 1183 most time consuming items first), where as name, file, and line number
1184 1184 searches are in ascending order (i.e., alphabetical). The subtle
1185 1185 distinction between "nfl" and "stdname" is that the standard name is a
1186 1186 sort of the name as printed, which means that the embedded line
1187 1187 numbers get compared in an odd way. For example, lines 3, 20, and 40
1188 1188 would (if the file names were the same) appear in the string order
1189 1189 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1190 1190 line numbers. In fact, sort_stats("nfl") is the same as
1191 1191 sort_stats("name", "file", "line").
1192 1192
1193 1193 -T <filename>: save profile results as shown on screen to a text
1194 1194 file. The profile is still shown on screen.
1195 1195
1196 1196 -D <filename>: save (via dump_stats) profile statistics to given
1197 1197 filename. This data is in a format understod by the pstats module, and
1198 1198 is generated by a call to the dump_stats() method of profile
1199 1199 objects. The profile is still shown on screen.
1200 1200
1201 1201 If you want to run complete programs under the profiler's control, use
1202 1202 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1203 1203 contains profiler specific options as described here.
1204 1204
1205 1205 You can read the complete documentation for the profile module with:\\
1206 1206 In [1]: import profile; profile.help() """
1207 1207
1208 1208 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1209 1209 # protect user quote marks
1210 1210 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1211 1211
1212 1212 if user_mode: # regular user call
1213 1213 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1214 1214 list_all=1)
1215 1215 namespace = self.shell.user_ns
1216 1216 else: # called to run a program by %run -p
1217 1217 try:
1218 1218 filename = get_py_filename(arg_lst[0])
1219 1219 except IOError,msg:
1220 1220 error(msg)
1221 1221 return
1222 1222
1223 1223 arg_str = 'execfile(filename,prog_ns)'
1224 1224 namespace = locals()
1225 1225
1226 1226 opts.merge(opts_def)
1227 1227
1228 1228 prof = profile.Profile()
1229 1229 try:
1230 1230 prof = prof.runctx(arg_str,namespace,namespace)
1231 1231 sys_exit = ''
1232 1232 except SystemExit:
1233 1233 sys_exit = """*** SystemExit exception caught in code being profiled."""
1234 1234
1235 1235 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1236 1236
1237 1237 lims = opts.l
1238 1238 if lims:
1239 1239 lims = [] # rebuild lims with ints/floats/strings
1240 1240 for lim in opts.l:
1241 1241 try:
1242 1242 lims.append(int(lim))
1243 1243 except ValueError:
1244 1244 try:
1245 1245 lims.append(float(lim))
1246 1246 except ValueError:
1247 1247 lims.append(lim)
1248 1248
1249 1249 # trap output
1250 1250 sys_stdout = sys.stdout
1251 1251 stdout_trap = StringIO()
1252 1252 try:
1253 1253 sys.stdout = stdout_trap
1254 1254 stats.print_stats(*lims)
1255 1255 finally:
1256 1256 sys.stdout = sys_stdout
1257 1257 output = stdout_trap.getvalue()
1258 1258 output = output.rstrip()
1259 1259
1260 1260 page(output,screen_lines=self.shell.rc.screen_length)
1261 1261 print sys_exit,
1262 1262
1263 1263 dump_file = opts.D[0]
1264 1264 text_file = opts.T[0]
1265 1265 if dump_file:
1266 1266 prof.dump_stats(dump_file)
1267 1267 print '\n*** Profile stats marshalled to file',\
1268 1268 `dump_file`+'.',sys_exit
1269 1269 if text_file:
1270 1270 file(text_file,'w').write(output)
1271 1271 print '\n*** Profile printout saved to text file',\
1272 1272 `text_file`+'.',sys_exit
1273 1273
1274 1274 if opts.has_key('r'):
1275 1275 return stats
1276 1276 else:
1277 1277 return None
1278 1278
1279 1279 def magic_run(self, parameter_s ='',runner=None):
1280 1280 """Run the named file inside IPython as a program.
1281 1281
1282 1282 Usage:\\
1283 1283 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1284 1284
1285 1285 Parameters after the filename are passed as command-line arguments to
1286 1286 the program (put in sys.argv). Then, control returns to IPython's
1287 1287 prompt.
1288 1288
1289 1289 This is similar to running at a system prompt:\\
1290 1290 $ python file args\\
1291 1291 but with the advantage of giving you IPython's tracebacks, and of
1292 1292 loading all variables into your interactive namespace for further use
1293 1293 (unless -p is used, see below).
1294 1294
1295 1295 The file is executed in a namespace initially consisting only of
1296 1296 __name__=='__main__' and sys.argv constructed as indicated. It thus
1297 1297 sees its environment as if it were being run as a stand-alone
1298 1298 program. But after execution, the IPython interactive namespace gets
1299 1299 updated with all variables defined in the program (except for __name__
1300 1300 and sys.argv). This allows for very convenient loading of code for
1301 1301 interactive work, while giving each program a 'clean sheet' to run in.
1302 1302
1303 1303 Options:
1304 1304
1305 1305 -n: __name__ is NOT set to '__main__', but to the running file's name
1306 1306 without extension (as python does under import). This allows running
1307 1307 scripts and reloading the definitions in them without calling code
1308 1308 protected by an ' if __name__ == "__main__" ' clause.
1309 1309
1310 1310 -i: run the file in IPython's namespace instead of an empty one. This
1311 1311 is useful if you are experimenting with code written in a text editor
1312 1312 which depends on variables defined interactively.
1313 1313
1314 1314 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1315 1315 being run. This is particularly useful if IPython is being used to
1316 1316 run unittests, which always exit with a sys.exit() call. In such
1317 1317 cases you are interested in the output of the test results, not in
1318 1318 seeing a traceback of the unittest module.
1319 1319
1320 1320 -t: print timing information at the end of the run. IPython will give
1321 1321 you an estimated CPU time consumption for your script, which under
1322 1322 Unix uses the resource module to avoid the wraparound problems of
1323 1323 time.clock(). Under Unix, an estimate of time spent on system tasks
1324 1324 is also given (for Windows platforms this is reported as 0.0).
1325 1325
1326 1326 If -t is given, an additional -N<N> option can be given, where <N>
1327 1327 must be an integer indicating how many times you want the script to
1328 1328 run. The final timing report will include total and per run results.
1329 1329
1330 1330 For example (testing the script uniq_stable.py):
1331 1331
1332 1332 In [1]: run -t uniq_stable
1333 1333
1334 1334 IPython CPU timings (estimated):\\
1335 1335 User : 0.19597 s.\\
1336 1336 System: 0.0 s.\\
1337 1337
1338 1338 In [2]: run -t -N5 uniq_stable
1339 1339
1340 1340 IPython CPU timings (estimated):\\
1341 1341 Total runs performed: 5\\
1342 1342 Times : Total Per run\\
1343 1343 User : 0.910862 s, 0.1821724 s.\\
1344 1344 System: 0.0 s, 0.0 s.
1345 1345
1346 1346 -d: run your program under the control of pdb, the Python debugger.
1347 1347 This allows you to execute your program step by step, watch variables,
1348 1348 etc. Internally, what IPython does is similar to calling:
1349 1349
1350 1350 pdb.run('execfile("YOURFILENAME")')
1351 1351
1352 1352 with a breakpoint set on line 1 of your file. You can change the line
1353 1353 number for this automatic breakpoint to be <N> by using the -bN option
1354 1354 (where N must be an integer). For example:
1355 1355
1356 1356 %run -d -b40 myscript
1357 1357
1358 1358 will set the first breakpoint at line 40 in myscript.py. Note that
1359 1359 the first breakpoint must be set on a line which actually does
1360 1360 something (not a comment or docstring) for it to stop execution.
1361 1361
1362 1362 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1363 1363 first enter 'c' (without qoutes) to start execution up to the first
1364 1364 breakpoint.
1365 1365
1366 1366 Entering 'help' gives information about the use of the debugger. You
1367 1367 can easily see pdb's full documentation with "import pdb;pdb.help()"
1368 1368 at a prompt.
1369 1369
1370 1370 -p: run program under the control of the Python profiler module (which
1371 1371 prints a detailed report of execution times, function calls, etc).
1372 1372
1373 1373 You can pass other options after -p which affect the behavior of the
1374 1374 profiler itself. See the docs for %prun for details.
1375 1375
1376 1376 In this mode, the program's variables do NOT propagate back to the
1377 1377 IPython interactive namespace (because they remain in the namespace
1378 1378 where the profiler executes them).
1379 1379
1380 1380 Internally this triggers a call to %prun, see its documentation for
1381 1381 details on the options available specifically for profiling."""
1382 1382
1383 1383 # get arguments and set sys.argv for program to be run.
1384 1384 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1385 1385 mode='list',list_all=1)
1386 1386
1387 1387 try:
1388 1388 filename = get_py_filename(arg_lst[0])
1389 1389 except IndexError:
1390 1390 warn('you must provide at least a filename.')
1391 1391 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1392 1392 return
1393 1393 except IOError,msg:
1394 1394 error(msg)
1395 1395 return
1396 1396
1397 1397 # Control the response to exit() calls made by the script being run
1398 1398 exit_ignore = opts.has_key('e')
1399 1399
1400 1400 # Make sure that the running script gets a proper sys.argv as if it
1401 1401 # were run from a system shell.
1402 1402 save_argv = sys.argv # save it for later restoring
1403 1403 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1404 1404
1405 1405 if opts.has_key('i'):
1406 1406 prog_ns = self.shell.user_ns
1407 1407 __name__save = self.shell.user_ns['__name__']
1408 1408 prog_ns['__name__'] = '__main__'
1409 1409 else:
1410 1410 if opts.has_key('n'):
1411 1411 name = os.path.splitext(os.path.basename(filename))[0]
1412 1412 else:
1413 1413 name = '__main__'
1414 1414 prog_ns = {'__name__':name}
1415 1415
1416 1416 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1417 1417 # set the __file__ global in the script's namespace
1418 1418 prog_ns['__file__'] = filename
1419 1419
1420 1420 # pickle fix. See iplib for an explanation. But we need to make sure
1421 1421 # that, if we overwrite __main__, we replace it at the end
1422 1422 if prog_ns['__name__'] == '__main__':
1423 1423 restore_main = sys.modules['__main__']
1424 1424 else:
1425 1425 restore_main = False
1426 1426
1427 1427 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1428 1428
1429 1429 stats = None
1430 1430 try:
1431 1431 if opts.has_key('p'):
1432 1432 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1433 1433 else:
1434 1434 if opts.has_key('d'):
1435 1435 deb = Debugger.Pdb(self.shell.rc.colors)
1436 1436 # reset Breakpoint state, which is moronically kept
1437 1437 # in a class
1438 1438 bdb.Breakpoint.next = 1
1439 1439 bdb.Breakpoint.bplist = {}
1440 1440 bdb.Breakpoint.bpbynumber = [None]
1441 1441 # Set an initial breakpoint to stop execution
1442 1442 maxtries = 10
1443 1443 bp = int(opts.get('b',[1])[0])
1444 1444 checkline = deb.checkline(filename,bp)
1445 1445 if not checkline:
1446 1446 for bp in range(bp+1,bp+maxtries+1):
1447 1447 if deb.checkline(filename,bp):
1448 1448 break
1449 1449 else:
1450 1450 msg = ("\nI failed to find a valid line to set "
1451 1451 "a breakpoint\n"
1452 1452 "after trying up to line: %s.\n"
1453 1453 "Please set a valid breakpoint manually "
1454 1454 "with the -b option." % bp)
1455 1455 error(msg)
1456 1456 return
1457 1457 # if we find a good linenumber, set the breakpoint
1458 1458 deb.do_break('%s:%s' % (filename,bp))
1459 1459 # Start file run
1460 1460 print "NOTE: Enter 'c' at the",
1461 1461 print "ipdb> prompt to start your script."
1462 1462 try:
1463 1463 deb.run('execfile("%s")' % filename,prog_ns)
1464 1464 except:
1465 1465 etype, value, tb = sys.exc_info()
1466 1466 # Skip three frames in the traceback: the %run one,
1467 1467 # one inside bdb.py, and the command-line typed by the
1468 1468 # user (run by exec in pdb itself).
1469 1469 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1470 1470 else:
1471 1471 if runner is None:
1472 1472 runner = self.shell.safe_execfile
1473 1473 if opts.has_key('t'):
1474 1474 try:
1475 1475 nruns = int(opts['N'][0])
1476 1476 if nruns < 1:
1477 1477 error('Number of runs must be >=1')
1478 1478 return
1479 1479 except (KeyError):
1480 1480 nruns = 1
1481 1481 if nruns == 1:
1482 1482 t0 = clock2()
1483 1483 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1484 1484 t1 = clock2()
1485 1485 t_usr = t1[0]-t0[0]
1486 1486 t_sys = t1[1]-t1[1]
1487 1487 print "\nIPython CPU timings (estimated):"
1488 1488 print " User : %10s s." % t_usr
1489 1489 print " System: %10s s." % t_sys
1490 1490 else:
1491 1491 runs = range(nruns)
1492 1492 t0 = clock2()
1493 1493 for nr in runs:
1494 1494 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1495 1495 t1 = clock2()
1496 1496 t_usr = t1[0]-t0[0]
1497 1497 t_sys = t1[1]-t1[1]
1498 1498 print "\nIPython CPU timings (estimated):"
1499 1499 print "Total runs performed:",nruns
1500 1500 print " Times : %10s %10s" % ('Total','Per run')
1501 1501 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1502 1502 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1503 1503
1504 1504 else:
1505 1505 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1506 1506 if opts.has_key('i'):
1507 1507 self.shell.user_ns['__name__'] = __name__save
1508 1508 else:
1509 1509 # update IPython interactive namespace
1510 1510 del prog_ns['__name__']
1511 1511 self.shell.user_ns.update(prog_ns)
1512 1512 finally:
1513 1513 sys.argv = save_argv
1514 1514 if restore_main:
1515 1515 sys.modules['__main__'] = restore_main
1516 1516 return stats
1517 1517
1518 1518 def magic_runlog(self, parameter_s =''):
1519 1519 """Run files as logs.
1520 1520
1521 1521 Usage:\\
1522 1522 %runlog file1 file2 ...
1523 1523
1524 1524 Run the named files (treating them as log files) in sequence inside
1525 1525 the interpreter, and return to the prompt. This is much slower than
1526 1526 %run because each line is executed in a try/except block, but it
1527 1527 allows running files with syntax errors in them.
1528 1528
1529 1529 Normally IPython will guess when a file is one of its own logfiles, so
1530 1530 you can typically use %run even for logs. This shorthand allows you to
1531 1531 force any file to be treated as a log file."""
1532 1532
1533 1533 for f in parameter_s.split():
1534 1534 self.shell.safe_execfile(f,self.shell.user_ns,
1535 1535 self.shell.user_ns,islog=1)
1536 1536
1537 1537 def magic_time(self,parameter_s = ''):
1538 1538 """Time execution of a Python statement or expression.
1539 1539
1540 1540 The CPU and wall clock times are printed, and the value of the
1541 1541 expression (if any) is returned. Note that under Win32, system time
1542 1542 is always reported as 0, since it can not be measured.
1543 1543
1544 1544 This function provides very basic timing functionality. In Python
1545 1545 2.3, the timeit module offers more control and sophistication, but for
1546 1546 now IPython supports Python 2.2, so we can not rely on timeit being
1547 1547 present.
1548 1548
1549 1549 Some examples:
1550 1550
1551 1551 In [1]: time 2**128
1552 1552 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1553 1553 Wall time: 0.00
1554 1554 Out[1]: 340282366920938463463374607431768211456L
1555 1555
1556 1556 In [2]: n = 1000000
1557 1557
1558 1558 In [3]: time sum(range(n))
1559 1559 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1560 1560 Wall time: 1.37
1561 1561 Out[3]: 499999500000L
1562 1562
1563 1563 In [4]: time print 'hello world'
1564 1564 hello world
1565 1565 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1566 1566 Wall time: 0.00
1567 1567 """
1568 1568
1569 1569 # fail immediately if the given expression can't be compiled
1570 1570 try:
1571 1571 mode = 'eval'
1572 1572 code = compile(parameter_s,'<timed eval>',mode)
1573 1573 except SyntaxError:
1574 1574 mode = 'exec'
1575 1575 code = compile(parameter_s,'<timed exec>',mode)
1576 1576 # skew measurement as little as possible
1577 1577 glob = self.shell.user_ns
1578 1578 clk = clock2
1579 1579 wtime = time.time
1580 1580 # time execution
1581 1581 wall_st = wtime()
1582 1582 if mode=='eval':
1583 1583 st = clk()
1584 1584 out = eval(code,glob)
1585 1585 end = clk()
1586 1586 else:
1587 1587 st = clk()
1588 1588 exec code in glob
1589 1589 end = clk()
1590 1590 out = None
1591 1591 wall_end = wtime()
1592 1592 # Compute actual times and report
1593 1593 wall_time = wall_end-wall_st
1594 1594 cpu_user = end[0]-st[0]
1595 1595 cpu_sys = end[1]-st[1]
1596 1596 cpu_tot = cpu_user+cpu_sys
1597 1597 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1598 1598 (cpu_user,cpu_sys,cpu_tot)
1599 1599 print "Wall time: %.2f" % wall_time
1600 1600 return out
1601 1601
1602 1602 def magic_macro(self,parameter_s = ''):
1603 1603 """Define a set of input lines as a macro for future re-execution.
1604 1604
1605 1605 Usage:\\
1606 1606 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1607 1607
1608 1608 This will define a global variable called `name` which is a string
1609 1609 made of joining the slices and lines you specify (n1,n2,... numbers
1610 1610 above) from your input history into a single string. This variable
1611 1611 acts like an automatic function which re-executes those lines as if
1612 1612 you had typed them. You just type 'name' at the prompt and the code
1613 1613 executes.
1614 1614
1615 1615 The notation for indicating number ranges is: n1-n2 means 'use line
1616 1616 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1617 1617 using the lines numbered 5,6 and 7.
1618 1618
1619 1619 Note: as a 'hidden' feature, you can also use traditional python slice
1620 1620 notation, where N:M means numbers N through M-1.
1621 1621
1622 1622 For example, if your history contains (%hist prints it):
1623 1623
1624 1624 44: x=1\\
1625 1625 45: y=3\\
1626 1626 46: z=x+y\\
1627 1627 47: print x\\
1628 1628 48: a=5\\
1629 1629 49: print 'x',x,'y',y\\
1630 1630
1631 1631 you can create a macro with lines 44 through 47 (included) and line 49
1632 1632 called my_macro with:
1633 1633
1634 1634 In [51]: %macro my_macro 44-47 49
1635 1635
1636 1636 Now, typing `my_macro` (without quotes) will re-execute all this code
1637 1637 in one pass.
1638 1638
1639 1639 You don't need to give the line-numbers in order, and any given line
1640 1640 number can appear multiple times. You can assemble macros with any
1641 1641 lines from your input history in any order.
1642 1642
1643 1643 The macro is a simple object which holds its value in an attribute,
1644 1644 but IPython's display system checks for macros and executes them as
1645 1645 code instead of printing them when you type their name.
1646 1646
1647 1647 You can view a macro's contents by explicitly printing it with:
1648 1648
1649 1649 'print macro_name'.
1650 1650
1651 1651 For one-off cases which DON'T contain magic function calls in them you
1652 1652 can obtain similar results by explicitly executing slices from your
1653 1653 input history with:
1654 1654
1655 1655 In [60]: exec In[44:48]+In[49]"""
1656 1656
1657 1657 args = parameter_s.split()
1658 1658 name,ranges = args[0], args[1:]
1659 1659 #print 'rng',ranges # dbg
1660 1660 lines = self.extract_input_slices(ranges)
1661 1661 macro = Macro(lines)
1662 1662 self.shell.user_ns.update({name:macro})
1663 1663 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1664 1664 print 'Macro contents:'
1665 1665 print macro,
1666 1666
1667 1667 def magic_save(self,parameter_s = ''):
1668 1668 """Save a set of lines to a given filename.
1669 1669
1670 1670 Usage:\\
1671 1671 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1672 1672
1673 1673 This function uses the same syntax as %macro for line extraction, but
1674 1674 instead of creating a macro it saves the resulting string to the
1675 1675 filename you specify.
1676 1676
1677 1677 It adds a '.py' extension to the file if you don't do so yourself, and
1678 1678 it asks for confirmation before overwriting existing files."""
1679 1679
1680 1680 args = parameter_s.split()
1681 1681 fname,ranges = args[0], args[1:]
1682 1682 if not fname.endswith('.py'):
1683 1683 fname += '.py'
1684 1684 if os.path.isfile(fname):
1685 1685 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1686 1686 if ans.lower() not in ['y','yes']:
1687 1687 print 'Operation cancelled.'
1688 1688 return
1689 1689 cmds = ''.join(self.extract_input_slices(ranges))
1690 1690 f = file(fname,'w')
1691 1691 f.write(cmds)
1692 1692 f.close()
1693 1693 print 'The following commands were written to file `%s`:' % fname
1694 1694 print cmds
1695 1695
1696 1696 def _edit_macro(self,mname,macro):
1697 1697 """open an editor with the macro data in a file"""
1698 1698 filename = self.shell.mktempfile(macro.value)
1699 1699 self.shell.hooks.editor(filename)
1700 1700
1701 1701 # and make a new macro object, to replace the old one
1702 1702 mfile = open(filename)
1703 1703 mvalue = mfile.read()
1704 1704 mfile.close()
1705 1705 self.shell.user_ns[mname] = Macro(mvalue)
1706 1706
1707 1707 def magic_ed(self,parameter_s=''):
1708 1708 """Alias to %edit."""
1709 1709 return self.magic_edit(parameter_s)
1710 1710
1711 1711 def magic_edit(self,parameter_s='',last_call=['','']):
1712 1712 """Bring up an editor and execute the resulting code.
1713 1713
1714 1714 Usage:
1715 1715 %edit [options] [args]
1716 1716
1717 1717 %edit runs IPython's editor hook. The default version of this hook is
1718 1718 set to call the __IPYTHON__.rc.editor command. This is read from your
1719 1719 environment variable $EDITOR. If this isn't found, it will default to
1720 1720 vi under Linux/Unix and to notepad under Windows. See the end of this
1721 1721 docstring for how to change the editor hook.
1722 1722
1723 1723 You can also set the value of this editor via the command line option
1724 1724 '-editor' or in your ipythonrc file. This is useful if you wish to use
1725 1725 specifically for IPython an editor different from your typical default
1726 1726 (and for Windows users who typically don't set environment variables).
1727 1727
1728 1728 This command allows you to conveniently edit multi-line code right in
1729 1729 your IPython session.
1730 1730
1731 1731 If called without arguments, %edit opens up an empty editor with a
1732 1732 temporary file and will execute the contents of this file when you
1733 1733 close it (don't forget to save it!).
1734 1734
1735 1735
1736 1736 Options:
1737 1737
1738 1738 -p: this will call the editor with the same data as the previous time
1739 1739 it was used, regardless of how long ago (in your current session) it
1740 1740 was.
1741 1741
1742 1742 -x: do not execute the edited code immediately upon exit. This is
1743 1743 mainly useful if you are editing programs which need to be called with
1744 1744 command line arguments, which you can then do using %run.
1745 1745
1746 1746
1747 1747 Arguments:
1748 1748
1749 1749 If arguments are given, the following possibilites exist:
1750 1750
1751 1751 - The arguments are numbers or pairs of colon-separated numbers (like
1752 1752 1 4:8 9). These are interpreted as lines of previous input to be
1753 1753 loaded into the editor. The syntax is the same of the %macro command.
1754 1754
1755 1755 - If the argument doesn't start with a number, it is evaluated as a
1756 1756 variable and its contents loaded into the editor. You can thus edit
1757 1757 any string which contains python code (including the result of
1758 1758 previous edits).
1759 1759
1760 1760 - If the argument is the name of an object (other than a string),
1761 1761 IPython will try to locate the file where it was defined and open the
1762 1762 editor at the point where it is defined. You can use `%edit function`
1763 1763 to load an editor exactly at the point where 'function' is defined,
1764 1764 edit it and have the file be executed automatically.
1765 1765
1766 1766 If the object is a macro (see %macro for details), this opens up your
1767 1767 specified editor with a temporary file containing the macro's data.
1768 1768 Upon exit, the macro is reloaded with the contents of the file.
1769 1769
1770 1770 Note: opening at an exact line is only supported under Unix, and some
1771 1771 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1772 1772 '+NUMBER' parameter necessary for this feature. Good editors like
1773 1773 (X)Emacs, vi, jed, pico and joe all do.
1774 1774
1775 1775 - If the argument is not found as a variable, IPython will look for a
1776 1776 file with that name (adding .py if necessary) and load it into the
1777 1777 editor. It will execute its contents with execfile() when you exit,
1778 1778 loading any code in the file into your interactive namespace.
1779 1779
1780 1780 After executing your code, %edit will return as output the code you
1781 1781 typed in the editor (except when it was an existing file). This way
1782 1782 you can reload the code in further invocations of %edit as a variable,
1783 1783 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1784 1784 the output.
1785 1785
1786 1786 Note that %edit is also available through the alias %ed.
1787 1787
1788 1788 This is an example of creating a simple function inside the editor and
1789 1789 then modifying it. First, start up the editor:
1790 1790
1791 1791 In [1]: ed\\
1792 1792 Editing... done. Executing edited code...\\
1793 1793 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1794 1794
1795 1795 We can then call the function foo():
1796 1796
1797 1797 In [2]: foo()\\
1798 1798 foo() was defined in an editing session
1799 1799
1800 1800 Now we edit foo. IPython automatically loads the editor with the
1801 1801 (temporary) file where foo() was previously defined:
1802 1802
1803 1803 In [3]: ed foo\\
1804 1804 Editing... done. Executing edited code...
1805 1805
1806 1806 And if we call foo() again we get the modified version:
1807 1807
1808 1808 In [4]: foo()\\
1809 1809 foo() has now been changed!
1810 1810
1811 1811 Here is an example of how to edit a code snippet successive
1812 1812 times. First we call the editor:
1813 1813
1814 1814 In [8]: ed\\
1815 1815 Editing... done. Executing edited code...\\
1816 1816 hello\\
1817 1817 Out[8]: "print 'hello'\\n"
1818 1818
1819 1819 Now we call it again with the previous output (stored in _):
1820 1820
1821 1821 In [9]: ed _\\
1822 1822 Editing... done. Executing edited code...\\
1823 1823 hello world\\
1824 1824 Out[9]: "print 'hello world'\\n"
1825 1825
1826 1826 Now we call it with the output #8 (stored in _8, also as Out[8]):
1827 1827
1828 1828 In [10]: ed _8\\
1829 1829 Editing... done. Executing edited code...\\
1830 1830 hello again\\
1831 1831 Out[10]: "print 'hello again'\\n"
1832 1832
1833 1833
1834 1834 Changing the default editor hook:
1835 1835
1836 1836 If you wish to write your own editor hook, you can put it in a
1837 1837 configuration file which you load at startup time. The default hook
1838 1838 is defined in the IPython.hooks module, and you can use that as a
1839 1839 starting example for further modifications. That file also has
1840 1840 general instructions on how to set a new hook for use once you've
1841 1841 defined it."""
1842 1842
1843 1843 # FIXME: This function has become a convoluted mess. It needs a
1844 1844 # ground-up rewrite with clean, simple logic.
1845 1845
1846 1846 def make_filename(arg):
1847 1847 "Make a filename from the given args"
1848 1848 try:
1849 1849 filename = get_py_filename(arg)
1850 1850 except IOError:
1851 1851 if args.endswith('.py'):
1852 1852 filename = arg
1853 1853 else:
1854 1854 filename = None
1855 1855 return filename
1856 1856
1857 1857 # custom exceptions
1858 1858 class DataIsObject(Exception): pass
1859 1859
1860 1860 opts,args = self.parse_options(parameter_s,'px')
1861 1861
1862 1862 # Default line number value
1863 1863 lineno = None
1864 1864 if opts.has_key('p'):
1865 1865 args = '_%s' % last_call[0]
1866 1866 if not self.shell.user_ns.has_key(args):
1867 1867 args = last_call[1]
1868 1868
1869 1869 # use last_call to remember the state of the previous call, but don't
1870 1870 # let it be clobbered by successive '-p' calls.
1871 1871 try:
1872 1872 last_call[0] = self.shell.outputcache.prompt_count
1873 1873 if not opts.has_key('p'):
1874 1874 last_call[1] = parameter_s
1875 1875 except:
1876 1876 pass
1877 1877
1878 1878 # by default this is done with temp files, except when the given
1879 1879 # arg is a filename
1880 1880 use_temp = 1
1881 1881
1882 1882 if re.match(r'\d',args):
1883 1883 # Mode where user specifies ranges of lines, like in %macro.
1884 1884 # This means that you can't edit files whose names begin with
1885 1885 # numbers this way. Tough.
1886 1886 ranges = args.split()
1887 1887 data = ''.join(self.extract_input_slices(ranges))
1888 1888 elif args.endswith('.py'):
1889 1889 filename = make_filename(args)
1890 1890 data = ''
1891 1891 use_temp = 0
1892 1892 elif args:
1893 1893 try:
1894 1894 # Load the parameter given as a variable. If not a string,
1895 1895 # process it as an object instead (below)
1896 1896
1897 1897 #print '*** args',args,'type',type(args) # dbg
1898 1898 data = eval(args,self.shell.user_ns)
1899 1899 if not type(data) in StringTypes:
1900 1900 raise DataIsObject
1901 1901
1902 1902 except (NameError,SyntaxError):
1903 1903 # given argument is not a variable, try as a filename
1904 1904 filename = make_filename(args)
1905 1905 if filename is None:
1906 1906 warn("Argument given (%s) can't be found as a variable "
1907 1907 "or as a filename." % args)
1908 1908 return
1909 1909
1910 1910 data = ''
1911 1911 use_temp = 0
1912 1912 except DataIsObject:
1913 1913
1914 1914 # macros have a special edit function
1915 1915 if isinstance(data,Macro):
1916 1916 self._edit_macro(args,data)
1917 1917 return
1918 1918
1919 1919 # For objects, try to edit the file where they are defined
1920 1920 try:
1921 1921 filename = inspect.getabsfile(data)
1922 1922 datafile = 1
1923 1923 except TypeError:
1924 1924 filename = make_filename(args)
1925 1925 datafile = 1
1926 1926 warn('Could not find file where `%s` is defined.\n'
1927 1927 'Opening a file named `%s`' % (args,filename))
1928 1928 # Now, make sure we can actually read the source (if it was in
1929 1929 # a temp file it's gone by now).
1930 1930 if datafile:
1931 1931 try:
1932 1932 lineno = inspect.getsourcelines(data)[1]
1933 1933 except IOError:
1934 1934 filename = make_filename(args)
1935 1935 if filename is None:
1936 1936 warn('The file `%s` where `%s` was defined cannot '
1937 1937 'be read.' % (filename,data))
1938 1938 return
1939 1939 use_temp = 0
1940 1940 else:
1941 1941 data = ''
1942 1942
1943 1943 if use_temp:
1944 1944 filename = self.shell.mktempfile(data)
1945 1945 print 'IPython will make a temporary file named:',filename
1946 1946
1947 1947 # do actual editing here
1948 1948 print 'Editing...',
1949 1949 sys.stdout.flush()
1950 1950 self.shell.hooks.editor(filename,lineno)
1951 1951 if opts.has_key('x'): # -x prevents actual execution
1952 1952 print
1953 1953 else:
1954 1954 print 'done. Executing edited code...'
1955 1955 self.shell.safe_execfile(filename,self.shell.user_ns)
1956 1956 if use_temp:
1957 1957 try:
1958 1958 return open(filename).read()
1959 1959 except IOError,msg:
1960 1960 if msg.filename == filename:
1961 1961 warn('File not found. Did you forget to save?')
1962 1962 return
1963 1963 else:
1964 1964 self.shell.showtraceback()
1965 1965
1966 1966 def magic_xmode(self,parameter_s = ''):
1967 1967 """Switch modes for the exception handlers.
1968 1968
1969 1969 Valid modes: Plain, Context and Verbose.
1970 1970
1971 1971 If called without arguments, acts as a toggle."""
1972 1972
1973 1973 def xmode_switch_err(name):
1974 1974 warn('Error changing %s exception modes.\n%s' %
1975 1975 (name,sys.exc_info()[1]))
1976 1976
1977 1977 shell = self.shell
1978 1978 new_mode = parameter_s.strip().capitalize()
1979 1979 try:
1980 1980 shell.InteractiveTB.set_mode(mode=new_mode)
1981 1981 print 'Exception reporting mode:',shell.InteractiveTB.mode
1982 1982 except:
1983 1983 xmode_switch_err('user')
1984 1984
1985 1985 # threaded shells use a special handler in sys.excepthook
1986 1986 if shell.isthreaded:
1987 1987 try:
1988 1988 shell.sys_excepthook.set_mode(mode=new_mode)
1989 1989 except:
1990 1990 xmode_switch_err('threaded')
1991 1991
1992 1992 def magic_colors(self,parameter_s = ''):
1993 1993 """Switch color scheme for prompts, info system and exception handlers.
1994 1994
1995 1995 Currently implemented schemes: NoColor, Linux, LightBG.
1996 1996
1997 1997 Color scheme names are not case-sensitive."""
1998 1998
1999 1999 def color_switch_err(name):
2000 2000 warn('Error changing %s color schemes.\n%s' %
2001 2001 (name,sys.exc_info()[1]))
2002 2002
2003 2003
2004 2004 new_scheme = parameter_s.strip()
2005 2005 if not new_scheme:
2006 2006 print 'You must specify a color scheme.'
2007 2007 return
2008 2008 # Under Windows, check for Gary Bishop's readline, which is necessary
2009 2009 # for ANSI coloring
2010 2010 if os.name in ['nt','dos']:
2011 2011 try:
2012 2012 import readline
2013 2013 except ImportError:
2014 2014 has_readline = 0
2015 2015 else:
2016 2016 try:
2017 2017 readline.GetOutputFile()
2018 2018 except AttributeError:
2019 2019 has_readline = 0
2020 2020 else:
2021 2021 has_readline = 1
2022 2022 if not has_readline:
2023 2023 msg = """\
2024 2024 Proper color support under MS Windows requires Gary Bishop's readline library.
2025 2025 You can find it at:
2026 2026 http://sourceforge.net/projects/uncpythontools
2027 2027 Gary's readline needs the ctypes module, from:
2028 2028 http://starship.python.net/crew/theller/ctypes
2029 2029
2030 2030 Defaulting color scheme to 'NoColor'"""
2031 2031 new_scheme = 'NoColor'
2032 2032 warn(msg)
2033 2033 # local shortcut
2034 2034 shell = self.shell
2035 2035
2036 2036 # Set prompt colors
2037 2037 try:
2038 2038 shell.outputcache.set_colors(new_scheme)
2039 2039 except:
2040 2040 color_switch_err('prompt')
2041 2041 else:
2042 2042 shell.rc.colors = \
2043 2043 shell.outputcache.color_table.active_scheme_name
2044 2044 # Set exception colors
2045 2045 try:
2046 2046 shell.InteractiveTB.set_colors(scheme = new_scheme)
2047 2047 shell.SyntaxTB.set_colors(scheme = new_scheme)
2048 2048 except:
2049 2049 color_switch_err('exception')
2050 2050
2051 2051 # threaded shells use a verbose traceback in sys.excepthook
2052 2052 if shell.isthreaded:
2053 2053 try:
2054 2054 shell.sys_excepthook.set_colors(scheme=new_scheme)
2055 2055 except:
2056 2056 color_switch_err('system exception handler')
2057 2057
2058 2058 # Set info (for 'object?') colors
2059 2059 if shell.rc.color_info:
2060 2060 try:
2061 2061 shell.inspector.set_active_scheme(new_scheme)
2062 2062 except:
2063 2063 color_switch_err('object inspector')
2064 2064 else:
2065 2065 shell.inspector.set_active_scheme('NoColor')
2066 2066
2067 2067 def magic_color_info(self,parameter_s = ''):
2068 2068 """Toggle color_info.
2069 2069
2070 2070 The color_info configuration parameter controls whether colors are
2071 2071 used for displaying object details (by things like %psource, %pfile or
2072 2072 the '?' system). This function toggles this value with each call.
2073 2073
2074 2074 Note that unless you have a fairly recent pager (less works better
2075 2075 than more) in your system, using colored object information displays
2076 2076 will not work properly. Test it and see."""
2077 2077
2078 2078 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2079 2079 self.magic_colors(self.shell.rc.colors)
2080 2080 print 'Object introspection functions have now coloring:',
2081 2081 print ['OFF','ON'][self.shell.rc.color_info]
2082 2082
2083 2083 def magic_Pprint(self, parameter_s=''):
2084 2084 """Toggle pretty printing on/off."""
2085 2085
2086 2086 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2087 2087 print 'Pretty printing has been turned', \
2088 2088 ['OFF','ON'][self.shell.outputcache.Pprint]
2089 2089
2090 2090 def magic_exit(self, parameter_s=''):
2091 2091 """Exit IPython, confirming if configured to do so.
2092 2092
2093 2093 You can configure whether IPython asks for confirmation upon exit by
2094 2094 setting the confirm_exit flag in the ipythonrc file."""
2095 2095
2096 2096 self.shell.exit()
2097 2097
2098 2098 def magic_quit(self, parameter_s=''):
2099 2099 """Exit IPython, confirming if configured to do so (like %exit)"""
2100 2100
2101 2101 self.shell.exit()
2102 2102
2103 2103 def magic_Exit(self, parameter_s=''):
2104 2104 """Exit IPython without confirmation."""
2105 2105
2106 2106 self.shell.exit_now = True
2107 2107
2108 2108 def magic_Quit(self, parameter_s=''):
2109 2109 """Exit IPython without confirmation (like %Exit)."""
2110 2110
2111 2111 self.shell.exit_now = True
2112 2112
2113 2113 #......................................................................
2114 2114 # Functions to implement unix shell-type things
2115 2115
2116 2116 def magic_alias(self, parameter_s = ''):
2117 2117 """Define an alias for a system command.
2118 2118
2119 2119 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2120 2120
2121 2121 Then, typing 'alias_name params' will execute the system command 'cmd
2122 2122 params' (from your underlying operating system).
2123 2123
2124 2124 Aliases have lower precedence than magic functions and Python normal
2125 2125 variables, so if 'foo' is both a Python variable and an alias, the
2126 2126 alias can not be executed until 'del foo' removes the Python variable.
2127 2127
2128 2128 You can use the %l specifier in an alias definition to represent the
2129 2129 whole line when the alias is called. For example:
2130 2130
2131 2131 In [2]: alias all echo "Input in brackets: <%l>"\\
2132 2132 In [3]: all hello world\\
2133 2133 Input in brackets: <hello world>
2134 2134
2135 2135 You can also define aliases with parameters using %s specifiers (one
2136 2136 per parameter):
2137 2137
2138 2138 In [1]: alias parts echo first %s second %s\\
2139 2139 In [2]: %parts A B\\
2140 2140 first A second B\\
2141 2141 In [3]: %parts A\\
2142 2142 Incorrect number of arguments: 2 expected.\\
2143 2143 parts is an alias to: 'echo first %s second %s'
2144 2144
2145 2145 Note that %l and %s are mutually exclusive. You can only use one or
2146 2146 the other in your aliases.
2147 2147
2148 2148 Aliases expand Python variables just like system calls using ! or !!
2149 2149 do: all expressions prefixed with '$' get expanded. For details of
2150 2150 the semantic rules, see PEP-215:
2151 2151 http://www.python.org/peps/pep-0215.html. This is the library used by
2152 2152 IPython for variable expansion. If you want to access a true shell
2153 2153 variable, an extra $ is necessary to prevent its expansion by IPython:
2154 2154
2155 2155 In [6]: alias show echo\\
2156 2156 In [7]: PATH='A Python string'\\
2157 2157 In [8]: show $PATH\\
2158 2158 A Python string\\
2159 2159 In [9]: show $$PATH\\
2160 2160 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2161 2161
2162 2162 You can use the alias facility to acess all of $PATH. See the %rehash
2163 2163 and %rehashx functions, which automatically create aliases for the
2164 2164 contents of your $PATH.
2165 2165
2166 2166 If called with no parameters, %alias prints the current alias table."""
2167 2167
2168 2168 par = parameter_s.strip()
2169 2169 if not par:
2170 2170 if self.shell.rc.automagic:
2171 2171 prechar = ''
2172 2172 else:
2173 2173 prechar = self.shell.ESC_MAGIC
2174 2174 #print 'Alias\t\tSystem Command\n'+'-'*30
2175 2175 atab = self.shell.alias_table
2176 2176 aliases = atab.keys()
2177 2177 aliases.sort()
2178 2178 res = []
2179 2179 for alias in aliases:
2180 2180 res.append((alias, atab[alias][1]))
2181 2181 print "Total number of aliases:",len(aliases)
2182 2182 return res
2183 2183 try:
2184 2184 alias,cmd = par.split(None,1)
2185 2185 except:
2186 2186 print OInspect.getdoc(self.magic_alias)
2187 2187 else:
2188 2188 nargs = cmd.count('%s')
2189 2189 if nargs>0 and cmd.find('%l')>=0:
2190 2190 error('The %s and %l specifiers are mutually exclusive '
2191 2191 'in alias definitions.')
2192 2192 else: # all looks OK
2193 2193 self.shell.alias_table[alias] = (nargs,cmd)
2194 2194 self.shell.alias_table_validate(verbose=1)
2195 2195 # end magic_alias
2196 2196
2197 2197 def magic_unalias(self, parameter_s = ''):
2198 2198 """Remove an alias"""
2199 2199
2200 2200 aname = parameter_s.strip()
2201 2201 if aname in self.shell.alias_table:
2202 2202 del self.shell.alias_table[aname]
2203 2203
2204 2204 def magic_rehash(self, parameter_s = ''):
2205 2205 """Update the alias table with all entries in $PATH.
2206 2206
2207 2207 This version does no checks on execute permissions or whether the
2208 2208 contents of $PATH are truly files (instead of directories or something
2209 2209 else). For such a safer (but slower) version, use %rehashx."""
2210 2210
2211 2211 # This function (and rehashx) manipulate the alias_table directly
2212 2212 # rather than calling magic_alias, for speed reasons. A rehash on a
2213 2213 # typical Linux box involves several thousand entries, so efficiency
2214 2214 # here is a top concern.
2215 2215
2216 2216 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2217 2217 alias_table = self.shell.alias_table
2218 2218 for pdir in path:
2219 2219 for ff in os.listdir(pdir):
2220 2220 # each entry in the alias table must be (N,name), where
2221 2221 # N is the number of positional arguments of the alias.
2222 2222 alias_table[ff] = (0,ff)
2223 2223 # Make sure the alias table doesn't contain keywords or builtins
2224 2224 self.shell.alias_table_validate()
2225 2225 # Call again init_auto_alias() so we get 'rm -i' and other modified
2226 2226 # aliases since %rehash will probably clobber them
2227 2227 self.shell.init_auto_alias()
2228 2228
2229 2229 def magic_rehashx(self, parameter_s = ''):
2230 2230 """Update the alias table with all executable files in $PATH.
2231 2231
2232 2232 This version explicitly checks that every entry in $PATH is a file
2233 2233 with execute access (os.X_OK), so it is much slower than %rehash.
2234 2234
2235 2235 Under Windows, it checks executability as a match agains a
2236 2236 '|'-separated string of extensions, stored in the IPython config
2237 2237 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2238 2238
2239 2239 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2240 2240 alias_table = self.shell.alias_table
2241 2241
2242 2242 if os.name == 'posix':
2243 2243 isexec = lambda fname:os.path.isfile(fname) and \
2244 2244 os.access(fname,os.X_OK)
2245 2245 else:
2246 2246
2247 2247 try:
2248 2248 winext = os.environ['pathext'].replace(';','|').replace('.','')
2249 2249 except KeyError:
2250 2250 winext = 'exe|com|bat'
2251 2251
2252 2252 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2253 2253 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2254 2254 savedir = os.getcwd()
2255 2255 try:
2256 2256 # write the whole loop for posix/Windows so we don't have an if in
2257 2257 # the innermost part
2258 2258 if os.name == 'posix':
2259 2259 for pdir in path:
2260 2260 os.chdir(pdir)
2261 2261 for ff in os.listdir(pdir):
2262 2262 if isexec(ff):
2263 2263 # each entry in the alias table must be (N,name),
2264 2264 # where N is the number of positional arguments of the
2265 2265 # alias.
2266 2266 alias_table[ff] = (0,ff)
2267 2267 else:
2268 2268 for pdir in path:
2269 2269 os.chdir(pdir)
2270 2270 for ff in os.listdir(pdir):
2271 2271 if isexec(ff):
2272 2272 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2273 2273 # Make sure the alias table doesn't contain keywords or builtins
2274 2274 self.shell.alias_table_validate()
2275 2275 # Call again init_auto_alias() so we get 'rm -i' and other
2276 2276 # modified aliases since %rehashx will probably clobber them
2277 2277 self.shell.init_auto_alias()
2278 2278 finally:
2279 2279 os.chdir(savedir)
2280 2280
2281 2281 def magic_pwd(self, parameter_s = ''):
2282 2282 """Return the current working directory path."""
2283 2283 return os.getcwd()
2284 2284
2285 2285 def magic_cd(self, parameter_s=''):
2286 2286 """Change the current working directory.
2287 2287
2288 2288 This command automatically maintains an internal list of directories
2289 2289 you visit during your IPython session, in the variable _dh. The
2290 2290 command %dhist shows this history nicely formatted.
2291 2291
2292 2292 Usage:
2293 2293
2294 2294 cd 'dir': changes to directory 'dir'.
2295 2295
2296 2296 cd -: changes to the last visited directory.
2297 2297
2298 2298 cd -<n>: changes to the n-th directory in the directory history.
2299 2299
2300 2300 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2301 2301 (note: cd <bookmark_name> is enough if there is no
2302 2302 directory <bookmark_name>, but a bookmark with the name exists.)
2303 2303
2304 2304 Options:
2305 2305
2306 2306 -q: quiet. Do not print the working directory after the cd command is
2307 2307 executed. By default IPython's cd command does print this directory,
2308 2308 since the default prompts do not display path information.
2309 2309
2310 2310 Note that !cd doesn't work for this purpose because the shell where
2311 2311 !command runs is immediately discarded after executing 'command'."""
2312 2312
2313 2313 parameter_s = parameter_s.strip()
2314 2314 bkms = self.shell.persist.get("bookmarks",{})
2315 2315
2316 2316 numcd = re.match(r'(-)(\d+)$',parameter_s)
2317 2317 # jump in directory history by number
2318 2318 if numcd:
2319 2319 nn = int(numcd.group(2))
2320 2320 try:
2321 2321 ps = self.shell.user_ns['_dh'][nn]
2322 2322 except IndexError:
2323 2323 print 'The requested directory does not exist in history.'
2324 2324 return
2325 2325 else:
2326 2326 opts = {}
2327 2327 else:
2328 2328 #turn all non-space-escaping backslashes to slashes,
2329 2329 # for c:\windows\directory\names\
2330 2330 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2331 2331 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2332 2332 # jump to previous
2333 2333 if ps == '-':
2334 2334 try:
2335 2335 ps = self.shell.user_ns['_dh'][-2]
2336 2336 except IndexError:
2337 2337 print 'No previous directory to change to.'
2338 2338 return
2339 2339 # jump to bookmark
2340 2340 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2341 2341 if bkms.has_key(ps):
2342 2342 target = bkms[ps]
2343 2343 print '(bookmark:%s) -> %s' % (ps,target)
2344 2344 ps = target
2345 2345 else:
2346 2346 if bkms:
2347 2347 error("Bookmark '%s' not found. "
2348 2348 "Use '%%bookmark -l' to see your bookmarks." % ps)
2349 2349 else:
2350 2350 print "Bookmarks not set - use %bookmark <bookmarkname>"
2351 2351 return
2352 2352
2353 2353 # at this point ps should point to the target dir
2354 2354 if ps:
2355 2355 try:
2356 2356 os.chdir(os.path.expanduser(ps))
2357 2357 ttitle = ("IPy:" + (
2358 2358 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2359 2359 platutils.set_term_title(ttitle)
2360 2360 except OSError:
2361 2361 print sys.exc_info()[1]
2362 2362 else:
2363 2363 self.shell.user_ns['_dh'].append(os.getcwd())
2364 2364 else:
2365 2365 os.chdir(self.shell.home_dir)
2366 2366 platutils.set_term_title("IPy:~")
2367 2367 self.shell.user_ns['_dh'].append(os.getcwd())
2368 2368 if not 'q' in opts:
2369 2369 print self.shell.user_ns['_dh'][-1]
2370 2370
2371 2371 def magic_dhist(self, parameter_s=''):
2372 2372 """Print your history of visited directories.
2373 2373
2374 2374 %dhist -> print full history\\
2375 2375 %dhist n -> print last n entries only\\
2376 2376 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2377 2377
2378 2378 This history is automatically maintained by the %cd command, and
2379 2379 always available as the global list variable _dh. You can use %cd -<n>
2380 2380 to go to directory number <n>."""
2381 2381
2382 2382 dh = self.shell.user_ns['_dh']
2383 2383 if parameter_s:
2384 2384 try:
2385 2385 args = map(int,parameter_s.split())
2386 2386 except:
2387 2387 self.arg_err(Magic.magic_dhist)
2388 2388 return
2389 2389 if len(args) == 1:
2390 2390 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2391 2391 elif len(args) == 2:
2392 2392 ini,fin = args
2393 2393 else:
2394 2394 self.arg_err(Magic.magic_dhist)
2395 2395 return
2396 2396 else:
2397 2397 ini,fin = 0,len(dh)
2398 2398 nlprint(dh,
2399 2399 header = 'Directory history (kept in _dh)',
2400 2400 start=ini,stop=fin)
2401 2401
2402 2402 def magic_env(self, parameter_s=''):
2403 2403 """List environment variables."""
2404 2404
2405 2405 return os.environ.data
2406 2406
2407 2407 def magic_pushd(self, parameter_s=''):
2408 2408 """Place the current dir on stack and change directory.
2409 2409
2410 2410 Usage:\\
2411 2411 %pushd ['dirname']
2412 2412
2413 2413 %pushd with no arguments does a %pushd to your home directory.
2414 2414 """
2415 2415 if parameter_s == '': parameter_s = '~'
2416 2416 dir_s = self.shell.dir_stack
2417 2417 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2418 2418 os.path.expanduser(self.shell.dir_stack[0]):
2419 2419 try:
2420 2420 self.magic_cd(parameter_s)
2421 2421 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2422 2422 self.magic_dirs()
2423 2423 except:
2424 2424 print 'Invalid directory'
2425 2425 else:
2426 2426 print 'You are already there!'
2427 2427
2428 2428 def magic_popd(self, parameter_s=''):
2429 2429 """Change to directory popped off the top of the stack.
2430 2430 """
2431 2431 if len (self.shell.dir_stack) > 1:
2432 2432 self.shell.dir_stack.pop(0)
2433 2433 self.magic_cd(self.shell.dir_stack[0])
2434 2434 print self.shell.dir_stack[0]
2435 2435 else:
2436 2436 print "You can't remove the starting directory from the stack:",\
2437 2437 self.shell.dir_stack
2438 2438
2439 2439 def magic_dirs(self, parameter_s=''):
2440 2440 """Return the current directory stack."""
2441 2441
2442 2442 return self.shell.dir_stack[:]
2443 2443
2444 2444 def magic_sc(self, parameter_s=''):
2445 2445 """Shell capture - execute a shell command and capture its output.
2446 2446
2447 2447 DEPRECATED. Suboptimal, retained for backwards compatibility.
2448 2448
2449 2449 You should use the form 'var = !command' instead. Example:
2450 2450
2451 2451 "%sc -l myfiles = ls ~" should now be written as
2452 2452
2453 2453 "myfiles = !ls ~"
2454 2454
2455 2455 myfiles.s, myfiles.l and myfiles.n still apply as documented
2456 2456 below.
2457 2457
2458 2458 --
2459 2459 %sc [options] varname=command
2460 2460
2461 2461 IPython will run the given command using commands.getoutput(), and
2462 2462 will then update the user's interactive namespace with a variable
2463 2463 called varname, containing the value of the call. Your command can
2464 2464 contain shell wildcards, pipes, etc.
2465 2465
2466 2466 The '=' sign in the syntax is mandatory, and the variable name you
2467 2467 supply must follow Python's standard conventions for valid names.
2468 2468
2469 2469 (A special format without variable name exists for internal use)
2470 2470
2471 2471 Options:
2472 2472
2473 2473 -l: list output. Split the output on newlines into a list before
2474 2474 assigning it to the given variable. By default the output is stored
2475 2475 as a single string.
2476 2476
2477 2477 -v: verbose. Print the contents of the variable.
2478 2478
2479 2479 In most cases you should not need to split as a list, because the
2480 2480 returned value is a special type of string which can automatically
2481 2481 provide its contents either as a list (split on newlines) or as a
2482 2482 space-separated string. These are convenient, respectively, either
2483 2483 for sequential processing or to be passed to a shell command.
2484 2484
2485 2485 For example:
2486 2486
2487 2487 # Capture into variable a
2488 2488 In [9]: sc a=ls *py
2489 2489
2490 2490 # a is a string with embedded newlines
2491 2491 In [10]: a
2492 2492 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2493 2493
2494 2494 # which can be seen as a list:
2495 2495 In [11]: a.l
2496 2496 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2497 2497
2498 2498 # or as a whitespace-separated string:
2499 2499 In [12]: a.s
2500 2500 Out[12]: 'setup.py win32_manual_post_install.py'
2501 2501
2502 2502 # a.s is useful to pass as a single command line:
2503 2503 In [13]: !wc -l $a.s
2504 2504 146 setup.py
2505 2505 130 win32_manual_post_install.py
2506 2506 276 total
2507 2507
2508 2508 # while the list form is useful to loop over:
2509 2509 In [14]: for f in a.l:
2510 2510 ....: !wc -l $f
2511 2511 ....:
2512 2512 146 setup.py
2513 2513 130 win32_manual_post_install.py
2514 2514
2515 2515 Similiarly, the lists returned by the -l option are also special, in
2516 2516 the sense that you can equally invoke the .s attribute on them to
2517 2517 automatically get a whitespace-separated string from their contents:
2518 2518
2519 2519 In [1]: sc -l b=ls *py
2520 2520
2521 2521 In [2]: b
2522 2522 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2523 2523
2524 2524 In [3]: b.s
2525 2525 Out[3]: 'setup.py win32_manual_post_install.py'
2526 2526
2527 2527 In summary, both the lists and strings used for ouptut capture have
2528 2528 the following special attributes:
2529 2529
2530 2530 .l (or .list) : value as list.
2531 2531 .n (or .nlstr): value as newline-separated string.
2532 2532 .s (or .spstr): value as space-separated string.
2533 2533 """
2534 2534
2535 2535 opts,args = self.parse_options(parameter_s,'lv')
2536 2536 # Try to get a variable name and command to run
2537 2537 try:
2538 2538 # the variable name must be obtained from the parse_options
2539 2539 # output, which uses shlex.split to strip options out.
2540 2540 var,_ = args.split('=',1)
2541 2541 var = var.strip()
2542 2542 # But the the command has to be extracted from the original input
2543 2543 # parameter_s, not on what parse_options returns, to avoid the
2544 2544 # quote stripping which shlex.split performs on it.
2545 2545 _,cmd = parameter_s.split('=',1)
2546 2546 except ValueError:
2547 2547 var,cmd = '',''
2548 2548 # If all looks ok, proceed
2549 2549 out,err = self.shell.getoutputerror(cmd)
2550 2550 if err:
2551 2551 print >> Term.cerr,err
2552 2552 if opts.has_key('l'):
2553 2553 out = SList(out.split('\n'))
2554 2554 else:
2555 2555 out = LSString(out)
2556 2556 if opts.has_key('v'):
2557 2557 print '%s ==\n%s' % (var,pformat(out))
2558 2558 if var:
2559 2559 self.shell.user_ns.update({var:out})
2560 2560 else:
2561 2561 return out
2562 2562
2563 2563 def magic_sx(self, parameter_s=''):
2564 2564 """Shell execute - run a shell command and capture its output.
2565 2565
2566 2566 %sx command
2567 2567
2568 2568 IPython will run the given command using commands.getoutput(), and
2569 2569 return the result formatted as a list (split on '\\n'). Since the
2570 2570 output is _returned_, it will be stored in ipython's regular output
2571 2571 cache Out[N] and in the '_N' automatic variables.
2572 2572
2573 2573 Notes:
2574 2574
2575 2575 1) If an input line begins with '!!', then %sx is automatically
2576 2576 invoked. That is, while:
2577 2577 !ls
2578 2578 causes ipython to simply issue system('ls'), typing
2579 2579 !!ls
2580 2580 is a shorthand equivalent to:
2581 2581 %sx ls
2582 2582
2583 2583 2) %sx differs from %sc in that %sx automatically splits into a list,
2584 2584 like '%sc -l'. The reason for this is to make it as easy as possible
2585 2585 to process line-oriented shell output via further python commands.
2586 2586 %sc is meant to provide much finer control, but requires more
2587 2587 typing.
2588 2588
2589 2589 3) Just like %sc -l, this is a list with special attributes:
2590 2590
2591 2591 .l (or .list) : value as list.
2592 2592 .n (or .nlstr): value as newline-separated string.
2593 2593 .s (or .spstr): value as whitespace-separated string.
2594 2594
2595 2595 This is very useful when trying to use such lists as arguments to
2596 2596 system commands."""
2597 2597
2598 2598 if parameter_s:
2599 2599 out,err = self.shell.getoutputerror(parameter_s)
2600 2600 if err:
2601 2601 print >> Term.cerr,err
2602 2602 return SList(out.split('\n'))
2603 2603
2604 2604 def magic_bg(self, parameter_s=''):
2605 2605 """Run a job in the background, in a separate thread.
2606 2606
2607 2607 For example,
2608 2608
2609 2609 %bg myfunc(x,y,z=1)
2610 2610
2611 2611 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2612 2612 execution starts, a message will be printed indicating the job
2613 2613 number. If your job number is 5, you can use
2614 2614
2615 2615 myvar = jobs.result(5) or myvar = jobs[5].result
2616 2616
2617 2617 to assign this result to variable 'myvar'.
2618 2618
2619 2619 IPython has a job manager, accessible via the 'jobs' object. You can
2620 2620 type jobs? to get more information about it, and use jobs.<TAB> to see
2621 2621 its attributes. All attributes not starting with an underscore are
2622 2622 meant for public use.
2623 2623
2624 2624 In particular, look at the jobs.new() method, which is used to create
2625 2625 new jobs. This magic %bg function is just a convenience wrapper
2626 2626 around jobs.new(), for expression-based jobs. If you want to create a
2627 2627 new job with an explicit function object and arguments, you must call
2628 2628 jobs.new() directly.
2629 2629
2630 2630 The jobs.new docstring also describes in detail several important
2631 2631 caveats associated with a thread-based model for background job
2632 2632 execution. Type jobs.new? for details.
2633 2633
2634 2634 You can check the status of all jobs with jobs.status().
2635 2635
2636 2636 The jobs variable is set by IPython into the Python builtin namespace.
2637 2637 If you ever declare a variable named 'jobs', you will shadow this
2638 2638 name. You can either delete your global jobs variable to regain
2639 2639 access to the job manager, or make a new name and assign it manually
2640 2640 to the manager (stored in IPython's namespace). For example, to
2641 2641 assign the job manager to the Jobs name, use:
2642 2642
2643 2643 Jobs = __builtins__.jobs"""
2644 2644
2645 2645 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2646 2646
2647 2647 def magic_store(self, parameter_s=''):
2648 2648 """Lightweight persistence for python variables.
2649 2649
2650 2650 Example:
2651 2651
2652 2652 ville@badger[~]|1> A = ['hello',10,'world']\\
2653 2653 ville@badger[~]|2> %store A\\
2654 2654 ville@badger[~]|3> Exit
2655 2655
2656 2656 (IPython session is closed and started again...)
2657 2657
2658 2658 ville@badger:~$ ipython -p pysh\\
2659 2659 ville@badger[~]|1> print A
2660 2660
2661 2661 ['hello', 10, 'world']
2662 2662
2663 2663 Usage:
2664 2664
2665 2665 %store - Show list of all variables and their current values\\
2666 2666 %store <var> - Store the *current* value of the variable to disk\\
2667 2667 %store -d <var> - Remove the variable and its value from storage\\
2668 2668 %store -r - Remove all variables from storage\\
2669 2669 %store foo >a.txt - Store value of foo to new file a.txt\\
2670 2670 %store foo >>a.txt - Append value of foo to file a.txt\\
2671 2671
2672 2672 It should be noted that if you change the value of a variable, you
2673 2673 need to %store it again if you want to persist the new value.
2674 2674
2675 2675 Note also that the variables will need to be pickleable; most basic
2676 2676 python types can be safely %stored.
2677 2677 """
2678 2678
2679 2679 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2680 2680 args = argsl.split(None,1)
2681 2681 ip = self.getapi()
2682 2682 # delete
2683 2683 if opts.has_key('d'):
2684 2684 try:
2685 2685 todel = args[0]
2686 2686 except IndexError:
2687 2687 error('You must provide the variable to forget')
2688 2688 else:
2689 2689 try:
2690 2690 del self.shell.persist['S:' + todel]
2691 2691 except:
2692 2692 error("Can't delete variable '%s'" % todel)
2693 2693 # reset
2694 2694 elif opts.has_key('r'):
2695 2695 for k in self.shell.persist.keys():
2696 2696 if k.startswith('S:'):
2697 2697 del self.shell.persist[k]
2698 2698
2699 2699 # run without arguments -> list variables & values
2700 2700 elif not args:
2701 2701 vars = [v[2:] for v in self.shell.persist.keys()
2702 2702 if v.startswith('S:')]
2703 2703 vars.sort()
2704 2704 if vars:
2705 2705 size = max(map(len,vars))
2706 2706 else:
2707 2707 size = 0
2708 2708
2709 2709 print 'Stored variables and their in-memory values:'
2710 2710 fmt = '%-'+str(size)+'s -> %s'
2711 2711 get = self.shell.user_ns.get
2712 2712 for var in vars:
2713 2713 # print 30 first characters from every var
2714 2714 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2715 2715
2716 2716 # default action - store the variable
2717 2717 else:
2718 2718 # %store foo >file.txt or >>file.txt
2719 2719 if len(args) > 1 and args[1].startswith('>'):
2720 2720 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2721 2721 if args[1].startswith('>>'):
2722 2722 fil = open(fnam,'a')
2723 2723 else:
2724 2724 fil = open(fnam,'w')
2725 2725 obj = ip.ev(args[0])
2726 2726 print "Writing '%s' (%s) to file '%s'." % (args[0],
2727 2727 obj.__class__.__name__, fnam)
2728 2728
2729 2729
2730 2730 if not isinstance (obj,basestring):
2731 2731 pprint(obj,fil)
2732 2732 else:
2733 2733 fil.write(obj)
2734 2734 if not obj.endswith('\n'):
2735 2735 fil.write('\n')
2736 2736
2737 2737 fil.close()
2738 2738 return
2739 2739
2740 2740 # %store foo
2741 2741 obj = self.shell.user_ns[args[0] ]
2742 2742 if isinstance(inspect.getmodule(obj), FakeModule):
2743 2743 print textwrap.dedent("""\
2744 2744 Warning:%s is %s
2745 2745 Proper storage of interactively declared classes (or instances
2746 2746 of those classes) is not possible! Only instances
2747 2747 of classes in real modules on file system can be %%store'd.
2748 2748 """ % (args[0], obj) )
2749 2749 return
2750 2750 pickled = pickle.dumps(obj)
2751 2751 self.shell.persist[ 'S:' + args[0] ] = pickled
2752 2752 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2753 2753
2754 2754 def magic_bookmark(self, parameter_s=''):
2755 2755 """Manage IPython's bookmark system.
2756 2756
2757 2757 %bookmark <name> - set bookmark to current dir
2758 2758 %bookmark <name> <dir> - set bookmark to <dir>
2759 2759 %bookmark -l - list all bookmarks
2760 2760 %bookmark -d <name> - remove bookmark
2761 2761 %bookmark -r - remove all bookmarks
2762 2762
2763 2763 You can later on access a bookmarked folder with:
2764 2764 %cd -b <name>
2765 2765 or simply '%cd <name>' if there is no directory called <name> AND
2766 2766 there is such a bookmark defined.
2767 2767
2768 2768 Your bookmarks persist through IPython sessions, but they are
2769 2769 associated with each profile."""
2770 2770
2771 2771 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2772 2772 if len(args) > 2:
2773 2773 error('You can only give at most two arguments')
2774 2774 return
2775 2775
2776 2776 bkms = self.shell.persist.get('bookmarks',{})
2777 2777
2778 2778 if opts.has_key('d'):
2779 2779 try:
2780 2780 todel = args[0]
2781 2781 except IndexError:
2782 2782 error('You must provide a bookmark to delete')
2783 2783 else:
2784 2784 try:
2785 2785 del bkms[todel]
2786 2786 except:
2787 2787 error("Can't delete bookmark '%s'" % todel)
2788 2788 elif opts.has_key('r'):
2789 2789 bkms = {}
2790 2790 elif opts.has_key('l'):
2791 2791 bks = bkms.keys()
2792 2792 bks.sort()
2793 2793 if bks:
2794 2794 size = max(map(len,bks))
2795 2795 else:
2796 2796 size = 0
2797 2797 fmt = '%-'+str(size)+'s -> %s'
2798 2798 print 'Current bookmarks:'
2799 2799 for bk in bks:
2800 2800 print fmt % (bk,bkms[bk])
2801 2801 else:
2802 2802 if not args:
2803 2803 error("You must specify the bookmark name")
2804 2804 elif len(args)==1:
2805 2805 bkms[args[0]] = os.getcwd()
2806 2806 elif len(args)==2:
2807 2807 bkms[args[0]] = args[1]
2808 2808 self.shell.persist['bookmarks'] = bkms
2809 2809
2810 2810 def magic_pycat(self, parameter_s=''):
2811 2811 """Show a syntax-highlighted file through a pager.
2812 2812
2813 2813 This magic is similar to the cat utility, but it will assume the file
2814 2814 to be Python source and will show it with syntax highlighting. """
2815 2815
2816 2816 filename = get_py_filename(parameter_s)
2817 2817 page(self.shell.pycolorize(file_read(filename)),
2818 2818 screen_lines=self.shell.rc.screen_length)
2819 2819
2820 2820 def magic_cpaste(self, parameter_s=''):
2821 2821 """Allows you to paste & execute a pre-formatted code block from
2822 2822 clipboard.
2823 2823
2824 2824 You must terminate the block with '--' (two minus-signs) alone on the
2825 2825 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2826 2826 is the new sentinel for this operation)
2827 2827
2828 2828 The block is dedented prior to execution to enable execution of
2829 2829 method definitions. The executed block is also assigned to variable
2830 2830 named 'pasted_block' for later editing with '%edit pasted_block'.
2831 2831
2832 2832 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2833 2833 This assigns the pasted block to variable 'foo' as string, without
2834 2834 dedenting or executing it.
2835 2835
2836 2836 Do not be alarmed by garbled output on Windows (it's a readline bug).
2837 2837 Just press enter and type -- (and press enter again) and the block
2838 2838 will be what was just pasted.
2839 2839
2840 2840 IPython statements (magics, shell escapes) are not supported (yet).
2841 2841 """
2842 2842 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2843 2843 par = args.strip()
2844 2844 sentinel = opts.get('s','--')
2845 2845
2846 2846 from IPython import iplib
2847 2847 lines = []
2848 2848 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2849 2849 while 1:
2850 2850 l = iplib.raw_input_original(':')
2851 2851 if l ==sentinel:
2852 2852 break
2853 2853 lines.append(l)
2854 2854 block = "\n".join(lines) + '\n'
2855 2855 #print "block:\n",block
2856 2856 if not par:
2857 2857 b = textwrap.dedent(block)
2858 2858 exec b in self.user_ns
2859 2859 self.user_ns['pasted_block'] = b
2860 2860 else:
2861 2861 self.user_ns[par] = block
2862 2862 print "Block assigned to '%s'" % par
2863
2863 def magic_quickref(self,arg):
2864 import IPython.usage
2865 page(IPython.usage.quick_reference)
2866 del IPython.usage
2864 2867
2865 2868
2866 2869 # end Magic
@@ -1,720 +1,729 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 Requires Python 2.1 or better.
6 6
7 7 This file contains the main make_IPython() starter function.
8 8
9 $Id: ipmaker.py 1088 2006-01-27 17:16:45Z vivainio $"""
9 $Id: ipmaker.py 1092 2006-01-27 23:56:32Z vivainio $"""
10 10
11 11 #*****************************************************************************
12 12 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 13 #
14 14 # Distributed under the terms of the BSD License. The full license is in
15 15 # the file COPYING, distributed as part of this software.
16 16 #*****************************************************************************
17 17
18 18 from IPython import Release
19 19 __author__ = '%s <%s>' % Release.authors['Fernando']
20 20 __license__ = Release.license
21 21 __version__ = Release.version
22 22
23 23 credits._Printer__data = """
24 24 Python: %s
25 25
26 26 IPython: Fernando Perez, Janko Hauser, Nathan Gray, and many users.
27 27 See http://ipython.scipy.org for more information.""" \
28 28 % credits._Printer__data
29 29
30 30 copyright._Printer__data += """
31 31
32 32 Copyright (c) 2001-2004 Fernando Perez, Janko Hauser, Nathan Gray.
33 33 All Rights Reserved."""
34 34
35 35 #****************************************************************************
36 36 # Required modules
37 37
38 38 # From the standard library
39 39 import __main__
40 40 import __builtin__
41 41 import os
42 42 import re
43 43 import sys
44 44 import types
45 45 from pprint import pprint,pformat
46 46
47 47 # Our own
48 48 from IPython import DPyGetOpt
49 49 from IPython.ipstruct import Struct
50 50 from IPython.OutputTrap import OutputTrap
51 51 from IPython.ConfigLoader import ConfigLoader
52 52 from IPython.iplib import InteractiveShell
53 53 from IPython.usage import cmd_line_usage,interactive_usage
54 54 from IPython.genutils import *
55 55
56 56 #-----------------------------------------------------------------------------
57 57 def make_IPython(argv=None,user_ns=None,user_global_ns=None,debug=1,
58 58 rc_override=None,shell_class=InteractiveShell,
59 59 embedded=False,**kw):
60 60 """This is a dump of IPython into a single function.
61 61
62 62 Later it will have to be broken up in a sensible manner.
63 63
64 64 Arguments:
65 65
66 66 - argv: a list similar to sys.argv[1:]. It should NOT contain the desired
67 67 script name, b/c DPyGetOpt strips the first argument only for the real
68 68 sys.argv.
69 69
70 70 - user_ns: a dict to be used as the user's namespace."""
71 71
72 72 #----------------------------------------------------------------------
73 73 # Defaults and initialization
74 74
75 75 # For developer debugging, deactivates crash handler and uses pdb.
76 76 DEVDEBUG = False
77 77
78 78 if argv is None:
79 79 argv = sys.argv
80 80
81 81 # __IP is the main global that lives throughout and represents the whole
82 82 # application. If the user redefines it, all bets are off as to what
83 83 # happens.
84 84
85 85 # __IP is the name of he global which the caller will have accessible as
86 86 # __IP.name. We set its name via the first parameter passed to
87 87 # InteractiveShell:
88 88
89 89 IP = shell_class('__IP',user_ns=user_ns,user_global_ns=user_global_ns,
90 90 embedded=embedded,**kw)
91 91
92 92 # Put 'help' in the user namespace
93 93 from site import _Helper
94 94 IP.user_ns['help'] = _Helper()
95 95
96 96
97 97 if DEVDEBUG:
98 98 # For developer debugging only (global flag)
99 99 from IPython import ultraTB
100 100 sys.excepthook = ultraTB.VerboseTB(call_pdb=1)
101 101
102 102 IP.BANNER_PARTS = ['Python %s\n'
103 103 'Type "copyright", "credits" or "license" '
104 104 'for more information.\n'
105 105 % (sys.version.split('\n')[0],),
106 106 "IPython %s -- An enhanced Interactive Python."
107 107 % (__version__,),
108 108 """? -> Introduction to IPython's features.
109 109 %magic -> Information about IPython's 'magic' % functions.
110 110 help -> Python's own help system.
111 111 object? -> Details about 'object'. ?object also works, ?? prints more.
112 112 """ ]
113 113
114 114 IP.usage = interactive_usage
115 115
116 116 # Platform-dependent suffix and directory names. We use _ipython instead
117 117 # of .ipython under win32 b/c there's software that breaks with .named
118 118 # directories on that platform.
119 119 if os.name == 'posix':
120 120 rc_suffix = ''
121 121 ipdir_def = '.ipython'
122 122 else:
123 123 rc_suffix = '.ini'
124 124 ipdir_def = '_ipython'
125 125
126 126 # default directory for configuration
127 127 ipythondir = os.path.abspath(os.environ.get('IPYTHONDIR',
128 128 os.path.join(IP.home_dir,ipdir_def)))
129 129
130 130 # we need the directory where IPython itself is installed
131 131 import IPython
132 132 IPython_dir = os.path.dirname(IPython.__file__)
133 133 del IPython
134 134
135 135 #-------------------------------------------------------------------------
136 136 # Command line handling
137 137
138 138 # Valid command line options (uses DPyGetOpt syntax, like Perl's
139 139 # GetOpt::Long)
140 140
141 141 # Any key not listed here gets deleted even if in the file (like session
142 142 # or profile). That's deliberate, to maintain the rc namespace clean.
143 143
144 144 # Each set of options appears twice: under _conv only the names are
145 145 # listed, indicating which type they must be converted to when reading the
146 146 # ipythonrc file. And under DPyGetOpt they are listed with the regular
147 147 # DPyGetOpt syntax (=s,=i,:f,etc).
148 148
149 149 # Make sure there's a space before each end of line (they get auto-joined!)
150 150 cmdline_opts = ('autocall=i autoindent! automagic! banner! cache_size|cs=i '
151 151 'c=s classic|cl color_info! colors=s confirm_exit! '
152 152 'debug! deep_reload! editor=s log|l messages! nosep pdb! '
153 153 'pprint! prompt_in1|pi1=s prompt_in2|pi2=s prompt_out|po=s '
154 154 'quick screen_length|sl=i prompts_pad_left=i '
155 155 'logfile|lf=s logplay|lp=s profile|p=s '
156 156 'readline! readline_merge_completions! '
157 157 'readline_omit__names! '
158 158 'rcfile=s separate_in|si=s separate_out|so=s '
159 159 'separate_out2|so2=s xmode=s wildcards_case_sensitive! '
160 160 'magic_docstrings system_verbose! '
161 161 'multi_line_specials! '
162 162 'wxversion=s '
163 163 'autoedit_syntax!')
164 164
165 165 # Options that can *only* appear at the cmd line (not in rcfiles).
166 166
167 167 # The "ignore" option is a kludge so that Emacs buffers don't crash, since
168 168 # the 'C-c !' command in emacs automatically appends a -i option at the end.
169 169 cmdline_only = ('help ignore|i ipythondir=s Version upgrade '
170 170 'gthread! qthread! wthread! pylab! tk!')
171 171
172 172 # Build the actual name list to be used by DPyGetOpt
173 173 opts_names = qw(cmdline_opts) + qw(cmdline_only)
174 174
175 175 # Set sensible command line defaults.
176 176 # This should have everything from cmdline_opts and cmdline_only
177 177 opts_def = Struct(autocall = 1,
178 178 autoedit_syntax = 1,
179 179 autoindent=0,
180 180 automagic = 1,
181 181 banner = 1,
182 182 cache_size = 1000,
183 183 c = '',
184 184 classic = 0,
185 185 colors = 'NoColor',
186 186 color_info = 0,
187 187 confirm_exit = 1,
188 188 debug = 0,
189 189 deep_reload = 0,
190 190 editor = '0',
191 191 help = 0,
192 192 ignore = 0,
193 193 ipythondir = ipythondir,
194 194 log = 0,
195 195 logfile = '',
196 196 logplay = '',
197 197 multi_line_specials = 1,
198 198 messages = 1,
199 199 nosep = 0,
200 200 pdb = 0,
201 201 pprint = 0,
202 202 profile = '',
203 203 prompt_in1 = 'In [\\#]: ',
204 204 prompt_in2 = ' .\\D.: ',
205 205 prompt_out = 'Out[\\#]: ',
206 206 prompts_pad_left = 1,
207 207 quick = 0,
208 208 readline = 1,
209 209 readline_merge_completions = 1,
210 210 readline_omit__names = 0,
211 211 rcfile = 'ipythonrc' + rc_suffix,
212 212 screen_length = 0,
213 213 separate_in = '\n',
214 214 separate_out = '\n',
215 215 separate_out2 = '',
216 216 system_verbose = 0,
217 217 gthread = 0,
218 218 qthread = 0,
219 219 wthread = 0,
220 220 pylab = 0,
221 221 tk = 0,
222 222 upgrade = 0,
223 223 Version = 0,
224 224 xmode = 'Verbose',
225 225 wildcards_case_sensitive = 1,
226 226 wxversion = '0',
227 227 magic_docstrings = 0, # undocumented, for doc generation
228 228 )
229 229
230 230 # Things that will *only* appear in rcfiles (not at the command line).
231 231 # Make sure there's a space before each end of line (they get auto-joined!)
232 232 rcfile_opts = { qwflat: 'include import_mod import_all execfile ',
233 233 qw_lol: 'import_some ',
234 234 # for things with embedded whitespace:
235 235 list_strings:'execute alias readline_parse_and_bind ',
236 236 # Regular strings need no conversion:
237 237 None:'readline_remove_delims ',
238 238 }
239 239 # Default values for these
240 240 rc_def = Struct(include = [],
241 241 import_mod = [],
242 242 import_all = [],
243 243 import_some = [[]],
244 244 execute = [],
245 245 execfile = [],
246 246 alias = [],
247 247 readline_parse_and_bind = [],
248 248 readline_remove_delims = '',
249 249 )
250 250
251 251 # Build the type conversion dictionary from the above tables:
252 252 typeconv = rcfile_opts.copy()
253 253 typeconv.update(optstr2types(cmdline_opts))
254 254
255 255 # FIXME: the None key appears in both, put that back together by hand. Ugly!
256 256 typeconv[None] += ' ' + rcfile_opts[None]
257 257
258 258 # Remove quotes at ends of all strings (used to protect spaces)
259 259 typeconv[unquote_ends] = typeconv[None]
260 260 del typeconv[None]
261 261
262 262 # Build the list we'll use to make all config decisions with defaults:
263 263 opts_all = opts_def.copy()
264 264 opts_all.update(rc_def)
265 265
266 266 # Build conflict resolver for recursive loading of config files:
267 267 # - preserve means the outermost file maintains the value, it is not
268 268 # overwritten if an included file has the same key.
269 269 # - add_flip applies + to the two values, so it better make sense to add
270 270 # those types of keys. But it flips them first so that things loaded
271 271 # deeper in the inclusion chain have lower precedence.
272 272 conflict = {'preserve': ' '.join([ typeconv[int],
273 273 typeconv[unquote_ends] ]),
274 274 'add_flip': ' '.join([ typeconv[qwflat],
275 275 typeconv[qw_lol],
276 276 typeconv[list_strings] ])
277 277 }
278 278
279 279 # Now actually process the command line
280 280 getopt = DPyGetOpt.DPyGetOpt()
281 281 getopt.setIgnoreCase(0)
282 282
283 283 getopt.parseConfiguration(opts_names)
284 284
285 285 try:
286 286 getopt.processArguments(argv)
287 287 except:
288 288 print cmd_line_usage
289 289 warn('\nError in Arguments: ' + `sys.exc_value`)
290 290 sys.exit(1)
291 291
292 292 # convert the options dict to a struct for much lighter syntax later
293 293 opts = Struct(getopt.optionValues)
294 294 args = getopt.freeValues
295 295
296 296 # this is the struct (which has default values at this point) with which
297 297 # we make all decisions:
298 298 opts_all.update(opts)
299 299
300 300 # Options that force an immediate exit
301 301 if opts_all.help:
302 302 page(cmd_line_usage)
303 303 sys.exit()
304 304
305 305 if opts_all.Version:
306 306 print __version__
307 307 sys.exit()
308 308
309 309 if opts_all.magic_docstrings:
310 310 IP.magic_magic('-latex')
311 311 sys.exit()
312 312
313 313 # Create user config directory if it doesn't exist. This must be done
314 314 # *after* getting the cmd line options.
315 315 if not os.path.isdir(opts_all.ipythondir):
316 316 IP.user_setup(opts_all.ipythondir,rc_suffix,'install')
317 317
318 318 # upgrade user config files while preserving a copy of the originals
319 319 if opts_all.upgrade:
320 320 IP.user_setup(opts_all.ipythondir,rc_suffix,'upgrade')
321 321
322 322 # check mutually exclusive options in the *original* command line
323 323 mutex_opts(opts,[qw('log logfile'),qw('rcfile profile'),
324 324 qw('classic profile'),qw('classic rcfile')])
325 325
326 326 #---------------------------------------------------------------------------
327 327 # Log replay
328 328
329 329 # if -logplay, we need to 'become' the other session. That basically means
330 330 # replacing the current command line environment with that of the old
331 331 # session and moving on.
332 332
333 333 # this is needed so that later we know we're in session reload mode, as
334 334 # opts_all will get overwritten:
335 335 load_logplay = 0
336 336
337 337 if opts_all.logplay:
338 338 load_logplay = opts_all.logplay
339 339 opts_debug_save = opts_all.debug
340 340 try:
341 341 logplay = open(opts_all.logplay)
342 342 except IOError:
343 343 if opts_all.debug: IP.InteractiveTB()
344 344 warn('Could not open logplay file '+`opts_all.logplay`)
345 345 # restore state as if nothing had happened and move on, but make
346 346 # sure that later we don't try to actually load the session file
347 347 logplay = None
348 348 load_logplay = 0
349 349 del opts_all.logplay
350 350 else:
351 351 try:
352 352 logplay.readline()
353 353 logplay.readline();
354 354 # this reloads that session's command line
355 355 cmd = logplay.readline()[6:]
356 356 exec cmd
357 357 # restore the true debug flag given so that the process of
358 358 # session loading itself can be monitored.
359 359 opts.debug = opts_debug_save
360 360 # save the logplay flag so later we don't overwrite the log
361 361 opts.logplay = load_logplay
362 362 # now we must update our own structure with defaults
363 363 opts_all.update(opts)
364 364 # now load args
365 365 cmd = logplay.readline()[6:]
366 366 exec cmd
367 367 logplay.close()
368 368 except:
369 369 logplay.close()
370 370 if opts_all.debug: IP.InteractiveTB()
371 371 warn("Logplay file lacking full configuration information.\n"
372 372 "I'll try to read it, but some things may not work.")
373 373
374 374 #-------------------------------------------------------------------------
375 375 # set up output traps: catch all output from files, being run, modules
376 376 # loaded, etc. Then give it to the user in a clean form at the end.
377 377
378 378 msg_out = 'Output messages. '
379 379 msg_err = 'Error messages. '
380 380 msg_sep = '\n'
381 381 msg = Struct(config = OutputTrap('Configuration Loader',msg_out,
382 382 msg_err,msg_sep,debug,
383 383 quiet_out=1),
384 384 user_exec = OutputTrap('User File Execution',msg_out,
385 385 msg_err,msg_sep,debug),
386 386 logplay = OutputTrap('Log Loader',msg_out,
387 387 msg_err,msg_sep,debug),
388 388 summary = ''
389 389 )
390 390
391 391 #-------------------------------------------------------------------------
392 392 # Process user ipythonrc-type configuration files
393 393
394 394 # turn on output trapping and log to msg.config
395 395 # remember that with debug on, trapping is actually disabled
396 396 msg.config.trap_all()
397 397
398 398 # look for rcfile in current or default directory
399 399 try:
400 400 opts_all.rcfile = filefind(opts_all.rcfile,opts_all.ipythondir)
401 401 except IOError:
402 402 if opts_all.debug: IP.InteractiveTB()
403 403 warn('Configuration file %s not found. Ignoring request.'
404 404 % (opts_all.rcfile) )
405 405
406 406 # 'profiles' are a shorthand notation for config filenames
407 407 if opts_all.profile:
408
408 409 try:
409 410 opts_all.rcfile = filefind('ipythonrc-' + opts_all.profile
410 411 + rc_suffix,
411 412 opts_all.ipythondir)
412 413 except IOError:
413 414 if opts_all.debug: IP.InteractiveTB()
414 415 opts.profile = '' # remove profile from options if invalid
415 416 warn('Profile configuration file %s not found. Ignoring request.'
416 417 % (opts_all.profile) )
417 418
418 419
419 420 # load the config file
420 421 rcfiledata = None
421 422 if opts_all.quick:
422 423 print 'Launching IPython in quick mode. No config file read.'
423 424 elif opts_all.classic:
424 425 print 'Launching IPython in classic mode. No config file read.'
425 426 elif opts_all.rcfile:
426 427 try:
427 428 cfg_loader = ConfigLoader(conflict)
428 429 rcfiledata = cfg_loader.load(opts_all.rcfile,typeconv,
429 430 'include',opts_all.ipythondir,
430 431 purge = 1,
431 432 unique = conflict['preserve'])
432 433 except:
433 434 IP.InteractiveTB()
434 435 warn('Problems loading configuration file '+
435 436 `opts_all.rcfile`+
436 437 '\nStarting with default -bare bones- configuration.')
437 438 else:
438 439 warn('No valid configuration file found in either currrent directory\n'+
439 440 'or in the IPython config. directory: '+`opts_all.ipythondir`+
440 441 '\nProceeding with internal defaults.')
441 442
442 443 #------------------------------------------------------------------------
443 444 # Set exception handlers in mode requested by user.
444 445 otrap = OutputTrap(trap_out=1) # trap messages from magic_xmode
445 446 IP.magic_xmode(opts_all.xmode)
446 447 otrap.release_out()
447 448
448 449 #------------------------------------------------------------------------
449 450 # Execute user config
450 451
451 452 # Create a valid config structure with the right precedence order:
452 453 # defaults < rcfile < command line. This needs to be in the instance, so
453 454 # that method calls below that rely on it find it.
454 455 IP.rc = rc_def.copy()
455 456
456 457 # Work with a local alias inside this routine to avoid unnecessary
457 458 # attribute lookups.
458 459 IP_rc = IP.rc
459 460
460 461 IP_rc.update(opts_def)
461 462 if rcfiledata:
462 463 # now we can update
463 464 IP_rc.update(rcfiledata)
464 465 IP_rc.update(opts)
465 466 IP_rc.update(rc_override)
466 467
467 468 # Store the original cmd line for reference:
468 469 IP_rc.opts = opts
469 470 IP_rc.args = args
470 471
471 472 # create a *runtime* Struct like rc for holding parameters which may be
472 473 # created and/or modified by runtime user extensions.
473 474 IP.runtime_rc = Struct()
474 475
475 476 # from this point on, all config should be handled through IP_rc,
476 477 # opts* shouldn't be used anymore.
477 478
478 479 # add personal .ipython dir to sys.path so that users can put things in
479 480 # there for customization
480 481 sys.path.append(IP_rc.ipythondir)
481 482
482 483 sys.path.insert(0, '') # add . to sys.path. Fix from Prabhu Ramachandran
483 484
484 485 # update IP_rc with some special things that need manual
485 486 # tweaks. Basically options which affect other options. I guess this
486 487 # should just be written so that options are fully orthogonal and we
487 488 # wouldn't worry about this stuff!
488 489
489 490 if IP_rc.classic:
490 491 IP_rc.quick = 1
491 492 IP_rc.cache_size = 0
492 493 IP_rc.pprint = 0
493 494 IP_rc.prompt_in1 = '>>> '
494 495 IP_rc.prompt_in2 = '... '
495 496 IP_rc.prompt_out = ''
496 497 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
497 498 IP_rc.colors = 'NoColor'
498 499 IP_rc.xmode = 'Plain'
499 500
500 501 # configure readline
501 502 # Define the history file for saving commands in between sessions
502 503 if IP_rc.profile:
503 504 histfname = 'history-%s' % IP_rc.profile
504 505 else:
505 506 histfname = 'history'
506 507 IP.histfile = os.path.join(opts_all.ipythondir,histfname)
507 508
508 509 # update exception handlers with rc file status
509 510 otrap.trap_out() # I don't want these messages ever.
510 511 IP.magic_xmode(IP_rc.xmode)
511 512 otrap.release_out()
512 513
513 514 # activate logging if requested and not reloading a log
514 515 if IP_rc.logplay:
515 516 IP.magic_logstart(IP_rc.logplay + ' append')
516 517 elif IP_rc.logfile:
517 518 IP.magic_logstart(IP_rc.logfile)
518 519 elif IP_rc.log:
519 520 IP.magic_logstart()
520 521
521 522 # find user editor so that it we don't have to look it up constantly
522 523 if IP_rc.editor.strip()=='0':
523 524 try:
524 525 ed = os.environ['EDITOR']
525 526 except KeyError:
526 527 if os.name == 'posix':
527 528 ed = 'vi' # the only one guaranteed to be there!
528 529 else:
529 530 ed = 'notepad' # same in Windows!
530 531 IP_rc.editor = ed
531 532
532 533 # Keep track of whether this is an embedded instance or not (useful for
533 534 # post-mortems).
534 535 IP_rc.embedded = IP.embedded
535 536
536 537 # Recursive reload
537 538 try:
538 539 from IPython import deep_reload
539 540 if IP_rc.deep_reload:
540 541 __builtin__.reload = deep_reload.reload
541 542 else:
542 543 __builtin__.dreload = deep_reload.reload
543 544 del deep_reload
544 545 except ImportError:
545 546 pass
546 547
547 548 # Save the current state of our namespace so that the interactive shell
548 549 # can later know which variables have been created by us from config files
549 550 # and loading. This way, loading a file (in any way) is treated just like
550 551 # defining things on the command line, and %who works as expected.
551 552
552 553 # DON'T do anything that affects the namespace beyond this point!
553 554 IP.internal_ns.update(__main__.__dict__)
554 555
555 556 #IP.internal_ns.update(locals()) # so our stuff doesn't show up in %who
556 557
557 558 # Now run through the different sections of the users's config
558 559 if IP_rc.debug:
559 560 print 'Trying to execute the following configuration structure:'
560 561 print '(Things listed first are deeper in the inclusion tree and get'
561 562 print 'loaded first).\n'
562 563 pprint(IP_rc.__dict__)
563 564
564 565 # Make it easy to import extensions
565 566 sys.path.append(os.path.join(IPython_dir,"Extensions"))
566 567 for mod in IP_rc.import_mod:
567 568 try:
568 569 exec 'import '+mod in IP.user_ns
569 570 except :
570 571 IP.InteractiveTB()
571 572 import_fail_info(mod)
572 573
573 574 for mod_fn in IP_rc.import_some:
574 575 if mod_fn == []: break
575 576 mod,fn = mod_fn[0],','.join(mod_fn[1:])
576 577 try:
577 578 exec 'from '+mod+' import '+fn in IP.user_ns
578 579 except :
579 580 IP.InteractiveTB()
580 581 import_fail_info(mod,fn)
581 582
582 583 for mod in IP_rc.import_all:
583 584 try:
584 585 exec 'from '+mod+' import *' in IP.user_ns
585 586 except :
586 587 IP.InteractiveTB()
587 588 import_fail_info(mod)
588 589
589 590 for code in IP_rc.execute:
590 591 try:
591 592 exec code in IP.user_ns
592 593 except:
593 594 IP.InteractiveTB()
594 595 warn('Failure executing code: ' + `code`)
595 596
596 597 # Execute the files the user wants in ipythonrc
597 598 for file in IP_rc.execfile:
598 599 try:
599 600 file = filefind(file,sys.path+[IPython_dir])
600 601 except IOError:
601 602 warn(itpl('File $file not found. Skipping it.'))
602 603 else:
603 604 IP.safe_execfile(os.path.expanduser(file),IP.user_ns)
604 605
605 606 # finally, try importing ipy_*_conf for final configuration
606 607 try:
607 608 import ipy_system_conf
608 import ipy_user_conf
609
610 609 except ImportError:
610 warn("Could not import 'ipy_system_conf'")
611 611 pass
612 #IP.InteractiveTB() XXX uncomment in a later release
612 if opts_all.profile:
613 profmodname = 'ipy_profile_' + opts_all.profile
614 try:
615 __import__(profmodname)
616 except ImportError:
617 warn("Could not import '%s'" % profmodname)
618 try:
619 import ipy_user_conf
620 except ImportError:
621 warn('Could not import ipy_user_conf')
613 622
614 623 # release stdout and stderr and save config log into a global summary
615 624 msg.config.release_all()
616 625 if IP_rc.messages:
617 626 msg.summary += msg.config.summary_all()
618 627
619 628 #------------------------------------------------------------------------
620 629 # Setup interactive session
621 630
622 631 # Now we should be fully configured. We can then execute files or load
623 632 # things only needed for interactive use. Then we'll open the shell.
624 633
625 634 # Take a snapshot of the user namespace before opening the shell. That way
626 635 # we'll be able to identify which things were interactively defined and
627 636 # which were defined through config files.
628 637 IP.user_config_ns = IP.user_ns.copy()
629 638
630 639 # Force reading a file as if it were a session log. Slower but safer.
631 640 if load_logplay:
632 641 print 'Replaying log...'
633 642 try:
634 643 if IP_rc.debug:
635 644 logplay_quiet = 0
636 645 else:
637 646 logplay_quiet = 1
638 647
639 648 msg.logplay.trap_all()
640 649 IP.safe_execfile(load_logplay,IP.user_ns,
641 650 islog = 1, quiet = logplay_quiet)
642 651 msg.logplay.release_all()
643 652 if IP_rc.messages:
644 653 msg.summary += msg.logplay.summary_all()
645 654 except:
646 655 warn('Problems replaying logfile %s.' % load_logplay)
647 656 IP.InteractiveTB()
648 657
649 658 # Load remaining files in command line
650 659 msg.user_exec.trap_all()
651 660
652 661 # Do NOT execute files named in the command line as scripts to be loaded
653 662 # by embedded instances. Doing so has the potential for an infinite
654 663 # recursion if there are exceptions thrown in the process.
655 664
656 665 # XXX FIXME: the execution of user files should be moved out to after
657 666 # ipython is fully initialized, just as if they were run via %run at the
658 667 # ipython prompt. This would also give them the benefit of ipython's
659 668 # nice tracebacks.
660 669
661 670 if not embedded and IP_rc.args:
662 671 name_save = IP.user_ns['__name__']
663 672 IP.user_ns['__name__'] = '__main__'
664 673 # Set our own excepthook in case the user code tries to call it
665 674 # directly. This prevents triggering the IPython crash handler.
666 675 old_excepthook,sys.excepthook = sys.excepthook, IP.excepthook
667 676
668 677 save_argv = sys.argv[:] # save it for later restoring
669 678
670 679 sys.argv = args
671 680
672 681 try:
673 682 IP.safe_execfile(args[0], IP.user_ns)
674 683 finally:
675 684 # Reset our crash handler in place
676 685 sys.excepthook = old_excepthook
677 686 sys.argv = save_argv
678 687 IP.user_ns['__name__'] = name_save
679 688
680 689 msg.user_exec.release_all()
681 690 if IP_rc.messages:
682 691 msg.summary += msg.user_exec.summary_all()
683 692
684 693 # since we can't specify a null string on the cmd line, 0 is the equivalent:
685 694 if IP_rc.nosep:
686 695 IP_rc.separate_in = IP_rc.separate_out = IP_rc.separate_out2 = '0'
687 696 if IP_rc.separate_in == '0': IP_rc.separate_in = ''
688 697 if IP_rc.separate_out == '0': IP_rc.separate_out = ''
689 698 if IP_rc.separate_out2 == '0': IP_rc.separate_out2 = ''
690 699 IP_rc.separate_in = IP_rc.separate_in.replace('\\n','\n')
691 700 IP_rc.separate_out = IP_rc.separate_out.replace('\\n','\n')
692 701 IP_rc.separate_out2 = IP_rc.separate_out2.replace('\\n','\n')
693 702
694 703 # Determine how many lines at the bottom of the screen are needed for
695 704 # showing prompts, so we can know wheter long strings are to be printed or
696 705 # paged:
697 706 num_lines_bot = IP_rc.separate_in.count('\n')+1
698 707 IP_rc.screen_length = IP_rc.screen_length - num_lines_bot
699 708
700 709 # configure startup banner
701 710 if IP_rc.c: # regular python doesn't print the banner with -c
702 711 IP_rc.banner = 0
703 712 if IP_rc.banner:
704 713 BANN_P = IP.BANNER_PARTS
705 714 else:
706 715 BANN_P = []
707 716
708 717 if IP_rc.profile: BANN_P.append('IPython profile: %s\n' % IP_rc.profile)
709 718
710 719 # add message log (possibly empty)
711 720 if msg.summary: BANN_P.append(msg.summary)
712 721 # Final banner is a string
713 722 IP.BANNER = '\n'.join(BANN_P)
714 723
715 724 # Finalize the IPython instance. This assumes the rc structure is fully
716 725 # in place.
717 726 IP.post_config_initialization()
718 727
719 728 return IP
720 729 #************************ end of file <ipmaker.py> **************************
@@ -1,599 +1,640 b''
1 1 # -*- coding: utf-8 -*-
2 2 #*****************************************************************************
3 3 # Copyright (C) 2001-2004 Fernando Perez. <fperez@colorado.edu>
4 4 #
5 5 # Distributed under the terms of the BSD License. The full license is in
6 6 # the file COPYING, distributed as part of this software.
7 7 #*****************************************************************************
8 8
9 # $Id: usage.py 998 2006-01-09 06:57:40Z fperez $
9 # $Id: usage.py 1092 2006-01-27 23:56:32Z vivainio $
10 10
11 11 from IPython import Release
12 12 __author__ = '%s <%s>' % Release.authors['Fernando']
13 13 __license__ = Release.license
14 14 __version__ = Release.version
15 15
16 16 __doc__ = """
17 17 IPython -- An enhanced Interactive Python
18 18 =========================================
19 19
20 20 A Python shell with automatic history (input and output), dynamic object
21 21 introspection, easier configuration, command completion, access to the system
22 22 shell and more.
23 23
24 24 IPython can also be embedded in running programs. See EMBEDDING below.
25 25
26 26
27 27 USAGE
28 28 ipython [options] files
29 29
30 30 If invoked with no options, it executes all the files listed in
31 31 sequence and drops you into the interpreter while still acknowledging
32 32 any options you may have set in your ipythonrc file. This behavior is
33 33 different from standard Python, which when called as python -i will
34 34 only execute one file and will ignore your configuration setup.
35 35
36 36 Please note that some of the configuration options are not available at
37 37 the command line, simply because they are not practical here. Look into
38 38 your ipythonrc configuration file for details on those. This file
39 39 typically installed in the $HOME/.ipython directory.
40 40
41 41 For Windows users, $HOME resolves to C:\\Documents and
42 42 Settings\\YourUserName in most instances, and _ipython is used instead
43 43 of .ipython, since some Win32 programs have problems with dotted names
44 44 in directories.
45 45
46 46 In the rest of this text, we will refer to this directory as
47 47 IPYTHONDIR.
48 48
49 49
50 50 SPECIAL THREADING OPTIONS
51 51 The following special options are ONLY valid at the beginning of the
52 52 command line, and not later. This is because they control the initial-
53 53 ization of ipython itself, before the normal option-handling mechanism
54 54 is active.
55 55
56 56 -gthread, -qthread, -wthread, -pylab
57 57
58 58 Only ONE of these can be given, and it can only be given as the
59 59 first option passed to IPython (it will have no effect in any
60 60 other position). They provide threading support for the GTK, QT
61 61 and WXWidgets toolkits, and for the matplotlib library.
62 62
63 63 With any of the first three options, IPython starts running a
64 64 separate thread for the graphical toolkit's operation, so that
65 65 you can open and control graphical elements from within an
66 66 IPython command line, without blocking. All three provide
67 67 essentially the same functionality, respectively for GTK, QT and
68 68 WXWidgets (via their Python interfaces).
69 69
70 70 Note that with -wthread, you can additionally use the -wxversion
71 71 option to request a specific version of wx to be used. This
72 72 requires that you have the 'wxversion' Python module installed,
73 73 which is part of recent wxPython distributions.
74 74
75 75 If -pylab is given, IPython loads special support for the mat-
76 76 plotlib library (http://matplotlib.sourceforge.net), allowing
77 77 interactive usage of any of its backends as defined in the
78 78 user's .matplotlibrc file. It automatically activates GTK, QT
79 79 or WX threading for IPyhton if the choice of matplotlib backend
80 80 requires it. It also modifies the %run command to correctly
81 81 execute (without blocking) any matplotlib-based script which
82 82 calls show() at the end.
83 83
84 84 -tk The -g/q/wthread options, and -pylab (if matplotlib is
85 85 configured to use GTK, QT or WX), will normally block Tk
86 86 graphical interfaces. This means that when GTK, QT or WX
87 87 threading is active, any attempt to open a Tk GUI will result in
88 88 a dead window, and possibly cause the Python interpreter to
89 89 crash. An extra option, -tk, is available to address this
90 90 issue. It can ONLY be given as a SECOND option after any of the
91 91 above (-gthread, -qthread, -wthread or -pylab).
92 92
93 93 If -tk is given, IPython will try to coordinate Tk threading
94 94 with GTK, QT or WX. This is however potentially unreliable, and
95 95 you will have to test on your platform and Python configuration
96 96 to determine whether it works for you. Debian users have
97 97 reported success, apparently due to the fact that Debian builds
98 98 all of Tcl, Tk, Tkinter and Python with pthreads support. Under
99 99 other Linux environments (such as Fedora Core 2/3), this option
100 100 has caused random crashes and lockups of the Python interpreter.
101 101 Under other operating systems (Mac OSX and Windows), you'll need
102 102 to try it to find out, since currently no user reports are
103 103 available.
104 104
105 105 There is unfortunately no way for IPython to determine at run-
106 106 time whether -tk will work reliably or not, so you will need to
107 107 do some experiments before relying on it for regular work.
108 108
109 109 A WARNING ABOUT SIGNALS AND THREADS
110 110
111 111 When any of the thread systems (GTK, QT or WX) are active, either
112 112 directly or via -pylab with a threaded backend, it is impossible to
113 113 interrupt long-running Python code via Ctrl-C. IPython can not pass
114 114 the KeyboardInterrupt exception (or the underlying SIGINT) across
115 115 threads, so any long-running process started from IPython will run to
116 116 completion, or will have to be killed via an external (OS-based)
117 117 mechanism.
118 118
119 119 To the best of my knowledge, this limitation is imposed by the Python
120 120 interpreter itself, and it comes from the difficulty of writing
121 121 portable signal/threaded code. If any user is an expert on this topic
122 122 and can suggest a better solution, I would love to hear about it. In
123 123 the IPython sources, look at the Shell.py module, and in particular at
124 124 the runcode() method.
125 125
126 126 REGULAR OPTIONS
127 127 After the above threading options have been given, regular options can
128 128 follow in any order. All options can be abbreviated to their shortest
129 129 non-ambiguous form and are case-sensitive. One or two dashes can be
130 130 used. Some options have an alternate short form, indicated after a |.
131 131
132 132 Most options can also be set from your ipythonrc configuration file.
133 133 See the provided examples for assistance. Options given on the comman-
134 134 dline override the values set in the ipythonrc file.
135 135
136 136 All options with a [no] prepended can be specified in negated form
137 137 (using -nooption instead of -option) to turn the feature off.
138 138
139 139 -h, --help
140 140 Show summary of options.
141 141
142 142 -pylab This can only be given as the first option passed to IPython (it
143 143 will have no effect in any other position). It adds special sup-
144 144 port for the matplotlib library (http://matplotlib.source-
145 145 forge.net), allowing interactive usage of any of its backends as
146 146 defined in the user’s .matplotlibrc file. It automatically
147 147 activates GTK or WX threading for IPyhton if the choice of mat-
148 148 plotlib backend requires it. It also modifies the @run command
149 149 to correctly execute (without blocking) any matplotlib-based
150 150 script which calls show() at the end.
151 151
152 152 -autocall <val>
153 153 Make IPython automatically call any callable object even if you
154 154 didn't type explicit parentheses. For example, 'str 43' becomes
155 155 'str(43)' automatically. The value can be '0' to disable the
156 156 feature, '1' for 'smart' autocall, where it is not applied if
157 157 there are no more arguments on the line, and '2' for 'full'
158 158 autocall, where all callable objects are automatically called
159 159 (even if no arguments are present). The default is '1'.
160 160
161 161 -[no]autoindent
162 162 Turn automatic indentation on/off.
163 163
164 164 -[no]automagic
165 165 Make magic commands automatic (without needing their first char-
166 166 acter to be %). Type %magic at the IPython prompt for more
167 167 information.
168 168
169 169 -[no]autoedit_syntax
170 170 When a syntax error occurs after editing a file, automatically
171 171 open the file to the trouble causing line for convenient fixing.
172 172
173 173 -[no]banner
174 174 Print the intial information banner (default on).
175 175
176 176 -c <command>
177 177 Execute the given command string, and set sys.argv to [’c’].
178 178 This is similar to the -c option in the normal Python inter-
179 179 preter.
180 180
181 181 -cache_size|cs <n>
182 182 Size of the output cache (maximum number of entries to hold in
183 183 memory). The default is 1000, you can change it permanently in
184 184 your config file. Setting it to 0 completely disables the
185 185 caching system, and the minimum value accepted is 20 (if you
186 186 provide a value less than 20, it is reset to 0 and a warning is
187 187 issued). This limit is defined because otherwise you’ll spend
188 188 more time re-flushing a too small cache than working.
189 189
190 190 -classic|cl
191 191 Gives IPython a similar feel to the classic Python prompt.
192 192
193 193 -colors <scheme>
194 194 Color scheme for prompts and exception reporting. Currently
195 195 implemented: NoColor, Linux, and LightBG.
196 196
197 197 -[no]color_info
198 198 IPython can display information about objects via a set of func-
199 199 tions, and optionally can use colors for this, syntax highlight-
200 200 ing source code and various other elements. However, because
201 201 this information is passed through a pager (like ’less’) and
202 202 many pagers get confused with color codes, this option is off by
203 203 default. You can test it and turn it on permanently in your
204 204 ipythonrc file if it works for you. As a reference, the ’less’
205 205 pager supplied with Mandrake 8.2 works ok, but that in RedHat
206 206 7.2 doesn’t.
207 207
208 208 Test it and turn it on permanently if it works with your system.
209 209 The magic function @color_info allows you to toggle this inter-
210 210 actively for testing.
211 211
212 212 -[no]confirm_exit
213 213 Set to confirm when you try to exit IPython with an EOF (Con-
214 214 trol-D in Unix, Control-Z/Enter in Windows). Note that using the
215 215 magic functions @Exit or @Quit you can force a direct exit,
216 216 bypassing any confirmation.
217 217
218 218 -[no]debug
219 219 Show information about the loading process. Very useful to pin
220 220 down problems with your configuration files or to get details
221 221 about session restores.
222 222
223 223 -[no]deep_reload
224 224 IPython can use the deep_reload module which reloads changes in
225 225 modules recursively (it replaces the reload() function, so you
226 226 don’t need to change anything to use it). deep_reload() forces a
227 227 full reload of modules whose code may have changed, which the
228 228 default reload() function does not.
229 229
230 230 When deep_reload is off, IPython will use the normal reload(),
231 231 but deep_reload will still be available as dreload(). This fea-
232 232 ture is off by default [which means that you have both normal
233 233 reload() and dreload()].
234 234
235 235 -editor <name>
236 236 Which editor to use with the @edit command. By default, IPython
237 237 will honor your EDITOR environment variable (if not set, vi is
238 238 the Unix default and notepad the Windows one). Since this editor
239 239 is invoked on the fly by IPython and is meant for editing small
240 240 code snippets, you may want to use a small, lightweight editor
241 241 here (in case your default EDITOR is something like Emacs).
242 242
243 243 -ipythondir <name>
244 244 The name of your IPython configuration directory IPYTHONDIR.
245 245 This can also be specified through the environment variable
246 246 IPYTHONDIR.
247 247
248 248 -log|l Generate a log file of all input. The file is named
249 249 ipython_log.py in your current directory (which prevents logs
250 250 from multiple IPython sessions from trampling each other). You
251 251 can use this to later restore a session by loading your logfile
252 252 as a file to be executed with option -logplay (see below).
253 253
254 254 -logfile|lf
255 255 Specify the name of your logfile.
256 256
257 257 -logplay|lp
258 258 Replay a previous log. For restoring a session as close as pos-
259 259 sible to the state you left it in, use this option (don’t just
260 260 run the logfile). With -logplay, IPython will try to reconstruct
261 261 the previous working environment in full, not just execute the
262 262 commands in the logfile.
263 263 When a session is restored, logging is automatically turned on
264 264 again with the name of the logfile it was invoked with (it is
265 265 read from the log header). So once you’ve turned logging on for
266 266 a session, you can quit IPython and reload it as many times as
267 267 you want and it will continue to log its history and restore
268 268 from the beginning every time.
269 269
270 270 Caveats: there are limitations in this option. The history vari-
271 271 ables _i*,_* and _dh don’t get restored properly. In the future
272 272 we will try to implement full session saving by writing and
273 273 retrieving a failed because of inherent limitations of Python’s
274 274 Pickle module, so this may have to wait.
275 275
276 276 -[no]messages
277 277 Print messages which IPython collects about its startup process
278 278 (default on).
279 279
280 280 -[no]pdb
281 281 Automatically call the pdb debugger after every uncaught excep-
282 282 tion. If you are used to debugging using pdb, this puts you
283 283 automatically inside of it after any call (either in IPython or
284 284 in code called by it) which triggers an exception which goes
285 285 uncaught.
286 286
287 287 -[no]pprint
288 288 IPython can optionally use the pprint (pretty printer) module
289 289 for displaying results. pprint tends to give a nicer display of
290 290 nested data structures. If you like it, you can turn it on per-
291 291 manently in your config file (default off).
292 292
293 293 -profile|p <name>
294 294 Assume that your config file is ipythonrc-<name> (looks in cur-
295 295 rent dir first, then in IPYTHONDIR). This is a quick way to keep
296 296 and load multiple config files for different tasks, especially
297 297 if you use the include option of config files. You can keep a
298 298 basic IPYTHONDIR/ipythonrc file and then have other ’profiles’
299 299 which include this one and load extra things for particular
300 300 tasks. For example:
301 301
302 302 1) $HOME/.ipython/ipythonrc : load basic things you always want.
303 303 2) $HOME/.ipython/ipythonrc-math : load (1) and basic math-
304 304 related modules.
305 305 3) $HOME/.ipython/ipythonrc-numeric : load (1) and Numeric and
306 306 plotting modules.
307 307
308 308 Since it is possible to create an endless loop by having circu-
309 309 lar file inclusions, IPython will stop if it reaches 15 recur-
310 310 sive inclusions.
311 311
312 312 -prompt_in1|pi1 <string>
313 313 Specify the string used for input prompts. Note that if you are
314 314 using numbered prompts, the number is represented with a ’\#’ in
315 315 the string. Don’t forget to quote strings with spaces embedded
316 316 in them. Default: ’In [\#]:’.
317 317
318 318 Most bash-like escapes can be used to customize IPython’s
319 319 prompts, as well as a few additional ones which are IPython-spe-
320 320 cific. All valid prompt escapes are described in detail in the
321 321 Customization section of the IPython HTML/PDF manual.
322 322
323 323 -prompt_in2|pi2 <string>
324 324 Similar to the previous option, but used for the continuation
325 325 prompts. The special sequence ’\D’ is similar to ’\#’, but with
326 326 all digits replaced dots (so you can have your continuation
327 327 prompt aligned with your input prompt). Default: ’ .\D.:’
328 328 (note three spaces at the start for alignment with ’In [\#]’).
329 329
330 330 -prompt_out|po <string>
331 331 String used for output prompts, also uses numbers like
332 332 prompt_in1. Default: ’Out[\#]:’.
333 333
334 334 -quick Start in bare bones mode (no config file loaded).
335 335
336 336 -rcfile <name>
337 337 Name of your IPython resource configuration file. normally
338 338 IPython loads ipythonrc (from current directory) or
339 339 IPYTHONDIR/ipythonrc. If the loading of your config file fails,
340 340 IPython starts with a bare bones configuration (no modules
341 341 loaded at all).
342 342
343 343 -[no]readline
344 344 Use the readline library, which is needed to support name com-
345 345 pletion and command history, among other things. It is enabled
346 346 by default, but may cause problems for users of X/Emacs in
347 347 Python comint or shell buffers.
348 348
349 349 Note that emacs ’eterm’ buffers (opened with M-x term) support
350 350 IPython’s readline and syntax coloring fine, only ’emacs’ (M-x
351 351 shell and C-c !) buffers do not.
352 352
353 353 -screen_length|sl <n>
354 354 Number of lines of your screen. This is used to control print-
355 355 ing of very long strings. Strings longer than this number of
356 356 lines will be sent through a pager instead of directly printed.
357 357
358 358 The default value for this is 0, which means IPython will auto-
359 359 detect your screen size every time it needs to print certain
360 360 potentially long strings (this doesn’t change the behavior of
361 361 the ’print’ keyword, it’s only triggered internally). If for
362 362 some reason this isn’t working well (it needs curses support),
363 363 specify it yourself. Otherwise don’t change the default.
364 364
365 365 -separate_in|si <string>
366 366 Separator before input prompts. Default ’0.
367 367
368 368 -separate_out|so <string>
369 369 Separator before output prompts. Default: 0 (nothing).
370 370
371 371 -separate_out2|so2 <string>
372 372 Separator after output prompts. Default: 0 (nothing).
373 373
374 374 -nosep Shorthand for ’-separate_in 0 -separate_out 0 -separate_out2 0’.
375 375 Simply removes all input/output separators.
376 376
377 377 -upgrade
378 378 Allows you to upgrade your IPYTHONDIR configuration when you
379 379 install a new version of IPython. Since new versions may
380 380 include new command lines options or example files, this copies
381 381 updated ipythonrc-type files. However, it backs up (with a .old
382 382 extension) all files which it overwrites so that you can merge
383 383 back any custimizations you might have in your personal files.
384 384
385 385 -Version
386 386 Print version information and exit.
387 387
388 388 -wxversion <string>
389 389 Select a specific version of wxPython (used in conjunction with
390 390 -wthread). Requires the wxversion module, part of recent
391 391 wxPython distributions.
392 392
393 393 -xmode <modename>
394 394 Mode for exception reporting. The valid modes are Plain, Con-
395 395 text, and Verbose.
396 396
397 397 - Plain: similar to python’s normal traceback printing.
398 398
399 399 - Context: prints 5 lines of context source code around each
400 400 line in the traceback.
401 401
402 402 - Verbose: similar to Context, but additionally prints the vari-
403 403 ables currently visible where the exception happened (shortening
404 404 their strings if too long). This can potentially be very slow,
405 405 if you happen to have a huge data structure whose string repre-
406 406 sentation is complex to compute. Your computer may appear to
407 407 freeze for a while with cpu usage at 100%. If this occurs, you
408 408 can cancel the traceback with Ctrl-C (maybe hitting it more than
409 409 once).
410 410
411 411
412 412 EMBEDDING
413 413 It is possible to start an IPython instance inside your own Python pro-
414 414 grams. In the documentation example files there are some illustrations
415 415 on how to do this.
416 416
417 417 This feature allows you to evalutate dynamically the state of your
418 418 code, operate with your variables, analyze them, etc. Note however
419 419 that any changes you make to values while in the shell do NOT propagate
420 420 back to the running code, so it is safe to modify your values because
421 421 you won’t break your code in bizarre ways by doing so.
422 422 """
423 423
424 424 cmd_line_usage = __doc__
425 425
426 426 #---------------------------------------------------------------------------
427 427 interactive_usage = """
428 428 IPython -- An enhanced Interactive Python
429 429 =========================================
430 430
431 431 IPython offers a combination of convenient shell features, special commands
432 432 and a history mechanism for both input (command history) and output (results
433 433 caching, similar to Mathematica). It is intended to be a fully compatible
434 434 replacement for the standard Python interpreter, while offering vastly
435 435 improved functionality and flexibility.
436 436
437 437 At your system command line, type 'ipython -help' to see the command line
438 438 options available. This document only describes interactive features.
439 439
440 440 Warning: IPython relies on the existence of a global variable called __IP which
441 441 controls the shell itself. If you redefine __IP to anything, bizarre behavior
442 442 will quickly occur.
443 443
444 444 MAIN FEATURES
445 445
446 446 * Access to the standard Python help. As of Python 2.1, a help system is
447 447 available with access to object docstrings and the Python manuals. Simply
448 448 type 'help' (no quotes) to access it.
449 449
450 450 * Magic commands: type %magic for information on the magic subsystem.
451 451
452 452 * System command aliases, via the %alias command or the ipythonrc config file.
453 453
454 454 * Dynamic object information:
455 455
456 456 Typing ?word or word? prints detailed information about an object. If
457 457 certain strings in the object are too long (docstrings, code, etc.) they get
458 458 snipped in the center for brevity.
459 459
460 460 Typing ??word or word?? gives access to the full information without
461 461 snipping long strings. Long strings are sent to the screen through the less
462 462 pager if longer than the screen, printed otherwise.
463 463
464 464 The ?/?? system gives access to the full source code for any object (if
465 465 available), shows function prototypes and other useful information.
466 466
467 467 If you just want to see an object's docstring, type '%pdoc object' (without
468 468 quotes, and without % if you have automagic on).
469 469
470 470 Both %pdoc and ?/?? give you access to documentation even on things which are
471 471 not explicitely defined. Try for example typing {}.get? or after import os,
472 472 type os.path.abspath??. The magic functions %pdef, %source and %file operate
473 473 similarly.
474 474
475 475 * Completion in the local namespace, by typing TAB at the prompt.
476 476
477 477 At any time, hitting tab will complete any available python commands or
478 478 variable names, and show you a list of the possible completions if there's
479 479 no unambiguous one. It will also complete filenames in the current directory.
480 480
481 481 This feature requires the readline and rlcomplete modules, so it won't work
482 482 if your Python lacks readline support (such as under Windows).
483 483
484 484 * Search previous command history in two ways (also requires readline):
485 485
486 486 - Start typing, and then use Ctrl-p (previous,up) and Ctrl-n (next,down) to
487 487 search through only the history items that match what you've typed so
488 488 far. If you use Ctrl-p/Ctrl-n at a blank prompt, they just behave like
489 489 normal arrow keys.
490 490
491 491 - Hit Ctrl-r: opens a search prompt. Begin typing and the system searches
492 492 your history for lines that match what you've typed so far, completing as
493 493 much as it can.
494 494
495 495 * Persistent command history across sessions (readline required).
496 496
497 497 * Logging of input with the ability to save and restore a working session.
498 498
499 499 * System escape with !. Typing !ls will run 'ls' in the current directory.
500 500
501 501 * The reload command does a 'deep' reload of a module: changes made to the
502 502 module since you imported will actually be available without having to exit.
503 503
504 504 * Verbose and colored exception traceback printouts. See the magic xmode and
505 505 xcolor functions for details (just type %magic).
506 506
507 507 * Input caching system:
508 508
509 509 IPython offers numbered prompts (In/Out) with input and output caching. All
510 510 input is saved and can be retrieved as variables (besides the usual arrow
511 511 key recall).
512 512
513 513 The following GLOBAL variables always exist (so don't overwrite them!):
514 514 _i: stores previous input.
515 515 _ii: next previous.
516 516 _iii: next-next previous.
517 517 _ih : a list of all input _ih[n] is the input from line n.
518 518
519 519 Additionally, global variables named _i<n> are dynamically created (<n>
520 520 being the prompt counter), such that _i<n> == _ih[<n>]
521 521
522 522 For example, what you typed at prompt 14 is available as _i14 and _ih[14].
523 523
524 524 You can create macros which contain multiple input lines from this history,
525 525 for later re-execution, with the %macro function.
526 526
527 527 The history function %hist allows you to see any part of your input history
528 528 by printing a range of the _i variables. Note that inputs which contain
529 529 magic functions (%) appear in the history with a prepended comment. This is
530 530 because they aren't really valid Python code, so you can't exec them.
531 531
532 532 * Output caching system:
533 533
534 534 For output that is returned from actions, a system similar to the input
535 535 cache exists but using _ instead of _i. Only actions that produce a result
536 536 (NOT assignments, for example) are cached. If you are familiar with
537 537 Mathematica, IPython's _ variables behave exactly like Mathematica's %
538 538 variables.
539 539
540 540 The following GLOBAL variables always exist (so don't overwrite them!):
541 541 _ (one underscore): previous output.
542 542 __ (two underscores): next previous.
543 543 ___ (three underscores): next-next previous.
544 544
545 545 Global variables named _<n> are dynamically created (<n> being the prompt
546 546 counter), such that the result of output <n> is always available as _<n>.
547 547
548 548 Finally, a global dictionary named _oh exists with entries for all lines
549 549 which generated output.
550 550
551 551 * Directory history:
552 552
553 553 Your history of visited directories is kept in the global list _dh, and the
554 554 magic %cd command can be used to go to any entry in that list.
555 555
556 556 * Auto-parentheses and auto-quotes (adapted from Nathan Gray's LazyPython)
557 557
558 558 1. Auto-parentheses
559 559 Callable objects (i.e. functions, methods, etc) can be invoked like
560 560 this (notice the commas between the arguments):
561 561 >>> callable_ob arg1, arg2, arg3
562 562 and the input will be translated to this:
563 563 --> callable_ob(arg1, arg2, arg3)
564 564 You can force auto-parentheses by using '/' as the first character
565 565 of a line. For example:
566 566 >>> /globals # becomes 'globals()'
567 567 Note that the '/' MUST be the first character on the line! This
568 568 won't work:
569 569 >>> print /globals # syntax error
570 570
571 571 In most cases the automatic algorithm should work, so you should
572 572 rarely need to explicitly invoke /. One notable exception is if you
573 573 are trying to call a function with a list of tuples as arguments (the
574 574 parenthesis will confuse IPython):
575 575 In [1]: zip (1,2,3),(4,5,6) # won't work
576 576 but this will work:
577 577 In [2]: /zip (1,2,3),(4,5,6)
578 578 ------> zip ((1,2,3),(4,5,6))
579 579 Out[2]= [(1, 4), (2, 5), (3, 6)]
580 580
581 581 IPython tells you that it has altered your command line by
582 582 displaying the new command line preceded by -->. e.g.:
583 583 In [18]: callable list
584 584 -------> callable (list)
585 585
586 586 2. Auto-Quoting
587 587 You can force auto-quoting of a function's arguments by using ',' as
588 588 the first character of a line. For example:
589 589 >>> ,my_function /home/me # becomes my_function("/home/me")
590 590
591 591 If you use ';' instead, the whole argument is quoted as a single
592 592 string (while ',' splits on whitespace):
593 593 >>> ,my_function a b c # becomes my_function("a","b","c")
594 594 >>> ;my_function a b c # becomes my_function("a b c")
595 595
596 596 Note that the ',' MUST be the first character on the line! This
597 597 won't work:
598 598 >>> x = ,my_function /home/me # syntax error
599 599 """
600
601 quick_reference = r"""
602 IPython -- An enhanced Interactive Python - Quick Reference Card
603 ================================================================
604
605 obj?, obj??, ?obj,??obj : Get help, or more help for object
606 ?os.p* : List names in os starting with p
607
608 Example magic:
609
610 %alias d ls -F : 'd' is now an alias for 'ls -F'
611 alias d ls -F : Works if 'alias' not a python name
612 alist = %alias : Get list of aliases to 'alist'
613
614 System commands:
615
616 !cp a.txt b/ : System command escape, calls os.system()
617 cp a.txt b/ : after %rehash, most system commands work without !
618 cp ${f}.txt $bar : Variable expansion in magics and system commands
619 files = ls /usr : Capture sytem command output
620 files.s, files.l, files.n: "a b c", ['a','b','c'], 'a\nb\nc'
621 cd /usr/share : Obvious, also 'cd d:\home\_ipython' works
622
623 History:
624
625 _i, _ii, _iii : Previous, next previous, next next previous input
626 _ih[4], _ih[2:5] : Input history line 4, lines 2-4
627 _, __, ___ : previous, next previous, next next previous output
628 _dh : Directory history
629 _oh : Output history
630 %hist : Command history
631
632 Autocall:
633
634 f 1 2 : f(1,2)
635 ,f 1 2 : f("1","2")
636 ;f 1 2 : f("1 2")
637
638 """
639
640
@@ -1,5096 +1,5100 b''
1 1 2006-01-27 Ville Vainio <vivainio@gmail.com>
2 2
3 3 * ipmaker.py: Give "realistic" sys.argv for scripts (without
4 4 'ipython' at argv[0]) executed through command line.
5 5 NOTE: this DEPRECATES calling ipython with multiple scripts
6 6 ("ipython a.py b.py c.py")
7 7
8 8 * iplib.py, hooks.py: Added configurable input prefilter,
9 9 named 'input_prefilter'. See ext_rescapture.py for example
10 10 usage.
11 11
12 12 * ext_rescapture.py, Magic.py: Better system command output capture
13 13 through 'var = !ls' (deprecates user-visible %sc). Same notation
14 14 applies for magics, 'var = %alias' assigns alias list to var.
15 15
16 16 * ipapi.py: added meta() for accessing extension-usable data store.
17 17
18 18 * iplib.py: added InteractiveShell.getapi(). New magics should be
19 19 written doing self.getapi() instead of using the shell directly.
20 20
21 21 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
22 22 %store foo >> ~/myfoo.txt to store variables to files (in clean
23 23 textual form, not a restorable pickle).
24 24
25 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
26
27 * usage.py, Magic.py: added %quickref
28
25 29 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
26 30
27 31 * IPython/demo.py (Demo.show): Flush stdout after each block, so
28 32 computationally intensive blocks don't appear to stall the demo.
29 33
30 34 2006-01-24 Ville Vainio <vivainio@gmail.com>
31 35
32 36 * iplib.py, hooks.py: 'result_display' hook can return a non-None
33 37 value to manipulate resulting history entry.
34 38
35 39 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
36 40 to instance methods of IPApi class, to make extending an embedded
37 41 IPython feasible. See ext_rehashdir.py for example usage.
38 42
39 43 * Merged 1071-1076 from banches/0.7.1
40 44
41 45
42 46 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
43 47
44 48 * tools/release (daystamp): Fix build tools to use the new
45 49 eggsetup.py script to build lightweight eggs.
46 50
47 51 * Applied changesets 1062 and 1064 before 0.7.1 release.
48 52
49 53 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
50 54 see the raw input history (without conversions like %ls ->
51 55 ipmagic("ls")). After a request from W. Stein, SAGE
52 56 (http://modular.ucsd.edu/sage) developer. This information is
53 57 stored in the input_hist_raw attribute of the IPython instance, so
54 58 developers can access it if needed (it's an InputList instance).
55 59
56 60 * Versionstring = 0.7.2.svn
57 61
58 62 * eggsetup.py: A separate script for constructing eggs, creates
59 63 proper launch scripts even on Windows (an .exe file in
60 64 \python24\scripts).
61 65
62 66 * ipapi.py: launch_new_instance, launch entry point needed for the
63 67 egg.
64 68
65 69 2006-01-23 Ville Vainio <vivainio@gmail.com>
66 70
67 71 * Added %cpaste magic for pasting python code
68 72
69 73 2006-01-22 Ville Vainio <vivainio@gmail.com>
70 74
71 75 * Merge from branches/0.7.1 into trunk, revs 1052-1057
72 76
73 77 * Versionstring = 0.7.2.svn
74 78
75 79 * eggsetup.py: A separate script for constructing eggs, creates
76 80 proper launch scripts even on Windows (an .exe file in
77 81 \python24\scripts).
78 82
79 83 * ipapi.py: launch_new_instance, launch entry point needed for the
80 84 egg.
81 85
82 86 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
83 87
84 88 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
85 89 %pfile foo would print the file for foo even if it was a binary.
86 90 Now, extensions '.so' and '.dll' are skipped.
87 91
88 92 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
89 93 bug, where macros would fail in all threaded modes. I'm not 100%
90 94 sure, so I'm going to put out an rc instead of making a release
91 95 today, and wait for feedback for at least a few days.
92 96
93 97 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
94 98 it...) the handling of pasting external code with autoindent on.
95 99 To get out of a multiline input, the rule will appear for most
96 100 users unchanged: two blank lines or change the indent level
97 101 proposed by IPython. But there is a twist now: you can
98 102 add/subtract only *one or two spaces*. If you add/subtract three
99 103 or more (unless you completely delete the line), IPython will
100 104 accept that line, and you'll need to enter a second one of pure
101 105 whitespace. I know it sounds complicated, but I can't find a
102 106 different solution that covers all the cases, with the right
103 107 heuristics. Hopefully in actual use, nobody will really notice
104 108 all these strange rules and things will 'just work'.
105 109
106 110 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
107 111
108 112 * IPython/iplib.py (interact): catch exceptions which can be
109 113 triggered asynchronously by signal handlers. Thanks to an
110 114 automatic crash report, submitted by Colin Kingsley
111 115 <tercel-AT-gentoo.org>.
112 116
113 117 2006-01-20 Ville Vainio <vivainio@gmail.com>
114 118
115 119 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
116 120 (%rehashdir, very useful, try it out) of how to extend ipython
117 121 with new magics. Also added Extensions dir to pythonpath to make
118 122 importing extensions easy.
119 123
120 124 * %store now complains when trying to store interactively declared
121 125 classes / instances of those classes.
122 126
123 127 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
124 128 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
125 129 if they exist, and ipy_user_conf.py with some defaults is created for
126 130 the user.
127 131
128 132 * Startup rehashing done by the config file, not InterpreterExec.
129 133 This means system commands are available even without selecting the
130 134 pysh profile. It's the sensible default after all.
131 135
132 136 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
133 137
134 138 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
135 139 multiline code with autoindent on working. But I am really not
136 140 sure, so this needs more testing. Will commit a debug-enabled
137 141 version for now, while I test it some more, so that Ville and
138 142 others may also catch any problems. Also made
139 143 self.indent_current_str() a method, to ensure that there's no
140 144 chance of the indent space count and the corresponding string
141 145 falling out of sync. All code needing the string should just call
142 146 the method.
143 147
144 148 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
145 149
146 150 * IPython/Magic.py (magic_edit): fix check for when users don't
147 151 save their output files, the try/except was in the wrong section.
148 152
149 153 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
150 154
151 155 * IPython/Magic.py (magic_run): fix __file__ global missing from
152 156 script's namespace when executed via %run. After a report by
153 157 Vivian.
154 158
155 159 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
156 160 when using python 2.4. The parent constructor changed in 2.4, and
157 161 we need to track it directly (we can't call it, as it messes up
158 162 readline and tab-completion inside our pdb would stop working).
159 163 After a bug report by R. Bernstein <rocky-AT-panix.com>.
160 164
161 165 2006-01-16 Ville Vainio <vivainio@gmail.com>
162 166
163 167 * Ipython/magic.py:Reverted back to old %edit functionality
164 168 that returns file contents on exit.
165 169
166 170 * IPython/path.py: Added Jason Orendorff's "path" module to
167 171 IPython tree, http://www.jorendorff.com/articles/python/path/.
168 172 You can get path objects conveniently through %sc, and !!, e.g.:
169 173 sc files=ls
170 174 for p in files.paths: # or files.p
171 175 print p,p.mtime
172 176
173 177 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
174 178 now work again without considering the exclusion regexp -
175 179 hence, things like ',foo my/path' turn to 'foo("my/path")'
176 180 instead of syntax error.
177 181
178 182
179 183 2006-01-14 Ville Vainio <vivainio@gmail.com>
180 184
181 185 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
182 186 ipapi decorators for python 2.4 users, options() provides access to rc
183 187 data.
184 188
185 189 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
186 190 as path separators (even on Linux ;-). Space character after
187 191 backslash (as yielded by tab completer) is still space;
188 192 "%cd long\ name" works as expected.
189 193
190 194 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
191 195 as "chain of command", with priority. API stays the same,
192 196 TryNext exception raised by a hook function signals that
193 197 current hook failed and next hook should try handling it, as
194 198 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
195 199 requested configurable display hook, which is now implemented.
196 200
197 201 2006-01-13 Ville Vainio <vivainio@gmail.com>
198 202
199 203 * IPython/platutils*.py: platform specific utility functions,
200 204 so far only set_term_title is implemented (change terminal
201 205 label in windowing systems). %cd now changes the title to
202 206 current dir.
203 207
204 208 * IPython/Release.py: Added myself to "authors" list,
205 209 had to create new files.
206 210
207 211 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
208 212 shell escape; not a known bug but had potential to be one in the
209 213 future.
210 214
211 215 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
212 216 extension API for IPython! See the module for usage example. Fix
213 217 OInspect for docstring-less magic functions.
214 218
215 219
216 220 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
217 221
218 222 * IPython/iplib.py (raw_input): temporarily deactivate all
219 223 attempts at allowing pasting of code with autoindent on. It
220 224 introduced bugs (reported by Prabhu) and I can't seem to find a
221 225 robust combination which works in all cases. Will have to revisit
222 226 later.
223 227
224 228 * IPython/genutils.py: remove isspace() function. We've dropped
225 229 2.2 compatibility, so it's OK to use the string method.
226 230
227 231 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
228 232
229 233 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
230 234 matching what NOT to autocall on, to include all python binary
231 235 operators (including things like 'and', 'or', 'is' and 'in').
232 236 Prompted by a bug report on 'foo & bar', but I realized we had
233 237 many more potential bug cases with other operators. The regexp is
234 238 self.re_exclude_auto, it's fairly commented.
235 239
236 240 2006-01-12 Ville Vainio <vivainio@gmail.com>
237 241
238 242 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
239 243 Prettified and hardened string/backslash quoting with ipsystem(),
240 244 ipalias() and ipmagic(). Now even \ characters are passed to
241 245 %magics, !shell escapes and aliases exactly as they are in the
242 246 ipython command line. Should improve backslash experience,
243 247 particularly in Windows (path delimiter for some commands that
244 248 won't understand '/'), but Unix benefits as well (regexps). %cd
245 249 magic still doesn't support backslash path delimiters, though. Also
246 250 deleted all pretense of supporting multiline command strings in
247 251 !system or %magic commands. Thanks to Jerry McRae for suggestions.
248 252
249 253 * doc/build_doc_instructions.txt added. Documentation on how to
250 254 use doc/update_manual.py, added yesterday. Both files contributed
251 255 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
252 256 doc/*.sh for deprecation at a later date.
253 257
254 258 * /ipython.py Added ipython.py to root directory for
255 259 zero-installation (tar xzvf ipython.tgz; cd ipython; python
256 260 ipython.py) and development convenience (no need to kee doing
257 261 "setup.py install" between changes).
258 262
259 263 * Made ! and !! shell escapes work (again) in multiline expressions:
260 264 if 1:
261 265 !ls
262 266 !!ls
263 267
264 268 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
265 269
266 270 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
267 271 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
268 272 module in case-insensitive installation. Was causing crashes
269 273 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
270 274
271 275 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
272 276 <marienz-AT-gentoo.org>, closes
273 277 http://www.scipy.net/roundup/ipython/issue51.
274 278
275 279 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
276 280
277 281 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
278 282 problem of excessive CPU usage under *nix and keyboard lag under
279 283 win32.
280 284
281 285 2006-01-10 *** Released version 0.7.0
282 286
283 287 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
284 288
285 289 * IPython/Release.py (revision): tag version number to 0.7.0,
286 290 ready for release.
287 291
288 292 * IPython/Magic.py (magic_edit): Add print statement to %edit so
289 293 it informs the user of the name of the temp. file used. This can
290 294 help if you decide later to reuse that same file, so you know
291 295 where to copy the info from.
292 296
293 297 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
294 298
295 299 * setup_bdist_egg.py: little script to build an egg. Added
296 300 support in the release tools as well.
297 301
298 302 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
299 303
300 304 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
301 305 version selection (new -wxversion command line and ipythonrc
302 306 parameter). Patch contributed by Arnd Baecker
303 307 <arnd.baecker-AT-web.de>.
304 308
305 309 * IPython/iplib.py (embed_mainloop): fix tab-completion in
306 310 embedded instances, for variables defined at the interactive
307 311 prompt of the embedded ipython. Reported by Arnd.
308 312
309 313 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
310 314 it can be used as a (stateful) toggle, or with a direct parameter.
311 315
312 316 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
313 317 could be triggered in certain cases and cause the traceback
314 318 printer not to work.
315 319
316 320 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
317 321
318 322 * IPython/iplib.py (_should_recompile): Small fix, closes
319 323 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
320 324
321 325 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
322 326
323 327 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
324 328 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
325 329 Moad for help with tracking it down.
326 330
327 331 * IPython/iplib.py (handle_auto): fix autocall handling for
328 332 objects which support BOTH __getitem__ and __call__ (so that f [x]
329 333 is left alone, instead of becoming f([x]) automatically).
330 334
331 335 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
332 336 Ville's patch.
333 337
334 338 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
335 339
336 340 * IPython/iplib.py (handle_auto): changed autocall semantics to
337 341 include 'smart' mode, where the autocall transformation is NOT
338 342 applied if there are no arguments on the line. This allows you to
339 343 just type 'foo' if foo is a callable to see its internal form,
340 344 instead of having it called with no arguments (typically a
341 345 mistake). The old 'full' autocall still exists: for that, you
342 346 need to set the 'autocall' parameter to 2 in your ipythonrc file.
343 347
344 348 * IPython/completer.py (Completer.attr_matches): add
345 349 tab-completion support for Enthoughts' traits. After a report by
346 350 Arnd and a patch by Prabhu.
347 351
348 352 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
349 353
350 354 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
351 355 Schmolck's patch to fix inspect.getinnerframes().
352 356
353 357 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
354 358 for embedded instances, regarding handling of namespaces and items
355 359 added to the __builtin__ one. Multiple embedded instances and
356 360 recursive embeddings should work better now (though I'm not sure
357 361 I've got all the corner cases fixed, that code is a bit of a brain
358 362 twister).
359 363
360 364 * IPython/Magic.py (magic_edit): added support to edit in-memory
361 365 macros (automatically creates the necessary temp files). %edit
362 366 also doesn't return the file contents anymore, it's just noise.
363 367
364 368 * IPython/completer.py (Completer.attr_matches): revert change to
365 369 complete only on attributes listed in __all__. I realized it
366 370 cripples the tab-completion system as a tool for exploring the
367 371 internals of unknown libraries (it renders any non-__all__
368 372 attribute off-limits). I got bit by this when trying to see
369 373 something inside the dis module.
370 374
371 375 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
372 376
373 377 * IPython/iplib.py (InteractiveShell.__init__): add .meta
374 378 namespace for users and extension writers to hold data in. This
375 379 follows the discussion in
376 380 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
377 381
378 382 * IPython/completer.py (IPCompleter.complete): small patch to help
379 383 tab-completion under Emacs, after a suggestion by John Barnard
380 384 <barnarj-AT-ccf.org>.
381 385
382 386 * IPython/Magic.py (Magic.extract_input_slices): added support for
383 387 the slice notation in magics to use N-M to represent numbers N...M
384 388 (closed endpoints). This is used by %macro and %save.
385 389
386 390 * IPython/completer.py (Completer.attr_matches): for modules which
387 391 define __all__, complete only on those. After a patch by Jeffrey
388 392 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
389 393 speed up this routine.
390 394
391 395 * IPython/Logger.py (Logger.log): fix a history handling bug. I
392 396 don't know if this is the end of it, but the behavior now is
393 397 certainly much more correct. Note that coupled with macros,
394 398 slightly surprising (at first) behavior may occur: a macro will in
395 399 general expand to multiple lines of input, so upon exiting, the
396 400 in/out counters will both be bumped by the corresponding amount
397 401 (as if the macro's contents had been typed interactively). Typing
398 402 %hist will reveal the intermediate (silently processed) lines.
399 403
400 404 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
401 405 pickle to fail (%run was overwriting __main__ and not restoring
402 406 it, but pickle relies on __main__ to operate).
403 407
404 408 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
405 409 using properties, but forgot to make the main InteractiveShell
406 410 class a new-style class. Properties fail silently, and
407 411 misteriously, with old-style class (getters work, but
408 412 setters don't do anything).
409 413
410 414 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
411 415
412 416 * IPython/Magic.py (magic_history): fix history reporting bug (I
413 417 know some nasties are still there, I just can't seem to find a
414 418 reproducible test case to track them down; the input history is
415 419 falling out of sync...)
416 420
417 421 * IPython/iplib.py (handle_shell_escape): fix bug where both
418 422 aliases and system accesses where broken for indented code (such
419 423 as loops).
420 424
421 425 * IPython/genutils.py (shell): fix small but critical bug for
422 426 win32 system access.
423 427
424 428 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
425 429
426 430 * IPython/iplib.py (showtraceback): remove use of the
427 431 sys.last_{type/value/traceback} structures, which are non
428 432 thread-safe.
429 433 (_prefilter): change control flow to ensure that we NEVER
430 434 introspect objects when autocall is off. This will guarantee that
431 435 having an input line of the form 'x.y', where access to attribute
432 436 'y' has side effects, doesn't trigger the side effect TWICE. It
433 437 is important to note that, with autocall on, these side effects
434 438 can still happen.
435 439 (ipsystem): new builtin, to complete the ip{magic/alias/system}
436 440 trio. IPython offers these three kinds of special calls which are
437 441 not python code, and it's a good thing to have their call method
438 442 be accessible as pure python functions (not just special syntax at
439 443 the command line). It gives us a better internal implementation
440 444 structure, as well as exposing these for user scripting more
441 445 cleanly.
442 446
443 447 * IPython/macro.py (Macro.__init__): moved macros to a standalone
444 448 file. Now that they'll be more likely to be used with the
445 449 persistance system (%store), I want to make sure their module path
446 450 doesn't change in the future, so that we don't break things for
447 451 users' persisted data.
448 452
449 453 * IPython/iplib.py (autoindent_update): move indentation
450 454 management into the _text_ processing loop, not the keyboard
451 455 interactive one. This is necessary to correctly process non-typed
452 456 multiline input (such as macros).
453 457
454 458 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
455 459 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
456 460 which was producing problems in the resulting manual.
457 461 (magic_whos): improve reporting of instances (show their class,
458 462 instead of simply printing 'instance' which isn't terribly
459 463 informative).
460 464
461 465 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
462 466 (minor mods) to support network shares under win32.
463 467
464 468 * IPython/winconsole.py (get_console_size): add new winconsole
465 469 module and fixes to page_dumb() to improve its behavior under
466 470 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
467 471
468 472 * IPython/Magic.py (Macro): simplified Macro class to just
469 473 subclass list. We've had only 2.2 compatibility for a very long
470 474 time, yet I was still avoiding subclassing the builtin types. No
471 475 more (I'm also starting to use properties, though I won't shift to
472 476 2.3-specific features quite yet).
473 477 (magic_store): added Ville's patch for lightweight variable
474 478 persistence, after a request on the user list by Matt Wilkie
475 479 <maphew-AT-gmail.com>. The new %store magic's docstring has full
476 480 details.
477 481
478 482 * IPython/iplib.py (InteractiveShell.post_config_initialization):
479 483 changed the default logfile name from 'ipython.log' to
480 484 'ipython_log.py'. These logs are real python files, and now that
481 485 we have much better multiline support, people are more likely to
482 486 want to use them as such. Might as well name them correctly.
483 487
484 488 * IPython/Magic.py: substantial cleanup. While we can't stop
485 489 using magics as mixins, due to the existing customizations 'out
486 490 there' which rely on the mixin naming conventions, at least I
487 491 cleaned out all cross-class name usage. So once we are OK with
488 492 breaking compatibility, the two systems can be separated.
489 493
490 494 * IPython/Logger.py: major cleanup. This one is NOT a mixin
491 495 anymore, and the class is a fair bit less hideous as well. New
492 496 features were also introduced: timestamping of input, and logging
493 497 of output results. These are user-visible with the -t and -o
494 498 options to %logstart. Closes
495 499 http://www.scipy.net/roundup/ipython/issue11 and a request by
496 500 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
497 501
498 502 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
499 503
500 504 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
501 505 better hadnle backslashes in paths. See the thread 'More Windows
502 506 questions part 2 - \/ characters revisited' on the iypthon user
503 507 list:
504 508 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
505 509
506 510 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
507 511
508 512 (InteractiveShell.__init__): change threaded shells to not use the
509 513 ipython crash handler. This was causing more problems than not,
510 514 as exceptions in the main thread (GUI code, typically) would
511 515 always show up as a 'crash', when they really weren't.
512 516
513 517 The colors and exception mode commands (%colors/%xmode) have been
514 518 synchronized to also take this into account, so users can get
515 519 verbose exceptions for their threaded code as well. I also added
516 520 support for activating pdb inside this exception handler as well,
517 521 so now GUI authors can use IPython's enhanced pdb at runtime.
518 522
519 523 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
520 524 true by default, and add it to the shipped ipythonrc file. Since
521 525 this asks the user before proceeding, I think it's OK to make it
522 526 true by default.
523 527
524 528 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
525 529 of the previous special-casing of input in the eval loop. I think
526 530 this is cleaner, as they really are commands and shouldn't have
527 531 a special role in the middle of the core code.
528 532
529 533 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
530 534
531 535 * IPython/iplib.py (edit_syntax_error): added support for
532 536 automatically reopening the editor if the file had a syntax error
533 537 in it. Thanks to scottt who provided the patch at:
534 538 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
535 539 version committed).
536 540
537 541 * IPython/iplib.py (handle_normal): add suport for multi-line
538 542 input with emtpy lines. This fixes
539 543 http://www.scipy.net/roundup/ipython/issue43 and a similar
540 544 discussion on the user list.
541 545
542 546 WARNING: a behavior change is necessarily introduced to support
543 547 blank lines: now a single blank line with whitespace does NOT
544 548 break the input loop, which means that when autoindent is on, by
545 549 default hitting return on the next (indented) line does NOT exit.
546 550
547 551 Instead, to exit a multiline input you can either have:
548 552
549 553 - TWO whitespace lines (just hit return again), or
550 554 - a single whitespace line of a different length than provided
551 555 by the autoindent (add or remove a space).
552 556
553 557 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
554 558 module to better organize all readline-related functionality.
555 559 I've deleted FlexCompleter and put all completion clases here.
556 560
557 561 * IPython/iplib.py (raw_input): improve indentation management.
558 562 It is now possible to paste indented code with autoindent on, and
559 563 the code is interpreted correctly (though it still looks bad on
560 564 screen, due to the line-oriented nature of ipython).
561 565 (MagicCompleter.complete): change behavior so that a TAB key on an
562 566 otherwise empty line actually inserts a tab, instead of completing
563 567 on the entire global namespace. This makes it easier to use the
564 568 TAB key for indentation. After a request by Hans Meine
565 569 <hans_meine-AT-gmx.net>
566 570 (_prefilter): add support so that typing plain 'exit' or 'quit'
567 571 does a sensible thing. Originally I tried to deviate as little as
568 572 possible from the default python behavior, but even that one may
569 573 change in this direction (thread on python-dev to that effect).
570 574 Regardless, ipython should do the right thing even if CPython's
571 575 '>>>' prompt doesn't.
572 576 (InteractiveShell): removed subclassing code.InteractiveConsole
573 577 class. By now we'd overridden just about all of its methods: I've
574 578 copied the remaining two over, and now ipython is a standalone
575 579 class. This will provide a clearer picture for the chainsaw
576 580 branch refactoring.
577 581
578 582 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
579 583
580 584 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
581 585 failures for objects which break when dir() is called on them.
582 586
583 587 * IPython/FlexCompleter.py (Completer.__init__): Added support for
584 588 distinct local and global namespaces in the completer API. This
585 589 change allows us top properly handle completion with distinct
586 590 scopes, including in embedded instances (this had never really
587 591 worked correctly).
588 592
589 593 Note: this introduces a change in the constructor for
590 594 MagicCompleter, as a new global_namespace parameter is now the
591 595 second argument (the others were bumped one position).
592 596
593 597 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
594 598
595 599 * IPython/iplib.py (embed_mainloop): fix tab-completion in
596 600 embedded instances (which can be done now thanks to Vivian's
597 601 frame-handling fixes for pdb).
598 602 (InteractiveShell.__init__): Fix namespace handling problem in
599 603 embedded instances. We were overwriting __main__ unconditionally,
600 604 and this should only be done for 'full' (non-embedded) IPython;
601 605 embedded instances must respect the caller's __main__. Thanks to
602 606 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
603 607
604 608 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
605 609
606 610 * setup.py: added download_url to setup(). This registers the
607 611 download address at PyPI, which is not only useful to humans
608 612 browsing the site, but is also picked up by setuptools (the Eggs
609 613 machinery). Thanks to Ville and R. Kern for the info/discussion
610 614 on this.
611 615
612 616 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
613 617
614 618 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
615 619 This brings a lot of nice functionality to the pdb mode, which now
616 620 has tab-completion, syntax highlighting, and better stack handling
617 621 than before. Many thanks to Vivian De Smedt
618 622 <vivian-AT-vdesmedt.com> for the original patches.
619 623
620 624 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
621 625
622 626 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
623 627 sequence to consistently accept the banner argument. The
624 628 inconsistency was tripping SAGE, thanks to Gary Zablackis
625 629 <gzabl-AT-yahoo.com> for the report.
626 630
627 631 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
628 632
629 633 * IPython/iplib.py (InteractiveShell.post_config_initialization):
630 634 Fix bug where a naked 'alias' call in the ipythonrc file would
631 635 cause a crash. Bug reported by Jorgen Stenarson.
632 636
633 637 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
634 638
635 639 * IPython/ipmaker.py (make_IPython): cleanups which should improve
636 640 startup time.
637 641
638 642 * IPython/iplib.py (runcode): my globals 'fix' for embedded
639 643 instances had introduced a bug with globals in normal code. Now
640 644 it's working in all cases.
641 645
642 646 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
643 647 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
644 648 has been introduced to set the default case sensitivity of the
645 649 searches. Users can still select either mode at runtime on a
646 650 per-search basis.
647 651
648 652 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
649 653
650 654 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
651 655 attributes in wildcard searches for subclasses. Modified version
652 656 of a patch by Jorgen.
653 657
654 658 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
655 659
656 660 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
657 661 embedded instances. I added a user_global_ns attribute to the
658 662 InteractiveShell class to handle this.
659 663
660 664 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
661 665
662 666 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
663 667 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
664 668 (reported under win32, but may happen also in other platforms).
665 669 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
666 670
667 671 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
668 672
669 673 * IPython/Magic.py (magic_psearch): new support for wildcard
670 674 patterns. Now, typing ?a*b will list all names which begin with a
671 675 and end in b, for example. The %psearch magic has full
672 676 docstrings. Many thanks to JΓΆrgen Stenarson
673 677 <jorgen.stenarson-AT-bostream.nu>, author of the patches
674 678 implementing this functionality.
675 679
676 680 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
677 681
678 682 * Manual: fixed long-standing annoyance of double-dashes (as in
679 683 --prefix=~, for example) being stripped in the HTML version. This
680 684 is a latex2html bug, but a workaround was provided. Many thanks
681 685 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
682 686 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
683 687 rolling. This seemingly small issue had tripped a number of users
684 688 when first installing, so I'm glad to see it gone.
685 689
686 690 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
687 691
688 692 * IPython/Extensions/numeric_formats.py: fix missing import,
689 693 reported by Stephen Walton.
690 694
691 695 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
692 696
693 697 * IPython/demo.py: finish demo module, fully documented now.
694 698
695 699 * IPython/genutils.py (file_read): simple little utility to read a
696 700 file and ensure it's closed afterwards.
697 701
698 702 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
699 703
700 704 * IPython/demo.py (Demo.__init__): added support for individually
701 705 tagging blocks for automatic execution.
702 706
703 707 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
704 708 syntax-highlighted python sources, requested by John.
705 709
706 710 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
707 711
708 712 * IPython/demo.py (Demo.again): fix bug where again() blocks after
709 713 finishing.
710 714
711 715 * IPython/genutils.py (shlex_split): moved from Magic to here,
712 716 where all 2.2 compatibility stuff lives. I needed it for demo.py.
713 717
714 718 * IPython/demo.py (Demo.__init__): added support for silent
715 719 blocks, improved marks as regexps, docstrings written.
716 720 (Demo.__init__): better docstring, added support for sys.argv.
717 721
718 722 * IPython/genutils.py (marquee): little utility used by the demo
719 723 code, handy in general.
720 724
721 725 * IPython/demo.py (Demo.__init__): new class for interactive
722 726 demos. Not documented yet, I just wrote it in a hurry for
723 727 scipy'05. Will docstring later.
724 728
725 729 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
726 730
727 731 * IPython/Shell.py (sigint_handler): Drastic simplification which
728 732 also seems to make Ctrl-C work correctly across threads! This is
729 733 so simple, that I can't beleive I'd missed it before. Needs more
730 734 testing, though.
731 735 (KBINT): Never mind, revert changes. I'm sure I'd tried something
732 736 like this before...
733 737
734 738 * IPython/genutils.py (get_home_dir): add protection against
735 739 non-dirs in win32 registry.
736 740
737 741 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
738 742 bug where dict was mutated while iterating (pysh crash).
739 743
740 744 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
741 745
742 746 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
743 747 spurious newlines added by this routine. After a report by
744 748 F. Mantegazza.
745 749
746 750 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
747 751
748 752 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
749 753 calls. These were a leftover from the GTK 1.x days, and can cause
750 754 problems in certain cases (after a report by John Hunter).
751 755
752 756 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
753 757 os.getcwd() fails at init time. Thanks to patch from David Remahl
754 758 <chmod007-AT-mac.com>.
755 759 (InteractiveShell.__init__): prevent certain special magics from
756 760 being shadowed by aliases. Closes
757 761 http://www.scipy.net/roundup/ipython/issue41.
758 762
759 763 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
760 764
761 765 * IPython/iplib.py (InteractiveShell.complete): Added new
762 766 top-level completion method to expose the completion mechanism
763 767 beyond readline-based environments.
764 768
765 769 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
766 770
767 771 * tools/ipsvnc (svnversion): fix svnversion capture.
768 772
769 773 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
770 774 attribute to self, which was missing. Before, it was set by a
771 775 routine which in certain cases wasn't being called, so the
772 776 instance could end up missing the attribute. This caused a crash.
773 777 Closes http://www.scipy.net/roundup/ipython/issue40.
774 778
775 779 2005-08-16 Fernando Perez <fperez@colorado.edu>
776 780
777 781 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
778 782 contains non-string attribute. Closes
779 783 http://www.scipy.net/roundup/ipython/issue38.
780 784
781 785 2005-08-14 Fernando Perez <fperez@colorado.edu>
782 786
783 787 * tools/ipsvnc: Minor improvements, to add changeset info.
784 788
785 789 2005-08-12 Fernando Perez <fperez@colorado.edu>
786 790
787 791 * IPython/iplib.py (runsource): remove self.code_to_run_src
788 792 attribute. I realized this is nothing more than
789 793 '\n'.join(self.buffer), and having the same data in two different
790 794 places is just asking for synchronization bugs. This may impact
791 795 people who have custom exception handlers, so I need to warn
792 796 ipython-dev about it (F. Mantegazza may use them).
793 797
794 798 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
795 799
796 800 * IPython/genutils.py: fix 2.2 compatibility (generators)
797 801
798 802 2005-07-18 Fernando Perez <fperez@colorado.edu>
799 803
800 804 * IPython/genutils.py (get_home_dir): fix to help users with
801 805 invalid $HOME under win32.
802 806
803 807 2005-07-17 Fernando Perez <fperez@colorado.edu>
804 808
805 809 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
806 810 some old hacks and clean up a bit other routines; code should be
807 811 simpler and a bit faster.
808 812
809 813 * IPython/iplib.py (interact): removed some last-resort attempts
810 814 to survive broken stdout/stderr. That code was only making it
811 815 harder to abstract out the i/o (necessary for gui integration),
812 816 and the crashes it could prevent were extremely rare in practice
813 817 (besides being fully user-induced in a pretty violent manner).
814 818
815 819 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
816 820 Nothing major yet, but the code is simpler to read; this should
817 821 make it easier to do more serious modifications in the future.
818 822
819 823 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
820 824 which broke in .15 (thanks to a report by Ville).
821 825
822 826 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
823 827 be quite correct, I know next to nothing about unicode). This
824 828 will allow unicode strings to be used in prompts, amongst other
825 829 cases. It also will prevent ipython from crashing when unicode
826 830 shows up unexpectedly in many places. If ascii encoding fails, we
827 831 assume utf_8. Currently the encoding is not a user-visible
828 832 setting, though it could be made so if there is demand for it.
829 833
830 834 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
831 835
832 836 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
833 837
834 838 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
835 839
836 840 * IPython/genutils.py: Add 2.2 compatibility here, so all other
837 841 code can work transparently for 2.2/2.3.
838 842
839 843 2005-07-16 Fernando Perez <fperez@colorado.edu>
840 844
841 845 * IPython/ultraTB.py (ExceptionColors): Make a global variable
842 846 out of the color scheme table used for coloring exception
843 847 tracebacks. This allows user code to add new schemes at runtime.
844 848 This is a minimally modified version of the patch at
845 849 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
846 850 for the contribution.
847 851
848 852 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
849 853 slightly modified version of the patch in
850 854 http://www.scipy.net/roundup/ipython/issue34, which also allows me
851 855 to remove the previous try/except solution (which was costlier).
852 856 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
853 857
854 858 2005-06-08 Fernando Perez <fperez@colorado.edu>
855 859
856 860 * IPython/iplib.py (write/write_err): Add methods to abstract all
857 861 I/O a bit more.
858 862
859 863 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
860 864 warning, reported by Aric Hagberg, fix by JD Hunter.
861 865
862 866 2005-06-02 *** Released version 0.6.15
863 867
864 868 2005-06-01 Fernando Perez <fperez@colorado.edu>
865 869
866 870 * IPython/iplib.py (MagicCompleter.file_matches): Fix
867 871 tab-completion of filenames within open-quoted strings. Note that
868 872 this requires that in ~/.ipython/ipythonrc, users change the
869 873 readline delimiters configuration to read:
870 874
871 875 readline_remove_delims -/~
872 876
873 877
874 878 2005-05-31 *** Released version 0.6.14
875 879
876 880 2005-05-29 Fernando Perez <fperez@colorado.edu>
877 881
878 882 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
879 883 with files not on the filesystem. Reported by Eliyahu Sandler
880 884 <eli@gondolin.net>
881 885
882 886 2005-05-22 Fernando Perez <fperez@colorado.edu>
883 887
884 888 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
885 889 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
886 890
887 891 2005-05-19 Fernando Perez <fperez@colorado.edu>
888 892
889 893 * IPython/iplib.py (safe_execfile): close a file which could be
890 894 left open (causing problems in win32, which locks open files).
891 895 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
892 896
893 897 2005-05-18 Fernando Perez <fperez@colorado.edu>
894 898
895 899 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
896 900 keyword arguments correctly to safe_execfile().
897 901
898 902 2005-05-13 Fernando Perez <fperez@colorado.edu>
899 903
900 904 * ipython.1: Added info about Qt to manpage, and threads warning
901 905 to usage page (invoked with --help).
902 906
903 907 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
904 908 new matcher (it goes at the end of the priority list) to do
905 909 tab-completion on named function arguments. Submitted by George
906 910 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
907 911 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
908 912 for more details.
909 913
910 914 * IPython/Magic.py (magic_run): Added new -e flag to ignore
911 915 SystemExit exceptions in the script being run. Thanks to a report
912 916 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
913 917 producing very annoying behavior when running unit tests.
914 918
915 919 2005-05-12 Fernando Perez <fperez@colorado.edu>
916 920
917 921 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
918 922 which I'd broken (again) due to a changed regexp. In the process,
919 923 added ';' as an escape to auto-quote the whole line without
920 924 splitting its arguments. Thanks to a report by Jerry McRae
921 925 <qrs0xyc02-AT-sneakemail.com>.
922 926
923 927 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
924 928 possible crashes caused by a TokenError. Reported by Ed Schofield
925 929 <schofield-AT-ftw.at>.
926 930
927 931 2005-05-06 Fernando Perez <fperez@colorado.edu>
928 932
929 933 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
930 934
931 935 2005-04-29 Fernando Perez <fperez@colorado.edu>
932 936
933 937 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
934 938 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
935 939 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
936 940 which provides support for Qt interactive usage (similar to the
937 941 existing one for WX and GTK). This had been often requested.
938 942
939 943 2005-04-14 *** Released version 0.6.13
940 944
941 945 2005-04-08 Fernando Perez <fperez@colorado.edu>
942 946
943 947 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
944 948 from _ofind, which gets called on almost every input line. Now,
945 949 we only try to get docstrings if they are actually going to be
946 950 used (the overhead of fetching unnecessary docstrings can be
947 951 noticeable for certain objects, such as Pyro proxies).
948 952
949 953 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
950 954 for completers. For some reason I had been passing them the state
951 955 variable, which completers never actually need, and was in
952 956 conflict with the rlcompleter API. Custom completers ONLY need to
953 957 take the text parameter.
954 958
955 959 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
956 960 work correctly in pysh. I've also moved all the logic which used
957 961 to be in pysh.py here, which will prevent problems with future
958 962 upgrades. However, this time I must warn users to update their
959 963 pysh profile to include the line
960 964
961 965 import_all IPython.Extensions.InterpreterExec
962 966
963 967 because otherwise things won't work for them. They MUST also
964 968 delete pysh.py and the line
965 969
966 970 execfile pysh.py
967 971
968 972 from their ipythonrc-pysh.
969 973
970 974 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
971 975 robust in the face of objects whose dir() returns non-strings
972 976 (which it shouldn't, but some broken libs like ITK do). Thanks to
973 977 a patch by John Hunter (implemented differently, though). Also
974 978 minor improvements by using .extend instead of + on lists.
975 979
976 980 * pysh.py:
977 981
978 982 2005-04-06 Fernando Perez <fperez@colorado.edu>
979 983
980 984 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
981 985 by default, so that all users benefit from it. Those who don't
982 986 want it can still turn it off.
983 987
984 988 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
985 989 config file, I'd forgotten about this, so users were getting it
986 990 off by default.
987 991
988 992 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
989 993 consistency. Now magics can be called in multiline statements,
990 994 and python variables can be expanded in magic calls via $var.
991 995 This makes the magic system behave just like aliases or !system
992 996 calls.
993 997
994 998 2005-03-28 Fernando Perez <fperez@colorado.edu>
995 999
996 1000 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
997 1001 expensive string additions for building command. Add support for
998 1002 trailing ';' when autocall is used.
999 1003
1000 1004 2005-03-26 Fernando Perez <fperez@colorado.edu>
1001 1005
1002 1006 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1003 1007 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1004 1008 ipython.el robust against prompts with any number of spaces
1005 1009 (including 0) after the ':' character.
1006 1010
1007 1011 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1008 1012 continuation prompt, which misled users to think the line was
1009 1013 already indented. Closes debian Bug#300847, reported to me by
1010 1014 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1011 1015
1012 1016 2005-03-23 Fernando Perez <fperez@colorado.edu>
1013 1017
1014 1018 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1015 1019 properly aligned if they have embedded newlines.
1016 1020
1017 1021 * IPython/iplib.py (runlines): Add a public method to expose
1018 1022 IPython's code execution machinery, so that users can run strings
1019 1023 as if they had been typed at the prompt interactively.
1020 1024 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1021 1025 methods which can call the system shell, but with python variable
1022 1026 expansion. The three such methods are: __IPYTHON__.system,
1023 1027 .getoutput and .getoutputerror. These need to be documented in a
1024 1028 'public API' section (to be written) of the manual.
1025 1029
1026 1030 2005-03-20 Fernando Perez <fperez@colorado.edu>
1027 1031
1028 1032 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1029 1033 for custom exception handling. This is quite powerful, and it
1030 1034 allows for user-installable exception handlers which can trap
1031 1035 custom exceptions at runtime and treat them separately from
1032 1036 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1033 1037 Mantegazza <mantegazza-AT-ill.fr>.
1034 1038 (InteractiveShell.set_custom_completer): public API function to
1035 1039 add new completers at runtime.
1036 1040
1037 1041 2005-03-19 Fernando Perez <fperez@colorado.edu>
1038 1042
1039 1043 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1040 1044 allow objects which provide their docstrings via non-standard
1041 1045 mechanisms (like Pyro proxies) to still be inspected by ipython's
1042 1046 ? system.
1043 1047
1044 1048 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1045 1049 automatic capture system. I tried quite hard to make it work
1046 1050 reliably, and simply failed. I tried many combinations with the
1047 1051 subprocess module, but eventually nothing worked in all needed
1048 1052 cases (not blocking stdin for the child, duplicating stdout
1049 1053 without blocking, etc). The new %sc/%sx still do capture to these
1050 1054 magical list/string objects which make shell use much more
1051 1055 conveninent, so not all is lost.
1052 1056
1053 1057 XXX - FIX MANUAL for the change above!
1054 1058
1055 1059 (runsource): I copied code.py's runsource() into ipython to modify
1056 1060 it a bit. Now the code object and source to be executed are
1057 1061 stored in ipython. This makes this info accessible to third-party
1058 1062 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1059 1063 Mantegazza <mantegazza-AT-ill.fr>.
1060 1064
1061 1065 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1062 1066 history-search via readline (like C-p/C-n). I'd wanted this for a
1063 1067 long time, but only recently found out how to do it. For users
1064 1068 who already have their ipythonrc files made and want this, just
1065 1069 add:
1066 1070
1067 1071 readline_parse_and_bind "\e[A": history-search-backward
1068 1072 readline_parse_and_bind "\e[B": history-search-forward
1069 1073
1070 1074 2005-03-18 Fernando Perez <fperez@colorado.edu>
1071 1075
1072 1076 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1073 1077 LSString and SList classes which allow transparent conversions
1074 1078 between list mode and whitespace-separated string.
1075 1079 (magic_r): Fix recursion problem in %r.
1076 1080
1077 1081 * IPython/genutils.py (LSString): New class to be used for
1078 1082 automatic storage of the results of all alias/system calls in _o
1079 1083 and _e (stdout/err). These provide a .l/.list attribute which
1080 1084 does automatic splitting on newlines. This means that for most
1081 1085 uses, you'll never need to do capturing of output with %sc/%sx
1082 1086 anymore, since ipython keeps this always done for you. Note that
1083 1087 only the LAST results are stored, the _o/e variables are
1084 1088 overwritten on each call. If you need to save their contents
1085 1089 further, simply bind them to any other name.
1086 1090
1087 1091 2005-03-17 Fernando Perez <fperez@colorado.edu>
1088 1092
1089 1093 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1090 1094 prompt namespace handling.
1091 1095
1092 1096 2005-03-16 Fernando Perez <fperez@colorado.edu>
1093 1097
1094 1098 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1095 1099 classic prompts to be '>>> ' (final space was missing, and it
1096 1100 trips the emacs python mode).
1097 1101 (BasePrompt.__str__): Added safe support for dynamic prompt
1098 1102 strings. Now you can set your prompt string to be '$x', and the
1099 1103 value of x will be printed from your interactive namespace. The
1100 1104 interpolation syntax includes the full Itpl support, so
1101 1105 ${foo()+x+bar()} is a valid prompt string now, and the function
1102 1106 calls will be made at runtime.
1103 1107
1104 1108 2005-03-15 Fernando Perez <fperez@colorado.edu>
1105 1109
1106 1110 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1107 1111 avoid name clashes in pylab. %hist still works, it just forwards
1108 1112 the call to %history.
1109 1113
1110 1114 2005-03-02 *** Released version 0.6.12
1111 1115
1112 1116 2005-03-02 Fernando Perez <fperez@colorado.edu>
1113 1117
1114 1118 * IPython/iplib.py (handle_magic): log magic calls properly as
1115 1119 ipmagic() function calls.
1116 1120
1117 1121 * IPython/Magic.py (magic_time): Improved %time to support
1118 1122 statements and provide wall-clock as well as CPU time.
1119 1123
1120 1124 2005-02-27 Fernando Perez <fperez@colorado.edu>
1121 1125
1122 1126 * IPython/hooks.py: New hooks module, to expose user-modifiable
1123 1127 IPython functionality in a clean manner. For now only the editor
1124 1128 hook is actually written, and other thigns which I intend to turn
1125 1129 into proper hooks aren't yet there. The display and prefilter
1126 1130 stuff, for example, should be hooks. But at least now the
1127 1131 framework is in place, and the rest can be moved here with more
1128 1132 time later. IPython had had a .hooks variable for a long time for
1129 1133 this purpose, but I'd never actually used it for anything.
1130 1134
1131 1135 2005-02-26 Fernando Perez <fperez@colorado.edu>
1132 1136
1133 1137 * IPython/ipmaker.py (make_IPython): make the default ipython
1134 1138 directory be called _ipython under win32, to follow more the
1135 1139 naming peculiarities of that platform (where buggy software like
1136 1140 Visual Sourcesafe breaks with .named directories). Reported by
1137 1141 Ville Vainio.
1138 1142
1139 1143 2005-02-23 Fernando Perez <fperez@colorado.edu>
1140 1144
1141 1145 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1142 1146 auto_aliases for win32 which were causing problems. Users can
1143 1147 define the ones they personally like.
1144 1148
1145 1149 2005-02-21 Fernando Perez <fperez@colorado.edu>
1146 1150
1147 1151 * IPython/Magic.py (magic_time): new magic to time execution of
1148 1152 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1149 1153
1150 1154 2005-02-19 Fernando Perez <fperez@colorado.edu>
1151 1155
1152 1156 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1153 1157 into keys (for prompts, for example).
1154 1158
1155 1159 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1156 1160 prompts in case users want them. This introduces a small behavior
1157 1161 change: ipython does not automatically add a space to all prompts
1158 1162 anymore. To get the old prompts with a space, users should add it
1159 1163 manually to their ipythonrc file, so for example prompt_in1 should
1160 1164 now read 'In [\#]: ' instead of 'In [\#]:'.
1161 1165 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1162 1166 file) to control left-padding of secondary prompts.
1163 1167
1164 1168 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1165 1169 the profiler can't be imported. Fix for Debian, which removed
1166 1170 profile.py because of License issues. I applied a slightly
1167 1171 modified version of the original Debian patch at
1168 1172 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1169 1173
1170 1174 2005-02-17 Fernando Perez <fperez@colorado.edu>
1171 1175
1172 1176 * IPython/genutils.py (native_line_ends): Fix bug which would
1173 1177 cause improper line-ends under win32 b/c I was not opening files
1174 1178 in binary mode. Bug report and fix thanks to Ville.
1175 1179
1176 1180 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1177 1181 trying to catch spurious foo[1] autocalls. My fix actually broke
1178 1182 ',/' autoquote/call with explicit escape (bad regexp).
1179 1183
1180 1184 2005-02-15 *** Released version 0.6.11
1181 1185
1182 1186 2005-02-14 Fernando Perez <fperez@colorado.edu>
1183 1187
1184 1188 * IPython/background_jobs.py: New background job management
1185 1189 subsystem. This is implemented via a new set of classes, and
1186 1190 IPython now provides a builtin 'jobs' object for background job
1187 1191 execution. A convenience %bg magic serves as a lightweight
1188 1192 frontend for starting the more common type of calls. This was
1189 1193 inspired by discussions with B. Granger and the BackgroundCommand
1190 1194 class described in the book Python Scripting for Computational
1191 1195 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1192 1196 (although ultimately no code from this text was used, as IPython's
1193 1197 system is a separate implementation).
1194 1198
1195 1199 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1196 1200 to control the completion of single/double underscore names
1197 1201 separately. As documented in the example ipytonrc file, the
1198 1202 readline_omit__names variable can now be set to 2, to omit even
1199 1203 single underscore names. Thanks to a patch by Brian Wong
1200 1204 <BrianWong-AT-AirgoNetworks.Com>.
1201 1205 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1202 1206 be autocalled as foo([1]) if foo were callable. A problem for
1203 1207 things which are both callable and implement __getitem__.
1204 1208 (init_readline): Fix autoindentation for win32. Thanks to a patch
1205 1209 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1206 1210
1207 1211 2005-02-12 Fernando Perez <fperez@colorado.edu>
1208 1212
1209 1213 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1210 1214 which I had written long ago to sort out user error messages which
1211 1215 may occur during startup. This seemed like a good idea initially,
1212 1216 but it has proven a disaster in retrospect. I don't want to
1213 1217 change much code for now, so my fix is to set the internal 'debug'
1214 1218 flag to true everywhere, whose only job was precisely to control
1215 1219 this subsystem. This closes issue 28 (as well as avoiding all
1216 1220 sorts of strange hangups which occur from time to time).
1217 1221
1218 1222 2005-02-07 Fernando Perez <fperez@colorado.edu>
1219 1223
1220 1224 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1221 1225 previous call produced a syntax error.
1222 1226
1223 1227 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1224 1228 classes without constructor.
1225 1229
1226 1230 2005-02-06 Fernando Perez <fperez@colorado.edu>
1227 1231
1228 1232 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1229 1233 completions with the results of each matcher, so we return results
1230 1234 to the user from all namespaces. This breaks with ipython
1231 1235 tradition, but I think it's a nicer behavior. Now you get all
1232 1236 possible completions listed, from all possible namespaces (python,
1233 1237 filesystem, magics...) After a request by John Hunter
1234 1238 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1235 1239
1236 1240 2005-02-05 Fernando Perez <fperez@colorado.edu>
1237 1241
1238 1242 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1239 1243 the call had quote characters in it (the quotes were stripped).
1240 1244
1241 1245 2005-01-31 Fernando Perez <fperez@colorado.edu>
1242 1246
1243 1247 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1244 1248 Itpl.itpl() to make the code more robust against psyco
1245 1249 optimizations.
1246 1250
1247 1251 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1248 1252 of causing an exception. Quicker, cleaner.
1249 1253
1250 1254 2005-01-28 Fernando Perez <fperez@colorado.edu>
1251 1255
1252 1256 * scripts/ipython_win_post_install.py (install): hardcode
1253 1257 sys.prefix+'python.exe' as the executable path. It turns out that
1254 1258 during the post-installation run, sys.executable resolves to the
1255 1259 name of the binary installer! I should report this as a distutils
1256 1260 bug, I think. I updated the .10 release with this tiny fix, to
1257 1261 avoid annoying the lists further.
1258 1262
1259 1263 2005-01-27 *** Released version 0.6.10
1260 1264
1261 1265 2005-01-27 Fernando Perez <fperez@colorado.edu>
1262 1266
1263 1267 * IPython/numutils.py (norm): Added 'inf' as optional name for
1264 1268 L-infinity norm, included references to mathworld.com for vector
1265 1269 norm definitions.
1266 1270 (amin/amax): added amin/amax for array min/max. Similar to what
1267 1271 pylab ships with after the recent reorganization of names.
1268 1272 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1269 1273
1270 1274 * ipython.el: committed Alex's recent fixes and improvements.
1271 1275 Tested with python-mode from CVS, and it looks excellent. Since
1272 1276 python-mode hasn't released anything in a while, I'm temporarily
1273 1277 putting a copy of today's CVS (v 4.70) of python-mode in:
1274 1278 http://ipython.scipy.org/tmp/python-mode.el
1275 1279
1276 1280 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1277 1281 sys.executable for the executable name, instead of assuming it's
1278 1282 called 'python.exe' (the post-installer would have produced broken
1279 1283 setups on systems with a differently named python binary).
1280 1284
1281 1285 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1282 1286 references to os.linesep, to make the code more
1283 1287 platform-independent. This is also part of the win32 coloring
1284 1288 fixes.
1285 1289
1286 1290 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1287 1291 lines, which actually cause coloring bugs because the length of
1288 1292 the line is very difficult to correctly compute with embedded
1289 1293 escapes. This was the source of all the coloring problems under
1290 1294 Win32. I think that _finally_, Win32 users have a properly
1291 1295 working ipython in all respects. This would never have happened
1292 1296 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1293 1297
1294 1298 2005-01-26 *** Released version 0.6.9
1295 1299
1296 1300 2005-01-25 Fernando Perez <fperez@colorado.edu>
1297 1301
1298 1302 * setup.py: finally, we have a true Windows installer, thanks to
1299 1303 the excellent work of Viktor Ransmayr
1300 1304 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1301 1305 Windows users. The setup routine is quite a bit cleaner thanks to
1302 1306 this, and the post-install script uses the proper functions to
1303 1307 allow a clean de-installation using the standard Windows Control
1304 1308 Panel.
1305 1309
1306 1310 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1307 1311 environment variable under all OSes (including win32) if
1308 1312 available. This will give consistency to win32 users who have set
1309 1313 this variable for any reason. If os.environ['HOME'] fails, the
1310 1314 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1311 1315
1312 1316 2005-01-24 Fernando Perez <fperez@colorado.edu>
1313 1317
1314 1318 * IPython/numutils.py (empty_like): add empty_like(), similar to
1315 1319 zeros_like() but taking advantage of the new empty() Numeric routine.
1316 1320
1317 1321 2005-01-23 *** Released version 0.6.8
1318 1322
1319 1323 2005-01-22 Fernando Perez <fperez@colorado.edu>
1320 1324
1321 1325 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1322 1326 automatic show() calls. After discussing things with JDH, it
1323 1327 turns out there are too many corner cases where this can go wrong.
1324 1328 It's best not to try to be 'too smart', and simply have ipython
1325 1329 reproduce as much as possible the default behavior of a normal
1326 1330 python shell.
1327 1331
1328 1332 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1329 1333 line-splitting regexp and _prefilter() to avoid calling getattr()
1330 1334 on assignments. This closes
1331 1335 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1332 1336 readline uses getattr(), so a simple <TAB> keypress is still
1333 1337 enough to trigger getattr() calls on an object.
1334 1338
1335 1339 2005-01-21 Fernando Perez <fperez@colorado.edu>
1336 1340
1337 1341 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1338 1342 docstring under pylab so it doesn't mask the original.
1339 1343
1340 1344 2005-01-21 *** Released version 0.6.7
1341 1345
1342 1346 2005-01-21 Fernando Perez <fperez@colorado.edu>
1343 1347
1344 1348 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1345 1349 signal handling for win32 users in multithreaded mode.
1346 1350
1347 1351 2005-01-17 Fernando Perez <fperez@colorado.edu>
1348 1352
1349 1353 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1350 1354 instances with no __init__. After a crash report by Norbert Nemec
1351 1355 <Norbert-AT-nemec-online.de>.
1352 1356
1353 1357 2005-01-14 Fernando Perez <fperez@colorado.edu>
1354 1358
1355 1359 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1356 1360 names for verbose exceptions, when multiple dotted names and the
1357 1361 'parent' object were present on the same line.
1358 1362
1359 1363 2005-01-11 Fernando Perez <fperez@colorado.edu>
1360 1364
1361 1365 * IPython/genutils.py (flag_calls): new utility to trap and flag
1362 1366 calls in functions. I need it to clean up matplotlib support.
1363 1367 Also removed some deprecated code in genutils.
1364 1368
1365 1369 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1366 1370 that matplotlib scripts called with %run, which don't call show()
1367 1371 themselves, still have their plotting windows open.
1368 1372
1369 1373 2005-01-05 Fernando Perez <fperez@colorado.edu>
1370 1374
1371 1375 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1372 1376 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1373 1377
1374 1378 2004-12-19 Fernando Perez <fperez@colorado.edu>
1375 1379
1376 1380 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1377 1381 parent_runcode, which was an eyesore. The same result can be
1378 1382 obtained with Python's regular superclass mechanisms.
1379 1383
1380 1384 2004-12-17 Fernando Perez <fperez@colorado.edu>
1381 1385
1382 1386 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1383 1387 reported by Prabhu.
1384 1388 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1385 1389 sys.stderr) instead of explicitly calling sys.stderr. This helps
1386 1390 maintain our I/O abstractions clean, for future GUI embeddings.
1387 1391
1388 1392 * IPython/genutils.py (info): added new utility for sys.stderr
1389 1393 unified info message handling (thin wrapper around warn()).
1390 1394
1391 1395 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1392 1396 composite (dotted) names on verbose exceptions.
1393 1397 (VerboseTB.nullrepr): harden against another kind of errors which
1394 1398 Python's inspect module can trigger, and which were crashing
1395 1399 IPython. Thanks to a report by Marco Lombardi
1396 1400 <mlombard-AT-ma010192.hq.eso.org>.
1397 1401
1398 1402 2004-12-13 *** Released version 0.6.6
1399 1403
1400 1404 2004-12-12 Fernando Perez <fperez@colorado.edu>
1401 1405
1402 1406 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1403 1407 generated by pygtk upon initialization if it was built without
1404 1408 threads (for matplotlib users). After a crash reported by
1405 1409 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1406 1410
1407 1411 * IPython/ipmaker.py (make_IPython): fix small bug in the
1408 1412 import_some parameter for multiple imports.
1409 1413
1410 1414 * IPython/iplib.py (ipmagic): simplified the interface of
1411 1415 ipmagic() to take a single string argument, just as it would be
1412 1416 typed at the IPython cmd line.
1413 1417 (ipalias): Added new ipalias() with an interface identical to
1414 1418 ipmagic(). This completes exposing a pure python interface to the
1415 1419 alias and magic system, which can be used in loops or more complex
1416 1420 code where IPython's automatic line mangling is not active.
1417 1421
1418 1422 * IPython/genutils.py (timing): changed interface of timing to
1419 1423 simply run code once, which is the most common case. timings()
1420 1424 remains unchanged, for the cases where you want multiple runs.
1421 1425
1422 1426 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1423 1427 bug where Python2.2 crashes with exec'ing code which does not end
1424 1428 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1425 1429 before.
1426 1430
1427 1431 2004-12-10 Fernando Perez <fperez@colorado.edu>
1428 1432
1429 1433 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1430 1434 -t to -T, to accomodate the new -t flag in %run (the %run and
1431 1435 %prun options are kind of intermixed, and it's not easy to change
1432 1436 this with the limitations of python's getopt).
1433 1437
1434 1438 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1435 1439 the execution of scripts. It's not as fine-tuned as timeit.py,
1436 1440 but it works from inside ipython (and under 2.2, which lacks
1437 1441 timeit.py). Optionally a number of runs > 1 can be given for
1438 1442 timing very short-running code.
1439 1443
1440 1444 * IPython/genutils.py (uniq_stable): new routine which returns a
1441 1445 list of unique elements in any iterable, but in stable order of
1442 1446 appearance. I needed this for the ultraTB fixes, and it's a handy
1443 1447 utility.
1444 1448
1445 1449 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1446 1450 dotted names in Verbose exceptions. This had been broken since
1447 1451 the very start, now x.y will properly be printed in a Verbose
1448 1452 traceback, instead of x being shown and y appearing always as an
1449 1453 'undefined global'. Getting this to work was a bit tricky,
1450 1454 because by default python tokenizers are stateless. Saved by
1451 1455 python's ability to easily add a bit of state to an arbitrary
1452 1456 function (without needing to build a full-blown callable object).
1453 1457
1454 1458 Also big cleanup of this code, which had horrendous runtime
1455 1459 lookups of zillions of attributes for colorization. Moved all
1456 1460 this code into a few templates, which make it cleaner and quicker.
1457 1461
1458 1462 Printout quality was also improved for Verbose exceptions: one
1459 1463 variable per line, and memory addresses are printed (this can be
1460 1464 quite handy in nasty debugging situations, which is what Verbose
1461 1465 is for).
1462 1466
1463 1467 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1464 1468 the command line as scripts to be loaded by embedded instances.
1465 1469 Doing so has the potential for an infinite recursion if there are
1466 1470 exceptions thrown in the process. This fixes a strange crash
1467 1471 reported by Philippe MULLER <muller-AT-irit.fr>.
1468 1472
1469 1473 2004-12-09 Fernando Perez <fperez@colorado.edu>
1470 1474
1471 1475 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1472 1476 to reflect new names in matplotlib, which now expose the
1473 1477 matlab-compatible interface via a pylab module instead of the
1474 1478 'matlab' name. The new code is backwards compatible, so users of
1475 1479 all matplotlib versions are OK. Patch by J. Hunter.
1476 1480
1477 1481 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1478 1482 of __init__ docstrings for instances (class docstrings are already
1479 1483 automatically printed). Instances with customized docstrings
1480 1484 (indep. of the class) are also recognized and all 3 separate
1481 1485 docstrings are printed (instance, class, constructor). After some
1482 1486 comments/suggestions by J. Hunter.
1483 1487
1484 1488 2004-12-05 Fernando Perez <fperez@colorado.edu>
1485 1489
1486 1490 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1487 1491 warnings when tab-completion fails and triggers an exception.
1488 1492
1489 1493 2004-12-03 Fernando Perez <fperez@colorado.edu>
1490 1494
1491 1495 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1492 1496 be triggered when using 'run -p'. An incorrect option flag was
1493 1497 being set ('d' instead of 'D').
1494 1498 (manpage): fix missing escaped \- sign.
1495 1499
1496 1500 2004-11-30 *** Released version 0.6.5
1497 1501
1498 1502 2004-11-30 Fernando Perez <fperez@colorado.edu>
1499 1503
1500 1504 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1501 1505 setting with -d option.
1502 1506
1503 1507 * setup.py (docfiles): Fix problem where the doc glob I was using
1504 1508 was COMPLETELY BROKEN. It was giving the right files by pure
1505 1509 accident, but failed once I tried to include ipython.el. Note:
1506 1510 glob() does NOT allow you to do exclusion on multiple endings!
1507 1511
1508 1512 2004-11-29 Fernando Perez <fperez@colorado.edu>
1509 1513
1510 1514 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1511 1515 the manpage as the source. Better formatting & consistency.
1512 1516
1513 1517 * IPython/Magic.py (magic_run): Added new -d option, to run
1514 1518 scripts under the control of the python pdb debugger. Note that
1515 1519 this required changing the %prun option -d to -D, to avoid a clash
1516 1520 (since %run must pass options to %prun, and getopt is too dumb to
1517 1521 handle options with string values with embedded spaces). Thanks
1518 1522 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1519 1523 (magic_who_ls): added type matching to %who and %whos, so that one
1520 1524 can filter their output to only include variables of certain
1521 1525 types. Another suggestion by Matthew.
1522 1526 (magic_whos): Added memory summaries in kb and Mb for arrays.
1523 1527 (magic_who): Improve formatting (break lines every 9 vars).
1524 1528
1525 1529 2004-11-28 Fernando Perez <fperez@colorado.edu>
1526 1530
1527 1531 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1528 1532 cache when empty lines were present.
1529 1533
1530 1534 2004-11-24 Fernando Perez <fperez@colorado.edu>
1531 1535
1532 1536 * IPython/usage.py (__doc__): document the re-activated threading
1533 1537 options for WX and GTK.
1534 1538
1535 1539 2004-11-23 Fernando Perez <fperez@colorado.edu>
1536 1540
1537 1541 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1538 1542 the -wthread and -gthread options, along with a new -tk one to try
1539 1543 and coordinate Tk threading with wx/gtk. The tk support is very
1540 1544 platform dependent, since it seems to require Tcl and Tk to be
1541 1545 built with threads (Fedora1/2 appears NOT to have it, but in
1542 1546 Prabhu's Debian boxes it works OK). But even with some Tk
1543 1547 limitations, this is a great improvement.
1544 1548
1545 1549 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1546 1550 info in user prompts. Patch by Prabhu.
1547 1551
1548 1552 2004-11-18 Fernando Perez <fperez@colorado.edu>
1549 1553
1550 1554 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1551 1555 EOFErrors and bail, to avoid infinite loops if a non-terminating
1552 1556 file is fed into ipython. Patch submitted in issue 19 by user,
1553 1557 many thanks.
1554 1558
1555 1559 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1556 1560 autoquote/parens in continuation prompts, which can cause lots of
1557 1561 problems. Closes roundup issue 20.
1558 1562
1559 1563 2004-11-17 Fernando Perez <fperez@colorado.edu>
1560 1564
1561 1565 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1562 1566 reported as debian bug #280505. I'm not sure my local changelog
1563 1567 entry has the proper debian format (Jack?).
1564 1568
1565 1569 2004-11-08 *** Released version 0.6.4
1566 1570
1567 1571 2004-11-08 Fernando Perez <fperez@colorado.edu>
1568 1572
1569 1573 * IPython/iplib.py (init_readline): Fix exit message for Windows
1570 1574 when readline is active. Thanks to a report by Eric Jones
1571 1575 <eric-AT-enthought.com>.
1572 1576
1573 1577 2004-11-07 Fernando Perez <fperez@colorado.edu>
1574 1578
1575 1579 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1576 1580 sometimes seen by win2k/cygwin users.
1577 1581
1578 1582 2004-11-06 Fernando Perez <fperez@colorado.edu>
1579 1583
1580 1584 * IPython/iplib.py (interact): Change the handling of %Exit from
1581 1585 trying to propagate a SystemExit to an internal ipython flag.
1582 1586 This is less elegant than using Python's exception mechanism, but
1583 1587 I can't get that to work reliably with threads, so under -pylab
1584 1588 %Exit was hanging IPython. Cross-thread exception handling is
1585 1589 really a bitch. Thaks to a bug report by Stephen Walton
1586 1590 <stephen.walton-AT-csun.edu>.
1587 1591
1588 1592 2004-11-04 Fernando Perez <fperez@colorado.edu>
1589 1593
1590 1594 * IPython/iplib.py (raw_input_original): store a pointer to the
1591 1595 true raw_input to harden against code which can modify it
1592 1596 (wx.py.PyShell does this and would otherwise crash ipython).
1593 1597 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1594 1598
1595 1599 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1596 1600 Ctrl-C problem, which does not mess up the input line.
1597 1601
1598 1602 2004-11-03 Fernando Perez <fperez@colorado.edu>
1599 1603
1600 1604 * IPython/Release.py: Changed licensing to BSD, in all files.
1601 1605 (name): lowercase name for tarball/RPM release.
1602 1606
1603 1607 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1604 1608 use throughout ipython.
1605 1609
1606 1610 * IPython/Magic.py (Magic._ofind): Switch to using the new
1607 1611 OInspect.getdoc() function.
1608 1612
1609 1613 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1610 1614 of the line currently being canceled via Ctrl-C. It's extremely
1611 1615 ugly, but I don't know how to do it better (the problem is one of
1612 1616 handling cross-thread exceptions).
1613 1617
1614 1618 2004-10-28 Fernando Perez <fperez@colorado.edu>
1615 1619
1616 1620 * IPython/Shell.py (signal_handler): add signal handlers to trap
1617 1621 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1618 1622 report by Francesc Alted.
1619 1623
1620 1624 2004-10-21 Fernando Perez <fperez@colorado.edu>
1621 1625
1622 1626 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1623 1627 to % for pysh syntax extensions.
1624 1628
1625 1629 2004-10-09 Fernando Perez <fperez@colorado.edu>
1626 1630
1627 1631 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1628 1632 arrays to print a more useful summary, without calling str(arr).
1629 1633 This avoids the problem of extremely lengthy computations which
1630 1634 occur if arr is large, and appear to the user as a system lockup
1631 1635 with 100% cpu activity. After a suggestion by Kristian Sandberg
1632 1636 <Kristian.Sandberg@colorado.edu>.
1633 1637 (Magic.__init__): fix bug in global magic escapes not being
1634 1638 correctly set.
1635 1639
1636 1640 2004-10-08 Fernando Perez <fperez@colorado.edu>
1637 1641
1638 1642 * IPython/Magic.py (__license__): change to absolute imports of
1639 1643 ipython's own internal packages, to start adapting to the absolute
1640 1644 import requirement of PEP-328.
1641 1645
1642 1646 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1643 1647 files, and standardize author/license marks through the Release
1644 1648 module instead of having per/file stuff (except for files with
1645 1649 particular licenses, like the MIT/PSF-licensed codes).
1646 1650
1647 1651 * IPython/Debugger.py: remove dead code for python 2.1
1648 1652
1649 1653 2004-10-04 Fernando Perez <fperez@colorado.edu>
1650 1654
1651 1655 * IPython/iplib.py (ipmagic): New function for accessing magics
1652 1656 via a normal python function call.
1653 1657
1654 1658 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1655 1659 from '@' to '%', to accomodate the new @decorator syntax of python
1656 1660 2.4.
1657 1661
1658 1662 2004-09-29 Fernando Perez <fperez@colorado.edu>
1659 1663
1660 1664 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1661 1665 matplotlib.use to prevent running scripts which try to switch
1662 1666 interactive backends from within ipython. This will just crash
1663 1667 the python interpreter, so we can't allow it (but a detailed error
1664 1668 is given to the user).
1665 1669
1666 1670 2004-09-28 Fernando Perez <fperez@colorado.edu>
1667 1671
1668 1672 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1669 1673 matplotlib-related fixes so that using @run with non-matplotlib
1670 1674 scripts doesn't pop up spurious plot windows. This requires
1671 1675 matplotlib >= 0.63, where I had to make some changes as well.
1672 1676
1673 1677 * IPython/ipmaker.py (make_IPython): update version requirement to
1674 1678 python 2.2.
1675 1679
1676 1680 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1677 1681 banner arg for embedded customization.
1678 1682
1679 1683 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1680 1684 explicit uses of __IP as the IPython's instance name. Now things
1681 1685 are properly handled via the shell.name value. The actual code
1682 1686 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1683 1687 is much better than before. I'll clean things completely when the
1684 1688 magic stuff gets a real overhaul.
1685 1689
1686 1690 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1687 1691 minor changes to debian dir.
1688 1692
1689 1693 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1690 1694 pointer to the shell itself in the interactive namespace even when
1691 1695 a user-supplied dict is provided. This is needed for embedding
1692 1696 purposes (found by tests with Michel Sanner).
1693 1697
1694 1698 2004-09-27 Fernando Perez <fperez@colorado.edu>
1695 1699
1696 1700 * IPython/UserConfig/ipythonrc: remove []{} from
1697 1701 readline_remove_delims, so that things like [modname.<TAB> do
1698 1702 proper completion. This disables [].TAB, but that's a less common
1699 1703 case than module names in list comprehensions, for example.
1700 1704 Thanks to a report by Andrea Riciputi.
1701 1705
1702 1706 2004-09-09 Fernando Perez <fperez@colorado.edu>
1703 1707
1704 1708 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1705 1709 blocking problems in win32 and osx. Fix by John.
1706 1710
1707 1711 2004-09-08 Fernando Perez <fperez@colorado.edu>
1708 1712
1709 1713 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1710 1714 for Win32 and OSX. Fix by John Hunter.
1711 1715
1712 1716 2004-08-30 *** Released version 0.6.3
1713 1717
1714 1718 2004-08-30 Fernando Perez <fperez@colorado.edu>
1715 1719
1716 1720 * setup.py (isfile): Add manpages to list of dependent files to be
1717 1721 updated.
1718 1722
1719 1723 2004-08-27 Fernando Perez <fperez@colorado.edu>
1720 1724
1721 1725 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1722 1726 for now. They don't really work with standalone WX/GTK code
1723 1727 (though matplotlib IS working fine with both of those backends).
1724 1728 This will neeed much more testing. I disabled most things with
1725 1729 comments, so turning it back on later should be pretty easy.
1726 1730
1727 1731 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1728 1732 autocalling of expressions like r'foo', by modifying the line
1729 1733 split regexp. Closes
1730 1734 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1731 1735 Riley <ipythonbugs-AT-sabi.net>.
1732 1736 (InteractiveShell.mainloop): honor --nobanner with banner
1733 1737 extensions.
1734 1738
1735 1739 * IPython/Shell.py: Significant refactoring of all classes, so
1736 1740 that we can really support ALL matplotlib backends and threading
1737 1741 models (John spotted a bug with Tk which required this). Now we
1738 1742 should support single-threaded, WX-threads and GTK-threads, both
1739 1743 for generic code and for matplotlib.
1740 1744
1741 1745 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1742 1746 -pylab, to simplify things for users. Will also remove the pylab
1743 1747 profile, since now all of matplotlib configuration is directly
1744 1748 handled here. This also reduces startup time.
1745 1749
1746 1750 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1747 1751 shell wasn't being correctly called. Also in IPShellWX.
1748 1752
1749 1753 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1750 1754 fine-tune banner.
1751 1755
1752 1756 * IPython/numutils.py (spike): Deprecate these spike functions,
1753 1757 delete (long deprecated) gnuplot_exec handler.
1754 1758
1755 1759 2004-08-26 Fernando Perez <fperez@colorado.edu>
1756 1760
1757 1761 * ipython.1: Update for threading options, plus some others which
1758 1762 were missing.
1759 1763
1760 1764 * IPython/ipmaker.py (__call__): Added -wthread option for
1761 1765 wxpython thread handling. Make sure threading options are only
1762 1766 valid at the command line.
1763 1767
1764 1768 * scripts/ipython: moved shell selection into a factory function
1765 1769 in Shell.py, to keep the starter script to a minimum.
1766 1770
1767 1771 2004-08-25 Fernando Perez <fperez@colorado.edu>
1768 1772
1769 1773 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1770 1774 John. Along with some recent changes he made to matplotlib, the
1771 1775 next versions of both systems should work very well together.
1772 1776
1773 1777 2004-08-24 Fernando Perez <fperez@colorado.edu>
1774 1778
1775 1779 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1776 1780 tried to switch the profiling to using hotshot, but I'm getting
1777 1781 strange errors from prof.runctx() there. I may be misreading the
1778 1782 docs, but it looks weird. For now the profiling code will
1779 1783 continue to use the standard profiler.
1780 1784
1781 1785 2004-08-23 Fernando Perez <fperez@colorado.edu>
1782 1786
1783 1787 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1784 1788 threaded shell, by John Hunter. It's not quite ready yet, but
1785 1789 close.
1786 1790
1787 1791 2004-08-22 Fernando Perez <fperez@colorado.edu>
1788 1792
1789 1793 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1790 1794 in Magic and ultraTB.
1791 1795
1792 1796 * ipython.1: document threading options in manpage.
1793 1797
1794 1798 * scripts/ipython: Changed name of -thread option to -gthread,
1795 1799 since this is GTK specific. I want to leave the door open for a
1796 1800 -wthread option for WX, which will most likely be necessary. This
1797 1801 change affects usage and ipmaker as well.
1798 1802
1799 1803 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1800 1804 handle the matplotlib shell issues. Code by John Hunter
1801 1805 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1802 1806 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1803 1807 broken (and disabled for end users) for now, but it puts the
1804 1808 infrastructure in place.
1805 1809
1806 1810 2004-08-21 Fernando Perez <fperez@colorado.edu>
1807 1811
1808 1812 * ipythonrc-pylab: Add matplotlib support.
1809 1813
1810 1814 * matplotlib_config.py: new files for matplotlib support, part of
1811 1815 the pylab profile.
1812 1816
1813 1817 * IPython/usage.py (__doc__): documented the threading options.
1814 1818
1815 1819 2004-08-20 Fernando Perez <fperez@colorado.edu>
1816 1820
1817 1821 * ipython: Modified the main calling routine to handle the -thread
1818 1822 and -mpthread options. This needs to be done as a top-level hack,
1819 1823 because it determines which class to instantiate for IPython
1820 1824 itself.
1821 1825
1822 1826 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1823 1827 classes to support multithreaded GTK operation without blocking,
1824 1828 and matplotlib with all backends. This is a lot of still very
1825 1829 experimental code, and threads are tricky. So it may still have a
1826 1830 few rough edges... This code owes a lot to
1827 1831 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1828 1832 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1829 1833 to John Hunter for all the matplotlib work.
1830 1834
1831 1835 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1832 1836 options for gtk thread and matplotlib support.
1833 1837
1834 1838 2004-08-16 Fernando Perez <fperez@colorado.edu>
1835 1839
1836 1840 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1837 1841 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1838 1842 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1839 1843
1840 1844 2004-08-11 Fernando Perez <fperez@colorado.edu>
1841 1845
1842 1846 * setup.py (isfile): Fix build so documentation gets updated for
1843 1847 rpms (it was only done for .tgz builds).
1844 1848
1845 1849 2004-08-10 Fernando Perez <fperez@colorado.edu>
1846 1850
1847 1851 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1848 1852
1849 1853 * iplib.py : Silence syntax error exceptions in tab-completion.
1850 1854
1851 1855 2004-08-05 Fernando Perez <fperez@colorado.edu>
1852 1856
1853 1857 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1854 1858 'color off' mark for continuation prompts. This was causing long
1855 1859 continuation lines to mis-wrap.
1856 1860
1857 1861 2004-08-01 Fernando Perez <fperez@colorado.edu>
1858 1862
1859 1863 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1860 1864 for building ipython to be a parameter. All this is necessary
1861 1865 right now to have a multithreaded version, but this insane
1862 1866 non-design will be cleaned up soon. For now, it's a hack that
1863 1867 works.
1864 1868
1865 1869 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1866 1870 args in various places. No bugs so far, but it's a dangerous
1867 1871 practice.
1868 1872
1869 1873 2004-07-31 Fernando Perez <fperez@colorado.edu>
1870 1874
1871 1875 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1872 1876 fix completion of files with dots in their names under most
1873 1877 profiles (pysh was OK because the completion order is different).
1874 1878
1875 1879 2004-07-27 Fernando Perez <fperez@colorado.edu>
1876 1880
1877 1881 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1878 1882 keywords manually, b/c the one in keyword.py was removed in python
1879 1883 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1880 1884 This is NOT a bug under python 2.3 and earlier.
1881 1885
1882 1886 2004-07-26 Fernando Perez <fperez@colorado.edu>
1883 1887
1884 1888 * IPython/ultraTB.py (VerboseTB.text): Add another
1885 1889 linecache.checkcache() call to try to prevent inspect.py from
1886 1890 crashing under python 2.3. I think this fixes
1887 1891 http://www.scipy.net/roundup/ipython/issue17.
1888 1892
1889 1893 2004-07-26 *** Released version 0.6.2
1890 1894
1891 1895 2004-07-26 Fernando Perez <fperez@colorado.edu>
1892 1896
1893 1897 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1894 1898 fail for any number.
1895 1899 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1896 1900 empty bookmarks.
1897 1901
1898 1902 2004-07-26 *** Released version 0.6.1
1899 1903
1900 1904 2004-07-26 Fernando Perez <fperez@colorado.edu>
1901 1905
1902 1906 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1903 1907
1904 1908 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1905 1909 escaping '()[]{}' in filenames.
1906 1910
1907 1911 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1908 1912 Python 2.2 users who lack a proper shlex.split.
1909 1913
1910 1914 2004-07-19 Fernando Perez <fperez@colorado.edu>
1911 1915
1912 1916 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1913 1917 for reading readline's init file. I follow the normal chain:
1914 1918 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1915 1919 report by Mike Heeter. This closes
1916 1920 http://www.scipy.net/roundup/ipython/issue16.
1917 1921
1918 1922 2004-07-18 Fernando Perez <fperez@colorado.edu>
1919 1923
1920 1924 * IPython/iplib.py (__init__): Add better handling of '\' under
1921 1925 Win32 for filenames. After a patch by Ville.
1922 1926
1923 1927 2004-07-17 Fernando Perez <fperez@colorado.edu>
1924 1928
1925 1929 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1926 1930 autocalling would be triggered for 'foo is bar' if foo is
1927 1931 callable. I also cleaned up the autocall detection code to use a
1928 1932 regexp, which is faster. Bug reported by Alexander Schmolck.
1929 1933
1930 1934 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1931 1935 '?' in them would confuse the help system. Reported by Alex
1932 1936 Schmolck.
1933 1937
1934 1938 2004-07-16 Fernando Perez <fperez@colorado.edu>
1935 1939
1936 1940 * IPython/GnuplotInteractive.py (__all__): added plot2.
1937 1941
1938 1942 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1939 1943 plotting dictionaries, lists or tuples of 1d arrays.
1940 1944
1941 1945 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1942 1946 optimizations.
1943 1947
1944 1948 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1945 1949 the information which was there from Janko's original IPP code:
1946 1950
1947 1951 03.05.99 20:53 porto.ifm.uni-kiel.de
1948 1952 --Started changelog.
1949 1953 --make clear do what it say it does
1950 1954 --added pretty output of lines from inputcache
1951 1955 --Made Logger a mixin class, simplifies handling of switches
1952 1956 --Added own completer class. .string<TAB> expands to last history
1953 1957 line which starts with string. The new expansion is also present
1954 1958 with Ctrl-r from the readline library. But this shows, who this
1955 1959 can be done for other cases.
1956 1960 --Added convention that all shell functions should accept a
1957 1961 parameter_string This opens the door for different behaviour for
1958 1962 each function. @cd is a good example of this.
1959 1963
1960 1964 04.05.99 12:12 porto.ifm.uni-kiel.de
1961 1965 --added logfile rotation
1962 1966 --added new mainloop method which freezes first the namespace
1963 1967
1964 1968 07.05.99 21:24 porto.ifm.uni-kiel.de
1965 1969 --added the docreader classes. Now there is a help system.
1966 1970 -This is only a first try. Currently it's not easy to put new
1967 1971 stuff in the indices. But this is the way to go. Info would be
1968 1972 better, but HTML is every where and not everybody has an info
1969 1973 system installed and it's not so easy to change html-docs to info.
1970 1974 --added global logfile option
1971 1975 --there is now a hook for object inspection method pinfo needs to
1972 1976 be provided for this. Can be reached by two '??'.
1973 1977
1974 1978 08.05.99 20:51 porto.ifm.uni-kiel.de
1975 1979 --added a README
1976 1980 --bug in rc file. Something has changed so functions in the rc
1977 1981 file need to reference the shell and not self. Not clear if it's a
1978 1982 bug or feature.
1979 1983 --changed rc file for new behavior
1980 1984
1981 1985 2004-07-15 Fernando Perez <fperez@colorado.edu>
1982 1986
1983 1987 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1984 1988 cache was falling out of sync in bizarre manners when multi-line
1985 1989 input was present. Minor optimizations and cleanup.
1986 1990
1987 1991 (Logger): Remove old Changelog info for cleanup. This is the
1988 1992 information which was there from Janko's original code:
1989 1993
1990 1994 Changes to Logger: - made the default log filename a parameter
1991 1995
1992 1996 - put a check for lines beginning with !@? in log(). Needed
1993 1997 (even if the handlers properly log their lines) for mid-session
1994 1998 logging activation to work properly. Without this, lines logged
1995 1999 in mid session, which get read from the cache, would end up
1996 2000 'bare' (with !@? in the open) in the log. Now they are caught
1997 2001 and prepended with a #.
1998 2002
1999 2003 * IPython/iplib.py (InteractiveShell.init_readline): added check
2000 2004 in case MagicCompleter fails to be defined, so we don't crash.
2001 2005
2002 2006 2004-07-13 Fernando Perez <fperez@colorado.edu>
2003 2007
2004 2008 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2005 2009 of EPS if the requested filename ends in '.eps'.
2006 2010
2007 2011 2004-07-04 Fernando Perez <fperez@colorado.edu>
2008 2012
2009 2013 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2010 2014 escaping of quotes when calling the shell.
2011 2015
2012 2016 2004-07-02 Fernando Perez <fperez@colorado.edu>
2013 2017
2014 2018 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2015 2019 gettext not working because we were clobbering '_'. Fixes
2016 2020 http://www.scipy.net/roundup/ipython/issue6.
2017 2021
2018 2022 2004-07-01 Fernando Perez <fperez@colorado.edu>
2019 2023
2020 2024 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2021 2025 into @cd. Patch by Ville.
2022 2026
2023 2027 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2024 2028 new function to store things after ipmaker runs. Patch by Ville.
2025 2029 Eventually this will go away once ipmaker is removed and the class
2026 2030 gets cleaned up, but for now it's ok. Key functionality here is
2027 2031 the addition of the persistent storage mechanism, a dict for
2028 2032 keeping data across sessions (for now just bookmarks, but more can
2029 2033 be implemented later).
2030 2034
2031 2035 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2032 2036 persistent across sections. Patch by Ville, I modified it
2033 2037 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2034 2038 added a '-l' option to list all bookmarks.
2035 2039
2036 2040 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2037 2041 center for cleanup. Registered with atexit.register(). I moved
2038 2042 here the old exit_cleanup(). After a patch by Ville.
2039 2043
2040 2044 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2041 2045 characters in the hacked shlex_split for python 2.2.
2042 2046
2043 2047 * IPython/iplib.py (file_matches): more fixes to filenames with
2044 2048 whitespace in them. It's not perfect, but limitations in python's
2045 2049 readline make it impossible to go further.
2046 2050
2047 2051 2004-06-29 Fernando Perez <fperez@colorado.edu>
2048 2052
2049 2053 * IPython/iplib.py (file_matches): escape whitespace correctly in
2050 2054 filename completions. Bug reported by Ville.
2051 2055
2052 2056 2004-06-28 Fernando Perez <fperez@colorado.edu>
2053 2057
2054 2058 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2055 2059 the history file will be called 'history-PROFNAME' (or just
2056 2060 'history' if no profile is loaded). I was getting annoyed at
2057 2061 getting my Numerical work history clobbered by pysh sessions.
2058 2062
2059 2063 * IPython/iplib.py (InteractiveShell.__init__): Internal
2060 2064 getoutputerror() function so that we can honor the system_verbose
2061 2065 flag for _all_ system calls. I also added escaping of #
2062 2066 characters here to avoid confusing Itpl.
2063 2067
2064 2068 * IPython/Magic.py (shlex_split): removed call to shell in
2065 2069 parse_options and replaced it with shlex.split(). The annoying
2066 2070 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2067 2071 to backport it from 2.3, with several frail hacks (the shlex
2068 2072 module is rather limited in 2.2). Thanks to a suggestion by Ville
2069 2073 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2070 2074 problem.
2071 2075
2072 2076 (Magic.magic_system_verbose): new toggle to print the actual
2073 2077 system calls made by ipython. Mainly for debugging purposes.
2074 2078
2075 2079 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2076 2080 doesn't support persistence. Reported (and fix suggested) by
2077 2081 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2078 2082
2079 2083 2004-06-26 Fernando Perez <fperez@colorado.edu>
2080 2084
2081 2085 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2082 2086 continue prompts.
2083 2087
2084 2088 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2085 2089 function (basically a big docstring) and a few more things here to
2086 2090 speedup startup. pysh.py is now very lightweight. We want because
2087 2091 it gets execfile'd, while InterpreterExec gets imported, so
2088 2092 byte-compilation saves time.
2089 2093
2090 2094 2004-06-25 Fernando Perez <fperez@colorado.edu>
2091 2095
2092 2096 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2093 2097 -NUM', which was recently broken.
2094 2098
2095 2099 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2096 2100 in multi-line input (but not !!, which doesn't make sense there).
2097 2101
2098 2102 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2099 2103 It's just too useful, and people can turn it off in the less
2100 2104 common cases where it's a problem.
2101 2105
2102 2106 2004-06-24 Fernando Perez <fperez@colorado.edu>
2103 2107
2104 2108 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2105 2109 special syntaxes (like alias calling) is now allied in multi-line
2106 2110 input. This is still _very_ experimental, but it's necessary for
2107 2111 efficient shell usage combining python looping syntax with system
2108 2112 calls. For now it's restricted to aliases, I don't think it
2109 2113 really even makes sense to have this for magics.
2110 2114
2111 2115 2004-06-23 Fernando Perez <fperez@colorado.edu>
2112 2116
2113 2117 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2114 2118 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2115 2119
2116 2120 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2117 2121 extensions under Windows (after code sent by Gary Bishop). The
2118 2122 extensions considered 'executable' are stored in IPython's rc
2119 2123 structure as win_exec_ext.
2120 2124
2121 2125 * IPython/genutils.py (shell): new function, like system() but
2122 2126 without return value. Very useful for interactive shell work.
2123 2127
2124 2128 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2125 2129 delete aliases.
2126 2130
2127 2131 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2128 2132 sure that the alias table doesn't contain python keywords.
2129 2133
2130 2134 2004-06-21 Fernando Perez <fperez@colorado.edu>
2131 2135
2132 2136 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2133 2137 non-existent items are found in $PATH. Reported by Thorsten.
2134 2138
2135 2139 2004-06-20 Fernando Perez <fperez@colorado.edu>
2136 2140
2137 2141 * IPython/iplib.py (complete): modified the completer so that the
2138 2142 order of priorities can be easily changed at runtime.
2139 2143
2140 2144 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2141 2145 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2142 2146
2143 2147 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2144 2148 expand Python variables prepended with $ in all system calls. The
2145 2149 same was done to InteractiveShell.handle_shell_escape. Now all
2146 2150 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2147 2151 expansion of python variables and expressions according to the
2148 2152 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2149 2153
2150 2154 Though PEP-215 has been rejected, a similar (but simpler) one
2151 2155 seems like it will go into Python 2.4, PEP-292 -
2152 2156 http://www.python.org/peps/pep-0292.html.
2153 2157
2154 2158 I'll keep the full syntax of PEP-215, since IPython has since the
2155 2159 start used Ka-Ping Yee's reference implementation discussed there
2156 2160 (Itpl), and I actually like the powerful semantics it offers.
2157 2161
2158 2162 In order to access normal shell variables, the $ has to be escaped
2159 2163 via an extra $. For example:
2160 2164
2161 2165 In [7]: PATH='a python variable'
2162 2166
2163 2167 In [8]: !echo $PATH
2164 2168 a python variable
2165 2169
2166 2170 In [9]: !echo $$PATH
2167 2171 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2168 2172
2169 2173 (Magic.parse_options): escape $ so the shell doesn't evaluate
2170 2174 things prematurely.
2171 2175
2172 2176 * IPython/iplib.py (InteractiveShell.call_alias): added the
2173 2177 ability for aliases to expand python variables via $.
2174 2178
2175 2179 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2176 2180 system, now there's a @rehash/@rehashx pair of magics. These work
2177 2181 like the csh rehash command, and can be invoked at any time. They
2178 2182 build a table of aliases to everything in the user's $PATH
2179 2183 (@rehash uses everything, @rehashx is slower but only adds
2180 2184 executable files). With this, the pysh.py-based shell profile can
2181 2185 now simply call rehash upon startup, and full access to all
2182 2186 programs in the user's path is obtained.
2183 2187
2184 2188 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2185 2189 functionality is now fully in place. I removed the old dynamic
2186 2190 code generation based approach, in favor of a much lighter one
2187 2191 based on a simple dict. The advantage is that this allows me to
2188 2192 now have thousands of aliases with negligible cost (unthinkable
2189 2193 with the old system).
2190 2194
2191 2195 2004-06-19 Fernando Perez <fperez@colorado.edu>
2192 2196
2193 2197 * IPython/iplib.py (__init__): extended MagicCompleter class to
2194 2198 also complete (last in priority) on user aliases.
2195 2199
2196 2200 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2197 2201 call to eval.
2198 2202 (ItplNS.__init__): Added a new class which functions like Itpl,
2199 2203 but allows configuring the namespace for the evaluation to occur
2200 2204 in.
2201 2205
2202 2206 2004-06-18 Fernando Perez <fperez@colorado.edu>
2203 2207
2204 2208 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2205 2209 better message when 'exit' or 'quit' are typed (a common newbie
2206 2210 confusion).
2207 2211
2208 2212 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2209 2213 check for Windows users.
2210 2214
2211 2215 * IPython/iplib.py (InteractiveShell.user_setup): removed
2212 2216 disabling of colors for Windows. I'll test at runtime and issue a
2213 2217 warning if Gary's readline isn't found, as to nudge users to
2214 2218 download it.
2215 2219
2216 2220 2004-06-16 Fernando Perez <fperez@colorado.edu>
2217 2221
2218 2222 * IPython/genutils.py (Stream.__init__): changed to print errors
2219 2223 to sys.stderr. I had a circular dependency here. Now it's
2220 2224 possible to run ipython as IDLE's shell (consider this pre-alpha,
2221 2225 since true stdout things end up in the starting terminal instead
2222 2226 of IDLE's out).
2223 2227
2224 2228 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2225 2229 users who haven't # updated their prompt_in2 definitions. Remove
2226 2230 eventually.
2227 2231 (multiple_replace): added credit to original ASPN recipe.
2228 2232
2229 2233 2004-06-15 Fernando Perez <fperez@colorado.edu>
2230 2234
2231 2235 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2232 2236 list of auto-defined aliases.
2233 2237
2234 2238 2004-06-13 Fernando Perez <fperez@colorado.edu>
2235 2239
2236 2240 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2237 2241 install was really requested (so setup.py can be used for other
2238 2242 things under Windows).
2239 2243
2240 2244 2004-06-10 Fernando Perez <fperez@colorado.edu>
2241 2245
2242 2246 * IPython/Logger.py (Logger.create_log): Manually remove any old
2243 2247 backup, since os.remove may fail under Windows. Fixes bug
2244 2248 reported by Thorsten.
2245 2249
2246 2250 2004-06-09 Fernando Perez <fperez@colorado.edu>
2247 2251
2248 2252 * examples/example-embed.py: fixed all references to %n (replaced
2249 2253 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2250 2254 for all examples and the manual as well.
2251 2255
2252 2256 2004-06-08 Fernando Perez <fperez@colorado.edu>
2253 2257
2254 2258 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2255 2259 alignment and color management. All 3 prompt subsystems now
2256 2260 inherit from BasePrompt.
2257 2261
2258 2262 * tools/release: updates for windows installer build and tag rpms
2259 2263 with python version (since paths are fixed).
2260 2264
2261 2265 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2262 2266 which will become eventually obsolete. Also fixed the default
2263 2267 prompt_in2 to use \D, so at least new users start with the correct
2264 2268 defaults.
2265 2269 WARNING: Users with existing ipythonrc files will need to apply
2266 2270 this fix manually!
2267 2271
2268 2272 * setup.py: make windows installer (.exe). This is finally the
2269 2273 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2270 2274 which I hadn't included because it required Python 2.3 (or recent
2271 2275 distutils).
2272 2276
2273 2277 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2274 2278 usage of new '\D' escape.
2275 2279
2276 2280 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2277 2281 lacks os.getuid())
2278 2282 (CachedOutput.set_colors): Added the ability to turn coloring
2279 2283 on/off with @colors even for manually defined prompt colors. It
2280 2284 uses a nasty global, but it works safely and via the generic color
2281 2285 handling mechanism.
2282 2286 (Prompt2.__init__): Introduced new escape '\D' for continuation
2283 2287 prompts. It represents the counter ('\#') as dots.
2284 2288 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2285 2289 need to update their ipythonrc files and replace '%n' with '\D' in
2286 2290 their prompt_in2 settings everywhere. Sorry, but there's
2287 2291 otherwise no clean way to get all prompts to properly align. The
2288 2292 ipythonrc shipped with IPython has been updated.
2289 2293
2290 2294 2004-06-07 Fernando Perez <fperez@colorado.edu>
2291 2295
2292 2296 * setup.py (isfile): Pass local_icons option to latex2html, so the
2293 2297 resulting HTML file is self-contained. Thanks to
2294 2298 dryice-AT-liu.com.cn for the tip.
2295 2299
2296 2300 * pysh.py: I created a new profile 'shell', which implements a
2297 2301 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2298 2302 system shell, nor will it become one anytime soon. It's mainly
2299 2303 meant to illustrate the use of the new flexible bash-like prompts.
2300 2304 I guess it could be used by hardy souls for true shell management,
2301 2305 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2302 2306 profile. This uses the InterpreterExec extension provided by
2303 2307 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2304 2308
2305 2309 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2306 2310 auto-align itself with the length of the previous input prompt
2307 2311 (taking into account the invisible color escapes).
2308 2312 (CachedOutput.__init__): Large restructuring of this class. Now
2309 2313 all three prompts (primary1, primary2, output) are proper objects,
2310 2314 managed by the 'parent' CachedOutput class. The code is still a
2311 2315 bit hackish (all prompts share state via a pointer to the cache),
2312 2316 but it's overall far cleaner than before.
2313 2317
2314 2318 * IPython/genutils.py (getoutputerror): modified to add verbose,
2315 2319 debug and header options. This makes the interface of all getout*
2316 2320 functions uniform.
2317 2321 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2318 2322
2319 2323 * IPython/Magic.py (Magic.default_option): added a function to
2320 2324 allow registering default options for any magic command. This
2321 2325 makes it easy to have profiles which customize the magics globally
2322 2326 for a certain use. The values set through this function are
2323 2327 picked up by the parse_options() method, which all magics should
2324 2328 use to parse their options.
2325 2329
2326 2330 * IPython/genutils.py (warn): modified the warnings framework to
2327 2331 use the Term I/O class. I'm trying to slowly unify all of
2328 2332 IPython's I/O operations to pass through Term.
2329 2333
2330 2334 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2331 2335 the secondary prompt to correctly match the length of the primary
2332 2336 one for any prompt. Now multi-line code will properly line up
2333 2337 even for path dependent prompts, such as the new ones available
2334 2338 via the prompt_specials.
2335 2339
2336 2340 2004-06-06 Fernando Perez <fperez@colorado.edu>
2337 2341
2338 2342 * IPython/Prompts.py (prompt_specials): Added the ability to have
2339 2343 bash-like special sequences in the prompts, which get
2340 2344 automatically expanded. Things like hostname, current working
2341 2345 directory and username are implemented already, but it's easy to
2342 2346 add more in the future. Thanks to a patch by W.J. van der Laan
2343 2347 <gnufnork-AT-hetdigitalegat.nl>
2344 2348 (prompt_specials): Added color support for prompt strings, so
2345 2349 users can define arbitrary color setups for their prompts.
2346 2350
2347 2351 2004-06-05 Fernando Perez <fperez@colorado.edu>
2348 2352
2349 2353 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2350 2354 code to load Gary Bishop's readline and configure it
2351 2355 automatically. Thanks to Gary for help on this.
2352 2356
2353 2357 2004-06-01 Fernando Perez <fperez@colorado.edu>
2354 2358
2355 2359 * IPython/Logger.py (Logger.create_log): fix bug for logging
2356 2360 with no filename (previous fix was incomplete).
2357 2361
2358 2362 2004-05-25 Fernando Perez <fperez@colorado.edu>
2359 2363
2360 2364 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2361 2365 parens would get passed to the shell.
2362 2366
2363 2367 2004-05-20 Fernando Perez <fperez@colorado.edu>
2364 2368
2365 2369 * IPython/Magic.py (Magic.magic_prun): changed default profile
2366 2370 sort order to 'time' (the more common profiling need).
2367 2371
2368 2372 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2369 2373 so that source code shown is guaranteed in sync with the file on
2370 2374 disk (also changed in psource). Similar fix to the one for
2371 2375 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2372 2376 <yann.ledu-AT-noos.fr>.
2373 2377
2374 2378 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2375 2379 with a single option would not be correctly parsed. Closes
2376 2380 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2377 2381 introduced in 0.6.0 (on 2004-05-06).
2378 2382
2379 2383 2004-05-13 *** Released version 0.6.0
2380 2384
2381 2385 2004-05-13 Fernando Perez <fperez@colorado.edu>
2382 2386
2383 2387 * debian/: Added debian/ directory to CVS, so that debian support
2384 2388 is publicly accessible. The debian package is maintained by Jack
2385 2389 Moffit <jack-AT-xiph.org>.
2386 2390
2387 2391 * Documentation: included the notes about an ipython-based system
2388 2392 shell (the hypothetical 'pysh') into the new_design.pdf document,
2389 2393 so that these ideas get distributed to users along with the
2390 2394 official documentation.
2391 2395
2392 2396 2004-05-10 Fernando Perez <fperez@colorado.edu>
2393 2397
2394 2398 * IPython/Logger.py (Logger.create_log): fix recently introduced
2395 2399 bug (misindented line) where logstart would fail when not given an
2396 2400 explicit filename.
2397 2401
2398 2402 2004-05-09 Fernando Perez <fperez@colorado.edu>
2399 2403
2400 2404 * IPython/Magic.py (Magic.parse_options): skip system call when
2401 2405 there are no options to look for. Faster, cleaner for the common
2402 2406 case.
2403 2407
2404 2408 * Documentation: many updates to the manual: describing Windows
2405 2409 support better, Gnuplot updates, credits, misc small stuff. Also
2406 2410 updated the new_design doc a bit.
2407 2411
2408 2412 2004-05-06 *** Released version 0.6.0.rc1
2409 2413
2410 2414 2004-05-06 Fernando Perez <fperez@colorado.edu>
2411 2415
2412 2416 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2413 2417 operations to use the vastly more efficient list/''.join() method.
2414 2418 (FormattedTB.text): Fix
2415 2419 http://www.scipy.net/roundup/ipython/issue12 - exception source
2416 2420 extract not updated after reload. Thanks to Mike Salib
2417 2421 <msalib-AT-mit.edu> for pinning the source of the problem.
2418 2422 Fortunately, the solution works inside ipython and doesn't require
2419 2423 any changes to python proper.
2420 2424
2421 2425 * IPython/Magic.py (Magic.parse_options): Improved to process the
2422 2426 argument list as a true shell would (by actually using the
2423 2427 underlying system shell). This way, all @magics automatically get
2424 2428 shell expansion for variables. Thanks to a comment by Alex
2425 2429 Schmolck.
2426 2430
2427 2431 2004-04-04 Fernando Perez <fperez@colorado.edu>
2428 2432
2429 2433 * IPython/iplib.py (InteractiveShell.interact): Added a special
2430 2434 trap for a debugger quit exception, which is basically impossible
2431 2435 to handle by normal mechanisms, given what pdb does to the stack.
2432 2436 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2433 2437
2434 2438 2004-04-03 Fernando Perez <fperez@colorado.edu>
2435 2439
2436 2440 * IPython/genutils.py (Term): Standardized the names of the Term
2437 2441 class streams to cin/cout/cerr, following C++ naming conventions
2438 2442 (I can't use in/out/err because 'in' is not a valid attribute
2439 2443 name).
2440 2444
2441 2445 * IPython/iplib.py (InteractiveShell.interact): don't increment
2442 2446 the prompt if there's no user input. By Daniel 'Dang' Griffith
2443 2447 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2444 2448 Francois Pinard.
2445 2449
2446 2450 2004-04-02 Fernando Perez <fperez@colorado.edu>
2447 2451
2448 2452 * IPython/genutils.py (Stream.__init__): Modified to survive at
2449 2453 least importing in contexts where stdin/out/err aren't true file
2450 2454 objects, such as PyCrust (they lack fileno() and mode). However,
2451 2455 the recovery facilities which rely on these things existing will
2452 2456 not work.
2453 2457
2454 2458 2004-04-01 Fernando Perez <fperez@colorado.edu>
2455 2459
2456 2460 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2457 2461 use the new getoutputerror() function, so it properly
2458 2462 distinguishes stdout/err.
2459 2463
2460 2464 * IPython/genutils.py (getoutputerror): added a function to
2461 2465 capture separately the standard output and error of a command.
2462 2466 After a comment from dang on the mailing lists. This code is
2463 2467 basically a modified version of commands.getstatusoutput(), from
2464 2468 the standard library.
2465 2469
2466 2470 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2467 2471 '!!' as a special syntax (shorthand) to access @sx.
2468 2472
2469 2473 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2470 2474 command and return its output as a list split on '\n'.
2471 2475
2472 2476 2004-03-31 Fernando Perez <fperez@colorado.edu>
2473 2477
2474 2478 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2475 2479 method to dictionaries used as FakeModule instances if they lack
2476 2480 it. At least pydoc in python2.3 breaks for runtime-defined
2477 2481 functions without this hack. At some point I need to _really_
2478 2482 understand what FakeModule is doing, because it's a gross hack.
2479 2483 But it solves Arnd's problem for now...
2480 2484
2481 2485 2004-02-27 Fernando Perez <fperez@colorado.edu>
2482 2486
2483 2487 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2484 2488 mode would behave erratically. Also increased the number of
2485 2489 possible logs in rotate mod to 999. Thanks to Rod Holland
2486 2490 <rhh@StructureLABS.com> for the report and fixes.
2487 2491
2488 2492 2004-02-26 Fernando Perez <fperez@colorado.edu>
2489 2493
2490 2494 * IPython/genutils.py (page): Check that the curses module really
2491 2495 has the initscr attribute before trying to use it. For some
2492 2496 reason, the Solaris curses module is missing this. I think this
2493 2497 should be considered a Solaris python bug, but I'm not sure.
2494 2498
2495 2499 2004-01-17 Fernando Perez <fperez@colorado.edu>
2496 2500
2497 2501 * IPython/genutils.py (Stream.__init__): Changes to try to make
2498 2502 ipython robust against stdin/out/err being closed by the user.
2499 2503 This is 'user error' (and blocks a normal python session, at least
2500 2504 the stdout case). However, Ipython should be able to survive such
2501 2505 instances of abuse as gracefully as possible. To simplify the
2502 2506 coding and maintain compatibility with Gary Bishop's Term
2503 2507 contributions, I've made use of classmethods for this. I think
2504 2508 this introduces a dependency on python 2.2.
2505 2509
2506 2510 2004-01-13 Fernando Perez <fperez@colorado.edu>
2507 2511
2508 2512 * IPython/numutils.py (exp_safe): simplified the code a bit and
2509 2513 removed the need for importing the kinds module altogether.
2510 2514
2511 2515 2004-01-06 Fernando Perez <fperez@colorado.edu>
2512 2516
2513 2517 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2514 2518 a magic function instead, after some community feedback. No
2515 2519 special syntax will exist for it, but its name is deliberately
2516 2520 very short.
2517 2521
2518 2522 2003-12-20 Fernando Perez <fperez@colorado.edu>
2519 2523
2520 2524 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2521 2525 new functionality, to automagically assign the result of a shell
2522 2526 command to a variable. I'll solicit some community feedback on
2523 2527 this before making it permanent.
2524 2528
2525 2529 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2526 2530 requested about callables for which inspect couldn't obtain a
2527 2531 proper argspec. Thanks to a crash report sent by Etienne
2528 2532 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2529 2533
2530 2534 2003-12-09 Fernando Perez <fperez@colorado.edu>
2531 2535
2532 2536 * IPython/genutils.py (page): patch for the pager to work across
2533 2537 various versions of Windows. By Gary Bishop.
2534 2538
2535 2539 2003-12-04 Fernando Perez <fperez@colorado.edu>
2536 2540
2537 2541 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2538 2542 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2539 2543 While I tested this and it looks ok, there may still be corner
2540 2544 cases I've missed.
2541 2545
2542 2546 2003-12-01 Fernando Perez <fperez@colorado.edu>
2543 2547
2544 2548 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2545 2549 where a line like 'p,q=1,2' would fail because the automagic
2546 2550 system would be triggered for @p.
2547 2551
2548 2552 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2549 2553 cleanups, code unmodified.
2550 2554
2551 2555 * IPython/genutils.py (Term): added a class for IPython to handle
2552 2556 output. In most cases it will just be a proxy for stdout/err, but
2553 2557 having this allows modifications to be made for some platforms,
2554 2558 such as handling color escapes under Windows. All of this code
2555 2559 was contributed by Gary Bishop, with minor modifications by me.
2556 2560 The actual changes affect many files.
2557 2561
2558 2562 2003-11-30 Fernando Perez <fperez@colorado.edu>
2559 2563
2560 2564 * IPython/iplib.py (file_matches): new completion code, courtesy
2561 2565 of Jeff Collins. This enables filename completion again under
2562 2566 python 2.3, which disabled it at the C level.
2563 2567
2564 2568 2003-11-11 Fernando Perez <fperez@colorado.edu>
2565 2569
2566 2570 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2567 2571 for Numeric.array(map(...)), but often convenient.
2568 2572
2569 2573 2003-11-05 Fernando Perez <fperez@colorado.edu>
2570 2574
2571 2575 * IPython/numutils.py (frange): Changed a call from int() to
2572 2576 int(round()) to prevent a problem reported with arange() in the
2573 2577 numpy list.
2574 2578
2575 2579 2003-10-06 Fernando Perez <fperez@colorado.edu>
2576 2580
2577 2581 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2578 2582 prevent crashes if sys lacks an argv attribute (it happens with
2579 2583 embedded interpreters which build a bare-bones sys module).
2580 2584 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2581 2585
2582 2586 2003-09-24 Fernando Perez <fperez@colorado.edu>
2583 2587
2584 2588 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2585 2589 to protect against poorly written user objects where __getattr__
2586 2590 raises exceptions other than AttributeError. Thanks to a bug
2587 2591 report by Oliver Sander <osander-AT-gmx.de>.
2588 2592
2589 2593 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2590 2594 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2591 2595
2592 2596 2003-09-09 Fernando Perez <fperez@colorado.edu>
2593 2597
2594 2598 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2595 2599 unpacking a list whith a callable as first element would
2596 2600 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2597 2601 Collins.
2598 2602
2599 2603 2003-08-25 *** Released version 0.5.0
2600 2604
2601 2605 2003-08-22 Fernando Perez <fperez@colorado.edu>
2602 2606
2603 2607 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2604 2608 improperly defined user exceptions. Thanks to feedback from Mark
2605 2609 Russell <mrussell-AT-verio.net>.
2606 2610
2607 2611 2003-08-20 Fernando Perez <fperez@colorado.edu>
2608 2612
2609 2613 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2610 2614 printing so that it would print multi-line string forms starting
2611 2615 with a new line. This way the formatting is better respected for
2612 2616 objects which work hard to make nice string forms.
2613 2617
2614 2618 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2615 2619 autocall would overtake data access for objects with both
2616 2620 __getitem__ and __call__.
2617 2621
2618 2622 2003-08-19 *** Released version 0.5.0-rc1
2619 2623
2620 2624 2003-08-19 Fernando Perez <fperez@colorado.edu>
2621 2625
2622 2626 * IPython/deep_reload.py (load_tail): single tiny change here
2623 2627 seems to fix the long-standing bug of dreload() failing to work
2624 2628 for dotted names. But this module is pretty tricky, so I may have
2625 2629 missed some subtlety. Needs more testing!.
2626 2630
2627 2631 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2628 2632 exceptions which have badly implemented __str__ methods.
2629 2633 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2630 2634 which I've been getting reports about from Python 2.3 users. I
2631 2635 wish I had a simple test case to reproduce the problem, so I could
2632 2636 either write a cleaner workaround or file a bug report if
2633 2637 necessary.
2634 2638
2635 2639 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2636 2640 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2637 2641 a bug report by Tjabo Kloppenburg.
2638 2642
2639 2643 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2640 2644 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2641 2645 seems rather unstable. Thanks to a bug report by Tjabo
2642 2646 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2643 2647
2644 2648 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2645 2649 this out soon because of the critical fixes in the inner loop for
2646 2650 generators.
2647 2651
2648 2652 * IPython/Magic.py (Magic.getargspec): removed. This (and
2649 2653 _get_def) have been obsoleted by OInspect for a long time, I
2650 2654 hadn't noticed that they were dead code.
2651 2655 (Magic._ofind): restored _ofind functionality for a few literals
2652 2656 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2653 2657 for things like "hello".capitalize?, since that would require a
2654 2658 potentially dangerous eval() again.
2655 2659
2656 2660 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2657 2661 logic a bit more to clean up the escapes handling and minimize the
2658 2662 use of _ofind to only necessary cases. The interactive 'feel' of
2659 2663 IPython should have improved quite a bit with the changes in
2660 2664 _prefilter and _ofind (besides being far safer than before).
2661 2665
2662 2666 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2663 2667 obscure, never reported). Edit would fail to find the object to
2664 2668 edit under some circumstances.
2665 2669 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2666 2670 which were causing double-calling of generators. Those eval calls
2667 2671 were _very_ dangerous, since code with side effects could be
2668 2672 triggered. As they say, 'eval is evil'... These were the
2669 2673 nastiest evals in IPython. Besides, _ofind is now far simpler,
2670 2674 and it should also be quite a bit faster. Its use of inspect is
2671 2675 also safer, so perhaps some of the inspect-related crashes I've
2672 2676 seen lately with Python 2.3 might be taken care of. That will
2673 2677 need more testing.
2674 2678
2675 2679 2003-08-17 Fernando Perez <fperez@colorado.edu>
2676 2680
2677 2681 * IPython/iplib.py (InteractiveShell._prefilter): significant
2678 2682 simplifications to the logic for handling user escapes. Faster
2679 2683 and simpler code.
2680 2684
2681 2685 2003-08-14 Fernando Perez <fperez@colorado.edu>
2682 2686
2683 2687 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2684 2688 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2685 2689 but it should be quite a bit faster. And the recursive version
2686 2690 generated O(log N) intermediate storage for all rank>1 arrays,
2687 2691 even if they were contiguous.
2688 2692 (l1norm): Added this function.
2689 2693 (norm): Added this function for arbitrary norms (including
2690 2694 l-infinity). l1 and l2 are still special cases for convenience
2691 2695 and speed.
2692 2696
2693 2697 2003-08-03 Fernando Perez <fperez@colorado.edu>
2694 2698
2695 2699 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2696 2700 exceptions, which now raise PendingDeprecationWarnings in Python
2697 2701 2.3. There were some in Magic and some in Gnuplot2.
2698 2702
2699 2703 2003-06-30 Fernando Perez <fperez@colorado.edu>
2700 2704
2701 2705 * IPython/genutils.py (page): modified to call curses only for
2702 2706 terminals where TERM=='xterm'. After problems under many other
2703 2707 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2704 2708
2705 2709 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2706 2710 would be triggered when readline was absent. This was just an old
2707 2711 debugging statement I'd forgotten to take out.
2708 2712
2709 2713 2003-06-20 Fernando Perez <fperez@colorado.edu>
2710 2714
2711 2715 * IPython/genutils.py (clock): modified to return only user time
2712 2716 (not counting system time), after a discussion on scipy. While
2713 2717 system time may be a useful quantity occasionally, it may much
2714 2718 more easily be skewed by occasional swapping or other similar
2715 2719 activity.
2716 2720
2717 2721 2003-06-05 Fernando Perez <fperez@colorado.edu>
2718 2722
2719 2723 * IPython/numutils.py (identity): new function, for building
2720 2724 arbitrary rank Kronecker deltas (mostly backwards compatible with
2721 2725 Numeric.identity)
2722 2726
2723 2727 2003-06-03 Fernando Perez <fperez@colorado.edu>
2724 2728
2725 2729 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2726 2730 arguments passed to magics with spaces, to allow trailing '\' to
2727 2731 work normally (mainly for Windows users).
2728 2732
2729 2733 2003-05-29 Fernando Perez <fperez@colorado.edu>
2730 2734
2731 2735 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2732 2736 instead of pydoc.help. This fixes a bizarre behavior where
2733 2737 printing '%s' % locals() would trigger the help system. Now
2734 2738 ipython behaves like normal python does.
2735 2739
2736 2740 Note that if one does 'from pydoc import help', the bizarre
2737 2741 behavior returns, but this will also happen in normal python, so
2738 2742 it's not an ipython bug anymore (it has to do with how pydoc.help
2739 2743 is implemented).
2740 2744
2741 2745 2003-05-22 Fernando Perez <fperez@colorado.edu>
2742 2746
2743 2747 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2744 2748 return [] instead of None when nothing matches, also match to end
2745 2749 of line. Patch by Gary Bishop.
2746 2750
2747 2751 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2748 2752 protection as before, for files passed on the command line. This
2749 2753 prevents the CrashHandler from kicking in if user files call into
2750 2754 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2751 2755 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2752 2756
2753 2757 2003-05-20 *** Released version 0.4.0
2754 2758
2755 2759 2003-05-20 Fernando Perez <fperez@colorado.edu>
2756 2760
2757 2761 * setup.py: added support for manpages. It's a bit hackish b/c of
2758 2762 a bug in the way the bdist_rpm distutils target handles gzipped
2759 2763 manpages, but it works. After a patch by Jack.
2760 2764
2761 2765 2003-05-19 Fernando Perez <fperez@colorado.edu>
2762 2766
2763 2767 * IPython/numutils.py: added a mockup of the kinds module, since
2764 2768 it was recently removed from Numeric. This way, numutils will
2765 2769 work for all users even if they are missing kinds.
2766 2770
2767 2771 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2768 2772 failure, which can occur with SWIG-wrapped extensions. After a
2769 2773 crash report from Prabhu.
2770 2774
2771 2775 2003-05-16 Fernando Perez <fperez@colorado.edu>
2772 2776
2773 2777 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2774 2778 protect ipython from user code which may call directly
2775 2779 sys.excepthook (this looks like an ipython crash to the user, even
2776 2780 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2777 2781 This is especially important to help users of WxWindows, but may
2778 2782 also be useful in other cases.
2779 2783
2780 2784 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2781 2785 an optional tb_offset to be specified, and to preserve exception
2782 2786 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2783 2787
2784 2788 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2785 2789
2786 2790 2003-05-15 Fernando Perez <fperez@colorado.edu>
2787 2791
2788 2792 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2789 2793 installing for a new user under Windows.
2790 2794
2791 2795 2003-05-12 Fernando Perez <fperez@colorado.edu>
2792 2796
2793 2797 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2794 2798 handler for Emacs comint-based lines. Currently it doesn't do
2795 2799 much (but importantly, it doesn't update the history cache). In
2796 2800 the future it may be expanded if Alex needs more functionality
2797 2801 there.
2798 2802
2799 2803 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2800 2804 info to crash reports.
2801 2805
2802 2806 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2803 2807 just like Python's -c. Also fixed crash with invalid -color
2804 2808 option value at startup. Thanks to Will French
2805 2809 <wfrench-AT-bestweb.net> for the bug report.
2806 2810
2807 2811 2003-05-09 Fernando Perez <fperez@colorado.edu>
2808 2812
2809 2813 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2810 2814 to EvalDict (it's a mapping, after all) and simplified its code
2811 2815 quite a bit, after a nice discussion on c.l.py where Gustavo
2812 2816 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2813 2817
2814 2818 2003-04-30 Fernando Perez <fperez@colorado.edu>
2815 2819
2816 2820 * IPython/genutils.py (timings_out): modified it to reduce its
2817 2821 overhead in the common reps==1 case.
2818 2822
2819 2823 2003-04-29 Fernando Perez <fperez@colorado.edu>
2820 2824
2821 2825 * IPython/genutils.py (timings_out): Modified to use the resource
2822 2826 module, which avoids the wraparound problems of time.clock().
2823 2827
2824 2828 2003-04-17 *** Released version 0.2.15pre4
2825 2829
2826 2830 2003-04-17 Fernando Perez <fperez@colorado.edu>
2827 2831
2828 2832 * setup.py (scriptfiles): Split windows-specific stuff over to a
2829 2833 separate file, in an attempt to have a Windows GUI installer.
2830 2834 That didn't work, but part of the groundwork is done.
2831 2835
2832 2836 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2833 2837 indent/unindent with 4 spaces. Particularly useful in combination
2834 2838 with the new auto-indent option.
2835 2839
2836 2840 2003-04-16 Fernando Perez <fperez@colorado.edu>
2837 2841
2838 2842 * IPython/Magic.py: various replacements of self.rc for
2839 2843 self.shell.rc. A lot more remains to be done to fully disentangle
2840 2844 this class from the main Shell class.
2841 2845
2842 2846 * IPython/GnuplotRuntime.py: added checks for mouse support so
2843 2847 that we don't try to enable it if the current gnuplot doesn't
2844 2848 really support it. Also added checks so that we don't try to
2845 2849 enable persist under Windows (where Gnuplot doesn't recognize the
2846 2850 option).
2847 2851
2848 2852 * IPython/iplib.py (InteractiveShell.interact): Added optional
2849 2853 auto-indenting code, after a patch by King C. Shu
2850 2854 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2851 2855 get along well with pasting indented code. If I ever figure out
2852 2856 how to make that part go well, it will become on by default.
2853 2857
2854 2858 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2855 2859 crash ipython if there was an unmatched '%' in the user's prompt
2856 2860 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2857 2861
2858 2862 * IPython/iplib.py (InteractiveShell.interact): removed the
2859 2863 ability to ask the user whether he wants to crash or not at the
2860 2864 'last line' exception handler. Calling functions at that point
2861 2865 changes the stack, and the error reports would have incorrect
2862 2866 tracebacks.
2863 2867
2864 2868 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2865 2869 pass through a peger a pretty-printed form of any object. After a
2866 2870 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2867 2871
2868 2872 2003-04-14 Fernando Perez <fperez@colorado.edu>
2869 2873
2870 2874 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2871 2875 all files in ~ would be modified at first install (instead of
2872 2876 ~/.ipython). This could be potentially disastrous, as the
2873 2877 modification (make line-endings native) could damage binary files.
2874 2878
2875 2879 2003-04-10 Fernando Perez <fperez@colorado.edu>
2876 2880
2877 2881 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2878 2882 handle only lines which are invalid python. This now means that
2879 2883 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2880 2884 for the bug report.
2881 2885
2882 2886 2003-04-01 Fernando Perez <fperez@colorado.edu>
2883 2887
2884 2888 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2885 2889 where failing to set sys.last_traceback would crash pdb.pm().
2886 2890 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2887 2891 report.
2888 2892
2889 2893 2003-03-25 Fernando Perez <fperez@colorado.edu>
2890 2894
2891 2895 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2892 2896 before printing it (it had a lot of spurious blank lines at the
2893 2897 end).
2894 2898
2895 2899 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2896 2900 output would be sent 21 times! Obviously people don't use this
2897 2901 too often, or I would have heard about it.
2898 2902
2899 2903 2003-03-24 Fernando Perez <fperez@colorado.edu>
2900 2904
2901 2905 * setup.py (scriptfiles): renamed the data_files parameter from
2902 2906 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2903 2907 for the patch.
2904 2908
2905 2909 2003-03-20 Fernando Perez <fperez@colorado.edu>
2906 2910
2907 2911 * IPython/genutils.py (error): added error() and fatal()
2908 2912 functions.
2909 2913
2910 2914 2003-03-18 *** Released version 0.2.15pre3
2911 2915
2912 2916 2003-03-18 Fernando Perez <fperez@colorado.edu>
2913 2917
2914 2918 * setupext/install_data_ext.py
2915 2919 (install_data_ext.initialize_options): Class contributed by Jack
2916 2920 Moffit for fixing the old distutils hack. He is sending this to
2917 2921 the distutils folks so in the future we may not need it as a
2918 2922 private fix.
2919 2923
2920 2924 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2921 2925 changes for Debian packaging. See his patch for full details.
2922 2926 The old distutils hack of making the ipythonrc* files carry a
2923 2927 bogus .py extension is gone, at last. Examples were moved to a
2924 2928 separate subdir under doc/, and the separate executable scripts
2925 2929 now live in their own directory. Overall a great cleanup. The
2926 2930 manual was updated to use the new files, and setup.py has been
2927 2931 fixed for this setup.
2928 2932
2929 2933 * IPython/PyColorize.py (Parser.usage): made non-executable and
2930 2934 created a pycolor wrapper around it to be included as a script.
2931 2935
2932 2936 2003-03-12 *** Released version 0.2.15pre2
2933 2937
2934 2938 2003-03-12 Fernando Perez <fperez@colorado.edu>
2935 2939
2936 2940 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2937 2941 long-standing problem with garbage characters in some terminals.
2938 2942 The issue was really that the \001 and \002 escapes must _only_ be
2939 2943 passed to input prompts (which call readline), but _never_ to
2940 2944 normal text to be printed on screen. I changed ColorANSI to have
2941 2945 two classes: TermColors and InputTermColors, each with the
2942 2946 appropriate escapes for input prompts or normal text. The code in
2943 2947 Prompts.py got slightly more complicated, but this very old and
2944 2948 annoying bug is finally fixed.
2945 2949
2946 2950 All the credit for nailing down the real origin of this problem
2947 2951 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2948 2952 *Many* thanks to him for spending quite a bit of effort on this.
2949 2953
2950 2954 2003-03-05 *** Released version 0.2.15pre1
2951 2955
2952 2956 2003-03-03 Fernando Perez <fperez@colorado.edu>
2953 2957
2954 2958 * IPython/FakeModule.py: Moved the former _FakeModule to a
2955 2959 separate file, because it's also needed by Magic (to fix a similar
2956 2960 pickle-related issue in @run).
2957 2961
2958 2962 2003-03-02 Fernando Perez <fperez@colorado.edu>
2959 2963
2960 2964 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2961 2965 the autocall option at runtime.
2962 2966 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2963 2967 across Magic.py to start separating Magic from InteractiveShell.
2964 2968 (Magic._ofind): Fixed to return proper namespace for dotted
2965 2969 names. Before, a dotted name would always return 'not currently
2966 2970 defined', because it would find the 'parent'. s.x would be found,
2967 2971 but since 'x' isn't defined by itself, it would get confused.
2968 2972 (Magic.magic_run): Fixed pickling problems reported by Ralf
2969 2973 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2970 2974 that I'd used when Mike Heeter reported similar issues at the
2971 2975 top-level, but now for @run. It boils down to injecting the
2972 2976 namespace where code is being executed with something that looks
2973 2977 enough like a module to fool pickle.dump(). Since a pickle stores
2974 2978 a named reference to the importing module, we need this for
2975 2979 pickles to save something sensible.
2976 2980
2977 2981 * IPython/ipmaker.py (make_IPython): added an autocall option.
2978 2982
2979 2983 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2980 2984 the auto-eval code. Now autocalling is an option, and the code is
2981 2985 also vastly safer. There is no more eval() involved at all.
2982 2986
2983 2987 2003-03-01 Fernando Perez <fperez@colorado.edu>
2984 2988
2985 2989 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2986 2990 dict with named keys instead of a tuple.
2987 2991
2988 2992 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2989 2993
2990 2994 * setup.py (make_shortcut): Fixed message about directories
2991 2995 created during Windows installation (the directories were ok, just
2992 2996 the printed message was misleading). Thanks to Chris Liechti
2993 2997 <cliechti-AT-gmx.net> for the heads up.
2994 2998
2995 2999 2003-02-21 Fernando Perez <fperez@colorado.edu>
2996 3000
2997 3001 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2998 3002 of ValueError exception when checking for auto-execution. This
2999 3003 one is raised by things like Numeric arrays arr.flat when the
3000 3004 array is non-contiguous.
3001 3005
3002 3006 2003-01-31 Fernando Perez <fperez@colorado.edu>
3003 3007
3004 3008 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3005 3009 not return any value at all (even though the command would get
3006 3010 executed).
3007 3011 (xsys): Flush stdout right after printing the command to ensure
3008 3012 proper ordering of commands and command output in the total
3009 3013 output.
3010 3014 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3011 3015 system/getoutput as defaults. The old ones are kept for
3012 3016 compatibility reasons, so no code which uses this library needs
3013 3017 changing.
3014 3018
3015 3019 2003-01-27 *** Released version 0.2.14
3016 3020
3017 3021 2003-01-25 Fernando Perez <fperez@colorado.edu>
3018 3022
3019 3023 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3020 3024 functions defined in previous edit sessions could not be re-edited
3021 3025 (because the temp files were immediately removed). Now temp files
3022 3026 are removed only at IPython's exit.
3023 3027 (Magic.magic_run): Improved @run to perform shell-like expansions
3024 3028 on its arguments (~users and $VARS). With this, @run becomes more
3025 3029 like a normal command-line.
3026 3030
3027 3031 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3028 3032 bugs related to embedding and cleaned up that code. A fairly
3029 3033 important one was the impossibility to access the global namespace
3030 3034 through the embedded IPython (only local variables were visible).
3031 3035
3032 3036 2003-01-14 Fernando Perez <fperez@colorado.edu>
3033 3037
3034 3038 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3035 3039 auto-calling to be a bit more conservative. Now it doesn't get
3036 3040 triggered if any of '!=()<>' are in the rest of the input line, to
3037 3041 allow comparing callables. Thanks to Alex for the heads up.
3038 3042
3039 3043 2003-01-07 Fernando Perez <fperez@colorado.edu>
3040 3044
3041 3045 * IPython/genutils.py (page): fixed estimation of the number of
3042 3046 lines in a string to be paged to simply count newlines. This
3043 3047 prevents over-guessing due to embedded escape sequences. A better
3044 3048 long-term solution would involve stripping out the control chars
3045 3049 for the count, but it's potentially so expensive I just don't
3046 3050 think it's worth doing.
3047 3051
3048 3052 2002-12-19 *** Released version 0.2.14pre50
3049 3053
3050 3054 2002-12-19 Fernando Perez <fperez@colorado.edu>
3051 3055
3052 3056 * tools/release (version): Changed release scripts to inform
3053 3057 Andrea and build a NEWS file with a list of recent changes.
3054 3058
3055 3059 * IPython/ColorANSI.py (__all__): changed terminal detection
3056 3060 code. Seems to work better for xterms without breaking
3057 3061 konsole. Will need more testing to determine if WinXP and Mac OSX
3058 3062 also work ok.
3059 3063
3060 3064 2002-12-18 *** Released version 0.2.14pre49
3061 3065
3062 3066 2002-12-18 Fernando Perez <fperez@colorado.edu>
3063 3067
3064 3068 * Docs: added new info about Mac OSX, from Andrea.
3065 3069
3066 3070 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3067 3071 allow direct plotting of python strings whose format is the same
3068 3072 of gnuplot data files.
3069 3073
3070 3074 2002-12-16 Fernando Perez <fperez@colorado.edu>
3071 3075
3072 3076 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3073 3077 value of exit question to be acknowledged.
3074 3078
3075 3079 2002-12-03 Fernando Perez <fperez@colorado.edu>
3076 3080
3077 3081 * IPython/ipmaker.py: removed generators, which had been added
3078 3082 by mistake in an earlier debugging run. This was causing trouble
3079 3083 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3080 3084 for pointing this out.
3081 3085
3082 3086 2002-11-17 Fernando Perez <fperez@colorado.edu>
3083 3087
3084 3088 * Manual: updated the Gnuplot section.
3085 3089
3086 3090 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3087 3091 a much better split of what goes in Runtime and what goes in
3088 3092 Interactive.
3089 3093
3090 3094 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3091 3095 being imported from iplib.
3092 3096
3093 3097 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3094 3098 for command-passing. Now the global Gnuplot instance is called
3095 3099 'gp' instead of 'g', which was really a far too fragile and
3096 3100 common name.
3097 3101
3098 3102 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3099 3103 bounding boxes generated by Gnuplot for square plots.
3100 3104
3101 3105 * IPython/genutils.py (popkey): new function added. I should
3102 3106 suggest this on c.l.py as a dict method, it seems useful.
3103 3107
3104 3108 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3105 3109 to transparently handle PostScript generation. MUCH better than
3106 3110 the previous plot_eps/replot_eps (which I removed now). The code
3107 3111 is also fairly clean and well documented now (including
3108 3112 docstrings).
3109 3113
3110 3114 2002-11-13 Fernando Perez <fperez@colorado.edu>
3111 3115
3112 3116 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3113 3117 (inconsistent with options).
3114 3118
3115 3119 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3116 3120 manually disabled, I don't know why. Fixed it.
3117 3121 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3118 3122 eps output.
3119 3123
3120 3124 2002-11-12 Fernando Perez <fperez@colorado.edu>
3121 3125
3122 3126 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3123 3127 don't propagate up to caller. Fixes crash reported by François
3124 3128 Pinard.
3125 3129
3126 3130 2002-11-09 Fernando Perez <fperez@colorado.edu>
3127 3131
3128 3132 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3129 3133 history file for new users.
3130 3134 (make_IPython): fixed bug where initial install would leave the
3131 3135 user running in the .ipython dir.
3132 3136 (make_IPython): fixed bug where config dir .ipython would be
3133 3137 created regardless of the given -ipythondir option. Thanks to Cory
3134 3138 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3135 3139
3136 3140 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3137 3141 type confirmations. Will need to use it in all of IPython's code
3138 3142 consistently.
3139 3143
3140 3144 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3141 3145 context to print 31 lines instead of the default 5. This will make
3142 3146 the crash reports extremely detailed in case the problem is in
3143 3147 libraries I don't have access to.
3144 3148
3145 3149 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3146 3150 line of defense' code to still crash, but giving users fair
3147 3151 warning. I don't want internal errors to go unreported: if there's
3148 3152 an internal problem, IPython should crash and generate a full
3149 3153 report.
3150 3154
3151 3155 2002-11-08 Fernando Perez <fperez@colorado.edu>
3152 3156
3153 3157 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3154 3158 otherwise uncaught exceptions which can appear if people set
3155 3159 sys.stdout to something badly broken. Thanks to a crash report
3156 3160 from henni-AT-mail.brainbot.com.
3157 3161
3158 3162 2002-11-04 Fernando Perez <fperez@colorado.edu>
3159 3163
3160 3164 * IPython/iplib.py (InteractiveShell.interact): added
3161 3165 __IPYTHON__active to the builtins. It's a flag which goes on when
3162 3166 the interaction starts and goes off again when it stops. This
3163 3167 allows embedding code to detect being inside IPython. Before this
3164 3168 was done via __IPYTHON__, but that only shows that an IPython
3165 3169 instance has been created.
3166 3170
3167 3171 * IPython/Magic.py (Magic.magic_env): I realized that in a
3168 3172 UserDict, instance.data holds the data as a normal dict. So I
3169 3173 modified @env to return os.environ.data instead of rebuilding a
3170 3174 dict by hand.
3171 3175
3172 3176 2002-11-02 Fernando Perez <fperez@colorado.edu>
3173 3177
3174 3178 * IPython/genutils.py (warn): changed so that level 1 prints no
3175 3179 header. Level 2 is now the default (with 'WARNING' header, as
3176 3180 before). I think I tracked all places where changes were needed in
3177 3181 IPython, but outside code using the old level numbering may have
3178 3182 broken.
3179 3183
3180 3184 * IPython/iplib.py (InteractiveShell.runcode): added this to
3181 3185 handle the tracebacks in SystemExit traps correctly. The previous
3182 3186 code (through interact) was printing more of the stack than
3183 3187 necessary, showing IPython internal code to the user.
3184 3188
3185 3189 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3186 3190 default. Now that the default at the confirmation prompt is yes,
3187 3191 it's not so intrusive. François' argument that ipython sessions
3188 3192 tend to be complex enough not to lose them from an accidental C-d,
3189 3193 is a valid one.
3190 3194
3191 3195 * IPython/iplib.py (InteractiveShell.interact): added a
3192 3196 showtraceback() call to the SystemExit trap, and modified the exit
3193 3197 confirmation to have yes as the default.
3194 3198
3195 3199 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3196 3200 this file. It's been gone from the code for a long time, this was
3197 3201 simply leftover junk.
3198 3202
3199 3203 2002-11-01 Fernando Perez <fperez@colorado.edu>
3200 3204
3201 3205 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3202 3206 added. If set, IPython now traps EOF and asks for
3203 3207 confirmation. After a request by François Pinard.
3204 3208
3205 3209 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3206 3210 of @abort, and with a new (better) mechanism for handling the
3207 3211 exceptions.
3208 3212
3209 3213 2002-10-27 Fernando Perez <fperez@colorado.edu>
3210 3214
3211 3215 * IPython/usage.py (__doc__): updated the --help information and
3212 3216 the ipythonrc file to indicate that -log generates
3213 3217 ./ipython.log. Also fixed the corresponding info in @logstart.
3214 3218 This and several other fixes in the manuals thanks to reports by
3215 3219 François Pinard <pinard-AT-iro.umontreal.ca>.
3216 3220
3217 3221 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3218 3222 refer to @logstart (instead of @log, which doesn't exist).
3219 3223
3220 3224 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3221 3225 AttributeError crash. Thanks to Christopher Armstrong
3222 3226 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3223 3227 introduced recently (in 0.2.14pre37) with the fix to the eval
3224 3228 problem mentioned below.
3225 3229
3226 3230 2002-10-17 Fernando Perez <fperez@colorado.edu>
3227 3231
3228 3232 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3229 3233 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3230 3234
3231 3235 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3232 3236 this function to fix a problem reported by Alex Schmolck. He saw
3233 3237 it with list comprehensions and generators, which were getting
3234 3238 called twice. The real problem was an 'eval' call in testing for
3235 3239 automagic which was evaluating the input line silently.
3236 3240
3237 3241 This is a potentially very nasty bug, if the input has side
3238 3242 effects which must not be repeated. The code is much cleaner now,
3239 3243 without any blanket 'except' left and with a regexp test for
3240 3244 actual function names.
3241 3245
3242 3246 But an eval remains, which I'm not fully comfortable with. I just
3243 3247 don't know how to find out if an expression could be a callable in
3244 3248 the user's namespace without doing an eval on the string. However
3245 3249 that string is now much more strictly checked so that no code
3246 3250 slips by, so the eval should only happen for things that can
3247 3251 really be only function/method names.
3248 3252
3249 3253 2002-10-15 Fernando Perez <fperez@colorado.edu>
3250 3254
3251 3255 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3252 3256 OSX information to main manual, removed README_Mac_OSX file from
3253 3257 distribution. Also updated credits for recent additions.
3254 3258
3255 3259 2002-10-10 Fernando Perez <fperez@colorado.edu>
3256 3260
3257 3261 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3258 3262 terminal-related issues. Many thanks to Andrea Riciputi
3259 3263 <andrea.riciputi-AT-libero.it> for writing it.
3260 3264
3261 3265 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3262 3266 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3263 3267
3264 3268 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3265 3269 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3266 3270 <syver-en-AT-online.no> who both submitted patches for this problem.
3267 3271
3268 3272 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3269 3273 global embedding to make sure that things don't overwrite user
3270 3274 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3271 3275
3272 3276 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3273 3277 compatibility. Thanks to Hayden Callow
3274 3278 <h.callow-AT-elec.canterbury.ac.nz>
3275 3279
3276 3280 2002-10-04 Fernando Perez <fperez@colorado.edu>
3277 3281
3278 3282 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3279 3283 Gnuplot.File objects.
3280 3284
3281 3285 2002-07-23 Fernando Perez <fperez@colorado.edu>
3282 3286
3283 3287 * IPython/genutils.py (timing): Added timings() and timing() for
3284 3288 quick access to the most commonly needed data, the execution
3285 3289 times. Old timing() renamed to timings_out().
3286 3290
3287 3291 2002-07-18 Fernando Perez <fperez@colorado.edu>
3288 3292
3289 3293 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3290 3294 bug with nested instances disrupting the parent's tab completion.
3291 3295
3292 3296 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3293 3297 all_completions code to begin the emacs integration.
3294 3298
3295 3299 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3296 3300 argument to allow titling individual arrays when plotting.
3297 3301
3298 3302 2002-07-15 Fernando Perez <fperez@colorado.edu>
3299 3303
3300 3304 * setup.py (make_shortcut): changed to retrieve the value of
3301 3305 'Program Files' directory from the registry (this value changes in
3302 3306 non-english versions of Windows). Thanks to Thomas Fanslau
3303 3307 <tfanslau-AT-gmx.de> for the report.
3304 3308
3305 3309 2002-07-10 Fernando Perez <fperez@colorado.edu>
3306 3310
3307 3311 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3308 3312 a bug in pdb, which crashes if a line with only whitespace is
3309 3313 entered. Bug report submitted to sourceforge.
3310 3314
3311 3315 2002-07-09 Fernando Perez <fperez@colorado.edu>
3312 3316
3313 3317 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3314 3318 reporting exceptions (it's a bug in inspect.py, I just set a
3315 3319 workaround).
3316 3320
3317 3321 2002-07-08 Fernando Perez <fperez@colorado.edu>
3318 3322
3319 3323 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3320 3324 __IPYTHON__ in __builtins__ to show up in user_ns.
3321 3325
3322 3326 2002-07-03 Fernando Perez <fperez@colorado.edu>
3323 3327
3324 3328 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3325 3329 name from @gp_set_instance to @gp_set_default.
3326 3330
3327 3331 * IPython/ipmaker.py (make_IPython): default editor value set to
3328 3332 '0' (a string), to match the rc file. Otherwise will crash when
3329 3333 .strip() is called on it.
3330 3334
3331 3335
3332 3336 2002-06-28 Fernando Perez <fperez@colorado.edu>
3333 3337
3334 3338 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3335 3339 of files in current directory when a file is executed via
3336 3340 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3337 3341
3338 3342 * setup.py (manfiles): fix for rpm builds, submitted by RA
3339 3343 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3340 3344
3341 3345 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3342 3346 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3343 3347 string!). A. Schmolck caught this one.
3344 3348
3345 3349 2002-06-27 Fernando Perez <fperez@colorado.edu>
3346 3350
3347 3351 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3348 3352 defined files at the cmd line. __name__ wasn't being set to
3349 3353 __main__.
3350 3354
3351 3355 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3352 3356 regular lists and tuples besides Numeric arrays.
3353 3357
3354 3358 * IPython/Prompts.py (CachedOutput.__call__): Added output
3355 3359 supression for input ending with ';'. Similar to Mathematica and
3356 3360 Matlab. The _* vars and Out[] list are still updated, just like
3357 3361 Mathematica behaves.
3358 3362
3359 3363 2002-06-25 Fernando Perez <fperez@colorado.edu>
3360 3364
3361 3365 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3362 3366 .ini extensions for profiels under Windows.
3363 3367
3364 3368 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3365 3369 string form. Fix contributed by Alexander Schmolck
3366 3370 <a.schmolck-AT-gmx.net>
3367 3371
3368 3372 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3369 3373 pre-configured Gnuplot instance.
3370 3374
3371 3375 2002-06-21 Fernando Perez <fperez@colorado.edu>
3372 3376
3373 3377 * IPython/numutils.py (exp_safe): new function, works around the
3374 3378 underflow problems in Numeric.
3375 3379 (log2): New fn. Safe log in base 2: returns exact integer answer
3376 3380 for exact integer powers of 2.
3377 3381
3378 3382 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3379 3383 properly.
3380 3384
3381 3385 2002-06-20 Fernando Perez <fperez@colorado.edu>
3382 3386
3383 3387 * IPython/genutils.py (timing): new function like
3384 3388 Mathematica's. Similar to time_test, but returns more info.
3385 3389
3386 3390 2002-06-18 Fernando Perez <fperez@colorado.edu>
3387 3391
3388 3392 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3389 3393 according to Mike Heeter's suggestions.
3390 3394
3391 3395 2002-06-16 Fernando Perez <fperez@colorado.edu>
3392 3396
3393 3397 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3394 3398 system. GnuplotMagic is gone as a user-directory option. New files
3395 3399 make it easier to use all the gnuplot stuff both from external
3396 3400 programs as well as from IPython. Had to rewrite part of
3397 3401 hardcopy() b/c of a strange bug: often the ps files simply don't
3398 3402 get created, and require a repeat of the command (often several
3399 3403 times).
3400 3404
3401 3405 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3402 3406 resolve output channel at call time, so that if sys.stderr has
3403 3407 been redirected by user this gets honored.
3404 3408
3405 3409 2002-06-13 Fernando Perez <fperez@colorado.edu>
3406 3410
3407 3411 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3408 3412 IPShell. Kept a copy with the old names to avoid breaking people's
3409 3413 embedded code.
3410 3414
3411 3415 * IPython/ipython: simplified it to the bare minimum after
3412 3416 Holger's suggestions. Added info about how to use it in
3413 3417 PYTHONSTARTUP.
3414 3418
3415 3419 * IPython/Shell.py (IPythonShell): changed the options passing
3416 3420 from a string with funky %s replacements to a straight list. Maybe
3417 3421 a bit more typing, but it follows sys.argv conventions, so there's
3418 3422 less special-casing to remember.
3419 3423
3420 3424 2002-06-12 Fernando Perez <fperez@colorado.edu>
3421 3425
3422 3426 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3423 3427 command. Thanks to a suggestion by Mike Heeter.
3424 3428 (Magic.magic_pfile): added behavior to look at filenames if given
3425 3429 arg is not a defined object.
3426 3430 (Magic.magic_save): New @save function to save code snippets. Also
3427 3431 a Mike Heeter idea.
3428 3432
3429 3433 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3430 3434 plot() and replot(). Much more convenient now, especially for
3431 3435 interactive use.
3432 3436
3433 3437 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3434 3438 filenames.
3435 3439
3436 3440 2002-06-02 Fernando Perez <fperez@colorado.edu>
3437 3441
3438 3442 * IPython/Struct.py (Struct.__init__): modified to admit
3439 3443 initialization via another struct.
3440 3444
3441 3445 * IPython/genutils.py (SystemExec.__init__): New stateful
3442 3446 interface to xsys and bq. Useful for writing system scripts.
3443 3447
3444 3448 2002-05-30 Fernando Perez <fperez@colorado.edu>
3445 3449
3446 3450 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3447 3451 documents. This will make the user download smaller (it's getting
3448 3452 too big).
3449 3453
3450 3454 2002-05-29 Fernando Perez <fperez@colorado.edu>
3451 3455
3452 3456 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3453 3457 fix problems with shelve and pickle. Seems to work, but I don't
3454 3458 know if corner cases break it. Thanks to Mike Heeter
3455 3459 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3456 3460
3457 3461 2002-05-24 Fernando Perez <fperez@colorado.edu>
3458 3462
3459 3463 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3460 3464 macros having broken.
3461 3465
3462 3466 2002-05-21 Fernando Perez <fperez@colorado.edu>
3463 3467
3464 3468 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3465 3469 introduced logging bug: all history before logging started was
3466 3470 being written one character per line! This came from the redesign
3467 3471 of the input history as a special list which slices to strings,
3468 3472 not to lists.
3469 3473
3470 3474 2002-05-20 Fernando Perez <fperez@colorado.edu>
3471 3475
3472 3476 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3473 3477 be an attribute of all classes in this module. The design of these
3474 3478 classes needs some serious overhauling.
3475 3479
3476 3480 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3477 3481 which was ignoring '_' in option names.
3478 3482
3479 3483 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3480 3484 'Verbose_novars' to 'Context' and made it the new default. It's a
3481 3485 bit more readable and also safer than verbose.
3482 3486
3483 3487 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3484 3488 triple-quoted strings.
3485 3489
3486 3490 * IPython/OInspect.py (__all__): new module exposing the object
3487 3491 introspection facilities. Now the corresponding magics are dummy
3488 3492 wrappers around this. Having this module will make it much easier
3489 3493 to put these functions into our modified pdb.
3490 3494 This new object inspector system uses the new colorizing module,
3491 3495 so source code and other things are nicely syntax highlighted.
3492 3496
3493 3497 2002-05-18 Fernando Perez <fperez@colorado.edu>
3494 3498
3495 3499 * IPython/ColorANSI.py: Split the coloring tools into a separate
3496 3500 module so I can use them in other code easier (they were part of
3497 3501 ultraTB).
3498 3502
3499 3503 2002-05-17 Fernando Perez <fperez@colorado.edu>
3500 3504
3501 3505 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3502 3506 fixed it to set the global 'g' also to the called instance, as
3503 3507 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3504 3508 user's 'g' variables).
3505 3509
3506 3510 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3507 3511 global variables (aliases to _ih,_oh) so that users which expect
3508 3512 In[5] or Out[7] to work aren't unpleasantly surprised.
3509 3513 (InputList.__getslice__): new class to allow executing slices of
3510 3514 input history directly. Very simple class, complements the use of
3511 3515 macros.
3512 3516
3513 3517 2002-05-16 Fernando Perez <fperez@colorado.edu>
3514 3518
3515 3519 * setup.py (docdirbase): make doc directory be just doc/IPython
3516 3520 without version numbers, it will reduce clutter for users.
3517 3521
3518 3522 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3519 3523 execfile call to prevent possible memory leak. See for details:
3520 3524 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3521 3525
3522 3526 2002-05-15 Fernando Perez <fperez@colorado.edu>
3523 3527
3524 3528 * IPython/Magic.py (Magic.magic_psource): made the object
3525 3529 introspection names be more standard: pdoc, pdef, pfile and
3526 3530 psource. They all print/page their output, and it makes
3527 3531 remembering them easier. Kept old names for compatibility as
3528 3532 aliases.
3529 3533
3530 3534 2002-05-14 Fernando Perez <fperez@colorado.edu>
3531 3535
3532 3536 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3533 3537 what the mouse problem was. The trick is to use gnuplot with temp
3534 3538 files and NOT with pipes (for data communication), because having
3535 3539 both pipes and the mouse on is bad news.
3536 3540
3537 3541 2002-05-13 Fernando Perez <fperez@colorado.edu>
3538 3542
3539 3543 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3540 3544 bug. Information would be reported about builtins even when
3541 3545 user-defined functions overrode them.
3542 3546
3543 3547 2002-05-11 Fernando Perez <fperez@colorado.edu>
3544 3548
3545 3549 * IPython/__init__.py (__all__): removed FlexCompleter from
3546 3550 __all__ so that things don't fail in platforms without readline.
3547 3551
3548 3552 2002-05-10 Fernando Perez <fperez@colorado.edu>
3549 3553
3550 3554 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3551 3555 it requires Numeric, effectively making Numeric a dependency for
3552 3556 IPython.
3553 3557
3554 3558 * Released 0.2.13
3555 3559
3556 3560 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3557 3561 profiler interface. Now all the major options from the profiler
3558 3562 module are directly supported in IPython, both for single
3559 3563 expressions (@prun) and for full programs (@run -p).
3560 3564
3561 3565 2002-05-09 Fernando Perez <fperez@colorado.edu>
3562 3566
3563 3567 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3564 3568 magic properly formatted for screen.
3565 3569
3566 3570 * setup.py (make_shortcut): Changed things to put pdf version in
3567 3571 doc/ instead of doc/manual (had to change lyxport a bit).
3568 3572
3569 3573 * IPython/Magic.py (Profile.string_stats): made profile runs go
3570 3574 through pager (they are long and a pager allows searching, saving,
3571 3575 etc.)
3572 3576
3573 3577 2002-05-08 Fernando Perez <fperez@colorado.edu>
3574 3578
3575 3579 * Released 0.2.12
3576 3580
3577 3581 2002-05-06 Fernando Perez <fperez@colorado.edu>
3578 3582
3579 3583 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3580 3584 introduced); 'hist n1 n2' was broken.
3581 3585 (Magic.magic_pdb): added optional on/off arguments to @pdb
3582 3586 (Magic.magic_run): added option -i to @run, which executes code in
3583 3587 the IPython namespace instead of a clean one. Also added @irun as
3584 3588 an alias to @run -i.
3585 3589
3586 3590 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3587 3591 fixed (it didn't really do anything, the namespaces were wrong).
3588 3592
3589 3593 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3590 3594
3591 3595 * IPython/__init__.py (__all__): Fixed package namespace, now
3592 3596 'import IPython' does give access to IPython.<all> as
3593 3597 expected. Also renamed __release__ to Release.
3594 3598
3595 3599 * IPython/Debugger.py (__license__): created new Pdb class which
3596 3600 functions like a drop-in for the normal pdb.Pdb but does NOT
3597 3601 import readline by default. This way it doesn't muck up IPython's
3598 3602 readline handling, and now tab-completion finally works in the
3599 3603 debugger -- sort of. It completes things globally visible, but the
3600 3604 completer doesn't track the stack as pdb walks it. That's a bit
3601 3605 tricky, and I'll have to implement it later.
3602 3606
3603 3607 2002-05-05 Fernando Perez <fperez@colorado.edu>
3604 3608
3605 3609 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3606 3610 magic docstrings when printed via ? (explicit \'s were being
3607 3611 printed).
3608 3612
3609 3613 * IPython/ipmaker.py (make_IPython): fixed namespace
3610 3614 identification bug. Now variables loaded via logs or command-line
3611 3615 files are recognized in the interactive namespace by @who.
3612 3616
3613 3617 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3614 3618 log replay system stemming from the string form of Structs.
3615 3619
3616 3620 * IPython/Magic.py (Macro.__init__): improved macros to properly
3617 3621 handle magic commands in them.
3618 3622 (Magic.magic_logstart): usernames are now expanded so 'logstart
3619 3623 ~/mylog' now works.
3620 3624
3621 3625 * IPython/iplib.py (complete): fixed bug where paths starting with
3622 3626 '/' would be completed as magic names.
3623 3627
3624 3628 2002-05-04 Fernando Perez <fperez@colorado.edu>
3625 3629
3626 3630 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3627 3631 allow running full programs under the profiler's control.
3628 3632
3629 3633 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3630 3634 mode to report exceptions verbosely but without formatting
3631 3635 variables. This addresses the issue of ipython 'freezing' (it's
3632 3636 not frozen, but caught in an expensive formatting loop) when huge
3633 3637 variables are in the context of an exception.
3634 3638 (VerboseTB.text): Added '--->' markers at line where exception was
3635 3639 triggered. Much clearer to read, especially in NoColor modes.
3636 3640
3637 3641 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3638 3642 implemented in reverse when changing to the new parse_options().
3639 3643
3640 3644 2002-05-03 Fernando Perez <fperez@colorado.edu>
3641 3645
3642 3646 * IPython/Magic.py (Magic.parse_options): new function so that
3643 3647 magics can parse options easier.
3644 3648 (Magic.magic_prun): new function similar to profile.run(),
3645 3649 suggested by Chris Hart.
3646 3650 (Magic.magic_cd): fixed behavior so that it only changes if
3647 3651 directory actually is in history.
3648 3652
3649 3653 * IPython/usage.py (__doc__): added information about potential
3650 3654 slowness of Verbose exception mode when there are huge data
3651 3655 structures to be formatted (thanks to Archie Paulson).
3652 3656
3653 3657 * IPython/ipmaker.py (make_IPython): Changed default logging
3654 3658 (when simply called with -log) to use curr_dir/ipython.log in
3655 3659 rotate mode. Fixed crash which was occuring with -log before
3656 3660 (thanks to Jim Boyle).
3657 3661
3658 3662 2002-05-01 Fernando Perez <fperez@colorado.edu>
3659 3663
3660 3664 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3661 3665 was nasty -- though somewhat of a corner case).
3662 3666
3663 3667 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3664 3668 text (was a bug).
3665 3669
3666 3670 2002-04-30 Fernando Perez <fperez@colorado.edu>
3667 3671
3668 3672 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3669 3673 a print after ^D or ^C from the user so that the In[] prompt
3670 3674 doesn't over-run the gnuplot one.
3671 3675
3672 3676 2002-04-29 Fernando Perez <fperez@colorado.edu>
3673 3677
3674 3678 * Released 0.2.10
3675 3679
3676 3680 * IPython/__release__.py (version): get date dynamically.
3677 3681
3678 3682 * Misc. documentation updates thanks to Arnd's comments. Also ran
3679 3683 a full spellcheck on the manual (hadn't been done in a while).
3680 3684
3681 3685 2002-04-27 Fernando Perez <fperez@colorado.edu>
3682 3686
3683 3687 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3684 3688 starting a log in mid-session would reset the input history list.
3685 3689
3686 3690 2002-04-26 Fernando Perez <fperez@colorado.edu>
3687 3691
3688 3692 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3689 3693 all files were being included in an update. Now anything in
3690 3694 UserConfig that matches [A-Za-z]*.py will go (this excludes
3691 3695 __init__.py)
3692 3696
3693 3697 2002-04-25 Fernando Perez <fperez@colorado.edu>
3694 3698
3695 3699 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3696 3700 to __builtins__ so that any form of embedded or imported code can
3697 3701 test for being inside IPython.
3698 3702
3699 3703 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3700 3704 changed to GnuplotMagic because it's now an importable module,
3701 3705 this makes the name follow that of the standard Gnuplot module.
3702 3706 GnuplotMagic can now be loaded at any time in mid-session.
3703 3707
3704 3708 2002-04-24 Fernando Perez <fperez@colorado.edu>
3705 3709
3706 3710 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3707 3711 the globals (IPython has its own namespace) and the
3708 3712 PhysicalQuantity stuff is much better anyway.
3709 3713
3710 3714 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3711 3715 embedding example to standard user directory for
3712 3716 distribution. Also put it in the manual.
3713 3717
3714 3718 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3715 3719 instance as first argument (so it doesn't rely on some obscure
3716 3720 hidden global).
3717 3721
3718 3722 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3719 3723 delimiters. While it prevents ().TAB from working, it allows
3720 3724 completions in open (... expressions. This is by far a more common
3721 3725 case.
3722 3726
3723 3727 2002-04-23 Fernando Perez <fperez@colorado.edu>
3724 3728
3725 3729 * IPython/Extensions/InterpreterPasteInput.py: new
3726 3730 syntax-processing module for pasting lines with >>> or ... at the
3727 3731 start.
3728 3732
3729 3733 * IPython/Extensions/PhysicalQ_Interactive.py
3730 3734 (PhysicalQuantityInteractive.__int__): fixed to work with either
3731 3735 Numeric or math.
3732 3736
3733 3737 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3734 3738 provided profiles. Now we have:
3735 3739 -math -> math module as * and cmath with its own namespace.
3736 3740 -numeric -> Numeric as *, plus gnuplot & grace
3737 3741 -physics -> same as before
3738 3742
3739 3743 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3740 3744 user-defined magics wouldn't be found by @magic if they were
3741 3745 defined as class methods. Also cleaned up the namespace search
3742 3746 logic and the string building (to use %s instead of many repeated
3743 3747 string adds).
3744 3748
3745 3749 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3746 3750 of user-defined magics to operate with class methods (cleaner, in
3747 3751 line with the gnuplot code).
3748 3752
3749 3753 2002-04-22 Fernando Perez <fperez@colorado.edu>
3750 3754
3751 3755 * setup.py: updated dependency list so that manual is updated when
3752 3756 all included files change.
3753 3757
3754 3758 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3755 3759 the delimiter removal option (the fix is ugly right now).
3756 3760
3757 3761 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3758 3762 all of the math profile (quicker loading, no conflict between
3759 3763 g-9.8 and g-gnuplot).
3760 3764
3761 3765 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3762 3766 name of post-mortem files to IPython_crash_report.txt.
3763 3767
3764 3768 * Cleanup/update of the docs. Added all the new readline info and
3765 3769 formatted all lists as 'real lists'.
3766 3770
3767 3771 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3768 3772 tab-completion options, since the full readline parse_and_bind is
3769 3773 now accessible.
3770 3774
3771 3775 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3772 3776 handling of readline options. Now users can specify any string to
3773 3777 be passed to parse_and_bind(), as well as the delimiters to be
3774 3778 removed.
3775 3779 (InteractiveShell.__init__): Added __name__ to the global
3776 3780 namespace so that things like Itpl which rely on its existence
3777 3781 don't crash.
3778 3782 (InteractiveShell._prefilter): Defined the default with a _ so
3779 3783 that prefilter() is easier to override, while the default one
3780 3784 remains available.
3781 3785
3782 3786 2002-04-18 Fernando Perez <fperez@colorado.edu>
3783 3787
3784 3788 * Added information about pdb in the docs.
3785 3789
3786 3790 2002-04-17 Fernando Perez <fperez@colorado.edu>
3787 3791
3788 3792 * IPython/ipmaker.py (make_IPython): added rc_override option to
3789 3793 allow passing config options at creation time which may override
3790 3794 anything set in the config files or command line. This is
3791 3795 particularly useful for configuring embedded instances.
3792 3796
3793 3797 2002-04-15 Fernando Perez <fperez@colorado.edu>
3794 3798
3795 3799 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3796 3800 crash embedded instances because of the input cache falling out of
3797 3801 sync with the output counter.
3798 3802
3799 3803 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3800 3804 mode which calls pdb after an uncaught exception in IPython itself.
3801 3805
3802 3806 2002-04-14 Fernando Perez <fperez@colorado.edu>
3803 3807
3804 3808 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3805 3809 readline, fix it back after each call.
3806 3810
3807 3811 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3808 3812 method to force all access via __call__(), which guarantees that
3809 3813 traceback references are properly deleted.
3810 3814
3811 3815 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3812 3816 improve printing when pprint is in use.
3813 3817
3814 3818 2002-04-13 Fernando Perez <fperez@colorado.edu>
3815 3819
3816 3820 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3817 3821 exceptions aren't caught anymore. If the user triggers one, he
3818 3822 should know why he's doing it and it should go all the way up,
3819 3823 just like any other exception. So now @abort will fully kill the
3820 3824 embedded interpreter and the embedding code (unless that happens
3821 3825 to catch SystemExit).
3822 3826
3823 3827 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3824 3828 and a debugger() method to invoke the interactive pdb debugger
3825 3829 after printing exception information. Also added the corresponding
3826 3830 -pdb option and @pdb magic to control this feature, and updated
3827 3831 the docs. After a suggestion from Christopher Hart
3828 3832 (hart-AT-caltech.edu).
3829 3833
3830 3834 2002-04-12 Fernando Perez <fperez@colorado.edu>
3831 3835
3832 3836 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3833 3837 the exception handlers defined by the user (not the CrashHandler)
3834 3838 so that user exceptions don't trigger an ipython bug report.
3835 3839
3836 3840 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3837 3841 configurable (it should have always been so).
3838 3842
3839 3843 2002-03-26 Fernando Perez <fperez@colorado.edu>
3840 3844
3841 3845 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3842 3846 and there to fix embedding namespace issues. This should all be
3843 3847 done in a more elegant way.
3844 3848
3845 3849 2002-03-25 Fernando Perez <fperez@colorado.edu>
3846 3850
3847 3851 * IPython/genutils.py (get_home_dir): Try to make it work under
3848 3852 win9x also.
3849 3853
3850 3854 2002-03-20 Fernando Perez <fperez@colorado.edu>
3851 3855
3852 3856 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3853 3857 sys.displayhook untouched upon __init__.
3854 3858
3855 3859 2002-03-19 Fernando Perez <fperez@colorado.edu>
3856 3860
3857 3861 * Released 0.2.9 (for embedding bug, basically).
3858 3862
3859 3863 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3860 3864 exceptions so that enclosing shell's state can be restored.
3861 3865
3862 3866 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3863 3867 naming conventions in the .ipython/ dir.
3864 3868
3865 3869 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3866 3870 from delimiters list so filenames with - in them get expanded.
3867 3871
3868 3872 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3869 3873 sys.displayhook not being properly restored after an embedded call.
3870 3874
3871 3875 2002-03-18 Fernando Perez <fperez@colorado.edu>
3872 3876
3873 3877 * Released 0.2.8
3874 3878
3875 3879 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3876 3880 some files weren't being included in a -upgrade.
3877 3881 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3878 3882 on' so that the first tab completes.
3879 3883 (InteractiveShell.handle_magic): fixed bug with spaces around
3880 3884 quotes breaking many magic commands.
3881 3885
3882 3886 * setup.py: added note about ignoring the syntax error messages at
3883 3887 installation.
3884 3888
3885 3889 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3886 3890 streamlining the gnuplot interface, now there's only one magic @gp.
3887 3891
3888 3892 2002-03-17 Fernando Perez <fperez@colorado.edu>
3889 3893
3890 3894 * IPython/UserConfig/magic_gnuplot.py: new name for the
3891 3895 example-magic_pm.py file. Much enhanced system, now with a shell
3892 3896 for communicating directly with gnuplot, one command at a time.
3893 3897
3894 3898 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3895 3899 setting __name__=='__main__'.
3896 3900
3897 3901 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3898 3902 mini-shell for accessing gnuplot from inside ipython. Should
3899 3903 extend it later for grace access too. Inspired by Arnd's
3900 3904 suggestion.
3901 3905
3902 3906 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3903 3907 calling magic functions with () in their arguments. Thanks to Arnd
3904 3908 Baecker for pointing this to me.
3905 3909
3906 3910 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3907 3911 infinitely for integer or complex arrays (only worked with floats).
3908 3912
3909 3913 2002-03-16 Fernando Perez <fperez@colorado.edu>
3910 3914
3911 3915 * setup.py: Merged setup and setup_windows into a single script
3912 3916 which properly handles things for windows users.
3913 3917
3914 3918 2002-03-15 Fernando Perez <fperez@colorado.edu>
3915 3919
3916 3920 * Big change to the manual: now the magics are all automatically
3917 3921 documented. This information is generated from their docstrings
3918 3922 and put in a latex file included by the manual lyx file. This way
3919 3923 we get always up to date information for the magics. The manual
3920 3924 now also has proper version information, also auto-synced.
3921 3925
3922 3926 For this to work, an undocumented --magic_docstrings option was added.
3923 3927
3924 3928 2002-03-13 Fernando Perez <fperez@colorado.edu>
3925 3929
3926 3930 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3927 3931 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3928 3932
3929 3933 2002-03-12 Fernando Perez <fperez@colorado.edu>
3930 3934
3931 3935 * IPython/ultraTB.py (TermColors): changed color escapes again to
3932 3936 fix the (old, reintroduced) line-wrapping bug. Basically, if
3933 3937 \001..\002 aren't given in the color escapes, lines get wrapped
3934 3938 weirdly. But giving those screws up old xterms and emacs terms. So
3935 3939 I added some logic for emacs terms to be ok, but I can't identify old
3936 3940 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3937 3941
3938 3942 2002-03-10 Fernando Perez <fperez@colorado.edu>
3939 3943
3940 3944 * IPython/usage.py (__doc__): Various documentation cleanups and
3941 3945 updates, both in usage docstrings and in the manual.
3942 3946
3943 3947 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3944 3948 handling of caching. Set minimum acceptabe value for having a
3945 3949 cache at 20 values.
3946 3950
3947 3951 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3948 3952 install_first_time function to a method, renamed it and added an
3949 3953 'upgrade' mode. Now people can update their config directory with
3950 3954 a simple command line switch (-upgrade, also new).
3951 3955
3952 3956 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3953 3957 @file (convenient for automagic users under Python >= 2.2).
3954 3958 Removed @files (it seemed more like a plural than an abbrev. of
3955 3959 'file show').
3956 3960
3957 3961 * IPython/iplib.py (install_first_time): Fixed crash if there were
3958 3962 backup files ('~') in .ipython/ install directory.
3959 3963
3960 3964 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3961 3965 system. Things look fine, but these changes are fairly
3962 3966 intrusive. Test them for a few days.
3963 3967
3964 3968 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3965 3969 the prompts system. Now all in/out prompt strings are user
3966 3970 controllable. This is particularly useful for embedding, as one
3967 3971 can tag embedded instances with particular prompts.
3968 3972
3969 3973 Also removed global use of sys.ps1/2, which now allows nested
3970 3974 embeddings without any problems. Added command-line options for
3971 3975 the prompt strings.
3972 3976
3973 3977 2002-03-08 Fernando Perez <fperez@colorado.edu>
3974 3978
3975 3979 * IPython/UserConfig/example-embed-short.py (ipshell): added
3976 3980 example file with the bare minimum code for embedding.
3977 3981
3978 3982 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3979 3983 functionality for the embeddable shell to be activated/deactivated
3980 3984 either globally or at each call.
3981 3985
3982 3986 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3983 3987 rewriting the prompt with '--->' for auto-inputs with proper
3984 3988 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3985 3989 this is handled by the prompts class itself, as it should.
3986 3990
3987 3991 2002-03-05 Fernando Perez <fperez@colorado.edu>
3988 3992
3989 3993 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3990 3994 @logstart to avoid name clashes with the math log function.
3991 3995
3992 3996 * Big updates to X/Emacs section of the manual.
3993 3997
3994 3998 * Removed ipython_emacs. Milan explained to me how to pass
3995 3999 arguments to ipython through Emacs. Some day I'm going to end up
3996 4000 learning some lisp...
3997 4001
3998 4002 2002-03-04 Fernando Perez <fperez@colorado.edu>
3999 4003
4000 4004 * IPython/ipython_emacs: Created script to be used as the
4001 4005 py-python-command Emacs variable so we can pass IPython
4002 4006 parameters. I can't figure out how to tell Emacs directly to pass
4003 4007 parameters to IPython, so a dummy shell script will do it.
4004 4008
4005 4009 Other enhancements made for things to work better under Emacs'
4006 4010 various types of terminals. Many thanks to Milan Zamazal
4007 4011 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4008 4012
4009 4013 2002-03-01 Fernando Perez <fperez@colorado.edu>
4010 4014
4011 4015 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4012 4016 that loading of readline is now optional. This gives better
4013 4017 control to emacs users.
4014 4018
4015 4019 * IPython/ultraTB.py (__date__): Modified color escape sequences
4016 4020 and now things work fine under xterm and in Emacs' term buffers
4017 4021 (though not shell ones). Well, in emacs you get colors, but all
4018 4022 seem to be 'light' colors (no difference between dark and light
4019 4023 ones). But the garbage chars are gone, and also in xterms. It
4020 4024 seems that now I'm using 'cleaner' ansi sequences.
4021 4025
4022 4026 2002-02-21 Fernando Perez <fperez@colorado.edu>
4023 4027
4024 4028 * Released 0.2.7 (mainly to publish the scoping fix).
4025 4029
4026 4030 * IPython/Logger.py (Logger.logstate): added. A corresponding
4027 4031 @logstate magic was created.
4028 4032
4029 4033 * IPython/Magic.py: fixed nested scoping problem under Python
4030 4034 2.1.x (automagic wasn't working).
4031 4035
4032 4036 2002-02-20 Fernando Perez <fperez@colorado.edu>
4033 4037
4034 4038 * Released 0.2.6.
4035 4039
4036 4040 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4037 4041 option so that logs can come out without any headers at all.
4038 4042
4039 4043 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4040 4044 SciPy.
4041 4045
4042 4046 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4043 4047 that embedded IPython calls don't require vars() to be explicitly
4044 4048 passed. Now they are extracted from the caller's frame (code
4045 4049 snatched from Eric Jones' weave). Added better documentation to
4046 4050 the section on embedding and the example file.
4047 4051
4048 4052 * IPython/genutils.py (page): Changed so that under emacs, it just
4049 4053 prints the string. You can then page up and down in the emacs
4050 4054 buffer itself. This is how the builtin help() works.
4051 4055
4052 4056 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4053 4057 macro scoping: macros need to be executed in the user's namespace
4054 4058 to work as if they had been typed by the user.
4055 4059
4056 4060 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4057 4061 execute automatically (no need to type 'exec...'). They then
4058 4062 behave like 'true macros'. The printing system was also modified
4059 4063 for this to work.
4060 4064
4061 4065 2002-02-19 Fernando Perez <fperez@colorado.edu>
4062 4066
4063 4067 * IPython/genutils.py (page_file): new function for paging files
4064 4068 in an OS-independent way. Also necessary for file viewing to work
4065 4069 well inside Emacs buffers.
4066 4070 (page): Added checks for being in an emacs buffer.
4067 4071 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4068 4072 same bug in iplib.
4069 4073
4070 4074 2002-02-18 Fernando Perez <fperez@colorado.edu>
4071 4075
4072 4076 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4073 4077 of readline so that IPython can work inside an Emacs buffer.
4074 4078
4075 4079 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4076 4080 method signatures (they weren't really bugs, but it looks cleaner
4077 4081 and keeps PyChecker happy).
4078 4082
4079 4083 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4080 4084 for implementing various user-defined hooks. Currently only
4081 4085 display is done.
4082 4086
4083 4087 * IPython/Prompts.py (CachedOutput._display): changed display
4084 4088 functions so that they can be dynamically changed by users easily.
4085 4089
4086 4090 * IPython/Extensions/numeric_formats.py (num_display): added an
4087 4091 extension for printing NumPy arrays in flexible manners. It
4088 4092 doesn't do anything yet, but all the structure is in
4089 4093 place. Ultimately the plan is to implement output format control
4090 4094 like in Octave.
4091 4095
4092 4096 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4093 4097 methods are found at run-time by all the automatic machinery.
4094 4098
4095 4099 2002-02-17 Fernando Perez <fperez@colorado.edu>
4096 4100
4097 4101 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4098 4102 whole file a little.
4099 4103
4100 4104 * ToDo: closed this document. Now there's a new_design.lyx
4101 4105 document for all new ideas. Added making a pdf of it for the
4102 4106 end-user distro.
4103 4107
4104 4108 * IPython/Logger.py (Logger.switch_log): Created this to replace
4105 4109 logon() and logoff(). It also fixes a nasty crash reported by
4106 4110 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4107 4111
4108 4112 * IPython/iplib.py (complete): got auto-completion to work with
4109 4113 automagic (I had wanted this for a long time).
4110 4114
4111 4115 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4112 4116 to @file, since file() is now a builtin and clashes with automagic
4113 4117 for @file.
4114 4118
4115 4119 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4116 4120 of this was previously in iplib, which had grown to more than 2000
4117 4121 lines, way too long. No new functionality, but it makes managing
4118 4122 the code a bit easier.
4119 4123
4120 4124 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4121 4125 information to crash reports.
4122 4126
4123 4127 2002-02-12 Fernando Perez <fperez@colorado.edu>
4124 4128
4125 4129 * Released 0.2.5.
4126 4130
4127 4131 2002-02-11 Fernando Perez <fperez@colorado.edu>
4128 4132
4129 4133 * Wrote a relatively complete Windows installer. It puts
4130 4134 everything in place, creates Start Menu entries and fixes the
4131 4135 color issues. Nothing fancy, but it works.
4132 4136
4133 4137 2002-02-10 Fernando Perez <fperez@colorado.edu>
4134 4138
4135 4139 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4136 4140 os.path.expanduser() call so that we can type @run ~/myfile.py and
4137 4141 have thigs work as expected.
4138 4142
4139 4143 * IPython/genutils.py (page): fixed exception handling so things
4140 4144 work both in Unix and Windows correctly. Quitting a pager triggers
4141 4145 an IOError/broken pipe in Unix, and in windows not finding a pager
4142 4146 is also an IOError, so I had to actually look at the return value
4143 4147 of the exception, not just the exception itself. Should be ok now.
4144 4148
4145 4149 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4146 4150 modified to allow case-insensitive color scheme changes.
4147 4151
4148 4152 2002-02-09 Fernando Perez <fperez@colorado.edu>
4149 4153
4150 4154 * IPython/genutils.py (native_line_ends): new function to leave
4151 4155 user config files with os-native line-endings.
4152 4156
4153 4157 * README and manual updates.
4154 4158
4155 4159 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4156 4160 instead of StringType to catch Unicode strings.
4157 4161
4158 4162 * IPython/genutils.py (filefind): fixed bug for paths with
4159 4163 embedded spaces (very common in Windows).
4160 4164
4161 4165 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4162 4166 files under Windows, so that they get automatically associated
4163 4167 with a text editor. Windows makes it a pain to handle
4164 4168 extension-less files.
4165 4169
4166 4170 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4167 4171 warning about readline only occur for Posix. In Windows there's no
4168 4172 way to get readline, so why bother with the warning.
4169 4173
4170 4174 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4171 4175 for __str__ instead of dir(self), since dir() changed in 2.2.
4172 4176
4173 4177 * Ported to Windows! Tested on XP, I suspect it should work fine
4174 4178 on NT/2000, but I don't think it will work on 98 et al. That
4175 4179 series of Windows is such a piece of junk anyway that I won't try
4176 4180 porting it there. The XP port was straightforward, showed a few
4177 4181 bugs here and there (fixed all), in particular some string
4178 4182 handling stuff which required considering Unicode strings (which
4179 4183 Windows uses). This is good, but hasn't been too tested :) No
4180 4184 fancy installer yet, I'll put a note in the manual so people at
4181 4185 least make manually a shortcut.
4182 4186
4183 4187 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4184 4188 into a single one, "colors". This now controls both prompt and
4185 4189 exception color schemes, and can be changed both at startup
4186 4190 (either via command-line switches or via ipythonrc files) and at
4187 4191 runtime, with @colors.
4188 4192 (Magic.magic_run): renamed @prun to @run and removed the old
4189 4193 @run. The two were too similar to warrant keeping both.
4190 4194
4191 4195 2002-02-03 Fernando Perez <fperez@colorado.edu>
4192 4196
4193 4197 * IPython/iplib.py (install_first_time): Added comment on how to
4194 4198 configure the color options for first-time users. Put a <return>
4195 4199 request at the end so that small-terminal users get a chance to
4196 4200 read the startup info.
4197 4201
4198 4202 2002-01-23 Fernando Perez <fperez@colorado.edu>
4199 4203
4200 4204 * IPython/iplib.py (CachedOutput.update): Changed output memory
4201 4205 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4202 4206 input history we still use _i. Did this b/c these variable are
4203 4207 very commonly used in interactive work, so the less we need to
4204 4208 type the better off we are.
4205 4209 (Magic.magic_prun): updated @prun to better handle the namespaces
4206 4210 the file will run in, including a fix for __name__ not being set
4207 4211 before.
4208 4212
4209 4213 2002-01-20 Fernando Perez <fperez@colorado.edu>
4210 4214
4211 4215 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4212 4216 extra garbage for Python 2.2. Need to look more carefully into
4213 4217 this later.
4214 4218
4215 4219 2002-01-19 Fernando Perez <fperez@colorado.edu>
4216 4220
4217 4221 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4218 4222 display SyntaxError exceptions properly formatted when they occur
4219 4223 (they can be triggered by imported code).
4220 4224
4221 4225 2002-01-18 Fernando Perez <fperez@colorado.edu>
4222 4226
4223 4227 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4224 4228 SyntaxError exceptions are reported nicely formatted, instead of
4225 4229 spitting out only offset information as before.
4226 4230 (Magic.magic_prun): Added the @prun function for executing
4227 4231 programs with command line args inside IPython.
4228 4232
4229 4233 2002-01-16 Fernando Perez <fperez@colorado.edu>
4230 4234
4231 4235 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4232 4236 to *not* include the last item given in a range. This brings their
4233 4237 behavior in line with Python's slicing:
4234 4238 a[n1:n2] -> a[n1]...a[n2-1]
4235 4239 It may be a bit less convenient, but I prefer to stick to Python's
4236 4240 conventions *everywhere*, so users never have to wonder.
4237 4241 (Magic.magic_macro): Added @macro function to ease the creation of
4238 4242 macros.
4239 4243
4240 4244 2002-01-05 Fernando Perez <fperez@colorado.edu>
4241 4245
4242 4246 * Released 0.2.4.
4243 4247
4244 4248 * IPython/iplib.py (Magic.magic_pdef):
4245 4249 (InteractiveShell.safe_execfile): report magic lines and error
4246 4250 lines without line numbers so one can easily copy/paste them for
4247 4251 re-execution.
4248 4252
4249 4253 * Updated manual with recent changes.
4250 4254
4251 4255 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4252 4256 docstring printing when class? is called. Very handy for knowing
4253 4257 how to create class instances (as long as __init__ is well
4254 4258 documented, of course :)
4255 4259 (Magic.magic_doc): print both class and constructor docstrings.
4256 4260 (Magic.magic_pdef): give constructor info if passed a class and
4257 4261 __call__ info for callable object instances.
4258 4262
4259 4263 2002-01-04 Fernando Perez <fperez@colorado.edu>
4260 4264
4261 4265 * Made deep_reload() off by default. It doesn't always work
4262 4266 exactly as intended, so it's probably safer to have it off. It's
4263 4267 still available as dreload() anyway, so nothing is lost.
4264 4268
4265 4269 2002-01-02 Fernando Perez <fperez@colorado.edu>
4266 4270
4267 4271 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4268 4272 so I wanted an updated release).
4269 4273
4270 4274 2001-12-27 Fernando Perez <fperez@colorado.edu>
4271 4275
4272 4276 * IPython/iplib.py (InteractiveShell.interact): Added the original
4273 4277 code from 'code.py' for this module in order to change the
4274 4278 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4275 4279 the history cache would break when the user hit Ctrl-C, and
4276 4280 interact() offers no way to add any hooks to it.
4277 4281
4278 4282 2001-12-23 Fernando Perez <fperez@colorado.edu>
4279 4283
4280 4284 * setup.py: added check for 'MANIFEST' before trying to remove
4281 4285 it. Thanks to Sean Reifschneider.
4282 4286
4283 4287 2001-12-22 Fernando Perez <fperez@colorado.edu>
4284 4288
4285 4289 * Released 0.2.2.
4286 4290
4287 4291 * Finished (reasonably) writing the manual. Later will add the
4288 4292 python-standard navigation stylesheets, but for the time being
4289 4293 it's fairly complete. Distribution will include html and pdf
4290 4294 versions.
4291 4295
4292 4296 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4293 4297 (MayaVi author).
4294 4298
4295 4299 2001-12-21 Fernando Perez <fperez@colorado.edu>
4296 4300
4297 4301 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4298 4302 good public release, I think (with the manual and the distutils
4299 4303 installer). The manual can use some work, but that can go
4300 4304 slowly. Otherwise I think it's quite nice for end users. Next
4301 4305 summer, rewrite the guts of it...
4302 4306
4303 4307 * Changed format of ipythonrc files to use whitespace as the
4304 4308 separator instead of an explicit '='. Cleaner.
4305 4309
4306 4310 2001-12-20 Fernando Perez <fperez@colorado.edu>
4307 4311
4308 4312 * Started a manual in LyX. For now it's just a quick merge of the
4309 4313 various internal docstrings and READMEs. Later it may grow into a
4310 4314 nice, full-blown manual.
4311 4315
4312 4316 * Set up a distutils based installer. Installation should now be
4313 4317 trivially simple for end-users.
4314 4318
4315 4319 2001-12-11 Fernando Perez <fperez@colorado.edu>
4316 4320
4317 4321 * Released 0.2.0. First public release, announced it at
4318 4322 comp.lang.python. From now on, just bugfixes...
4319 4323
4320 4324 * Went through all the files, set copyright/license notices and
4321 4325 cleaned up things. Ready for release.
4322 4326
4323 4327 2001-12-10 Fernando Perez <fperez@colorado.edu>
4324 4328
4325 4329 * Changed the first-time installer not to use tarfiles. It's more
4326 4330 robust now and less unix-dependent. Also makes it easier for
4327 4331 people to later upgrade versions.
4328 4332
4329 4333 * Changed @exit to @abort to reflect the fact that it's pretty
4330 4334 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4331 4335 becomes significant only when IPyhton is embedded: in that case,
4332 4336 C-D closes IPython only, but @abort kills the enclosing program
4333 4337 too (unless it had called IPython inside a try catching
4334 4338 SystemExit).
4335 4339
4336 4340 * Created Shell module which exposes the actuall IPython Shell
4337 4341 classes, currently the normal and the embeddable one. This at
4338 4342 least offers a stable interface we won't need to change when
4339 4343 (later) the internals are rewritten. That rewrite will be confined
4340 4344 to iplib and ipmaker, but the Shell interface should remain as is.
4341 4345
4342 4346 * Added embed module which offers an embeddable IPShell object,
4343 4347 useful to fire up IPython *inside* a running program. Great for
4344 4348 debugging or dynamical data analysis.
4345 4349
4346 4350 2001-12-08 Fernando Perez <fperez@colorado.edu>
4347 4351
4348 4352 * Fixed small bug preventing seeing info from methods of defined
4349 4353 objects (incorrect namespace in _ofind()).
4350 4354
4351 4355 * Documentation cleanup. Moved the main usage docstrings to a
4352 4356 separate file, usage.py (cleaner to maintain, and hopefully in the
4353 4357 future some perlpod-like way of producing interactive, man and
4354 4358 html docs out of it will be found).
4355 4359
4356 4360 * Added @profile to see your profile at any time.
4357 4361
4358 4362 * Added @p as an alias for 'print'. It's especially convenient if
4359 4363 using automagic ('p x' prints x).
4360 4364
4361 4365 * Small cleanups and fixes after a pychecker run.
4362 4366
4363 4367 * Changed the @cd command to handle @cd - and @cd -<n> for
4364 4368 visiting any directory in _dh.
4365 4369
4366 4370 * Introduced _dh, a history of visited directories. @dhist prints
4367 4371 it out with numbers.
4368 4372
4369 4373 2001-12-07 Fernando Perez <fperez@colorado.edu>
4370 4374
4371 4375 * Released 0.1.22
4372 4376
4373 4377 * Made initialization a bit more robust against invalid color
4374 4378 options in user input (exit, not traceback-crash).
4375 4379
4376 4380 * Changed the bug crash reporter to write the report only in the
4377 4381 user's .ipython directory. That way IPython won't litter people's
4378 4382 hard disks with crash files all over the place. Also print on
4379 4383 screen the necessary mail command.
4380 4384
4381 4385 * With the new ultraTB, implemented LightBG color scheme for light
4382 4386 background terminals. A lot of people like white backgrounds, so I
4383 4387 guess we should at least give them something readable.
4384 4388
4385 4389 2001-12-06 Fernando Perez <fperez@colorado.edu>
4386 4390
4387 4391 * Modified the structure of ultraTB. Now there's a proper class
4388 4392 for tables of color schemes which allow adding schemes easily and
4389 4393 switching the active scheme without creating a new instance every
4390 4394 time (which was ridiculous). The syntax for creating new schemes
4391 4395 is also cleaner. I think ultraTB is finally done, with a clean
4392 4396 class structure. Names are also much cleaner (now there's proper
4393 4397 color tables, no need for every variable to also have 'color' in
4394 4398 its name).
4395 4399
4396 4400 * Broke down genutils into separate files. Now genutils only
4397 4401 contains utility functions, and classes have been moved to their
4398 4402 own files (they had enough independent functionality to warrant
4399 4403 it): ConfigLoader, OutputTrap, Struct.
4400 4404
4401 4405 2001-12-05 Fernando Perez <fperez@colorado.edu>
4402 4406
4403 4407 * IPython turns 21! Released version 0.1.21, as a candidate for
4404 4408 public consumption. If all goes well, release in a few days.
4405 4409
4406 4410 * Fixed path bug (files in Extensions/ directory wouldn't be found
4407 4411 unless IPython/ was explicitly in sys.path).
4408 4412
4409 4413 * Extended the FlexCompleter class as MagicCompleter to allow
4410 4414 completion of @-starting lines.
4411 4415
4412 4416 * Created __release__.py file as a central repository for release
4413 4417 info that other files can read from.
4414 4418
4415 4419 * Fixed small bug in logging: when logging was turned on in
4416 4420 mid-session, old lines with special meanings (!@?) were being
4417 4421 logged without the prepended comment, which is necessary since
4418 4422 they are not truly valid python syntax. This should make session
4419 4423 restores produce less errors.
4420 4424
4421 4425 * The namespace cleanup forced me to make a FlexCompleter class
4422 4426 which is nothing but a ripoff of rlcompleter, but with selectable
4423 4427 namespace (rlcompleter only works in __main__.__dict__). I'll try
4424 4428 to submit a note to the authors to see if this change can be
4425 4429 incorporated in future rlcompleter releases (Dec.6: done)
4426 4430
4427 4431 * More fixes to namespace handling. It was a mess! Now all
4428 4432 explicit references to __main__.__dict__ are gone (except when
4429 4433 really needed) and everything is handled through the namespace
4430 4434 dicts in the IPython instance. We seem to be getting somewhere
4431 4435 with this, finally...
4432 4436
4433 4437 * Small documentation updates.
4434 4438
4435 4439 * Created the Extensions directory under IPython (with an
4436 4440 __init__.py). Put the PhysicalQ stuff there. This directory should
4437 4441 be used for all special-purpose extensions.
4438 4442
4439 4443 * File renaming:
4440 4444 ipythonlib --> ipmaker
4441 4445 ipplib --> iplib
4442 4446 This makes a bit more sense in terms of what these files actually do.
4443 4447
4444 4448 * Moved all the classes and functions in ipythonlib to ipplib, so
4445 4449 now ipythonlib only has make_IPython(). This will ease up its
4446 4450 splitting in smaller functional chunks later.
4447 4451
4448 4452 * Cleaned up (done, I think) output of @whos. Better column
4449 4453 formatting, and now shows str(var) for as much as it can, which is
4450 4454 typically what one gets with a 'print var'.
4451 4455
4452 4456 2001-12-04 Fernando Perez <fperez@colorado.edu>
4453 4457
4454 4458 * Fixed namespace problems. Now builtin/IPyhton/user names get
4455 4459 properly reported in their namespace. Internal namespace handling
4456 4460 is finally getting decent (not perfect yet, but much better than
4457 4461 the ad-hoc mess we had).
4458 4462
4459 4463 * Removed -exit option. If people just want to run a python
4460 4464 script, that's what the normal interpreter is for. Less
4461 4465 unnecessary options, less chances for bugs.
4462 4466
4463 4467 * Added a crash handler which generates a complete post-mortem if
4464 4468 IPython crashes. This will help a lot in tracking bugs down the
4465 4469 road.
4466 4470
4467 4471 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4468 4472 which were boud to functions being reassigned would bypass the
4469 4473 logger, breaking the sync of _il with the prompt counter. This
4470 4474 would then crash IPython later when a new line was logged.
4471 4475
4472 4476 2001-12-02 Fernando Perez <fperez@colorado.edu>
4473 4477
4474 4478 * Made IPython a package. This means people don't have to clutter
4475 4479 their sys.path with yet another directory. Changed the INSTALL
4476 4480 file accordingly.
4477 4481
4478 4482 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4479 4483 sorts its output (so @who shows it sorted) and @whos formats the
4480 4484 table according to the width of the first column. Nicer, easier to
4481 4485 read. Todo: write a generic table_format() which takes a list of
4482 4486 lists and prints it nicely formatted, with optional row/column
4483 4487 separators and proper padding and justification.
4484 4488
4485 4489 * Released 0.1.20
4486 4490
4487 4491 * Fixed bug in @log which would reverse the inputcache list (a
4488 4492 copy operation was missing).
4489 4493
4490 4494 * Code cleanup. @config was changed to use page(). Better, since
4491 4495 its output is always quite long.
4492 4496
4493 4497 * Itpl is back as a dependency. I was having too many problems
4494 4498 getting the parametric aliases to work reliably, and it's just
4495 4499 easier to code weird string operations with it than playing %()s
4496 4500 games. It's only ~6k, so I don't think it's too big a deal.
4497 4501
4498 4502 * Found (and fixed) a very nasty bug with history. !lines weren't
4499 4503 getting cached, and the out of sync caches would crash
4500 4504 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4501 4505 division of labor a bit better. Bug fixed, cleaner structure.
4502 4506
4503 4507 2001-12-01 Fernando Perez <fperez@colorado.edu>
4504 4508
4505 4509 * Released 0.1.19
4506 4510
4507 4511 * Added option -n to @hist to prevent line number printing. Much
4508 4512 easier to copy/paste code this way.
4509 4513
4510 4514 * Created global _il to hold the input list. Allows easy
4511 4515 re-execution of blocks of code by slicing it (inspired by Janko's
4512 4516 comment on 'macros').
4513 4517
4514 4518 * Small fixes and doc updates.
4515 4519
4516 4520 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4517 4521 much too fragile with automagic. Handles properly multi-line
4518 4522 statements and takes parameters.
4519 4523
4520 4524 2001-11-30 Fernando Perez <fperez@colorado.edu>
4521 4525
4522 4526 * Version 0.1.18 released.
4523 4527
4524 4528 * Fixed nasty namespace bug in initial module imports.
4525 4529
4526 4530 * Added copyright/license notes to all code files (except
4527 4531 DPyGetOpt). For the time being, LGPL. That could change.
4528 4532
4529 4533 * Rewrote a much nicer README, updated INSTALL, cleaned up
4530 4534 ipythonrc-* samples.
4531 4535
4532 4536 * Overall code/documentation cleanup. Basically ready for
4533 4537 release. Only remaining thing: licence decision (LGPL?).
4534 4538
4535 4539 * Converted load_config to a class, ConfigLoader. Now recursion
4536 4540 control is better organized. Doesn't include the same file twice.
4537 4541
4538 4542 2001-11-29 Fernando Perez <fperez@colorado.edu>
4539 4543
4540 4544 * Got input history working. Changed output history variables from
4541 4545 _p to _o so that _i is for input and _o for output. Just cleaner
4542 4546 convention.
4543 4547
4544 4548 * Implemented parametric aliases. This pretty much allows the
4545 4549 alias system to offer full-blown shell convenience, I think.
4546 4550
4547 4551 * Version 0.1.17 released, 0.1.18 opened.
4548 4552
4549 4553 * dot_ipython/ipythonrc (alias): added documentation.
4550 4554 (xcolor): Fixed small bug (xcolors -> xcolor)
4551 4555
4552 4556 * Changed the alias system. Now alias is a magic command to define
4553 4557 aliases just like the shell. Rationale: the builtin magics should
4554 4558 be there for things deeply connected to IPython's
4555 4559 architecture. And this is a much lighter system for what I think
4556 4560 is the really important feature: allowing users to define quickly
4557 4561 magics that will do shell things for them, so they can customize
4558 4562 IPython easily to match their work habits. If someone is really
4559 4563 desperate to have another name for a builtin alias, they can
4560 4564 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4561 4565 works.
4562 4566
4563 4567 2001-11-28 Fernando Perez <fperez@colorado.edu>
4564 4568
4565 4569 * Changed @file so that it opens the source file at the proper
4566 4570 line. Since it uses less, if your EDITOR environment is
4567 4571 configured, typing v will immediately open your editor of choice
4568 4572 right at the line where the object is defined. Not as quick as
4569 4573 having a direct @edit command, but for all intents and purposes it
4570 4574 works. And I don't have to worry about writing @edit to deal with
4571 4575 all the editors, less does that.
4572 4576
4573 4577 * Version 0.1.16 released, 0.1.17 opened.
4574 4578
4575 4579 * Fixed some nasty bugs in the page/page_dumb combo that could
4576 4580 crash IPython.
4577 4581
4578 4582 2001-11-27 Fernando Perez <fperez@colorado.edu>
4579 4583
4580 4584 * Version 0.1.15 released, 0.1.16 opened.
4581 4585
4582 4586 * Finally got ? and ?? to work for undefined things: now it's
4583 4587 possible to type {}.get? and get information about the get method
4584 4588 of dicts, or os.path? even if only os is defined (so technically
4585 4589 os.path isn't). Works at any level. For example, after import os,
4586 4590 os?, os.path?, os.path.abspath? all work. This is great, took some
4587 4591 work in _ofind.
4588 4592
4589 4593 * Fixed more bugs with logging. The sanest way to do it was to add
4590 4594 to @log a 'mode' parameter. Killed two in one shot (this mode
4591 4595 option was a request of Janko's). I think it's finally clean
4592 4596 (famous last words).
4593 4597
4594 4598 * Added a page_dumb() pager which does a decent job of paging on
4595 4599 screen, if better things (like less) aren't available. One less
4596 4600 unix dependency (someday maybe somebody will port this to
4597 4601 windows).
4598 4602
4599 4603 * Fixed problem in magic_log: would lock of logging out if log
4600 4604 creation failed (because it would still think it had succeeded).
4601 4605
4602 4606 * Improved the page() function using curses to auto-detect screen
4603 4607 size. Now it can make a much better decision on whether to print
4604 4608 or page a string. Option screen_length was modified: a value 0
4605 4609 means auto-detect, and that's the default now.
4606 4610
4607 4611 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4608 4612 go out. I'll test it for a few days, then talk to Janko about
4609 4613 licences and announce it.
4610 4614
4611 4615 * Fixed the length of the auto-generated ---> prompt which appears
4612 4616 for auto-parens and auto-quotes. Getting this right isn't trivial,
4613 4617 with all the color escapes, different prompt types and optional
4614 4618 separators. But it seems to be working in all the combinations.
4615 4619
4616 4620 2001-11-26 Fernando Perez <fperez@colorado.edu>
4617 4621
4618 4622 * Wrote a regexp filter to get option types from the option names
4619 4623 string. This eliminates the need to manually keep two duplicate
4620 4624 lists.
4621 4625
4622 4626 * Removed the unneeded check_option_names. Now options are handled
4623 4627 in a much saner manner and it's easy to visually check that things
4624 4628 are ok.
4625 4629
4626 4630 * Updated version numbers on all files I modified to carry a
4627 4631 notice so Janko and Nathan have clear version markers.
4628 4632
4629 4633 * Updated docstring for ultraTB with my changes. I should send
4630 4634 this to Nathan.
4631 4635
4632 4636 * Lots of small fixes. Ran everything through pychecker again.
4633 4637
4634 4638 * Made loading of deep_reload an cmd line option. If it's not too
4635 4639 kosher, now people can just disable it. With -nodeep_reload it's
4636 4640 still available as dreload(), it just won't overwrite reload().
4637 4641
4638 4642 * Moved many options to the no| form (-opt and -noopt
4639 4643 accepted). Cleaner.
4640 4644
4641 4645 * Changed magic_log so that if called with no parameters, it uses
4642 4646 'rotate' mode. That way auto-generated logs aren't automatically
4643 4647 over-written. For normal logs, now a backup is made if it exists
4644 4648 (only 1 level of backups). A new 'backup' mode was added to the
4645 4649 Logger class to support this. This was a request by Janko.
4646 4650
4647 4651 * Added @logoff/@logon to stop/restart an active log.
4648 4652
4649 4653 * Fixed a lot of bugs in log saving/replay. It was pretty
4650 4654 broken. Now special lines (!@,/) appear properly in the command
4651 4655 history after a log replay.
4652 4656
4653 4657 * Tried and failed to implement full session saving via pickle. My
4654 4658 idea was to pickle __main__.__dict__, but modules can't be
4655 4659 pickled. This would be a better alternative to replaying logs, but
4656 4660 seems quite tricky to get to work. Changed -session to be called
4657 4661 -logplay, which more accurately reflects what it does. And if we
4658 4662 ever get real session saving working, -session is now available.
4659 4663
4660 4664 * Implemented color schemes for prompts also. As for tracebacks,
4661 4665 currently only NoColor and Linux are supported. But now the
4662 4666 infrastructure is in place, based on a generic ColorScheme
4663 4667 class. So writing and activating new schemes both for the prompts
4664 4668 and the tracebacks should be straightforward.
4665 4669
4666 4670 * Version 0.1.13 released, 0.1.14 opened.
4667 4671
4668 4672 * Changed handling of options for output cache. Now counter is
4669 4673 hardwired starting at 1 and one specifies the maximum number of
4670 4674 entries *in the outcache* (not the max prompt counter). This is
4671 4675 much better, since many statements won't increase the cache
4672 4676 count. It also eliminated some confusing options, now there's only
4673 4677 one: cache_size.
4674 4678
4675 4679 * Added 'alias' magic function and magic_alias option in the
4676 4680 ipythonrc file. Now the user can easily define whatever names he
4677 4681 wants for the magic functions without having to play weird
4678 4682 namespace games. This gives IPython a real shell-like feel.
4679 4683
4680 4684 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4681 4685 @ or not).
4682 4686
4683 4687 This was one of the last remaining 'visible' bugs (that I know
4684 4688 of). I think if I can clean up the session loading so it works
4685 4689 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4686 4690 about licensing).
4687 4691
4688 4692 2001-11-25 Fernando Perez <fperez@colorado.edu>
4689 4693
4690 4694 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4691 4695 there's a cleaner distinction between what ? and ?? show.
4692 4696
4693 4697 * Added screen_length option. Now the user can define his own
4694 4698 screen size for page() operations.
4695 4699
4696 4700 * Implemented magic shell-like functions with automatic code
4697 4701 generation. Now adding another function is just a matter of adding
4698 4702 an entry to a dict, and the function is dynamically generated at
4699 4703 run-time. Python has some really cool features!
4700 4704
4701 4705 * Renamed many options to cleanup conventions a little. Now all
4702 4706 are lowercase, and only underscores where needed. Also in the code
4703 4707 option name tables are clearer.
4704 4708
4705 4709 * Changed prompts a little. Now input is 'In [n]:' instead of
4706 4710 'In[n]:='. This allows it the numbers to be aligned with the
4707 4711 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4708 4712 Python (it was a Mathematica thing). The '...' continuation prompt
4709 4713 was also changed a little to align better.
4710 4714
4711 4715 * Fixed bug when flushing output cache. Not all _p<n> variables
4712 4716 exist, so their deletion needs to be wrapped in a try:
4713 4717
4714 4718 * Figured out how to properly use inspect.formatargspec() (it
4715 4719 requires the args preceded by *). So I removed all the code from
4716 4720 _get_pdef in Magic, which was just replicating that.
4717 4721
4718 4722 * Added test to prefilter to allow redefining magic function names
4719 4723 as variables. This is ok, since the @ form is always available,
4720 4724 but whe should allow the user to define a variable called 'ls' if
4721 4725 he needs it.
4722 4726
4723 4727 * Moved the ToDo information from README into a separate ToDo.
4724 4728
4725 4729 * General code cleanup and small bugfixes. I think it's close to a
4726 4730 state where it can be released, obviously with a big 'beta'
4727 4731 warning on it.
4728 4732
4729 4733 * Got the magic function split to work. Now all magics are defined
4730 4734 in a separate class. It just organizes things a bit, and now
4731 4735 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4732 4736 was too long).
4733 4737
4734 4738 * Changed @clear to @reset to avoid potential confusions with
4735 4739 the shell command clear. Also renamed @cl to @clear, which does
4736 4740 exactly what people expect it to from their shell experience.
4737 4741
4738 4742 Added a check to the @reset command (since it's so
4739 4743 destructive, it's probably a good idea to ask for confirmation).
4740 4744 But now reset only works for full namespace resetting. Since the
4741 4745 del keyword is already there for deleting a few specific
4742 4746 variables, I don't see the point of having a redundant magic
4743 4747 function for the same task.
4744 4748
4745 4749 2001-11-24 Fernando Perez <fperez@colorado.edu>
4746 4750
4747 4751 * Updated the builtin docs (esp. the ? ones).
4748 4752
4749 4753 * Ran all the code through pychecker. Not terribly impressed with
4750 4754 it: lots of spurious warnings and didn't really find anything of
4751 4755 substance (just a few modules being imported and not used).
4752 4756
4753 4757 * Implemented the new ultraTB functionality into IPython. New
4754 4758 option: xcolors. This chooses color scheme. xmode now only selects
4755 4759 between Plain and Verbose. Better orthogonality.
4756 4760
4757 4761 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4758 4762 mode and color scheme for the exception handlers. Now it's
4759 4763 possible to have the verbose traceback with no coloring.
4760 4764
4761 4765 2001-11-23 Fernando Perez <fperez@colorado.edu>
4762 4766
4763 4767 * Version 0.1.12 released, 0.1.13 opened.
4764 4768
4765 4769 * Removed option to set auto-quote and auto-paren escapes by
4766 4770 user. The chances of breaking valid syntax are just too high. If
4767 4771 someone *really* wants, they can always dig into the code.
4768 4772
4769 4773 * Made prompt separators configurable.
4770 4774
4771 4775 2001-11-22 Fernando Perez <fperez@colorado.edu>
4772 4776
4773 4777 * Small bugfixes in many places.
4774 4778
4775 4779 * Removed the MyCompleter class from ipplib. It seemed redundant
4776 4780 with the C-p,C-n history search functionality. Less code to
4777 4781 maintain.
4778 4782
4779 4783 * Moved all the original ipython.py code into ipythonlib.py. Right
4780 4784 now it's just one big dump into a function called make_IPython, so
4781 4785 no real modularity has been gained. But at least it makes the
4782 4786 wrapper script tiny, and since ipythonlib is a module, it gets
4783 4787 compiled and startup is much faster.
4784 4788
4785 4789 This is a reasobably 'deep' change, so we should test it for a
4786 4790 while without messing too much more with the code.
4787 4791
4788 4792 2001-11-21 Fernando Perez <fperez@colorado.edu>
4789 4793
4790 4794 * Version 0.1.11 released, 0.1.12 opened for further work.
4791 4795
4792 4796 * Removed dependency on Itpl. It was only needed in one place. It
4793 4797 would be nice if this became part of python, though. It makes life
4794 4798 *a lot* easier in some cases.
4795 4799
4796 4800 * Simplified the prefilter code a bit. Now all handlers are
4797 4801 expected to explicitly return a value (at least a blank string).
4798 4802
4799 4803 * Heavy edits in ipplib. Removed the help system altogether. Now
4800 4804 obj?/?? is used for inspecting objects, a magic @doc prints
4801 4805 docstrings, and full-blown Python help is accessed via the 'help'
4802 4806 keyword. This cleans up a lot of code (less to maintain) and does
4803 4807 the job. Since 'help' is now a standard Python component, might as
4804 4808 well use it and remove duplicate functionality.
4805 4809
4806 4810 Also removed the option to use ipplib as a standalone program. By
4807 4811 now it's too dependent on other parts of IPython to function alone.
4808 4812
4809 4813 * Fixed bug in genutils.pager. It would crash if the pager was
4810 4814 exited immediately after opening (broken pipe).
4811 4815
4812 4816 * Trimmed down the VerboseTB reporting a little. The header is
4813 4817 much shorter now and the repeated exception arguments at the end
4814 4818 have been removed. For interactive use the old header seemed a bit
4815 4819 excessive.
4816 4820
4817 4821 * Fixed small bug in output of @whos for variables with multi-word
4818 4822 types (only first word was displayed).
4819 4823
4820 4824 2001-11-17 Fernando Perez <fperez@colorado.edu>
4821 4825
4822 4826 * Version 0.1.10 released, 0.1.11 opened for further work.
4823 4827
4824 4828 * Modified dirs and friends. dirs now *returns* the stack (not
4825 4829 prints), so one can manipulate it as a variable. Convenient to
4826 4830 travel along many directories.
4827 4831
4828 4832 * Fixed bug in magic_pdef: would only work with functions with
4829 4833 arguments with default values.
4830 4834
4831 4835 2001-11-14 Fernando Perez <fperez@colorado.edu>
4832 4836
4833 4837 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4834 4838 example with IPython. Various other minor fixes and cleanups.
4835 4839
4836 4840 * Version 0.1.9 released, 0.1.10 opened for further work.
4837 4841
4838 4842 * Added sys.path to the list of directories searched in the
4839 4843 execfile= option. It used to be the current directory and the
4840 4844 user's IPYTHONDIR only.
4841 4845
4842 4846 2001-11-13 Fernando Perez <fperez@colorado.edu>
4843 4847
4844 4848 * Reinstated the raw_input/prefilter separation that Janko had
4845 4849 initially. This gives a more convenient setup for extending the
4846 4850 pre-processor from the outside: raw_input always gets a string,
4847 4851 and prefilter has to process it. We can then redefine prefilter
4848 4852 from the outside and implement extensions for special
4849 4853 purposes.
4850 4854
4851 4855 Today I got one for inputting PhysicalQuantity objects
4852 4856 (from Scientific) without needing any function calls at
4853 4857 all. Extremely convenient, and it's all done as a user-level
4854 4858 extension (no IPython code was touched). Now instead of:
4855 4859 a = PhysicalQuantity(4.2,'m/s**2')
4856 4860 one can simply say
4857 4861 a = 4.2 m/s**2
4858 4862 or even
4859 4863 a = 4.2 m/s^2
4860 4864
4861 4865 I use this, but it's also a proof of concept: IPython really is
4862 4866 fully user-extensible, even at the level of the parsing of the
4863 4867 command line. It's not trivial, but it's perfectly doable.
4864 4868
4865 4869 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4866 4870 the problem of modules being loaded in the inverse order in which
4867 4871 they were defined in
4868 4872
4869 4873 * Version 0.1.8 released, 0.1.9 opened for further work.
4870 4874
4871 4875 * Added magics pdef, source and file. They respectively show the
4872 4876 definition line ('prototype' in C), source code and full python
4873 4877 file for any callable object. The object inspector oinfo uses
4874 4878 these to show the same information.
4875 4879
4876 4880 * Version 0.1.7 released, 0.1.8 opened for further work.
4877 4881
4878 4882 * Separated all the magic functions into a class called Magic. The
4879 4883 InteractiveShell class was becoming too big for Xemacs to handle
4880 4884 (de-indenting a line would lock it up for 10 seconds while it
4881 4885 backtracked on the whole class!)
4882 4886
4883 4887 FIXME: didn't work. It can be done, but right now namespaces are
4884 4888 all messed up. Do it later (reverted it for now, so at least
4885 4889 everything works as before).
4886 4890
4887 4891 * Got the object introspection system (magic_oinfo) working! I
4888 4892 think this is pretty much ready for release to Janko, so he can
4889 4893 test it for a while and then announce it. Pretty much 100% of what
4890 4894 I wanted for the 'phase 1' release is ready. Happy, tired.
4891 4895
4892 4896 2001-11-12 Fernando Perez <fperez@colorado.edu>
4893 4897
4894 4898 * Version 0.1.6 released, 0.1.7 opened for further work.
4895 4899
4896 4900 * Fixed bug in printing: it used to test for truth before
4897 4901 printing, so 0 wouldn't print. Now checks for None.
4898 4902
4899 4903 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4900 4904 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4901 4905 reaches by hand into the outputcache. Think of a better way to do
4902 4906 this later.
4903 4907
4904 4908 * Various small fixes thanks to Nathan's comments.
4905 4909
4906 4910 * Changed magic_pprint to magic_Pprint. This way it doesn't
4907 4911 collide with pprint() and the name is consistent with the command
4908 4912 line option.
4909 4913
4910 4914 * Changed prompt counter behavior to be fully like
4911 4915 Mathematica's. That is, even input that doesn't return a result
4912 4916 raises the prompt counter. The old behavior was kind of confusing
4913 4917 (getting the same prompt number several times if the operation
4914 4918 didn't return a result).
4915 4919
4916 4920 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4917 4921
4918 4922 * Fixed -Classic mode (wasn't working anymore).
4919 4923
4920 4924 * Added colored prompts using Nathan's new code. Colors are
4921 4925 currently hardwired, they can be user-configurable. For
4922 4926 developers, they can be chosen in file ipythonlib.py, at the
4923 4927 beginning of the CachedOutput class def.
4924 4928
4925 4929 2001-11-11 Fernando Perez <fperez@colorado.edu>
4926 4930
4927 4931 * Version 0.1.5 released, 0.1.6 opened for further work.
4928 4932
4929 4933 * Changed magic_env to *return* the environment as a dict (not to
4930 4934 print it). This way it prints, but it can also be processed.
4931 4935
4932 4936 * Added Verbose exception reporting to interactive
4933 4937 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4934 4938 traceback. Had to make some changes to the ultraTB file. This is
4935 4939 probably the last 'big' thing in my mental todo list. This ties
4936 4940 in with the next entry:
4937 4941
4938 4942 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4939 4943 has to specify is Plain, Color or Verbose for all exception
4940 4944 handling.
4941 4945
4942 4946 * Removed ShellServices option. All this can really be done via
4943 4947 the magic system. It's easier to extend, cleaner and has automatic
4944 4948 namespace protection and documentation.
4945 4949
4946 4950 2001-11-09 Fernando Perez <fperez@colorado.edu>
4947 4951
4948 4952 * Fixed bug in output cache flushing (missing parameter to
4949 4953 __init__). Other small bugs fixed (found using pychecker).
4950 4954
4951 4955 * Version 0.1.4 opened for bugfixing.
4952 4956
4953 4957 2001-11-07 Fernando Perez <fperez@colorado.edu>
4954 4958
4955 4959 * Version 0.1.3 released, mainly because of the raw_input bug.
4956 4960
4957 4961 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4958 4962 and when testing for whether things were callable, a call could
4959 4963 actually be made to certain functions. They would get called again
4960 4964 once 'really' executed, with a resulting double call. A disaster
4961 4965 in many cases (list.reverse() would never work!).
4962 4966
4963 4967 * Removed prefilter() function, moved its code to raw_input (which
4964 4968 after all was just a near-empty caller for prefilter). This saves
4965 4969 a function call on every prompt, and simplifies the class a tiny bit.
4966 4970
4967 4971 * Fix _ip to __ip name in magic example file.
4968 4972
4969 4973 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4970 4974 work with non-gnu versions of tar.
4971 4975
4972 4976 2001-11-06 Fernando Perez <fperez@colorado.edu>
4973 4977
4974 4978 * Version 0.1.2. Just to keep track of the recent changes.
4975 4979
4976 4980 * Fixed nasty bug in output prompt routine. It used to check 'if
4977 4981 arg != None...'. Problem is, this fails if arg implements a
4978 4982 special comparison (__cmp__) which disallows comparing to
4979 4983 None. Found it when trying to use the PhysicalQuantity module from
4980 4984 ScientificPython.
4981 4985
4982 4986 2001-11-05 Fernando Perez <fperez@colorado.edu>
4983 4987
4984 4988 * Also added dirs. Now the pushd/popd/dirs family functions
4985 4989 basically like the shell, with the added convenience of going home
4986 4990 when called with no args.
4987 4991
4988 4992 * pushd/popd slightly modified to mimic shell behavior more
4989 4993 closely.
4990 4994
4991 4995 * Added env,pushd,popd from ShellServices as magic functions. I
4992 4996 think the cleanest will be to port all desired functions from
4993 4997 ShellServices as magics and remove ShellServices altogether. This
4994 4998 will provide a single, clean way of adding functionality
4995 4999 (shell-type or otherwise) to IP.
4996 5000
4997 5001 2001-11-04 Fernando Perez <fperez@colorado.edu>
4998 5002
4999 5003 * Added .ipython/ directory to sys.path. This way users can keep
5000 5004 customizations there and access them via import.
5001 5005
5002 5006 2001-11-03 Fernando Perez <fperez@colorado.edu>
5003 5007
5004 5008 * Opened version 0.1.1 for new changes.
5005 5009
5006 5010 * Changed version number to 0.1.0: first 'public' release, sent to
5007 5011 Nathan and Janko.
5008 5012
5009 5013 * Lots of small fixes and tweaks.
5010 5014
5011 5015 * Minor changes to whos format. Now strings are shown, snipped if
5012 5016 too long.
5013 5017
5014 5018 * Changed ShellServices to work on __main__ so they show up in @who
5015 5019
5016 5020 * Help also works with ? at the end of a line:
5017 5021 ?sin and sin?
5018 5022 both produce the same effect. This is nice, as often I use the
5019 5023 tab-complete to find the name of a method, but I used to then have
5020 5024 to go to the beginning of the line to put a ? if I wanted more
5021 5025 info. Now I can just add the ? and hit return. Convenient.
5022 5026
5023 5027 2001-11-02 Fernando Perez <fperez@colorado.edu>
5024 5028
5025 5029 * Python version check (>=2.1) added.
5026 5030
5027 5031 * Added LazyPython documentation. At this point the docs are quite
5028 5032 a mess. A cleanup is in order.
5029 5033
5030 5034 * Auto-installer created. For some bizarre reason, the zipfiles
5031 5035 module isn't working on my system. So I made a tar version
5032 5036 (hopefully the command line options in various systems won't kill
5033 5037 me).
5034 5038
5035 5039 * Fixes to Struct in genutils. Now all dictionary-like methods are
5036 5040 protected (reasonably).
5037 5041
5038 5042 * Added pager function to genutils and changed ? to print usage
5039 5043 note through it (it was too long).
5040 5044
5041 5045 * Added the LazyPython functionality. Works great! I changed the
5042 5046 auto-quote escape to ';', it's on home row and next to '. But
5043 5047 both auto-quote and auto-paren (still /) escapes are command-line
5044 5048 parameters.
5045 5049
5046 5050
5047 5051 2001-11-01 Fernando Perez <fperez@colorado.edu>
5048 5052
5049 5053 * Version changed to 0.0.7. Fairly large change: configuration now
5050 5054 is all stored in a directory, by default .ipython. There, all
5051 5055 config files have normal looking names (not .names)
5052 5056
5053 5057 * Version 0.0.6 Released first to Lucas and Archie as a test
5054 5058 run. Since it's the first 'semi-public' release, change version to
5055 5059 > 0.0.6 for any changes now.
5056 5060
5057 5061 * Stuff I had put in the ipplib.py changelog:
5058 5062
5059 5063 Changes to InteractiveShell:
5060 5064
5061 5065 - Made the usage message a parameter.
5062 5066
5063 5067 - Require the name of the shell variable to be given. It's a bit
5064 5068 of a hack, but allows the name 'shell' not to be hardwire in the
5065 5069 magic (@) handler, which is problematic b/c it requires
5066 5070 polluting the global namespace with 'shell'. This in turn is
5067 5071 fragile: if a user redefines a variable called shell, things
5068 5072 break.
5069 5073
5070 5074 - magic @: all functions available through @ need to be defined
5071 5075 as magic_<name>, even though they can be called simply as
5072 5076 @<name>. This allows the special command @magic to gather
5073 5077 information automatically about all existing magic functions,
5074 5078 even if they are run-time user extensions, by parsing the shell
5075 5079 instance __dict__ looking for special magic_ names.
5076 5080
5077 5081 - mainloop: added *two* local namespace parameters. This allows
5078 5082 the class to differentiate between parameters which were there
5079 5083 before and after command line initialization was processed. This
5080 5084 way, later @who can show things loaded at startup by the
5081 5085 user. This trick was necessary to make session saving/reloading
5082 5086 really work: ideally after saving/exiting/reloading a session,
5083 5087 *everythin* should look the same, including the output of @who. I
5084 5088 was only able to make this work with this double namespace
5085 5089 trick.
5086 5090
5087 5091 - added a header to the logfile which allows (almost) full
5088 5092 session restoring.
5089 5093
5090 5094 - prepend lines beginning with @ or !, with a and log
5091 5095 them. Why? !lines: may be useful to know what you did @lines:
5092 5096 they may affect session state. So when restoring a session, at
5093 5097 least inform the user of their presence. I couldn't quite get
5094 5098 them to properly re-execute, but at least the user is warned.
5095 5099
5096 5100 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now