##// END OF EJS Templates
-Expose IPApi is _ip in user namespace....
vivainio -
Show More
@@ -1,66 +1,66 b''
1 1 # -*- coding: utf-8 -*-
2 2 """ IPython extension: new prefilters for output grabbing
3 3
4 4 Provides
5 5
6 6 var = %magic blah blah
7 7
8 8 var = !ls
9 9
10 10 $Id: genutils.py 1077 2006-01-24 18:15:27Z vivainio $
11 11
12 12 """
13 13
14 14 import IPython.ipapi
15 15 from IPython.genutils import *
16 16
17 17 ip = IPython.ipapi.get()
18 18
19 19 import re
20 20
21 21 def hnd_magic(line,mo):
22 22 """ Handle a = %mymagic blah blah """
23 23 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
24 24 #mag = 'ipmagic
25 25 #return "%s = %s"
26 26 var = mo.group('varname')
27 27 cmd = mo.group('cmd')
28 28 expr = make_quoted_expr(cmd)
29 return itpl('$var = ipmagic($expr)')
29 return itpl('$var = _ip.magic($expr)')
30 30
31 31 def hnd_syscmd(line,mo):
32 32 """ Handle a = !ls """
33 33 #cmd = genutils.make_quoted_expr(mo.group('syscmd'))
34 34 #mag = 'ipmagic
35 35 #return "%s = %s"
36 36 var = mo.group('varname')
37 37 cmd = mo.group('cmd')
38 38 expr = make_quoted_expr(itpl("sc -l =$cmd"))
39 return itpl('$var = ipmagic($expr)')
39 return itpl('$var = _ip.magic($expr)')
40 40
41 41 def install_re_handler(pat, hnd):
42 42 ip.meta().re_prefilters.append((re.compile(pat), hnd))
43 43
44 44 def init_handlers():
45 45
46 46 ip.meta().re_prefilters = []
47 47
48 48 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*%(?P<cmd>.*)',
49 49 hnd_magic
50 50 )
51 51
52 52 install_re_handler('(?P<varname>[\w\.]+)\s*=\s*!(?P<cmd>.*)',
53 53 hnd_syscmd
54 54 )
55 55
56 56 init_handlers()
57 57
58 58 def regex_prefilter_f(self,line):
59 59 for pat, handler in ip.meta().re_prefilters:
60 60 mo = pat.match(line)
61 61 if mo:
62 62 return handler(line,mo)
63 63
64 64 raise IPython.ipapi.TryNext
65 65
66 66 ip.set_hook('input_prefilter', regex_prefilter_f) No newline at end of file
@@ -1,2873 +1,2872 b''
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 $Id: Magic.py 1094 2006-01-28 00:47:41Z vivainio $"""
4 $Id: Magic.py 1096 2006-01-28 20:08:02Z vivainio $"""
5 5
6 6 #*****************************************************************************
7 7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 9 #
10 10 # Distributed under the terms of the BSD License. The full license is in
11 11 # the file COPYING, distributed as part of this software.
12 12 #*****************************************************************************
13 13
14 14 #****************************************************************************
15 15 # Modules and globals
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>\n%s <%s>' % \
19 19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 20 __license__ = Release.license
21 21
22 22 # Python standard modules
23 23 import __builtin__
24 24 import bdb
25 25 import inspect
26 26 import os
27 27 import pdb
28 28 import pydoc
29 29 import sys
30 30 import re
31 31 import tempfile
32 32 import time
33 33 import cPickle as pickle
34 34 import textwrap
35 35 from cStringIO import StringIO
36 36 from getopt import getopt,GetoptError
37 37 from pprint import pprint, pformat
38 38
39 39 # profile isn't bundled by default in Debian for license reasons
40 40 try:
41 41 import profile,pstats
42 42 except ImportError:
43 43 profile = pstats = None
44 44
45 45 # Homebrewed
46 46 from IPython import Debugger, OInspect, wildcard
47 47 from IPython.FakeModule import FakeModule
48 48 from IPython.Itpl import Itpl, itpl, printpl,itplns
49 49 from IPython.PyColorize import Parser
50 50 from IPython.ipstruct import Struct
51 51 from IPython.macro import Macro
52 52 from IPython.genutils import *
53 53 from IPython import platutils
54 54
55 55 #***************************************************************************
56 56 # Utility functions
57 57 def on_off(tag):
58 58 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
59 59 return ['OFF','ON'][tag]
60 60
61 61 class Bunch: pass
62 62
63 63 #***************************************************************************
64 64 # Main class implementing Magic functionality
65 65 class Magic:
66 66 """Magic functions for InteractiveShell.
67 67
68 68 Shell functions which can be reached as %function_name. All magic
69 69 functions should accept a string, which they can parse for their own
70 70 needs. This can make some functions easier to type, eg `%cd ../`
71 71 vs. `%cd("../")`
72 72
73 73 ALL definitions MUST begin with the prefix magic_. The user won't need it
74 74 at the command line, but it is is needed in the definition. """
75 75
76 76 # class globals
77 77 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
78 78 'Automagic is ON, % prefix NOT needed for magic functions.']
79 79
80 80 #......................................................................
81 81 # some utility functions
82 82
83 83 def __init__(self,shell):
84 84
85 85 self.options_table = {}
86 86 if profile is None:
87 87 self.magic_prun = self.profile_missing_notice
88 88 self.shell = shell
89 89
90 90 # namespace for holding state we may need
91 91 self._magic_state = Bunch()
92 92
93 93 def profile_missing_notice(self, *args, **kwargs):
94 94 error("""\
95 95 The profile module could not be found. If you are a Debian user,
96 96 it has been removed from the standard Debian package because of its non-free
97 97 license. To use profiling, please install"python2.3-profiler" from non-free.""")
98 98
99 99 def default_option(self,fn,optstr):
100 100 """Make an entry in the options_table for fn, with value optstr"""
101 101
102 102 if fn not in self.lsmagic():
103 103 error("%s is not a magic function" % fn)
104 104 self.options_table[fn] = optstr
105 105
106 106 def lsmagic(self):
107 107 """Return a list of currently available magic functions.
108 108
109 109 Gives a list of the bare names after mangling (['ls','cd', ...], not
110 110 ['magic_ls','magic_cd',...]"""
111 111
112 112 # FIXME. This needs a cleanup, in the way the magics list is built.
113 113
114 114 # magics in class definition
115 115 class_magic = lambda fn: fn.startswith('magic_') and \
116 116 callable(Magic.__dict__[fn])
117 117 # in instance namespace (run-time user additions)
118 118 inst_magic = lambda fn: fn.startswith('magic_') and \
119 119 callable(self.__dict__[fn])
120 120 # and bound magics by user (so they can access self):
121 121 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
122 122 callable(self.__class__.__dict__[fn])
123 123 magics = filter(class_magic,Magic.__dict__.keys()) + \
124 124 filter(inst_magic,self.__dict__.keys()) + \
125 125 filter(inst_bound_magic,self.__class__.__dict__.keys())
126 126 out = []
127 127 for fn in magics:
128 128 out.append(fn.replace('magic_','',1))
129 129 out.sort()
130 130 return out
131 131
132 132 def extract_input_slices(self,slices):
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 try:
310 310 opts,args = getopt(argv,opt_str,*long_opts)
311 311 except GetoptError,e:
312 312 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
313 313 " ".join(long_opts)))
314 314 for o,a in opts:
315 315 if o.startswith('--'):
316 316 o = o[2:]
317 317 else:
318 318 o = o[1:]
319 319 try:
320 320 odict[o].append(a)
321 321 except AttributeError:
322 322 odict[o] = [odict[o],a]
323 323 except KeyError:
324 324 if list_all:
325 325 odict[o] = [a]
326 326 else:
327 327 odict[o] = a
328 328
329 329 # Prepare opts,args for return
330 330 opts = Struct(odict)
331 331 if mode == 'string':
332 332 args = ' '.join(args)
333 333
334 334 return opts,args
335 335
336 336 #......................................................................
337 337 # And now the actual magic functions
338 338
339 339 # Functions for IPython shell work (vars,funcs, config, etc)
340 340 def magic_lsmagic(self, parameter_s = ''):
341 341 """List currently available magic functions."""
342 342 mesc = self.shell.ESC_MAGIC
343 343 print 'Available magic functions:\n'+mesc+\
344 344 (' '+mesc).join(self.lsmagic())
345 345 print '\n' + Magic.auto_status[self.shell.rc.automagic]
346 346 return None
347 347
348 348 def magic_magic(self, parameter_s = ''):
349 349 """Print information about the magic function system."""
350 350
351 351 mode = ''
352 352 try:
353 353 if parameter_s.split()[0] == '-latex':
354 354 mode = 'latex'
355 355 except:
356 356 pass
357 357
358 358 magic_docs = []
359 359 for fname in self.lsmagic():
360 360 mname = 'magic_' + fname
361 361 for space in (Magic,self,self.__class__):
362 362 try:
363 363 fn = space.__dict__[mname]
364 364 except KeyError:
365 365 pass
366 366 else:
367 367 break
368 368 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
369 369 fname,fn.__doc__))
370 370 magic_docs = ''.join(magic_docs)
371 371
372 372 if mode == 'latex':
373 373 print self.format_latex(magic_docs)
374 374 return
375 375 else:
376 376 magic_docs = self.format_screen(magic_docs)
377 377
378 378 outmsg = """
379 379 IPython's 'magic' functions
380 380 ===========================
381 381
382 382 The magic function system provides a series of functions which allow you to
383 383 control the behavior of IPython itself, plus a lot of system-type
384 384 features. All these functions are prefixed with a % character, but parameters
385 385 are given without parentheses or quotes.
386 386
387 387 NOTE: If you have 'automagic' enabled (via the command line option or with the
388 388 %automagic function), you don't need to type in the % explicitly. By default,
389 389 IPython ships with automagic on, so you should only rarely need the % escape.
390 390
391 391 Example: typing '%cd mydir' (without the quotes) changes you working directory
392 392 to 'mydir', if it exists.
393 393
394 394 You can define your own magic functions to extend the system. See the supplied
395 395 ipythonrc and example-magic.py files for details (in your ipython
396 396 configuration directory, typically $HOME/.ipython/).
397 397
398 398 You can also define your own aliased names for magic functions. In your
399 399 ipythonrc file, placing a line like:
400 400
401 401 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
402 402
403 403 will define %pf as a new name for %profile.
404 404
405 405 You can also call magics in code using the ipmagic() function, which IPython
406 406 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
407 407
408 408 For a list of the available magic functions, use %lsmagic. For a description
409 409 of any of them, type %magic_name?, e.g. '%cd?'.
410 410
411 411 Currently the magic system has the following functions:\n"""
412 412
413 413 mesc = self.shell.ESC_MAGIC
414 414 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
415 415 "\n\n%s%s\n\n%s" % (outmsg,
416 416 magic_docs,mesc,mesc,
417 417 (' '+mesc).join(self.lsmagic()),
418 418 Magic.auto_status[self.shell.rc.automagic] ) )
419 419
420 420 page(outmsg,screen_lines=self.shell.rc.screen_length)
421 421
422 422 def magic_automagic(self, parameter_s = ''):
423 423 """Make magic functions callable without having to type the initial %.
424 424
425 425 Toggles on/off (when off, you must call it as %automagic, of
426 426 course). Note that magic functions have lowest priority, so if there's
427 427 a variable whose name collides with that of a magic fn, automagic
428 428 won't work for that function (you get the variable instead). However,
429 429 if you delete the variable (del var), the previously shadowed magic
430 430 function becomes visible to automagic again."""
431 431
432 432 rc = self.shell.rc
433 433 rc.automagic = not rc.automagic
434 434 print '\n' + Magic.auto_status[rc.automagic]
435 435
436 436 def magic_autocall(self, parameter_s = ''):
437 437 """Make functions callable without having to type parentheses.
438 438
439 439 Usage:
440 440
441 441 %autocall [mode]
442 442
443 443 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
444 444 value is toggled on and off (remembering the previous state)."""
445 445
446 446 rc = self.shell.rc
447 447
448 448 if parameter_s:
449 449 arg = int(parameter_s)
450 450 else:
451 451 arg = 'toggle'
452 452
453 453 if not arg in (0,1,2,'toggle'):
454 454 error('Valid modes: (0->Off, 1->Smart, 2->Full')
455 455 return
456 456
457 457 if arg in (0,1,2):
458 458 rc.autocall = arg
459 459 else: # toggle
460 460 if rc.autocall:
461 461 self._magic_state.autocall_save = rc.autocall
462 462 rc.autocall = 0
463 463 else:
464 464 try:
465 465 rc.autocall = self._magic_state.autocall_save
466 466 except AttributeError:
467 467 rc.autocall = self._magic_state.autocall_save = 1
468 468
469 469 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
470 470
471 471 def magic_autoindent(self, parameter_s = ''):
472 472 """Toggle autoindent on/off (if available)."""
473 473
474 474 self.shell.set_autoindent()
475 475 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
476 476
477 477 def magic_system_verbose(self, parameter_s = ''):
478 478 """Toggle verbose printing of system calls on/off."""
479 479
480 480 self.shell.rc_set_toggle('system_verbose')
481 481 print "System verbose printing is:",\
482 482 ['OFF','ON'][self.shell.rc.system_verbose]
483 483
484 484 def magic_history(self, parameter_s = ''):
485 485 """Print input history (_i<n> variables), with most recent last.
486 486
487 487 %history -> print at most 40 inputs (some may be multi-line)\\
488 488 %history n -> print at most n inputs\\
489 489 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
490 490
491 491 Each input's number <n> is shown, and is accessible as the
492 492 automatically generated variable _i<n>. Multi-line statements are
493 493 printed starting at a new line for easy copy/paste.
494 494
495 495
496 496 Options:
497 497
498 498 -n: do NOT print line numbers. This is useful if you want to get a
499 499 printout of many lines which can be directly pasted into a text
500 500 editor.
501 501
502 502 This feature is only available if numbered prompts are in use.
503 503
504 504 -r: print the 'raw' history. IPython filters your input and
505 505 converts it all into valid Python source before executing it (things
506 506 like magics or aliases are turned into function calls, for
507 507 example). With this option, you'll see the unfiltered history
508 508 instead of the filtered version: '%cd /' will be seen as '%cd /'
509 instead of 'ipmagic("%cd /")'.
509 instead of '_ip.magic("%cd /")'.
510 510 """
511 511
512 512 shell = self.shell
513 513 if not shell.outputcache.do_full_cache:
514 514 print 'This feature is only available if numbered prompts are in use.'
515 515 return
516 516 opts,args = self.parse_options(parameter_s,'nr',mode='list')
517 517
518 518 if opts.has_key('r'):
519 519 input_hist = shell.input_hist_raw
520 520 else:
521 521 input_hist = shell.input_hist
522 522
523 523 default_length = 40
524 524 if len(args) == 0:
525 525 final = len(input_hist)
526 526 init = max(1,final-default_length)
527 527 elif len(args) == 1:
528 528 final = len(input_hist)
529 529 init = max(1,final-int(args[0]))
530 530 elif len(args) == 2:
531 531 init,final = map(int,args)
532 532 else:
533 533 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
534 534 print self.magic_hist.__doc__
535 535 return
536 536 width = len(str(final))
537 537 line_sep = ['','\n']
538 538 print_nums = not opts.has_key('n')
539 539 for in_num in range(init,final):
540 540 inline = input_hist[in_num]
541 541 multiline = int(inline.count('\n') > 1)
542 542 if print_nums:
543 543 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
544 544 print inline,
545 545
546 546 def magic_hist(self, parameter_s=''):
547 547 """Alternate name for %history."""
548 548 return self.magic_history(parameter_s)
549 549
550 550 def magic_p(self, parameter_s=''):
551 551 """Just a short alias for Python's 'print'."""
552 552 exec 'print ' + parameter_s in self.shell.user_ns
553 553
554 554 def magic_r(self, parameter_s=''):
555 555 """Repeat previous input.
556 556
557 557 If given an argument, repeats the previous command which starts with
558 558 the same string, otherwise it just repeats the previous input.
559 559
560 560 Shell escaped commands (with ! as first character) are not recognized
561 561 by this system, only pure python code and magic commands.
562 562 """
563 563
564 564 start = parameter_s.strip()
565 565 esc_magic = self.shell.ESC_MAGIC
566 566 # Identify magic commands even if automagic is on (which means
567 567 # the in-memory version is different from that typed by the user).
568 568 if self.shell.rc.automagic:
569 569 start_magic = esc_magic+start
570 570 else:
571 571 start_magic = start
572 572 # Look through the input history in reverse
573 573 for n in range(len(self.shell.input_hist)-2,0,-1):
574 574 input = self.shell.input_hist[n]
575 575 # skip plain 'r' lines so we don't recurse to infinity
576 if input != 'ipmagic("r")\n' and \
576 if input != '_ip.magic("r")\n' and \
577 577 (input.startswith(start) or input.startswith(start_magic)):
578 578 #print 'match',`input` # dbg
579 579 print 'Executing:',input,
580 580 self.shell.runlines(input)
581 581 return
582 582 print 'No previous input matching `%s` found.' % start
583 583
584 584 def magic_page(self, parameter_s=''):
585 585 """Pretty print the object and display it through a pager.
586 586
587 587 If no parameter is given, use _ (last output)."""
588 588 # After a function contributed by Olivier Aubert, slightly modified.
589 589
590 590 oname = parameter_s and parameter_s or '_'
591 591 info = self._ofind(oname)
592 592 if info['found']:
593 593 page(pformat(info['obj']))
594 594 else:
595 595 print 'Object `%s` not found' % oname
596 596
597 597 def magic_profile(self, parameter_s=''):
598 598 """Print your currently active IPyhton profile."""
599 599 if self.shell.rc.profile:
600 600 printpl('Current IPython profile: $self.shell.rc.profile.')
601 601 else:
602 602 print 'No profile active.'
603 603
604 604 def _inspect(self,meth,oname,**kw):
605 605 """Generic interface to the inspector system.
606 606
607 607 This function is meant to be called by pdef, pdoc & friends."""
608 608
609 609 oname = oname.strip()
610 610 info = Struct(self._ofind(oname))
611 611 if info.found:
612 612 pmethod = getattr(self.shell.inspector,meth)
613 613 formatter = info.ismagic and self.format_screen or None
614 614 if meth == 'pdoc':
615 615 pmethod(info.obj,oname,formatter)
616 616 elif meth == 'pinfo':
617 617 pmethod(info.obj,oname,formatter,info,**kw)
618 618 else:
619 619 pmethod(info.obj,oname)
620 620 else:
621 621 print 'Object `%s` not found.' % oname
622 622 return 'not found' # so callers can take other action
623 623
624 624 def magic_pdef(self, parameter_s=''):
625 625 """Print the definition header for any callable object.
626 626
627 627 If the object is a class, print the constructor information."""
628 628 self._inspect('pdef',parameter_s)
629 629
630 630 def magic_pdoc(self, parameter_s=''):
631 631 """Print the docstring for an object.
632 632
633 633 If the given object is a class, it will print both the class and the
634 634 constructor docstrings."""
635 635 self._inspect('pdoc',parameter_s)
636 636
637 637 def magic_psource(self, parameter_s=''):
638 638 """Print (or run through pager) the source code for an object."""
639 639 self._inspect('psource',parameter_s)
640 640
641 641 def magic_pfile(self, parameter_s=''):
642 642 """Print (or run through pager) the file where an object is defined.
643 643
644 644 The file opens at the line where the object definition begins. IPython
645 645 will honor the environment variable PAGER if set, and otherwise will
646 646 do its best to print the file in a convenient form.
647 647
648 648 If the given argument is not an object currently defined, IPython will
649 649 try to interpret it as a filename (automatically adding a .py extension
650 650 if needed). You can thus use %pfile as a syntax highlighting code
651 651 viewer."""
652 652
653 653 # first interpret argument as an object name
654 654 out = self._inspect('pfile',parameter_s)
655 655 # if not, try the input as a filename
656 656 if out == 'not found':
657 657 try:
658 658 filename = get_py_filename(parameter_s)
659 659 except IOError,msg:
660 660 print msg
661 661 return
662 662 page(self.shell.inspector.format(file(filename).read()))
663 663
664 664 def magic_pinfo(self, parameter_s=''):
665 665 """Provide detailed information about an object.
666 666
667 667 '%pinfo object' is just a synonym for object? or ?object."""
668 668
669 669 #print 'pinfo par: <%s>' % parameter_s # dbg
670 670
671 671 # detail_level: 0 -> obj? , 1 -> obj??
672 672 detail_level = 0
673 673 # We need to detect if we got called as 'pinfo pinfo foo', which can
674 674 # happen if the user types 'pinfo foo?' at the cmd line.
675 675 pinfo,qmark1,oname,qmark2 = \
676 676 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
677 677 if pinfo or qmark1 or qmark2:
678 678 detail_level = 1
679 679 if "*" in oname:
680 680 self.magic_psearch(oname)
681 681 else:
682 682 self._inspect('pinfo',oname,detail_level=detail_level)
683 683
684 684 def magic_psearch(self, parameter_s=''):
685 685 """Search for object in namespaces by wildcard.
686 686
687 687 %psearch [options] PATTERN [OBJECT TYPE]
688 688
689 689 Note: ? can be used as a synonym for %psearch, at the beginning or at
690 690 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
691 691 rest of the command line must be unchanged (options come first), so
692 692 for example the following forms are equivalent
693 693
694 694 %psearch -i a* function
695 695 -i a* function?
696 696 ?-i a* function
697 697
698 698 Arguments:
699 699
700 700 PATTERN
701 701
702 702 where PATTERN is a string containing * as a wildcard similar to its
703 703 use in a shell. The pattern is matched in all namespaces on the
704 704 search path. By default objects starting with a single _ are not
705 705 matched, many IPython generated objects have a single
706 706 underscore. The default is case insensitive matching. Matching is
707 707 also done on the attributes of objects and not only on the objects
708 708 in a module.
709 709
710 710 [OBJECT TYPE]
711 711
712 712 Is the name of a python type from the types module. The name is
713 713 given in lowercase without the ending type, ex. StringType is
714 714 written string. By adding a type here only objects matching the
715 715 given type are matched. Using all here makes the pattern match all
716 716 types (this is the default).
717 717
718 718 Options:
719 719
720 720 -a: makes the pattern match even objects whose names start with a
721 721 single underscore. These names are normally ommitted from the
722 722 search.
723 723
724 724 -i/-c: make the pattern case insensitive/sensitive. If neither of
725 725 these options is given, the default is read from your ipythonrc
726 726 file. The option name which sets this value is
727 727 'wildcards_case_sensitive'. If this option is not specified in your
728 728 ipythonrc file, IPython's internal default is to do a case sensitive
729 729 search.
730 730
731 731 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
732 732 specifiy can be searched in any of the following namespaces:
733 733 'builtin', 'user', 'user_global','internal', 'alias', where
734 734 'builtin' and 'user' are the search defaults. Note that you should
735 735 not use quotes when specifying namespaces.
736 736
737 737 'Builtin' contains the python module builtin, 'user' contains all
738 738 user data, 'alias' only contain the shell aliases and no python
739 739 objects, 'internal' contains objects used by IPython. The
740 740 'user_global' namespace is only used by embedded IPython instances,
741 741 and it contains module-level globals. You can add namespaces to the
742 742 search with -s or exclude them with -e (these options can be given
743 743 more than once).
744 744
745 745 Examples:
746 746
747 747 %psearch a* -> objects beginning with an a
748 748 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
749 749 %psearch a* function -> all functions beginning with an a
750 750 %psearch re.e* -> objects beginning with an e in module re
751 751 %psearch r*.e* -> objects that start with e in modules starting in r
752 752 %psearch r*.* string -> all strings in modules beginning with r
753 753
754 754 Case sensitve search:
755 755
756 756 %psearch -c a* list all object beginning with lower case a
757 757
758 758 Show objects beginning with a single _:
759 759
760 760 %psearch -a _* list objects beginning with a single underscore"""
761 761
762 762 # default namespaces to be searched
763 763 def_search = ['user','builtin']
764 764
765 765 # Process options/args
766 766 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
767 767 opt = opts.get
768 768 shell = self.shell
769 769 psearch = shell.inspector.psearch
770 770
771 771 # select case options
772 772 if opts.has_key('i'):
773 773 ignore_case = True
774 774 elif opts.has_key('c'):
775 775 ignore_case = False
776 776 else:
777 777 ignore_case = not shell.rc.wildcards_case_sensitive
778 778
779 779 # Build list of namespaces to search from user options
780 780 def_search.extend(opt('s',[]))
781 781 ns_exclude = ns_exclude=opt('e',[])
782 782 ns_search = [nm for nm in def_search if nm not in ns_exclude]
783 783
784 784 # Call the actual search
785 785 try:
786 786 psearch(args,shell.ns_table,ns_search,
787 787 show_all=opt('a'),ignore_case=ignore_case)
788 788 except:
789 789 shell.showtraceback()
790 790
791 791 def magic_who_ls(self, parameter_s=''):
792 792 """Return a sorted list of all interactive variables.
793 793
794 794 If arguments are given, only variables of types matching these
795 795 arguments are returned."""
796 796
797 797 user_ns = self.shell.user_ns
798 798 internal_ns = self.shell.internal_ns
799 799 user_config_ns = self.shell.user_config_ns
800 800 out = []
801 801 typelist = parameter_s.split()
802 802
803 803 for i in user_ns:
804 804 if not (i.startswith('_') or i.startswith('_i')) \
805 805 and not (i in internal_ns or i in user_config_ns):
806 806 if typelist:
807 807 if type(user_ns[i]).__name__ in typelist:
808 808 out.append(i)
809 809 else:
810 810 out.append(i)
811 811 out.sort()
812 812 return out
813 813
814 814 def magic_who(self, parameter_s=''):
815 815 """Print all interactive variables, with some minimal formatting.
816 816
817 817 If any arguments are given, only variables whose type matches one of
818 818 these are printed. For example:
819 819
820 820 %who function str
821 821
822 822 will only list functions and strings, excluding all other types of
823 823 variables. To find the proper type names, simply use type(var) at a
824 824 command line to see how python prints type names. For example:
825 825
826 826 In [1]: type('hello')\\
827 827 Out[1]: <type 'str'>
828 828
829 829 indicates that the type name for strings is 'str'.
830 830
831 831 %who always excludes executed names loaded through your configuration
832 832 file and things which are internal to IPython.
833 833
834 834 This is deliberate, as typically you may load many modules and the
835 835 purpose of %who is to show you only what you've manually defined."""
836 836
837 837 varlist = self.magic_who_ls(parameter_s)
838 838 if not varlist:
839 839 print 'Interactive namespace is empty.'
840 840 return
841 841
842 842 # if we have variables, move on...
843 843
844 844 # stupid flushing problem: when prompts have no separators, stdout is
845 845 # getting lost. I'm starting to think this is a python bug. I'm having
846 846 # to force a flush with a print because even a sys.stdout.flush
847 847 # doesn't seem to do anything!
848 848
849 849 count = 0
850 850 for i in varlist:
851 851 print i+'\t',
852 852 count += 1
853 853 if count > 8:
854 854 count = 0
855 855 print
856 856 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
857 857
858 858 print # well, this does force a flush at the expense of an extra \n
859 859
860 860 def magic_whos(self, parameter_s=''):
861 861 """Like %who, but gives some extra information about each variable.
862 862
863 863 The same type filtering of %who can be applied here.
864 864
865 865 For all variables, the type is printed. Additionally it prints:
866 866
867 867 - For {},[],(): their length.
868 868
869 869 - For Numeric arrays, a summary with shape, number of elements,
870 870 typecode and size in memory.
871 871
872 872 - Everything else: a string representation, snipping their middle if
873 873 too long."""
874 874
875 875 varnames = self.magic_who_ls(parameter_s)
876 876 if not varnames:
877 877 print 'Interactive namespace is empty.'
878 878 return
879 879
880 880 # if we have variables, move on...
881 881
882 882 # for these types, show len() instead of data:
883 883 seq_types = [types.DictType,types.ListType,types.TupleType]
884 884
885 885 # for Numeric arrays, display summary info
886 886 try:
887 887 import Numeric
888 888 except ImportError:
889 889 array_type = None
890 890 else:
891 891 array_type = Numeric.ArrayType.__name__
892 892
893 893 # Find all variable names and types so we can figure out column sizes
894 894 get_vars = lambda i: self.shell.user_ns[i]
895 895 type_name = lambda v: type(v).__name__
896 896 varlist = map(get_vars,varnames)
897 897
898 898 typelist = []
899 899 for vv in varlist:
900 900 tt = type_name(vv)
901 901 if tt=='instance':
902 902 typelist.append(str(vv.__class__))
903 903 else:
904 904 typelist.append(tt)
905 905
906 906 # column labels and # of spaces as separator
907 907 varlabel = 'Variable'
908 908 typelabel = 'Type'
909 909 datalabel = 'Data/Info'
910 910 colsep = 3
911 911 # variable format strings
912 912 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
913 913 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
914 914 aformat = "%s: %s elems, type `%s`, %s bytes"
915 915 # find the size of the columns to format the output nicely
916 916 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
917 917 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
918 918 # table header
919 919 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
920 920 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
921 921 # and the table itself
922 922 kb = 1024
923 923 Mb = 1048576 # kb**2
924 924 for vname,var,vtype in zip(varnames,varlist,typelist):
925 925 print itpl(vformat),
926 926 if vtype in seq_types:
927 927 print len(var)
928 928 elif vtype==array_type:
929 929 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
930 930 vsize = Numeric.size(var)
931 931 vbytes = vsize*var.itemsize()
932 932 if vbytes < 100000:
933 933 print aformat % (vshape,vsize,var.typecode(),vbytes)
934 934 else:
935 935 print aformat % (vshape,vsize,var.typecode(),vbytes),
936 936 if vbytes < Mb:
937 937 print '(%s kb)' % (vbytes/kb,)
938 938 else:
939 939 print '(%s Mb)' % (vbytes/Mb,)
940 940 else:
941 941 vstr = str(var).replace('\n','\\n')
942 942 if len(vstr) < 50:
943 943 print vstr
944 944 else:
945 945 printpl(vfmt_short)
946 946
947 947 def magic_reset(self, parameter_s=''):
948 948 """Resets the namespace by removing all names defined by the user.
949 949
950 950 Input/Output history are left around in case you need them."""
951 951
952 952 ans = raw_input(
953 953 "Once deleted, variables cannot be recovered. Proceed (y/n)? ")
954 954 if not ans.lower() == 'y':
955 955 print 'Nothing done.'
956 956 return
957 957 user_ns = self.shell.user_ns
958 958 for i in self.magic_who_ls():
959 959 del(user_ns[i])
960 960
961 961 def magic_config(self,parameter_s=''):
962 962 """Show IPython's internal configuration."""
963 963
964 964 page('Current configuration structure:\n'+
965 965 pformat(self.shell.rc.dict()))
966 966
967 967 def magic_logstart(self,parameter_s=''):
968 968 """Start logging anywhere in a session.
969 969
970 970 %logstart [-o|-t] [log_name [log_mode]]
971 971
972 972 If no name is given, it defaults to a file named 'ipython_log.py' in your
973 973 current directory, in 'rotate' mode (see below).
974 974
975 975 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
976 976 history up to that point and then continues logging.
977 977
978 978 %logstart takes a second optional parameter: logging mode. This can be one
979 979 of (note that the modes are given unquoted):\\
980 980 append: well, that says it.\\
981 981 backup: rename (if exists) to name~ and start name.\\
982 982 global: single logfile in your home dir, appended to.\\
983 983 over : overwrite existing log.\\
984 984 rotate: create rotating logs name.1~, name.2~, etc.
985 985
986 986 Options:
987 987
988 988 -o: log also IPython's output. In this mode, all commands which
989 989 generate an Out[NN] prompt are recorded to the logfile, right after
990 990 their corresponding input line. The output lines are always
991 991 prepended with a '#[Out]# ' marker, so that the log remains valid
992 992 Python code.
993 993
994 994 Since this marker is always the same, filtering only the output from
995 995 a log is very easy, using for example a simple awk call:
996 996
997 997 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
998 998
999 999 -t: put timestamps before each input line logged (these are put in
1000 1000 comments)."""
1001 1001
1002 1002 opts,par = self.parse_options(parameter_s,'ot')
1003 1003 log_output = 'o' in opts
1004 1004 timestamp = 't' in opts
1005 1005
1006 1006 rc = self.shell.rc
1007 1007 logger = self.shell.logger
1008 1008
1009 1009 # if no args are given, the defaults set in the logger constructor by
1010 1010 # ipytohn remain valid
1011 1011 if par:
1012 1012 try:
1013 1013 logfname,logmode = par.split()
1014 1014 except:
1015 1015 logfname = par
1016 1016 logmode = 'backup'
1017 1017 else:
1018 1018 logfname = logger.logfname
1019 1019 logmode = logger.logmode
1020 1020 # put logfname into rc struct as if it had been called on the command
1021 1021 # line, so it ends up saved in the log header Save it in case we need
1022 1022 # to restore it...
1023 1023 old_logfile = rc.opts.get('logfile','')
1024 1024 if logfname:
1025 1025 logfname = os.path.expanduser(logfname)
1026 1026 rc.opts.logfile = logfname
1027 1027 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1028 1028 try:
1029 1029 started = logger.logstart(logfname,loghead,logmode,
1030 1030 log_output,timestamp)
1031 1031 except:
1032 1032 rc.opts.logfile = old_logfile
1033 1033 warn("Couldn't start log: %s" % sys.exc_info()[1])
1034 1034 else:
1035 1035 # log input history up to this point, optionally interleaving
1036 1036 # output if requested
1037 1037
1038 1038 if timestamp:
1039 1039 # disable timestamping for the previous history, since we've
1040 1040 # lost those already (no time machine here).
1041 1041 logger.timestamp = False
1042 1042 if log_output:
1043 1043 log_write = logger.log_write
1044 1044 input_hist = self.shell.input_hist
1045 1045 output_hist = self.shell.output_hist
1046 1046 for n in range(1,len(input_hist)-1):
1047 1047 log_write(input_hist[n].rstrip())
1048 1048 if n in output_hist:
1049 1049 log_write(repr(output_hist[n]),'output')
1050 1050 else:
1051 1051 logger.log_write(self.shell.input_hist[1:])
1052 1052 if timestamp:
1053 1053 # re-enable timestamping
1054 1054 logger.timestamp = True
1055 1055
1056 1056 print ('Activating auto-logging. '
1057 1057 'Current session state plus future input saved.')
1058 1058 logger.logstate()
1059 1059
1060 1060 def magic_logoff(self,parameter_s=''):
1061 1061 """Temporarily stop logging.
1062 1062
1063 1063 You must have previously started logging."""
1064 1064 self.shell.logger.switch_log(0)
1065 1065
1066 1066 def magic_logon(self,parameter_s=''):
1067 1067 """Restart logging.
1068 1068
1069 1069 This function is for restarting logging which you've temporarily
1070 1070 stopped with %logoff. For starting logging for the first time, you
1071 1071 must use the %logstart function, which allows you to specify an
1072 1072 optional log filename."""
1073 1073
1074 1074 self.shell.logger.switch_log(1)
1075 1075
1076 1076 def magic_logstate(self,parameter_s=''):
1077 1077 """Print the status of the logging system."""
1078 1078
1079 1079 self.shell.logger.logstate()
1080 1080
1081 1081 def magic_pdb(self, parameter_s=''):
1082 1082 """Control the calling of the pdb interactive debugger.
1083 1083
1084 1084 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1085 1085 argument it works as a toggle.
1086 1086
1087 1087 When an exception is triggered, IPython can optionally call the
1088 1088 interactive pdb debugger after the traceback printout. %pdb toggles
1089 1089 this feature on and off."""
1090 1090
1091 1091 par = parameter_s.strip().lower()
1092 1092
1093 1093 if par:
1094 1094 try:
1095 1095 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1096 1096 except KeyError:
1097 1097 print ('Incorrect argument. Use on/1, off/0, '
1098 1098 'or nothing for a toggle.')
1099 1099 return
1100 1100 else:
1101 1101 # toggle
1102 1102 new_pdb = not self.shell.InteractiveTB.call_pdb
1103 1103
1104 1104 # set on the shell
1105 1105 self.shell.call_pdb = new_pdb
1106 1106 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1107 1107
1108 1108 def magic_prun(self, parameter_s ='',user_mode=1,
1109 1109 opts=None,arg_lst=None,prog_ns=None):
1110 1110
1111 1111 """Run a statement through the python code profiler.
1112 1112
1113 1113 Usage:\\
1114 1114 %prun [options] statement
1115 1115
1116 1116 The given statement (which doesn't require quote marks) is run via the
1117 1117 python profiler in a manner similar to the profile.run() function.
1118 1118 Namespaces are internally managed to work correctly; profile.run
1119 1119 cannot be used in IPython because it makes certain assumptions about
1120 1120 namespaces which do not hold under IPython.
1121 1121
1122 1122 Options:
1123 1123
1124 1124 -l <limit>: you can place restrictions on what or how much of the
1125 1125 profile gets printed. The limit value can be:
1126 1126
1127 1127 * A string: only information for function names containing this string
1128 1128 is printed.
1129 1129
1130 1130 * An integer: only these many lines are printed.
1131 1131
1132 1132 * A float (between 0 and 1): this fraction of the report is printed
1133 1133 (for example, use a limit of 0.4 to see the topmost 40% only).
1134 1134
1135 1135 You can combine several limits with repeated use of the option. For
1136 1136 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1137 1137 information about class constructors.
1138 1138
1139 1139 -r: return the pstats.Stats object generated by the profiling. This
1140 1140 object has all the information about the profile in it, and you can
1141 1141 later use it for further analysis or in other functions.
1142 1142
1143 1143 Since magic functions have a particular form of calling which prevents
1144 1144 you from writing something like:\\
1145 1145 In [1]: p = %prun -r print 4 # invalid!\\
1146 1146 you must instead use IPython's automatic variables to assign this:\\
1147 1147 In [1]: %prun -r print 4 \\
1148 1148 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1149 1149 In [2]: stats = _
1150 1150
1151 1151 If you really need to assign this value via an explicit function call,
1152 1152 you can always tap directly into the true name of the magic function
1153 by using the ipmagic function (which IPython automatically adds to the
1154 builtins):\\
1155 In [3]: stats = ipmagic('prun','-r print 4')
1153 by using the _ip.magic function:\\
1154 In [3]: stats = _ip.magic('prun','-r print 4')
1156 1155
1157 You can type ipmagic? for more details on ipmagic.
1156 You can type _ip.magic? for more details.
1158 1157
1159 1158 -s <key>: sort profile by given key. You can provide more than one key
1160 1159 by using the option several times: '-s key1 -s key2 -s key3...'. The
1161 1160 default sorting key is 'time'.
1162 1161
1163 1162 The following is copied verbatim from the profile documentation
1164 1163 referenced below:
1165 1164
1166 1165 When more than one key is provided, additional keys are used as
1167 1166 secondary criteria when the there is equality in all keys selected
1168 1167 before them.
1169 1168
1170 1169 Abbreviations can be used for any key names, as long as the
1171 1170 abbreviation is unambiguous. The following are the keys currently
1172 1171 defined:
1173 1172
1174 1173 Valid Arg Meaning\\
1175 1174 "calls" call count\\
1176 1175 "cumulative" cumulative time\\
1177 1176 "file" file name\\
1178 1177 "module" file name\\
1179 1178 "pcalls" primitive call count\\
1180 1179 "line" line number\\
1181 1180 "name" function name\\
1182 1181 "nfl" name/file/line\\
1183 1182 "stdname" standard name\\
1184 1183 "time" internal time
1185 1184
1186 1185 Note that all sorts on statistics are in descending order (placing
1187 1186 most time consuming items first), where as name, file, and line number
1188 1187 searches are in ascending order (i.e., alphabetical). The subtle
1189 1188 distinction between "nfl" and "stdname" is that the standard name is a
1190 1189 sort of the name as printed, which means that the embedded line
1191 1190 numbers get compared in an odd way. For example, lines 3, 20, and 40
1192 1191 would (if the file names were the same) appear in the string order
1193 1192 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1194 1193 line numbers. In fact, sort_stats("nfl") is the same as
1195 1194 sort_stats("name", "file", "line").
1196 1195
1197 1196 -T <filename>: save profile results as shown on screen to a text
1198 1197 file. The profile is still shown on screen.
1199 1198
1200 1199 -D <filename>: save (via dump_stats) profile statistics to given
1201 1200 filename. This data is in a format understod by the pstats module, and
1202 1201 is generated by a call to the dump_stats() method of profile
1203 1202 objects. The profile is still shown on screen.
1204 1203
1205 1204 If you want to run complete programs under the profiler's control, use
1206 1205 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1207 1206 contains profiler specific options as described here.
1208 1207
1209 1208 You can read the complete documentation for the profile module with:\\
1210 1209 In [1]: import profile; profile.help() """
1211 1210
1212 1211 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1213 1212 # protect user quote marks
1214 1213 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1215 1214
1216 1215 if user_mode: # regular user call
1217 1216 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1218 1217 list_all=1)
1219 1218 namespace = self.shell.user_ns
1220 1219 else: # called to run a program by %run -p
1221 1220 try:
1222 1221 filename = get_py_filename(arg_lst[0])
1223 1222 except IOError,msg:
1224 1223 error(msg)
1225 1224 return
1226 1225
1227 1226 arg_str = 'execfile(filename,prog_ns)'
1228 1227 namespace = locals()
1229 1228
1230 1229 opts.merge(opts_def)
1231 1230
1232 1231 prof = profile.Profile()
1233 1232 try:
1234 1233 prof = prof.runctx(arg_str,namespace,namespace)
1235 1234 sys_exit = ''
1236 1235 except SystemExit:
1237 1236 sys_exit = """*** SystemExit exception caught in code being profiled."""
1238 1237
1239 1238 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1240 1239
1241 1240 lims = opts.l
1242 1241 if lims:
1243 1242 lims = [] # rebuild lims with ints/floats/strings
1244 1243 for lim in opts.l:
1245 1244 try:
1246 1245 lims.append(int(lim))
1247 1246 except ValueError:
1248 1247 try:
1249 1248 lims.append(float(lim))
1250 1249 except ValueError:
1251 1250 lims.append(lim)
1252 1251
1253 1252 # trap output
1254 1253 sys_stdout = sys.stdout
1255 1254 stdout_trap = StringIO()
1256 1255 try:
1257 1256 sys.stdout = stdout_trap
1258 1257 stats.print_stats(*lims)
1259 1258 finally:
1260 1259 sys.stdout = sys_stdout
1261 1260 output = stdout_trap.getvalue()
1262 1261 output = output.rstrip()
1263 1262
1264 1263 page(output,screen_lines=self.shell.rc.screen_length)
1265 1264 print sys_exit,
1266 1265
1267 1266 dump_file = opts.D[0]
1268 1267 text_file = opts.T[0]
1269 1268 if dump_file:
1270 1269 prof.dump_stats(dump_file)
1271 1270 print '\n*** Profile stats marshalled to file',\
1272 1271 `dump_file`+'.',sys_exit
1273 1272 if text_file:
1274 1273 file(text_file,'w').write(output)
1275 1274 print '\n*** Profile printout saved to text file',\
1276 1275 `text_file`+'.',sys_exit
1277 1276
1278 1277 if opts.has_key('r'):
1279 1278 return stats
1280 1279 else:
1281 1280 return None
1282 1281
1283 1282 def magic_run(self, parameter_s ='',runner=None):
1284 1283 """Run the named file inside IPython as a program.
1285 1284
1286 1285 Usage:\\
1287 1286 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1288 1287
1289 1288 Parameters after the filename are passed as command-line arguments to
1290 1289 the program (put in sys.argv). Then, control returns to IPython's
1291 1290 prompt.
1292 1291
1293 1292 This is similar to running at a system prompt:\\
1294 1293 $ python file args\\
1295 1294 but with the advantage of giving you IPython's tracebacks, and of
1296 1295 loading all variables into your interactive namespace for further use
1297 1296 (unless -p is used, see below).
1298 1297
1299 1298 The file is executed in a namespace initially consisting only of
1300 1299 __name__=='__main__' and sys.argv constructed as indicated. It thus
1301 1300 sees its environment as if it were being run as a stand-alone
1302 1301 program. But after execution, the IPython interactive namespace gets
1303 1302 updated with all variables defined in the program (except for __name__
1304 1303 and sys.argv). This allows for very convenient loading of code for
1305 1304 interactive work, while giving each program a 'clean sheet' to run in.
1306 1305
1307 1306 Options:
1308 1307
1309 1308 -n: __name__ is NOT set to '__main__', but to the running file's name
1310 1309 without extension (as python does under import). This allows running
1311 1310 scripts and reloading the definitions in them without calling code
1312 1311 protected by an ' if __name__ == "__main__" ' clause.
1313 1312
1314 1313 -i: run the file in IPython's namespace instead of an empty one. This
1315 1314 is useful if you are experimenting with code written in a text editor
1316 1315 which depends on variables defined interactively.
1317 1316
1318 1317 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1319 1318 being run. This is particularly useful if IPython is being used to
1320 1319 run unittests, which always exit with a sys.exit() call. In such
1321 1320 cases you are interested in the output of the test results, not in
1322 1321 seeing a traceback of the unittest module.
1323 1322
1324 1323 -t: print timing information at the end of the run. IPython will give
1325 1324 you an estimated CPU time consumption for your script, which under
1326 1325 Unix uses the resource module to avoid the wraparound problems of
1327 1326 time.clock(). Under Unix, an estimate of time spent on system tasks
1328 1327 is also given (for Windows platforms this is reported as 0.0).
1329 1328
1330 1329 If -t is given, an additional -N<N> option can be given, where <N>
1331 1330 must be an integer indicating how many times you want the script to
1332 1331 run. The final timing report will include total and per run results.
1333 1332
1334 1333 For example (testing the script uniq_stable.py):
1335 1334
1336 1335 In [1]: run -t uniq_stable
1337 1336
1338 1337 IPython CPU timings (estimated):\\
1339 1338 User : 0.19597 s.\\
1340 1339 System: 0.0 s.\\
1341 1340
1342 1341 In [2]: run -t -N5 uniq_stable
1343 1342
1344 1343 IPython CPU timings (estimated):\\
1345 1344 Total runs performed: 5\\
1346 1345 Times : Total Per run\\
1347 1346 User : 0.910862 s, 0.1821724 s.\\
1348 1347 System: 0.0 s, 0.0 s.
1349 1348
1350 1349 -d: run your program under the control of pdb, the Python debugger.
1351 1350 This allows you to execute your program step by step, watch variables,
1352 1351 etc. Internally, what IPython does is similar to calling:
1353 1352
1354 1353 pdb.run('execfile("YOURFILENAME")')
1355 1354
1356 1355 with a breakpoint set on line 1 of your file. You can change the line
1357 1356 number for this automatic breakpoint to be <N> by using the -bN option
1358 1357 (where N must be an integer). For example:
1359 1358
1360 1359 %run -d -b40 myscript
1361 1360
1362 1361 will set the first breakpoint at line 40 in myscript.py. Note that
1363 1362 the first breakpoint must be set on a line which actually does
1364 1363 something (not a comment or docstring) for it to stop execution.
1365 1364
1366 1365 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1367 1366 first enter 'c' (without qoutes) to start execution up to the first
1368 1367 breakpoint.
1369 1368
1370 1369 Entering 'help' gives information about the use of the debugger. You
1371 1370 can easily see pdb's full documentation with "import pdb;pdb.help()"
1372 1371 at a prompt.
1373 1372
1374 1373 -p: run program under the control of the Python profiler module (which
1375 1374 prints a detailed report of execution times, function calls, etc).
1376 1375
1377 1376 You can pass other options after -p which affect the behavior of the
1378 1377 profiler itself. See the docs for %prun for details.
1379 1378
1380 1379 In this mode, the program's variables do NOT propagate back to the
1381 1380 IPython interactive namespace (because they remain in the namespace
1382 1381 where the profiler executes them).
1383 1382
1384 1383 Internally this triggers a call to %prun, see its documentation for
1385 1384 details on the options available specifically for profiling."""
1386 1385
1387 1386 # get arguments and set sys.argv for program to be run.
1388 1387 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1389 1388 mode='list',list_all=1)
1390 1389
1391 1390 try:
1392 1391 filename = get_py_filename(arg_lst[0])
1393 1392 except IndexError:
1394 1393 warn('you must provide at least a filename.')
1395 1394 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1396 1395 return
1397 1396 except IOError,msg:
1398 1397 error(msg)
1399 1398 return
1400 1399
1401 1400 # Control the response to exit() calls made by the script being run
1402 1401 exit_ignore = opts.has_key('e')
1403 1402
1404 1403 # Make sure that the running script gets a proper sys.argv as if it
1405 1404 # were run from a system shell.
1406 1405 save_argv = sys.argv # save it for later restoring
1407 1406 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1408 1407
1409 1408 if opts.has_key('i'):
1410 1409 prog_ns = self.shell.user_ns
1411 1410 __name__save = self.shell.user_ns['__name__']
1412 1411 prog_ns['__name__'] = '__main__'
1413 1412 else:
1414 1413 if opts.has_key('n'):
1415 1414 name = os.path.splitext(os.path.basename(filename))[0]
1416 1415 else:
1417 1416 name = '__main__'
1418 1417 prog_ns = {'__name__':name}
1419 1418
1420 1419 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1421 1420 # set the __file__ global in the script's namespace
1422 1421 prog_ns['__file__'] = filename
1423 1422
1424 1423 # pickle fix. See iplib for an explanation. But we need to make sure
1425 1424 # that, if we overwrite __main__, we replace it at the end
1426 1425 if prog_ns['__name__'] == '__main__':
1427 1426 restore_main = sys.modules['__main__']
1428 1427 else:
1429 1428 restore_main = False
1430 1429
1431 1430 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1432 1431
1433 1432 stats = None
1434 1433 try:
1435 1434 if opts.has_key('p'):
1436 1435 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1437 1436 else:
1438 1437 if opts.has_key('d'):
1439 1438 deb = Debugger.Pdb(self.shell.rc.colors)
1440 1439 # reset Breakpoint state, which is moronically kept
1441 1440 # in a class
1442 1441 bdb.Breakpoint.next = 1
1443 1442 bdb.Breakpoint.bplist = {}
1444 1443 bdb.Breakpoint.bpbynumber = [None]
1445 1444 # Set an initial breakpoint to stop execution
1446 1445 maxtries = 10
1447 1446 bp = int(opts.get('b',[1])[0])
1448 1447 checkline = deb.checkline(filename,bp)
1449 1448 if not checkline:
1450 1449 for bp in range(bp+1,bp+maxtries+1):
1451 1450 if deb.checkline(filename,bp):
1452 1451 break
1453 1452 else:
1454 1453 msg = ("\nI failed to find a valid line to set "
1455 1454 "a breakpoint\n"
1456 1455 "after trying up to line: %s.\n"
1457 1456 "Please set a valid breakpoint manually "
1458 1457 "with the -b option." % bp)
1459 1458 error(msg)
1460 1459 return
1461 1460 # if we find a good linenumber, set the breakpoint
1462 1461 deb.do_break('%s:%s' % (filename,bp))
1463 1462 # Start file run
1464 1463 print "NOTE: Enter 'c' at the",
1465 1464 print "ipdb> prompt to start your script."
1466 1465 try:
1467 1466 deb.run('execfile("%s")' % filename,prog_ns)
1468 1467 except:
1469 1468 etype, value, tb = sys.exc_info()
1470 1469 # Skip three frames in the traceback: the %run one,
1471 1470 # one inside bdb.py, and the command-line typed by the
1472 1471 # user (run by exec in pdb itself).
1473 1472 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1474 1473 else:
1475 1474 if runner is None:
1476 1475 runner = self.shell.safe_execfile
1477 1476 if opts.has_key('t'):
1478 1477 try:
1479 1478 nruns = int(opts['N'][0])
1480 1479 if nruns < 1:
1481 1480 error('Number of runs must be >=1')
1482 1481 return
1483 1482 except (KeyError):
1484 1483 nruns = 1
1485 1484 if nruns == 1:
1486 1485 t0 = clock2()
1487 1486 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1488 1487 t1 = clock2()
1489 1488 t_usr = t1[0]-t0[0]
1490 1489 t_sys = t1[1]-t1[1]
1491 1490 print "\nIPython CPU timings (estimated):"
1492 1491 print " User : %10s s." % t_usr
1493 1492 print " System: %10s s." % t_sys
1494 1493 else:
1495 1494 runs = range(nruns)
1496 1495 t0 = clock2()
1497 1496 for nr in runs:
1498 1497 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1499 1498 t1 = clock2()
1500 1499 t_usr = t1[0]-t0[0]
1501 1500 t_sys = t1[1]-t1[1]
1502 1501 print "\nIPython CPU timings (estimated):"
1503 1502 print "Total runs performed:",nruns
1504 1503 print " Times : %10s %10s" % ('Total','Per run')
1505 1504 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1506 1505 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1507 1506
1508 1507 else:
1509 1508 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1510 1509 if opts.has_key('i'):
1511 1510 self.shell.user_ns['__name__'] = __name__save
1512 1511 else:
1513 1512 # update IPython interactive namespace
1514 1513 del prog_ns['__name__']
1515 1514 self.shell.user_ns.update(prog_ns)
1516 1515 finally:
1517 1516 sys.argv = save_argv
1518 1517 if restore_main:
1519 1518 sys.modules['__main__'] = restore_main
1520 1519 return stats
1521 1520
1522 1521 def magic_runlog(self, parameter_s =''):
1523 1522 """Run files as logs.
1524 1523
1525 1524 Usage:\\
1526 1525 %runlog file1 file2 ...
1527 1526
1528 1527 Run the named files (treating them as log files) in sequence inside
1529 1528 the interpreter, and return to the prompt. This is much slower than
1530 1529 %run because each line is executed in a try/except block, but it
1531 1530 allows running files with syntax errors in them.
1532 1531
1533 1532 Normally IPython will guess when a file is one of its own logfiles, so
1534 1533 you can typically use %run even for logs. This shorthand allows you to
1535 1534 force any file to be treated as a log file."""
1536 1535
1537 1536 for f in parameter_s.split():
1538 1537 self.shell.safe_execfile(f,self.shell.user_ns,
1539 1538 self.shell.user_ns,islog=1)
1540 1539
1541 1540 def magic_time(self,parameter_s = ''):
1542 1541 """Time execution of a Python statement or expression.
1543 1542
1544 1543 The CPU and wall clock times are printed, and the value of the
1545 1544 expression (if any) is returned. Note that under Win32, system time
1546 1545 is always reported as 0, since it can not be measured.
1547 1546
1548 1547 This function provides very basic timing functionality. In Python
1549 1548 2.3, the timeit module offers more control and sophistication, but for
1550 1549 now IPython supports Python 2.2, so we can not rely on timeit being
1551 1550 present.
1552 1551
1553 1552 Some examples:
1554 1553
1555 1554 In [1]: time 2**128
1556 1555 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1557 1556 Wall time: 0.00
1558 1557 Out[1]: 340282366920938463463374607431768211456L
1559 1558
1560 1559 In [2]: n = 1000000
1561 1560
1562 1561 In [3]: time sum(range(n))
1563 1562 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1564 1563 Wall time: 1.37
1565 1564 Out[3]: 499999500000L
1566 1565
1567 1566 In [4]: time print 'hello world'
1568 1567 hello world
1569 1568 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1570 1569 Wall time: 0.00
1571 1570 """
1572 1571
1573 1572 # fail immediately if the given expression can't be compiled
1574 1573 try:
1575 1574 mode = 'eval'
1576 1575 code = compile(parameter_s,'<timed eval>',mode)
1577 1576 except SyntaxError:
1578 1577 mode = 'exec'
1579 1578 code = compile(parameter_s,'<timed exec>',mode)
1580 1579 # skew measurement as little as possible
1581 1580 glob = self.shell.user_ns
1582 1581 clk = clock2
1583 1582 wtime = time.time
1584 1583 # time execution
1585 1584 wall_st = wtime()
1586 1585 if mode=='eval':
1587 1586 st = clk()
1588 1587 out = eval(code,glob)
1589 1588 end = clk()
1590 1589 else:
1591 1590 st = clk()
1592 1591 exec code in glob
1593 1592 end = clk()
1594 1593 out = None
1595 1594 wall_end = wtime()
1596 1595 # Compute actual times and report
1597 1596 wall_time = wall_end-wall_st
1598 1597 cpu_user = end[0]-st[0]
1599 1598 cpu_sys = end[1]-st[1]
1600 1599 cpu_tot = cpu_user+cpu_sys
1601 1600 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1602 1601 (cpu_user,cpu_sys,cpu_tot)
1603 1602 print "Wall time: %.2f" % wall_time
1604 1603 return out
1605 1604
1606 1605 def magic_macro(self,parameter_s = ''):
1607 1606 """Define a set of input lines as a macro for future re-execution.
1608 1607
1609 1608 Usage:\\
1610 1609 %macro name n1-n2 n3-n4 ... n5 .. n6 ...
1611 1610
1612 1611 This will define a global variable called `name` which is a string
1613 1612 made of joining the slices and lines you specify (n1,n2,... numbers
1614 1613 above) from your input history into a single string. This variable
1615 1614 acts like an automatic function which re-executes those lines as if
1616 1615 you had typed them. You just type 'name' at the prompt and the code
1617 1616 executes.
1618 1617
1619 1618 The notation for indicating number ranges is: n1-n2 means 'use line
1620 1619 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1621 1620 using the lines numbered 5,6 and 7.
1622 1621
1623 1622 Note: as a 'hidden' feature, you can also use traditional python slice
1624 1623 notation, where N:M means numbers N through M-1.
1625 1624
1626 1625 For example, if your history contains (%hist prints it):
1627 1626
1628 1627 44: x=1\\
1629 1628 45: y=3\\
1630 1629 46: z=x+y\\
1631 1630 47: print x\\
1632 1631 48: a=5\\
1633 1632 49: print 'x',x,'y',y\\
1634 1633
1635 1634 you can create a macro with lines 44 through 47 (included) and line 49
1636 1635 called my_macro with:
1637 1636
1638 1637 In [51]: %macro my_macro 44-47 49
1639 1638
1640 1639 Now, typing `my_macro` (without quotes) will re-execute all this code
1641 1640 in one pass.
1642 1641
1643 1642 You don't need to give the line-numbers in order, and any given line
1644 1643 number can appear multiple times. You can assemble macros with any
1645 1644 lines from your input history in any order.
1646 1645
1647 1646 The macro is a simple object which holds its value in an attribute,
1648 1647 but IPython's display system checks for macros and executes them as
1649 1648 code instead of printing them when you type their name.
1650 1649
1651 1650 You can view a macro's contents by explicitly printing it with:
1652 1651
1653 1652 'print macro_name'.
1654 1653
1655 1654 For one-off cases which DON'T contain magic function calls in them you
1656 1655 can obtain similar results by explicitly executing slices from your
1657 1656 input history with:
1658 1657
1659 1658 In [60]: exec In[44:48]+In[49]"""
1660 1659
1661 1660 args = parameter_s.split()
1662 1661 name,ranges = args[0], args[1:]
1663 1662 #print 'rng',ranges # dbg
1664 1663 lines = self.extract_input_slices(ranges)
1665 1664 macro = Macro(lines)
1666 1665 self.shell.user_ns.update({name:macro})
1667 1666 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1668 1667 print 'Macro contents:'
1669 1668 print macro,
1670 1669
1671 1670 def magic_save(self,parameter_s = ''):
1672 1671 """Save a set of lines to a given filename.
1673 1672
1674 1673 Usage:\\
1675 1674 %save filename n1-n2 n3-n4 ... n5 .. n6 ...
1676 1675
1677 1676 This function uses the same syntax as %macro for line extraction, but
1678 1677 instead of creating a macro it saves the resulting string to the
1679 1678 filename you specify.
1680 1679
1681 1680 It adds a '.py' extension to the file if you don't do so yourself, and
1682 1681 it asks for confirmation before overwriting existing files."""
1683 1682
1684 1683 args = parameter_s.split()
1685 1684 fname,ranges = args[0], args[1:]
1686 1685 if not fname.endswith('.py'):
1687 1686 fname += '.py'
1688 1687 if os.path.isfile(fname):
1689 1688 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1690 1689 if ans.lower() not in ['y','yes']:
1691 1690 print 'Operation cancelled.'
1692 1691 return
1693 1692 cmds = ''.join(self.extract_input_slices(ranges))
1694 1693 f = file(fname,'w')
1695 1694 f.write(cmds)
1696 1695 f.close()
1697 1696 print 'The following commands were written to file `%s`:' % fname
1698 1697 print cmds
1699 1698
1700 1699 def _edit_macro(self,mname,macro):
1701 1700 """open an editor with the macro data in a file"""
1702 1701 filename = self.shell.mktempfile(macro.value)
1703 1702 self.shell.hooks.editor(filename)
1704 1703
1705 1704 # and make a new macro object, to replace the old one
1706 1705 mfile = open(filename)
1707 1706 mvalue = mfile.read()
1708 1707 mfile.close()
1709 1708 self.shell.user_ns[mname] = Macro(mvalue)
1710 1709
1711 1710 def magic_ed(self,parameter_s=''):
1712 1711 """Alias to %edit."""
1713 1712 return self.magic_edit(parameter_s)
1714 1713
1715 1714 def magic_edit(self,parameter_s='',last_call=['','']):
1716 1715 """Bring up an editor and execute the resulting code.
1717 1716
1718 1717 Usage:
1719 1718 %edit [options] [args]
1720 1719
1721 1720 %edit runs IPython's editor hook. The default version of this hook is
1722 1721 set to call the __IPYTHON__.rc.editor command. This is read from your
1723 1722 environment variable $EDITOR. If this isn't found, it will default to
1724 1723 vi under Linux/Unix and to notepad under Windows. See the end of this
1725 1724 docstring for how to change the editor hook.
1726 1725
1727 1726 You can also set the value of this editor via the command line option
1728 1727 '-editor' or in your ipythonrc file. This is useful if you wish to use
1729 1728 specifically for IPython an editor different from your typical default
1730 1729 (and for Windows users who typically don't set environment variables).
1731 1730
1732 1731 This command allows you to conveniently edit multi-line code right in
1733 1732 your IPython session.
1734 1733
1735 1734 If called without arguments, %edit opens up an empty editor with a
1736 1735 temporary file and will execute the contents of this file when you
1737 1736 close it (don't forget to save it!).
1738 1737
1739 1738
1740 1739 Options:
1741 1740
1742 1741 -p: this will call the editor with the same data as the previous time
1743 1742 it was used, regardless of how long ago (in your current session) it
1744 1743 was.
1745 1744
1746 1745 -x: do not execute the edited code immediately upon exit. This is
1747 1746 mainly useful if you are editing programs which need to be called with
1748 1747 command line arguments, which you can then do using %run.
1749 1748
1750 1749
1751 1750 Arguments:
1752 1751
1753 1752 If arguments are given, the following possibilites exist:
1754 1753
1755 1754 - The arguments are numbers or pairs of colon-separated numbers (like
1756 1755 1 4:8 9). These are interpreted as lines of previous input to be
1757 1756 loaded into the editor. The syntax is the same of the %macro command.
1758 1757
1759 1758 - If the argument doesn't start with a number, it is evaluated as a
1760 1759 variable and its contents loaded into the editor. You can thus edit
1761 1760 any string which contains python code (including the result of
1762 1761 previous edits).
1763 1762
1764 1763 - If the argument is the name of an object (other than a string),
1765 1764 IPython will try to locate the file where it was defined and open the
1766 1765 editor at the point where it is defined. You can use `%edit function`
1767 1766 to load an editor exactly at the point where 'function' is defined,
1768 1767 edit it and have the file be executed automatically.
1769 1768
1770 1769 If the object is a macro (see %macro for details), this opens up your
1771 1770 specified editor with a temporary file containing the macro's data.
1772 1771 Upon exit, the macro is reloaded with the contents of the file.
1773 1772
1774 1773 Note: opening at an exact line is only supported under Unix, and some
1775 1774 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1776 1775 '+NUMBER' parameter necessary for this feature. Good editors like
1777 1776 (X)Emacs, vi, jed, pico and joe all do.
1778 1777
1779 1778 - If the argument is not found as a variable, IPython will look for a
1780 1779 file with that name (adding .py if necessary) and load it into the
1781 1780 editor. It will execute its contents with execfile() when you exit,
1782 1781 loading any code in the file into your interactive namespace.
1783 1782
1784 1783 After executing your code, %edit will return as output the code you
1785 1784 typed in the editor (except when it was an existing file). This way
1786 1785 you can reload the code in further invocations of %edit as a variable,
1787 1786 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1788 1787 the output.
1789 1788
1790 1789 Note that %edit is also available through the alias %ed.
1791 1790
1792 1791 This is an example of creating a simple function inside the editor and
1793 1792 then modifying it. First, start up the editor:
1794 1793
1795 1794 In [1]: ed\\
1796 1795 Editing... done. Executing edited code...\\
1797 1796 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1798 1797
1799 1798 We can then call the function foo():
1800 1799
1801 1800 In [2]: foo()\\
1802 1801 foo() was defined in an editing session
1803 1802
1804 1803 Now we edit foo. IPython automatically loads the editor with the
1805 1804 (temporary) file where foo() was previously defined:
1806 1805
1807 1806 In [3]: ed foo\\
1808 1807 Editing... done. Executing edited code...
1809 1808
1810 1809 And if we call foo() again we get the modified version:
1811 1810
1812 1811 In [4]: foo()\\
1813 1812 foo() has now been changed!
1814 1813
1815 1814 Here is an example of how to edit a code snippet successive
1816 1815 times. First we call the editor:
1817 1816
1818 1817 In [8]: ed\\
1819 1818 Editing... done. Executing edited code...\\
1820 1819 hello\\
1821 1820 Out[8]: "print 'hello'\\n"
1822 1821
1823 1822 Now we call it again with the previous output (stored in _):
1824 1823
1825 1824 In [9]: ed _\\
1826 1825 Editing... done. Executing edited code...\\
1827 1826 hello world\\
1828 1827 Out[9]: "print 'hello world'\\n"
1829 1828
1830 1829 Now we call it with the output #8 (stored in _8, also as Out[8]):
1831 1830
1832 1831 In [10]: ed _8\\
1833 1832 Editing... done. Executing edited code...\\
1834 1833 hello again\\
1835 1834 Out[10]: "print 'hello again'\\n"
1836 1835
1837 1836
1838 1837 Changing the default editor hook:
1839 1838
1840 1839 If you wish to write your own editor hook, you can put it in a
1841 1840 configuration file which you load at startup time. The default hook
1842 1841 is defined in the IPython.hooks module, and you can use that as a
1843 1842 starting example for further modifications. That file also has
1844 1843 general instructions on how to set a new hook for use once you've
1845 1844 defined it."""
1846 1845
1847 1846 # FIXME: This function has become a convoluted mess. It needs a
1848 1847 # ground-up rewrite with clean, simple logic.
1849 1848
1850 1849 def make_filename(arg):
1851 1850 "Make a filename from the given args"
1852 1851 try:
1853 1852 filename = get_py_filename(arg)
1854 1853 except IOError:
1855 1854 if args.endswith('.py'):
1856 1855 filename = arg
1857 1856 else:
1858 1857 filename = None
1859 1858 return filename
1860 1859
1861 1860 # custom exceptions
1862 1861 class DataIsObject(Exception): pass
1863 1862
1864 1863 opts,args = self.parse_options(parameter_s,'px')
1865 1864
1866 1865 # Default line number value
1867 1866 lineno = None
1868 1867 if opts.has_key('p'):
1869 1868 args = '_%s' % last_call[0]
1870 1869 if not self.shell.user_ns.has_key(args):
1871 1870 args = last_call[1]
1872 1871
1873 1872 # use last_call to remember the state of the previous call, but don't
1874 1873 # let it be clobbered by successive '-p' calls.
1875 1874 try:
1876 1875 last_call[0] = self.shell.outputcache.prompt_count
1877 1876 if not opts.has_key('p'):
1878 1877 last_call[1] = parameter_s
1879 1878 except:
1880 1879 pass
1881 1880
1882 1881 # by default this is done with temp files, except when the given
1883 1882 # arg is a filename
1884 1883 use_temp = 1
1885 1884
1886 1885 if re.match(r'\d',args):
1887 1886 # Mode where user specifies ranges of lines, like in %macro.
1888 1887 # This means that you can't edit files whose names begin with
1889 1888 # numbers this way. Tough.
1890 1889 ranges = args.split()
1891 1890 data = ''.join(self.extract_input_slices(ranges))
1892 1891 elif args.endswith('.py'):
1893 1892 filename = make_filename(args)
1894 1893 data = ''
1895 1894 use_temp = 0
1896 1895 elif args:
1897 1896 try:
1898 1897 # Load the parameter given as a variable. If not a string,
1899 1898 # process it as an object instead (below)
1900 1899
1901 1900 #print '*** args',args,'type',type(args) # dbg
1902 1901 data = eval(args,self.shell.user_ns)
1903 1902 if not type(data) in StringTypes:
1904 1903 raise DataIsObject
1905 1904
1906 1905 except (NameError,SyntaxError):
1907 1906 # given argument is not a variable, try as a filename
1908 1907 filename = make_filename(args)
1909 1908 if filename is None:
1910 1909 warn("Argument given (%s) can't be found as a variable "
1911 1910 "or as a filename." % args)
1912 1911 return
1913 1912
1914 1913 data = ''
1915 1914 use_temp = 0
1916 1915 except DataIsObject:
1917 1916
1918 1917 # macros have a special edit function
1919 1918 if isinstance(data,Macro):
1920 1919 self._edit_macro(args,data)
1921 1920 return
1922 1921
1923 1922 # For objects, try to edit the file where they are defined
1924 1923 try:
1925 1924 filename = inspect.getabsfile(data)
1926 1925 datafile = 1
1927 1926 except TypeError:
1928 1927 filename = make_filename(args)
1929 1928 datafile = 1
1930 1929 warn('Could not find file where `%s` is defined.\n'
1931 1930 'Opening a file named `%s`' % (args,filename))
1932 1931 # Now, make sure we can actually read the source (if it was in
1933 1932 # a temp file it's gone by now).
1934 1933 if datafile:
1935 1934 try:
1936 1935 lineno = inspect.getsourcelines(data)[1]
1937 1936 except IOError:
1938 1937 filename = make_filename(args)
1939 1938 if filename is None:
1940 1939 warn('The file `%s` where `%s` was defined cannot '
1941 1940 'be read.' % (filename,data))
1942 1941 return
1943 1942 use_temp = 0
1944 1943 else:
1945 1944 data = ''
1946 1945
1947 1946 if use_temp:
1948 1947 filename = self.shell.mktempfile(data)
1949 1948 print 'IPython will make a temporary file named:',filename
1950 1949
1951 1950 # do actual editing here
1952 1951 print 'Editing...',
1953 1952 sys.stdout.flush()
1954 1953 self.shell.hooks.editor(filename,lineno)
1955 1954 if opts.has_key('x'): # -x prevents actual execution
1956 1955 print
1957 1956 else:
1958 1957 print 'done. Executing edited code...'
1959 1958 self.shell.safe_execfile(filename,self.shell.user_ns)
1960 1959 if use_temp:
1961 1960 try:
1962 1961 return open(filename).read()
1963 1962 except IOError,msg:
1964 1963 if msg.filename == filename:
1965 1964 warn('File not found. Did you forget to save?')
1966 1965 return
1967 1966 else:
1968 1967 self.shell.showtraceback()
1969 1968
1970 1969 def magic_xmode(self,parameter_s = ''):
1971 1970 """Switch modes for the exception handlers.
1972 1971
1973 1972 Valid modes: Plain, Context and Verbose.
1974 1973
1975 1974 If called without arguments, acts as a toggle."""
1976 1975
1977 1976 def xmode_switch_err(name):
1978 1977 warn('Error changing %s exception modes.\n%s' %
1979 1978 (name,sys.exc_info()[1]))
1980 1979
1981 1980 shell = self.shell
1982 1981 new_mode = parameter_s.strip().capitalize()
1983 1982 try:
1984 1983 shell.InteractiveTB.set_mode(mode=new_mode)
1985 1984 print 'Exception reporting mode:',shell.InteractiveTB.mode
1986 1985 except:
1987 1986 xmode_switch_err('user')
1988 1987
1989 1988 # threaded shells use a special handler in sys.excepthook
1990 1989 if shell.isthreaded:
1991 1990 try:
1992 1991 shell.sys_excepthook.set_mode(mode=new_mode)
1993 1992 except:
1994 1993 xmode_switch_err('threaded')
1995 1994
1996 1995 def magic_colors(self,parameter_s = ''):
1997 1996 """Switch color scheme for prompts, info system and exception handlers.
1998 1997
1999 1998 Currently implemented schemes: NoColor, Linux, LightBG.
2000 1999
2001 2000 Color scheme names are not case-sensitive."""
2002 2001
2003 2002 def color_switch_err(name):
2004 2003 warn('Error changing %s color schemes.\n%s' %
2005 2004 (name,sys.exc_info()[1]))
2006 2005
2007 2006
2008 2007 new_scheme = parameter_s.strip()
2009 2008 if not new_scheme:
2010 2009 print 'You must specify a color scheme.'
2011 2010 return
2012 2011 # Under Windows, check for Gary Bishop's readline, which is necessary
2013 2012 # for ANSI coloring
2014 2013 if os.name in ['nt','dos']:
2015 2014 try:
2016 2015 import readline
2017 2016 except ImportError:
2018 2017 has_readline = 0
2019 2018 else:
2020 2019 try:
2021 2020 readline.GetOutputFile()
2022 2021 except AttributeError:
2023 2022 has_readline = 0
2024 2023 else:
2025 2024 has_readline = 1
2026 2025 if not has_readline:
2027 2026 msg = """\
2028 2027 Proper color support under MS Windows requires Gary Bishop's readline library.
2029 2028 You can find it at:
2030 2029 http://sourceforge.net/projects/uncpythontools
2031 2030 Gary's readline needs the ctypes module, from:
2032 2031 http://starship.python.net/crew/theller/ctypes
2033 2032
2034 2033 Defaulting color scheme to 'NoColor'"""
2035 2034 new_scheme = 'NoColor'
2036 2035 warn(msg)
2037 2036 # local shortcut
2038 2037 shell = self.shell
2039 2038
2040 2039 # Set prompt colors
2041 2040 try:
2042 2041 shell.outputcache.set_colors(new_scheme)
2043 2042 except:
2044 2043 color_switch_err('prompt')
2045 2044 else:
2046 2045 shell.rc.colors = \
2047 2046 shell.outputcache.color_table.active_scheme_name
2048 2047 # Set exception colors
2049 2048 try:
2050 2049 shell.InteractiveTB.set_colors(scheme = new_scheme)
2051 2050 shell.SyntaxTB.set_colors(scheme = new_scheme)
2052 2051 except:
2053 2052 color_switch_err('exception')
2054 2053
2055 2054 # threaded shells use a verbose traceback in sys.excepthook
2056 2055 if shell.isthreaded:
2057 2056 try:
2058 2057 shell.sys_excepthook.set_colors(scheme=new_scheme)
2059 2058 except:
2060 2059 color_switch_err('system exception handler')
2061 2060
2062 2061 # Set info (for 'object?') colors
2063 2062 if shell.rc.color_info:
2064 2063 try:
2065 2064 shell.inspector.set_active_scheme(new_scheme)
2066 2065 except:
2067 2066 color_switch_err('object inspector')
2068 2067 else:
2069 2068 shell.inspector.set_active_scheme('NoColor')
2070 2069
2071 2070 def magic_color_info(self,parameter_s = ''):
2072 2071 """Toggle color_info.
2073 2072
2074 2073 The color_info configuration parameter controls whether colors are
2075 2074 used for displaying object details (by things like %psource, %pfile or
2076 2075 the '?' system). This function toggles this value with each call.
2077 2076
2078 2077 Note that unless you have a fairly recent pager (less works better
2079 2078 than more) in your system, using colored object information displays
2080 2079 will not work properly. Test it and see."""
2081 2080
2082 2081 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2083 2082 self.magic_colors(self.shell.rc.colors)
2084 2083 print 'Object introspection functions have now coloring:',
2085 2084 print ['OFF','ON'][self.shell.rc.color_info]
2086 2085
2087 2086 def magic_Pprint(self, parameter_s=''):
2088 2087 """Toggle pretty printing on/off."""
2089 2088
2090 2089 self.shell.outputcache.Pprint = 1 - self.shell.outputcache.Pprint
2091 2090 print 'Pretty printing has been turned', \
2092 2091 ['OFF','ON'][self.shell.outputcache.Pprint]
2093 2092
2094 2093 def magic_exit(self, parameter_s=''):
2095 2094 """Exit IPython, confirming if configured to do so.
2096 2095
2097 2096 You can configure whether IPython asks for confirmation upon exit by
2098 2097 setting the confirm_exit flag in the ipythonrc file."""
2099 2098
2100 2099 self.shell.exit()
2101 2100
2102 2101 def magic_quit(self, parameter_s=''):
2103 2102 """Exit IPython, confirming if configured to do so (like %exit)"""
2104 2103
2105 2104 self.shell.exit()
2106 2105
2107 2106 def magic_Exit(self, parameter_s=''):
2108 2107 """Exit IPython without confirmation."""
2109 2108
2110 2109 self.shell.exit_now = True
2111 2110
2112 2111 def magic_Quit(self, parameter_s=''):
2113 2112 """Exit IPython without confirmation (like %Exit)."""
2114 2113
2115 2114 self.shell.exit_now = True
2116 2115
2117 2116 #......................................................................
2118 2117 # Functions to implement unix shell-type things
2119 2118
2120 2119 def magic_alias(self, parameter_s = ''):
2121 2120 """Define an alias for a system command.
2122 2121
2123 2122 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2124 2123
2125 2124 Then, typing 'alias_name params' will execute the system command 'cmd
2126 2125 params' (from your underlying operating system).
2127 2126
2128 2127 Aliases have lower precedence than magic functions and Python normal
2129 2128 variables, so if 'foo' is both a Python variable and an alias, the
2130 2129 alias can not be executed until 'del foo' removes the Python variable.
2131 2130
2132 2131 You can use the %l specifier in an alias definition to represent the
2133 2132 whole line when the alias is called. For example:
2134 2133
2135 2134 In [2]: alias all echo "Input in brackets: <%l>"\\
2136 2135 In [3]: all hello world\\
2137 2136 Input in brackets: <hello world>
2138 2137
2139 2138 You can also define aliases with parameters using %s specifiers (one
2140 2139 per parameter):
2141 2140
2142 2141 In [1]: alias parts echo first %s second %s\\
2143 2142 In [2]: %parts A B\\
2144 2143 first A second B\\
2145 2144 In [3]: %parts A\\
2146 2145 Incorrect number of arguments: 2 expected.\\
2147 2146 parts is an alias to: 'echo first %s second %s'
2148 2147
2149 2148 Note that %l and %s are mutually exclusive. You can only use one or
2150 2149 the other in your aliases.
2151 2150
2152 2151 Aliases expand Python variables just like system calls using ! or !!
2153 2152 do: all expressions prefixed with '$' get expanded. For details of
2154 2153 the semantic rules, see PEP-215:
2155 2154 http://www.python.org/peps/pep-0215.html. This is the library used by
2156 2155 IPython for variable expansion. If you want to access a true shell
2157 2156 variable, an extra $ is necessary to prevent its expansion by IPython:
2158 2157
2159 2158 In [6]: alias show echo\\
2160 2159 In [7]: PATH='A Python string'\\
2161 2160 In [8]: show $PATH\\
2162 2161 A Python string\\
2163 2162 In [9]: show $$PATH\\
2164 2163 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2165 2164
2166 2165 You can use the alias facility to acess all of $PATH. See the %rehash
2167 2166 and %rehashx functions, which automatically create aliases for the
2168 2167 contents of your $PATH.
2169 2168
2170 2169 If called with no parameters, %alias prints the current alias table."""
2171 2170
2172 2171 par = parameter_s.strip()
2173 2172 if not par:
2174 2173 if self.shell.rc.automagic:
2175 2174 prechar = ''
2176 2175 else:
2177 2176 prechar = self.shell.ESC_MAGIC
2178 2177 #print 'Alias\t\tSystem Command\n'+'-'*30
2179 2178 atab = self.shell.alias_table
2180 2179 aliases = atab.keys()
2181 2180 aliases.sort()
2182 2181 res = []
2183 2182 for alias in aliases:
2184 2183 res.append((alias, atab[alias][1]))
2185 2184 print "Total number of aliases:",len(aliases)
2186 2185 return res
2187 2186 try:
2188 2187 alias,cmd = par.split(None,1)
2189 2188 except:
2190 2189 print OInspect.getdoc(self.magic_alias)
2191 2190 else:
2192 2191 nargs = cmd.count('%s')
2193 2192 if nargs>0 and cmd.find('%l')>=0:
2194 2193 error('The %s and %l specifiers are mutually exclusive '
2195 2194 'in alias definitions.')
2196 2195 else: # all looks OK
2197 2196 self.shell.alias_table[alias] = (nargs,cmd)
2198 2197 self.shell.alias_table_validate(verbose=1)
2199 2198 # end magic_alias
2200 2199
2201 2200 def magic_unalias(self, parameter_s = ''):
2202 2201 """Remove an alias"""
2203 2202
2204 2203 aname = parameter_s.strip()
2205 2204 if aname in self.shell.alias_table:
2206 2205 del self.shell.alias_table[aname]
2207 2206
2208 2207 def magic_rehash(self, parameter_s = ''):
2209 2208 """Update the alias table with all entries in $PATH.
2210 2209
2211 2210 This version does no checks on execute permissions or whether the
2212 2211 contents of $PATH are truly files (instead of directories or something
2213 2212 else). For such a safer (but slower) version, use %rehashx."""
2214 2213
2215 2214 # This function (and rehashx) manipulate the alias_table directly
2216 2215 # rather than calling magic_alias, for speed reasons. A rehash on a
2217 2216 # typical Linux box involves several thousand entries, so efficiency
2218 2217 # here is a top concern.
2219 2218
2220 2219 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2221 2220 alias_table = self.shell.alias_table
2222 2221 for pdir in path:
2223 2222 for ff in os.listdir(pdir):
2224 2223 # each entry in the alias table must be (N,name), where
2225 2224 # N is the number of positional arguments of the alias.
2226 2225 alias_table[ff] = (0,ff)
2227 2226 # Make sure the alias table doesn't contain keywords or builtins
2228 2227 self.shell.alias_table_validate()
2229 2228 # Call again init_auto_alias() so we get 'rm -i' and other modified
2230 2229 # aliases since %rehash will probably clobber them
2231 2230 self.shell.init_auto_alias()
2232 2231
2233 2232 def magic_rehashx(self, parameter_s = ''):
2234 2233 """Update the alias table with all executable files in $PATH.
2235 2234
2236 2235 This version explicitly checks that every entry in $PATH is a file
2237 2236 with execute access (os.X_OK), so it is much slower than %rehash.
2238 2237
2239 2238 Under Windows, it checks executability as a match agains a
2240 2239 '|'-separated string of extensions, stored in the IPython config
2241 2240 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2242 2241
2243 2242 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2244 2243 alias_table = self.shell.alias_table
2245 2244
2246 2245 if os.name == 'posix':
2247 2246 isexec = lambda fname:os.path.isfile(fname) and \
2248 2247 os.access(fname,os.X_OK)
2249 2248 else:
2250 2249
2251 2250 try:
2252 2251 winext = os.environ['pathext'].replace(';','|').replace('.','')
2253 2252 except KeyError:
2254 2253 winext = 'exe|com|bat'
2255 2254
2256 2255 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2257 2256 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2258 2257 savedir = os.getcwd()
2259 2258 try:
2260 2259 # write the whole loop for posix/Windows so we don't have an if in
2261 2260 # the innermost part
2262 2261 if os.name == 'posix':
2263 2262 for pdir in path:
2264 2263 os.chdir(pdir)
2265 2264 for ff in os.listdir(pdir):
2266 2265 if isexec(ff):
2267 2266 # each entry in the alias table must be (N,name),
2268 2267 # where N is the number of positional arguments of the
2269 2268 # alias.
2270 2269 alias_table[ff] = (0,ff)
2271 2270 else:
2272 2271 for pdir in path:
2273 2272 os.chdir(pdir)
2274 2273 for ff in os.listdir(pdir):
2275 2274 if isexec(ff):
2276 2275 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2277 2276 # Make sure the alias table doesn't contain keywords or builtins
2278 2277 self.shell.alias_table_validate()
2279 2278 # Call again init_auto_alias() so we get 'rm -i' and other
2280 2279 # modified aliases since %rehashx will probably clobber them
2281 2280 self.shell.init_auto_alias()
2282 2281 finally:
2283 2282 os.chdir(savedir)
2284 2283
2285 2284 def magic_pwd(self, parameter_s = ''):
2286 2285 """Return the current working directory path."""
2287 2286 return os.getcwd()
2288 2287
2289 2288 def magic_cd(self, parameter_s=''):
2290 2289 """Change the current working directory.
2291 2290
2292 2291 This command automatically maintains an internal list of directories
2293 2292 you visit during your IPython session, in the variable _dh. The
2294 2293 command %dhist shows this history nicely formatted.
2295 2294
2296 2295 Usage:
2297 2296
2298 2297 cd 'dir': changes to directory 'dir'.
2299 2298
2300 2299 cd -: changes to the last visited directory.
2301 2300
2302 2301 cd -<n>: changes to the n-th directory in the directory history.
2303 2302
2304 2303 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2305 2304 (note: cd <bookmark_name> is enough if there is no
2306 2305 directory <bookmark_name>, but a bookmark with the name exists.)
2307 2306
2308 2307 Options:
2309 2308
2310 2309 -q: quiet. Do not print the working directory after the cd command is
2311 2310 executed. By default IPython's cd command does print this directory,
2312 2311 since the default prompts do not display path information.
2313 2312
2314 2313 Note that !cd doesn't work for this purpose because the shell where
2315 2314 !command runs is immediately discarded after executing 'command'."""
2316 2315
2317 2316 parameter_s = parameter_s.strip()
2318 2317 bkms = self.shell.persist.get("bookmarks",{})
2319 2318
2320 2319 numcd = re.match(r'(-)(\d+)$',parameter_s)
2321 2320 # jump in directory history by number
2322 2321 if numcd:
2323 2322 nn = int(numcd.group(2))
2324 2323 try:
2325 2324 ps = self.shell.user_ns['_dh'][nn]
2326 2325 except IndexError:
2327 2326 print 'The requested directory does not exist in history.'
2328 2327 return
2329 2328 else:
2330 2329 opts = {}
2331 2330 else:
2332 2331 #turn all non-space-escaping backslashes to slashes,
2333 2332 # for c:\windows\directory\names\
2334 2333 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2335 2334 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2336 2335 # jump to previous
2337 2336 if ps == '-':
2338 2337 try:
2339 2338 ps = self.shell.user_ns['_dh'][-2]
2340 2339 except IndexError:
2341 2340 print 'No previous directory to change to.'
2342 2341 return
2343 2342 # jump to bookmark
2344 2343 elif opts.has_key('b') or (bkms.has_key(ps) and not os.path.isdir(ps)):
2345 2344 if bkms.has_key(ps):
2346 2345 target = bkms[ps]
2347 2346 print '(bookmark:%s) -> %s' % (ps,target)
2348 2347 ps = target
2349 2348 else:
2350 2349 if bkms:
2351 2350 error("Bookmark '%s' not found. "
2352 2351 "Use '%%bookmark -l' to see your bookmarks." % ps)
2353 2352 else:
2354 2353 print "Bookmarks not set - use %bookmark <bookmarkname>"
2355 2354 return
2356 2355
2357 2356 # at this point ps should point to the target dir
2358 2357 if ps:
2359 2358 try:
2360 2359 os.chdir(os.path.expanduser(ps))
2361 2360 ttitle = ("IPy:" + (
2362 2361 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2363 2362 platutils.set_term_title(ttitle)
2364 2363 except OSError:
2365 2364 print sys.exc_info()[1]
2366 2365 else:
2367 2366 self.shell.user_ns['_dh'].append(os.getcwd())
2368 2367 else:
2369 2368 os.chdir(self.shell.home_dir)
2370 2369 platutils.set_term_title("IPy:~")
2371 2370 self.shell.user_ns['_dh'].append(os.getcwd())
2372 2371 if not 'q' in opts:
2373 2372 print self.shell.user_ns['_dh'][-1]
2374 2373
2375 2374 def magic_dhist(self, parameter_s=''):
2376 2375 """Print your history of visited directories.
2377 2376
2378 2377 %dhist -> print full history\\
2379 2378 %dhist n -> print last n entries only\\
2380 2379 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2381 2380
2382 2381 This history is automatically maintained by the %cd command, and
2383 2382 always available as the global list variable _dh. You can use %cd -<n>
2384 2383 to go to directory number <n>."""
2385 2384
2386 2385 dh = self.shell.user_ns['_dh']
2387 2386 if parameter_s:
2388 2387 try:
2389 2388 args = map(int,parameter_s.split())
2390 2389 except:
2391 2390 self.arg_err(Magic.magic_dhist)
2392 2391 return
2393 2392 if len(args) == 1:
2394 2393 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2395 2394 elif len(args) == 2:
2396 2395 ini,fin = args
2397 2396 else:
2398 2397 self.arg_err(Magic.magic_dhist)
2399 2398 return
2400 2399 else:
2401 2400 ini,fin = 0,len(dh)
2402 2401 nlprint(dh,
2403 2402 header = 'Directory history (kept in _dh)',
2404 2403 start=ini,stop=fin)
2405 2404
2406 2405 def magic_env(self, parameter_s=''):
2407 2406 """List environment variables."""
2408 2407
2409 2408 return os.environ.data
2410 2409
2411 2410 def magic_pushd(self, parameter_s=''):
2412 2411 """Place the current dir on stack and change directory.
2413 2412
2414 2413 Usage:\\
2415 2414 %pushd ['dirname']
2416 2415
2417 2416 %pushd with no arguments does a %pushd to your home directory.
2418 2417 """
2419 2418 if parameter_s == '': parameter_s = '~'
2420 2419 dir_s = self.shell.dir_stack
2421 2420 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2422 2421 os.path.expanduser(self.shell.dir_stack[0]):
2423 2422 try:
2424 2423 self.magic_cd(parameter_s)
2425 2424 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2426 2425 self.magic_dirs()
2427 2426 except:
2428 2427 print 'Invalid directory'
2429 2428 else:
2430 2429 print 'You are already there!'
2431 2430
2432 2431 def magic_popd(self, parameter_s=''):
2433 2432 """Change to directory popped off the top of the stack.
2434 2433 """
2435 2434 if len (self.shell.dir_stack) > 1:
2436 2435 self.shell.dir_stack.pop(0)
2437 2436 self.magic_cd(self.shell.dir_stack[0])
2438 2437 print self.shell.dir_stack[0]
2439 2438 else:
2440 2439 print "You can't remove the starting directory from the stack:",\
2441 2440 self.shell.dir_stack
2442 2441
2443 2442 def magic_dirs(self, parameter_s=''):
2444 2443 """Return the current directory stack."""
2445 2444
2446 2445 return self.shell.dir_stack[:]
2447 2446
2448 2447 def magic_sc(self, parameter_s=''):
2449 2448 """Shell capture - execute a shell command and capture its output.
2450 2449
2451 2450 DEPRECATED. Suboptimal, retained for backwards compatibility.
2452 2451
2453 2452 You should use the form 'var = !command' instead. Example:
2454 2453
2455 2454 "%sc -l myfiles = ls ~" should now be written as
2456 2455
2457 2456 "myfiles = !ls ~"
2458 2457
2459 2458 myfiles.s, myfiles.l and myfiles.n still apply as documented
2460 2459 below.
2461 2460
2462 2461 --
2463 2462 %sc [options] varname=command
2464 2463
2465 2464 IPython will run the given command using commands.getoutput(), and
2466 2465 will then update the user's interactive namespace with a variable
2467 2466 called varname, containing the value of the call. Your command can
2468 2467 contain shell wildcards, pipes, etc.
2469 2468
2470 2469 The '=' sign in the syntax is mandatory, and the variable name you
2471 2470 supply must follow Python's standard conventions for valid names.
2472 2471
2473 2472 (A special format without variable name exists for internal use)
2474 2473
2475 2474 Options:
2476 2475
2477 2476 -l: list output. Split the output on newlines into a list before
2478 2477 assigning it to the given variable. By default the output is stored
2479 2478 as a single string.
2480 2479
2481 2480 -v: verbose. Print the contents of the variable.
2482 2481
2483 2482 In most cases you should not need to split as a list, because the
2484 2483 returned value is a special type of string which can automatically
2485 2484 provide its contents either as a list (split on newlines) or as a
2486 2485 space-separated string. These are convenient, respectively, either
2487 2486 for sequential processing or to be passed to a shell command.
2488 2487
2489 2488 For example:
2490 2489
2491 2490 # Capture into variable a
2492 2491 In [9]: sc a=ls *py
2493 2492
2494 2493 # a is a string with embedded newlines
2495 2494 In [10]: a
2496 2495 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2497 2496
2498 2497 # which can be seen as a list:
2499 2498 In [11]: a.l
2500 2499 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2501 2500
2502 2501 # or as a whitespace-separated string:
2503 2502 In [12]: a.s
2504 2503 Out[12]: 'setup.py win32_manual_post_install.py'
2505 2504
2506 2505 # a.s is useful to pass as a single command line:
2507 2506 In [13]: !wc -l $a.s
2508 2507 146 setup.py
2509 2508 130 win32_manual_post_install.py
2510 2509 276 total
2511 2510
2512 2511 # while the list form is useful to loop over:
2513 2512 In [14]: for f in a.l:
2514 2513 ....: !wc -l $f
2515 2514 ....:
2516 2515 146 setup.py
2517 2516 130 win32_manual_post_install.py
2518 2517
2519 2518 Similiarly, the lists returned by the -l option are also special, in
2520 2519 the sense that you can equally invoke the .s attribute on them to
2521 2520 automatically get a whitespace-separated string from their contents:
2522 2521
2523 2522 In [1]: sc -l b=ls *py
2524 2523
2525 2524 In [2]: b
2526 2525 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2527 2526
2528 2527 In [3]: b.s
2529 2528 Out[3]: 'setup.py win32_manual_post_install.py'
2530 2529
2531 2530 In summary, both the lists and strings used for ouptut capture have
2532 2531 the following special attributes:
2533 2532
2534 2533 .l (or .list) : value as list.
2535 2534 .n (or .nlstr): value as newline-separated string.
2536 2535 .s (or .spstr): value as space-separated string.
2537 2536 """
2538 2537
2539 2538 opts,args = self.parse_options(parameter_s,'lv')
2540 2539 # Try to get a variable name and command to run
2541 2540 try:
2542 2541 # the variable name must be obtained from the parse_options
2543 2542 # output, which uses shlex.split to strip options out.
2544 2543 var,_ = args.split('=',1)
2545 2544 var = var.strip()
2546 2545 # But the the command has to be extracted from the original input
2547 2546 # parameter_s, not on what parse_options returns, to avoid the
2548 2547 # quote stripping which shlex.split performs on it.
2549 2548 _,cmd = parameter_s.split('=',1)
2550 2549 except ValueError:
2551 2550 var,cmd = '',''
2552 2551 # If all looks ok, proceed
2553 2552 out,err = self.shell.getoutputerror(cmd)
2554 2553 if err:
2555 2554 print >> Term.cerr,err
2556 2555 if opts.has_key('l'):
2557 2556 out = SList(out.split('\n'))
2558 2557 else:
2559 2558 out = LSString(out)
2560 2559 if opts.has_key('v'):
2561 2560 print '%s ==\n%s' % (var,pformat(out))
2562 2561 if var:
2563 2562 self.shell.user_ns.update({var:out})
2564 2563 else:
2565 2564 return out
2566 2565
2567 2566 def magic_sx(self, parameter_s=''):
2568 2567 """Shell execute - run a shell command and capture its output.
2569 2568
2570 2569 %sx command
2571 2570
2572 2571 IPython will run the given command using commands.getoutput(), and
2573 2572 return the result formatted as a list (split on '\\n'). Since the
2574 2573 output is _returned_, it will be stored in ipython's regular output
2575 2574 cache Out[N] and in the '_N' automatic variables.
2576 2575
2577 2576 Notes:
2578 2577
2579 2578 1) If an input line begins with '!!', then %sx is automatically
2580 2579 invoked. That is, while:
2581 2580 !ls
2582 2581 causes ipython to simply issue system('ls'), typing
2583 2582 !!ls
2584 2583 is a shorthand equivalent to:
2585 2584 %sx ls
2586 2585
2587 2586 2) %sx differs from %sc in that %sx automatically splits into a list,
2588 2587 like '%sc -l'. The reason for this is to make it as easy as possible
2589 2588 to process line-oriented shell output via further python commands.
2590 2589 %sc is meant to provide much finer control, but requires more
2591 2590 typing.
2592 2591
2593 2592 3) Just like %sc -l, this is a list with special attributes:
2594 2593
2595 2594 .l (or .list) : value as list.
2596 2595 .n (or .nlstr): value as newline-separated string.
2597 2596 .s (or .spstr): value as whitespace-separated string.
2598 2597
2599 2598 This is very useful when trying to use such lists as arguments to
2600 2599 system commands."""
2601 2600
2602 2601 if parameter_s:
2603 2602 out,err = self.shell.getoutputerror(parameter_s)
2604 2603 if err:
2605 2604 print >> Term.cerr,err
2606 2605 return SList(out.split('\n'))
2607 2606
2608 2607 def magic_bg(self, parameter_s=''):
2609 2608 """Run a job in the background, in a separate thread.
2610 2609
2611 2610 For example,
2612 2611
2613 2612 %bg myfunc(x,y,z=1)
2614 2613
2615 2614 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2616 2615 execution starts, a message will be printed indicating the job
2617 2616 number. If your job number is 5, you can use
2618 2617
2619 2618 myvar = jobs.result(5) or myvar = jobs[5].result
2620 2619
2621 2620 to assign this result to variable 'myvar'.
2622 2621
2623 2622 IPython has a job manager, accessible via the 'jobs' object. You can
2624 2623 type jobs? to get more information about it, and use jobs.<TAB> to see
2625 2624 its attributes. All attributes not starting with an underscore are
2626 2625 meant for public use.
2627 2626
2628 2627 In particular, look at the jobs.new() method, which is used to create
2629 2628 new jobs. This magic %bg function is just a convenience wrapper
2630 2629 around jobs.new(), for expression-based jobs. If you want to create a
2631 2630 new job with an explicit function object and arguments, you must call
2632 2631 jobs.new() directly.
2633 2632
2634 2633 The jobs.new docstring also describes in detail several important
2635 2634 caveats associated with a thread-based model for background job
2636 2635 execution. Type jobs.new? for details.
2637 2636
2638 2637 You can check the status of all jobs with jobs.status().
2639 2638
2640 2639 The jobs variable is set by IPython into the Python builtin namespace.
2641 2640 If you ever declare a variable named 'jobs', you will shadow this
2642 2641 name. You can either delete your global jobs variable to regain
2643 2642 access to the job manager, or make a new name and assign it manually
2644 2643 to the manager (stored in IPython's namespace). For example, to
2645 2644 assign the job manager to the Jobs name, use:
2646 2645
2647 2646 Jobs = __builtins__.jobs"""
2648 2647
2649 2648 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2650 2649
2651 2650 def magic_store(self, parameter_s=''):
2652 2651 """Lightweight persistence for python variables.
2653 2652
2654 2653 Example:
2655 2654
2656 2655 ville@badger[~]|1> A = ['hello',10,'world']\\
2657 2656 ville@badger[~]|2> %store A\\
2658 2657 ville@badger[~]|3> Exit
2659 2658
2660 2659 (IPython session is closed and started again...)
2661 2660
2662 2661 ville@badger:~$ ipython -p pysh\\
2663 2662 ville@badger[~]|1> print A
2664 2663
2665 2664 ['hello', 10, 'world']
2666 2665
2667 2666 Usage:
2668 2667
2669 2668 %store - Show list of all variables and their current values\\
2670 2669 %store <var> - Store the *current* value of the variable to disk\\
2671 2670 %store -d <var> - Remove the variable and its value from storage\\
2672 2671 %store -r - Remove all variables from storage\\
2673 2672 %store foo >a.txt - Store value of foo to new file a.txt\\
2674 2673 %store foo >>a.txt - Append value of foo to file a.txt\\
2675 2674
2676 2675 It should be noted that if you change the value of a variable, you
2677 2676 need to %store it again if you want to persist the new value.
2678 2677
2679 2678 Note also that the variables will need to be pickleable; most basic
2680 2679 python types can be safely %stored.
2681 2680 """
2682 2681
2683 2682 opts,argsl = self.parse_options(parameter_s,'dr',mode='string')
2684 2683 args = argsl.split(None,1)
2685 2684 ip = self.getapi()
2686 2685 # delete
2687 2686 if opts.has_key('d'):
2688 2687 try:
2689 2688 todel = args[0]
2690 2689 except IndexError:
2691 2690 error('You must provide the variable to forget')
2692 2691 else:
2693 2692 try:
2694 2693 del self.shell.persist['S:' + todel]
2695 2694 except:
2696 2695 error("Can't delete variable '%s'" % todel)
2697 2696 # reset
2698 2697 elif opts.has_key('r'):
2699 2698 for k in self.shell.persist.keys():
2700 2699 if k.startswith('S:'):
2701 2700 del self.shell.persist[k]
2702 2701
2703 2702 # run without arguments -> list variables & values
2704 2703 elif not args:
2705 2704 vars = [v[2:] for v in self.shell.persist.keys()
2706 2705 if v.startswith('S:')]
2707 2706 vars.sort()
2708 2707 if vars:
2709 2708 size = max(map(len,vars))
2710 2709 else:
2711 2710 size = 0
2712 2711
2713 2712 print 'Stored variables and their in-memory values:'
2714 2713 fmt = '%-'+str(size)+'s -> %s'
2715 2714 get = self.shell.user_ns.get
2716 2715 for var in vars:
2717 2716 # print 30 first characters from every var
2718 2717 print fmt % (var,repr(get(var,'<unavailable>'))[:50])
2719 2718
2720 2719 # default action - store the variable
2721 2720 else:
2722 2721 # %store foo >file.txt or >>file.txt
2723 2722 if len(args) > 1 and args[1].startswith('>'):
2724 2723 fnam = os.path.expanduser(args[1].lstrip('>').lstrip())
2725 2724 if args[1].startswith('>>'):
2726 2725 fil = open(fnam,'a')
2727 2726 else:
2728 2727 fil = open(fnam,'w')
2729 2728 obj = ip.ev(args[0])
2730 2729 print "Writing '%s' (%s) to file '%s'." % (args[0],
2731 2730 obj.__class__.__name__, fnam)
2732 2731
2733 2732
2734 2733 if not isinstance (obj,basestring):
2735 2734 pprint(obj,fil)
2736 2735 else:
2737 2736 fil.write(obj)
2738 2737 if not obj.endswith('\n'):
2739 2738 fil.write('\n')
2740 2739
2741 2740 fil.close()
2742 2741 return
2743 2742
2744 2743 # %store foo
2745 2744 obj = self.shell.user_ns[args[0] ]
2746 2745 if isinstance(inspect.getmodule(obj), FakeModule):
2747 2746 print textwrap.dedent("""\
2748 2747 Warning:%s is %s
2749 2748 Proper storage of interactively declared classes (or instances
2750 2749 of those classes) is not possible! Only instances
2751 2750 of classes in real modules on file system can be %%store'd.
2752 2751 """ % (args[0], obj) )
2753 2752 return
2754 2753 pickled = pickle.dumps(obj)
2755 2754 self.shell.persist[ 'S:' + args[0] ] = pickled
2756 2755 print "Stored '%s' (%s, %d bytes)" % (args[0], obj.__class__.__name__,len(pickled))
2757 2756
2758 2757 def magic_bookmark(self, parameter_s=''):
2759 2758 """Manage IPython's bookmark system.
2760 2759
2761 2760 %bookmark <name> - set bookmark to current dir
2762 2761 %bookmark <name> <dir> - set bookmark to <dir>
2763 2762 %bookmark -l - list all bookmarks
2764 2763 %bookmark -d <name> - remove bookmark
2765 2764 %bookmark -r - remove all bookmarks
2766 2765
2767 2766 You can later on access a bookmarked folder with:
2768 2767 %cd -b <name>
2769 2768 or simply '%cd <name>' if there is no directory called <name> AND
2770 2769 there is such a bookmark defined.
2771 2770
2772 2771 Your bookmarks persist through IPython sessions, but they are
2773 2772 associated with each profile."""
2774 2773
2775 2774 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2776 2775 if len(args) > 2:
2777 2776 error('You can only give at most two arguments')
2778 2777 return
2779 2778
2780 2779 bkms = self.shell.persist.get('bookmarks',{})
2781 2780
2782 2781 if opts.has_key('d'):
2783 2782 try:
2784 2783 todel = args[0]
2785 2784 except IndexError:
2786 2785 error('You must provide a bookmark to delete')
2787 2786 else:
2788 2787 try:
2789 2788 del bkms[todel]
2790 2789 except:
2791 2790 error("Can't delete bookmark '%s'" % todel)
2792 2791 elif opts.has_key('r'):
2793 2792 bkms = {}
2794 2793 elif opts.has_key('l'):
2795 2794 bks = bkms.keys()
2796 2795 bks.sort()
2797 2796 if bks:
2798 2797 size = max(map(len,bks))
2799 2798 else:
2800 2799 size = 0
2801 2800 fmt = '%-'+str(size)+'s -> %s'
2802 2801 print 'Current bookmarks:'
2803 2802 for bk in bks:
2804 2803 print fmt % (bk,bkms[bk])
2805 2804 else:
2806 2805 if not args:
2807 2806 error("You must specify the bookmark name")
2808 2807 elif len(args)==1:
2809 2808 bkms[args[0]] = os.getcwd()
2810 2809 elif len(args)==2:
2811 2810 bkms[args[0]] = args[1]
2812 2811 self.shell.persist['bookmarks'] = bkms
2813 2812
2814 2813 def magic_pycat(self, parameter_s=''):
2815 2814 """Show a syntax-highlighted file through a pager.
2816 2815
2817 2816 This magic is similar to the cat utility, but it will assume the file
2818 2817 to be Python source and will show it with syntax highlighting. """
2819 2818
2820 2819 filename = get_py_filename(parameter_s)
2821 2820 page(self.shell.pycolorize(file_read(filename)),
2822 2821 screen_lines=self.shell.rc.screen_length)
2823 2822
2824 2823 def magic_cpaste(self, parameter_s=''):
2825 2824 """Allows you to paste & execute a pre-formatted code block from
2826 2825 clipboard.
2827 2826
2828 2827 You must terminate the block with '--' (two minus-signs) alone on the
2829 2828 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2830 2829 is the new sentinel for this operation)
2831 2830
2832 2831 The block is dedented prior to execution to enable execution of
2833 2832 method definitions. The executed block is also assigned to variable
2834 2833 named 'pasted_block' for later editing with '%edit pasted_block'.
2835 2834
2836 2835 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2837 2836 This assigns the pasted block to variable 'foo' as string, without
2838 2837 dedenting or executing it.
2839 2838
2840 2839 Do not be alarmed by garbled output on Windows (it's a readline bug).
2841 2840 Just press enter and type -- (and press enter again) and the block
2842 2841 will be what was just pasted.
2843 2842
2844 2843 IPython statements (magics, shell escapes) are not supported (yet).
2845 2844 """
2846 2845 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2847 2846 par = args.strip()
2848 2847 sentinel = opts.get('s','--')
2849 2848
2850 2849 from IPython import iplib
2851 2850 lines = []
2852 2851 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2853 2852 while 1:
2854 2853 l = iplib.raw_input_original(':')
2855 2854 if l ==sentinel:
2856 2855 break
2857 2856 lines.append(l)
2858 2857 block = "\n".join(lines) + '\n'
2859 2858 #print "block:\n",block
2860 2859 if not par:
2861 2860 b = textwrap.dedent(block)
2862 2861 exec b in self.user_ns
2863 2862 self.user_ns['pasted_block'] = b
2864 2863 else:
2865 2864 self.user_ns[par] = block
2866 2865 print "Block assigned to '%s'" % par
2867 2866 def magic_quickref(self,arg):
2868 2867 import IPython.usage
2869 2868 page(IPython.usage.quick_reference)
2870 2869 del IPython.usage
2871 2870
2872 2871
2873 2872 # end Magic
@@ -1,2267 +1,2271 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 Requires Python 2.3 or newer.
6 6
7 7 This file contains all the classes and helper functions specific to IPython.
8 8
9 $Id: iplib.py 1093 2006-01-28 00:18:49Z vivainio $
9 $Id: iplib.py 1096 2006-01-28 20:08:02Z vivainio $
10 10 """
11 11
12 12 #*****************************************************************************
13 13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 15 #
16 16 # Distributed under the terms of the BSD License. The full license is in
17 17 # the file COPYING, distributed as part of this software.
18 18 #
19 19 # Note: this code originally subclassed code.InteractiveConsole from the
20 20 # Python standard library. Over time, all of that class has been copied
21 21 # verbatim here for modifications which could not be accomplished by
22 22 # subclassing. At this point, there are no dependencies at all on the code
23 23 # module anymore (it is not even imported). The Python License (sec. 2)
24 24 # allows for this, but it's always nice to acknowledge credit where credit is
25 25 # due.
26 26 #*****************************************************************************
27 27
28 28 #****************************************************************************
29 29 # Modules and globals
30 30
31 31 from __future__ import generators # for 2.2 backwards-compatibility
32 32
33 33 from IPython import Release
34 34 __author__ = '%s <%s>\n%s <%s>' % \
35 35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 36 __license__ = Release.license
37 37 __version__ = Release.version
38 38
39 39 # Python standard modules
40 40 import __main__
41 41 import __builtin__
42 42 import StringIO
43 43 import bdb
44 44 import cPickle as pickle
45 45 import codeop
46 46 import exceptions
47 47 import glob
48 48 import inspect
49 49 import keyword
50 50 import new
51 51 import os
52 52 import pdb
53 53 import pydoc
54 54 import re
55 55 import shutil
56 56 import string
57 57 import sys
58 58 import tempfile
59 59 import traceback
60 60 import types
61 61
62 62 from pprint import pprint, pformat
63 63
64 64 # IPython's own modules
65 65 import IPython
66 66 from IPython import OInspect,PyColorize,ultraTB
67 67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 68 from IPython.FakeModule import FakeModule
69 69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 70 from IPython.Logger import Logger
71 71 from IPython.Magic import Magic
72 72 from IPython.Prompts import CachedOutput
73 73 from IPython.ipstruct import Struct
74 74 from IPython.background_jobs import BackgroundJobManager
75 75 from IPython.usage import cmd_line_usage,interactive_usage
76 76 from IPython.genutils import *
77 77 import IPython.ipapi
78 78
79 79 # Globals
80 80
81 81 # store the builtin raw_input globally, and use this always, in case user code
82 82 # overwrites it (like wx.py.PyShell does)
83 83 raw_input_original = raw_input
84 84
85 85 # compiled regexps for autoindent management
86 86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87 87
88 88
89 89 #****************************************************************************
90 90 # Some utility function definitions
91 91
92 92 ini_spaces_re = re.compile(r'^(\s+)')
93 93
94 94 def num_ini_spaces(strng):
95 95 """Return the number of initial spaces in a string"""
96 96
97 97 ini_spaces = ini_spaces_re.match(strng)
98 98 if ini_spaces:
99 99 return ini_spaces.end()
100 100 else:
101 101 return 0
102 102
103 103 def softspace(file, newvalue):
104 104 """Copied from code.py, to remove the dependency"""
105 105
106 106 oldvalue = 0
107 107 try:
108 108 oldvalue = file.softspace
109 109 except AttributeError:
110 110 pass
111 111 try:
112 112 file.softspace = newvalue
113 113 except (AttributeError, TypeError):
114 114 # "attribute-less object" or "read-only attributes"
115 115 pass
116 116 return oldvalue
117 117
118 118
119 119 #****************************************************************************
120 120 # Local use exceptions
121 121 class SpaceInInput(exceptions.Exception): pass
122 122
123 123
124 124 #****************************************************************************
125 125 # Local use classes
126 126 class Bunch: pass
127 127
128 128 class Undefined: pass
129 129
130 130 class InputList(list):
131 131 """Class to store user input.
132 132
133 133 It's basically a list, but slices return a string instead of a list, thus
134 134 allowing things like (assuming 'In' is an instance):
135 135
136 136 exec In[4:7]
137 137
138 138 or
139 139
140 140 exec In[5:9] + In[14] + In[21:25]"""
141 141
142 142 def __getslice__(self,i,j):
143 143 return ''.join(list.__getslice__(self,i,j))
144 144
145 145 class SyntaxTB(ultraTB.ListTB):
146 146 """Extension which holds some state: the last exception value"""
147 147
148 148 def __init__(self,color_scheme = 'NoColor'):
149 149 ultraTB.ListTB.__init__(self,color_scheme)
150 150 self.last_syntax_error = None
151 151
152 152 def __call__(self, etype, value, elist):
153 153 self.last_syntax_error = value
154 154 ultraTB.ListTB.__call__(self,etype,value,elist)
155 155
156 156 def clear_err_state(self):
157 157 """Return the current error state and clear it"""
158 158 e = self.last_syntax_error
159 159 self.last_syntax_error = None
160 160 return e
161 161
162 162 #****************************************************************************
163 163 # Main IPython class
164 164
165 165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 166 # until a full rewrite is made. I've cleaned all cross-class uses of
167 167 # attributes and methods, but too much user code out there relies on the
168 168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 169 #
170 170 # But at least now, all the pieces have been separated and we could, in
171 171 # principle, stop using the mixin. This will ease the transition to the
172 172 # chainsaw branch.
173 173
174 174 # For reference, the following is the list of 'self.foo' uses in the Magic
175 175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 176 # class, to prevent clashes.
177 177
178 178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 181 # 'self.value']
182 182
183 183 class InteractiveShell(object,Magic):
184 184 """An enhanced console for Python."""
185 185
186 186 # class attribute to indicate whether the class supports threads or not.
187 187 # Subclasses with thread support should override this as needed.
188 188 isthreaded = False
189 189
190 190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 191 user_ns = None,user_global_ns=None,banner2='',
192 192 custom_exceptions=((),None),embedded=False):
193 193
194 194 # log system
195 195 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
196 196
197 197 # Produce a public API instance
198 198
199 199 self.api = IPython.ipapi.IPApi(self)
200 200
201 201 # some minimal strict typechecks. For some core data structures, I
202 202 # want actual basic python types, not just anything that looks like
203 203 # one. This is especially true for namespaces.
204 204 for ns in (user_ns,user_global_ns):
205 205 if ns is not None and type(ns) != types.DictType:
206 206 raise TypeError,'namespace must be a dictionary'
207 207
208 208 # Job manager (for jobs run as background threads)
209 209 self.jobs = BackgroundJobManager()
210 210
211 211 # track which builtins we add, so we can clean up later
212 212 self.builtins_added = {}
213 213 # This method will add the necessary builtins for operation, but
214 214 # tracking what it did via the builtins_added dict.
215 215 self.add_builtins()
216 216
217 217 # Do the intuitively correct thing for quit/exit: we remove the
218 218 # builtins if they exist, and our own magics will deal with this
219 219 try:
220 220 del __builtin__.exit, __builtin__.quit
221 221 except AttributeError:
222 222 pass
223 223
224 224 # Store the actual shell's name
225 225 self.name = name
226 226
227 227 # We need to know whether the instance is meant for embedding, since
228 228 # global/local namespaces need to be handled differently in that case
229 229 self.embedded = embedded
230 230
231 231 # command compiler
232 232 self.compile = codeop.CommandCompiler()
233 233
234 234 # User input buffer
235 235 self.buffer = []
236 236
237 237 # Default name given in compilation of code
238 238 self.filename = '<ipython console>'
239 239
240 240 # Make an empty namespace, which extension writers can rely on both
241 241 # existing and NEVER being used by ipython itself. This gives them a
242 242 # convenient location for storing additional information and state
243 243 # their extensions may require, without fear of collisions with other
244 244 # ipython names that may develop later.
245 245 self.meta = Struct()
246 246
247 247 # Create the namespace where the user will operate. user_ns is
248 248 # normally the only one used, and it is passed to the exec calls as
249 249 # the locals argument. But we do carry a user_global_ns namespace
250 250 # given as the exec 'globals' argument, This is useful in embedding
251 251 # situations where the ipython shell opens in a context where the
252 252 # distinction between locals and globals is meaningful.
253 253
254 254 # FIXME. For some strange reason, __builtins__ is showing up at user
255 255 # level as a dict instead of a module. This is a manual fix, but I
256 256 # should really track down where the problem is coming from. Alex
257 257 # Schmolck reported this problem first.
258 258
259 259 # A useful post by Alex Martelli on this topic:
260 260 # Re: inconsistent value from __builtins__
261 261 # Von: Alex Martelli <aleaxit@yahoo.com>
262 262 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
263 263 # Gruppen: comp.lang.python
264 264
265 265 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
266 266 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
267 267 # > <type 'dict'>
268 268 # > >>> print type(__builtins__)
269 269 # > <type 'module'>
270 270 # > Is this difference in return value intentional?
271 271
272 272 # Well, it's documented that '__builtins__' can be either a dictionary
273 273 # or a module, and it's been that way for a long time. Whether it's
274 274 # intentional (or sensible), I don't know. In any case, the idea is
275 275 # that if you need to access the built-in namespace directly, you
276 276 # should start with "import __builtin__" (note, no 's') which will
277 277 # definitely give you a module. Yeah, it's somewhat confusing:-(.
278 278
279 279 if user_ns is None:
280 280 # Set __name__ to __main__ to better match the behavior of the
281 281 # normal interpreter.
282 282 user_ns = {'__name__' :'__main__',
283 283 '__builtins__' : __builtin__,
284 284 }
285 285
286 286 if user_global_ns is None:
287 287 user_global_ns = {}
288 288
289 289 # Assign namespaces
290 290 # This is the namespace where all normal user variables live
291 291 self.user_ns = user_ns
292 292 # Embedded instances require a separate namespace for globals.
293 293 # Normally this one is unused by non-embedded instances.
294 294 self.user_global_ns = user_global_ns
295 295 # A namespace to keep track of internal data structures to prevent
296 296 # them from cluttering user-visible stuff. Will be updated later
297 297 self.internal_ns = {}
298 298
299 299 # Namespace of system aliases. Each entry in the alias
300 300 # table must be a 2-tuple of the form (N,name), where N is the number
301 301 # of positional arguments of the alias.
302 302 self.alias_table = {}
303 303
304 304 # A table holding all the namespaces IPython deals with, so that
305 305 # introspection facilities can search easily.
306 306 self.ns_table = {'user':user_ns,
307 307 'user_global':user_global_ns,
308 308 'alias':self.alias_table,
309 309 'internal':self.internal_ns,
310 310 'builtin':__builtin__.__dict__
311 311 }
312 312
313 313 # The user namespace MUST have a pointer to the shell itself.
314 314 self.user_ns[name] = self
315 315
316 316 # We need to insert into sys.modules something that looks like a
317 317 # module but which accesses the IPython namespace, for shelve and
318 318 # pickle to work interactively. Normally they rely on getting
319 319 # everything out of __main__, but for embedding purposes each IPython
320 320 # instance has its own private namespace, so we can't go shoving
321 321 # everything into __main__.
322 322
323 323 # note, however, that we should only do this for non-embedded
324 324 # ipythons, which really mimic the __main__.__dict__ with their own
325 325 # namespace. Embedded instances, on the other hand, should not do
326 326 # this because they need to manage the user local/global namespaces
327 327 # only, but they live within a 'normal' __main__ (meaning, they
328 328 # shouldn't overtake the execution environment of the script they're
329 329 # embedded in).
330 330
331 331 if not embedded:
332 332 try:
333 333 main_name = self.user_ns['__name__']
334 334 except KeyError:
335 335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 336 else:
337 337 #print "pickle hack in place" # dbg
338 338 #print 'main_name:',main_name # dbg
339 339 sys.modules[main_name] = FakeModule(self.user_ns)
340 340
341 341 # List of input with multi-line handling.
342 342 # Fill its zero entry, user counter starts at 1
343 343 self.input_hist = InputList(['\n'])
344 344 # This one will hold the 'raw' input history, without any
345 345 # pre-processing. This will allow users to retrieve the input just as
346 346 # it was exactly typed in by the user, with %hist -r.
347 347 self.input_hist_raw = InputList(['\n'])
348 348
349 349 # list of visited directories
350 350 try:
351 351 self.dir_hist = [os.getcwd()]
352 352 except IOError, e:
353 353 self.dir_hist = []
354 354
355 355 # dict of output history
356 356 self.output_hist = {}
357 357
358 358 # dict of things NOT to alias (keywords, builtins and some magics)
359 359 no_alias = {}
360 360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 361 for key in keyword.kwlist + no_alias_magics:
362 362 no_alias[key] = 1
363 363 no_alias.update(__builtin__.__dict__)
364 364 self.no_alias = no_alias
365 365
366 366 # make global variables for user access to these
367 367 self.user_ns['_ih'] = self.input_hist
368 368 self.user_ns['_oh'] = self.output_hist
369 369 self.user_ns['_dh'] = self.dir_hist
370 370
371 371 # user aliases to input and output histories
372 372 self.user_ns['In'] = self.input_hist
373 373 self.user_ns['Out'] = self.output_hist
374 374
375 375 # Object variable to store code object waiting execution. This is
376 376 # used mainly by the multithreaded shells, but it can come in handy in
377 377 # other situations. No need to use a Queue here, since it's a single
378 378 # item which gets cleared once run.
379 379 self.code_to_run = None
380 380
381 381 # escapes for automatic behavior on the command line
382 382 self.ESC_SHELL = '!'
383 383 self.ESC_HELP = '?'
384 384 self.ESC_MAGIC = '%'
385 385 self.ESC_QUOTE = ','
386 386 self.ESC_QUOTE2 = ';'
387 387 self.ESC_PAREN = '/'
388 388
389 389 # And their associated handlers
390 390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 391 self.ESC_QUOTE : self.handle_auto,
392 392 self.ESC_QUOTE2 : self.handle_auto,
393 393 self.ESC_MAGIC : self.handle_magic,
394 394 self.ESC_HELP : self.handle_help,
395 395 self.ESC_SHELL : self.handle_shell_escape,
396 396 }
397 397
398 398 # class initializations
399 399 Magic.__init__(self,self)
400 400
401 401 # Python source parser/formatter for syntax highlighting
402 402 pyformat = PyColorize.Parser().format
403 403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404 404
405 405 # hooks holds pointers used for user-side customizations
406 406 self.hooks = Struct()
407 407
408 408 # Set all default hooks, defined in the IPython.hooks module.
409 409 hooks = IPython.hooks
410 410 for hook_name in hooks.__all__:
411 411 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
412 412 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
413 413 #print "bound hook",hook_name
414 414
415 415 # Flag to mark unconditional exit
416 416 self.exit_now = False
417 417
418 418 self.usage_min = """\
419 419 An enhanced console for Python.
420 420 Some of its features are:
421 421 - Readline support if the readline library is present.
422 422 - Tab completion in the local namespace.
423 423 - Logging of input, see command-line options.
424 424 - System shell escape via ! , eg !ls.
425 425 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
426 426 - Keeps track of locally defined variables via %who, %whos.
427 427 - Show object information with a ? eg ?x or x? (use ?? for more info).
428 428 """
429 429 if usage: self.usage = usage
430 430 else: self.usage = self.usage_min
431 431
432 432 # Storage
433 433 self.rc = rc # This will hold all configuration information
434 434 self.pager = 'less'
435 435 # temporary files used for various purposes. Deleted at exit.
436 436 self.tempfiles = []
437 437
438 438 # Keep track of readline usage (later set by init_readline)
439 439 self.has_readline = False
440 440
441 441 # template for logfile headers. It gets resolved at runtime by the
442 442 # logstart method.
443 443 self.loghead_tpl = \
444 444 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
445 445 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
446 446 #log# opts = %s
447 447 #log# args = %s
448 448 #log# It is safe to make manual edits below here.
449 449 #log#-----------------------------------------------------------------------
450 450 """
451 451 # for pushd/popd management
452 452 try:
453 453 self.home_dir = get_home_dir()
454 454 except HomeDirError,msg:
455 455 fatal(msg)
456 456
457 457 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
458 458
459 459 # Functions to call the underlying shell.
460 460
461 461 # utility to expand user variables via Itpl
462 462 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
463 463 self.user_ns))
464 464 # The first is similar to os.system, but it doesn't return a value,
465 465 # and it allows interpolation of variables in the user's namespace.
466 466 self.system = lambda cmd: shell(self.var_expand(cmd),
467 467 header='IPython system call: ',
468 468 verbose=self.rc.system_verbose)
469 469 # These are for getoutput and getoutputerror:
470 470 self.getoutput = lambda cmd: \
471 471 getoutput(self.var_expand(cmd),
472 472 header='IPython system call: ',
473 473 verbose=self.rc.system_verbose)
474 474 self.getoutputerror = lambda cmd: \
475 475 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
476 476 self.user_ns)),
477 477 header='IPython system call: ',
478 478 verbose=self.rc.system_verbose)
479 479
480 480 # RegExp for splitting line contents into pre-char//first
481 481 # word-method//rest. For clarity, each group in on one line.
482 482
483 483 # WARNING: update the regexp if the above escapes are changed, as they
484 484 # are hardwired in.
485 485
486 486 # Don't get carried away with trying to make the autocalling catch too
487 487 # much: it's better to be conservative rather than to trigger hidden
488 488 # evals() somewhere and end up causing side effects.
489 489
490 490 self.line_split = re.compile(r'^([\s*,;/])'
491 491 r'([\?\w\.]+\w*\s*)'
492 492 r'(\(?.*$)')
493 493
494 494 # Original re, keep around for a while in case changes break something
495 495 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
496 496 # r'(\s*[\?\w\.]+\w*\s*)'
497 497 # r'(\(?.*$)')
498 498
499 499 # RegExp to identify potential function names
500 500 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
501 501
502 502 # RegExp to exclude strings with this start from autocalling. In
503 503 # particular, all binary operators should be excluded, so that if foo
504 504 # is callable, foo OP bar doesn't become foo(OP bar), which is
505 505 # invalid. The characters '!=()' don't need to be checked for, as the
506 506 # _prefilter routine explicitely does so, to catch direct calls and
507 507 # rebindings of existing names.
508 508
509 509 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
510 510 # it affects the rest of the group in square brackets.
511 511 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
512 512 '|^is |^not |^in |^and |^or ')
513 513
514 514 # try to catch also methods for stuff in lists/tuples/dicts: off
515 515 # (experimental). For this to work, the line_split regexp would need
516 516 # to be modified so it wouldn't break things at '['. That line is
517 517 # nasty enough that I shouldn't change it until I can test it _well_.
518 518 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
519 519
520 520 # keep track of where we started running (mainly for crash post-mortem)
521 521 self.starting_dir = os.getcwd()
522 522
523 523 # Various switches which can be set
524 524 self.CACHELENGTH = 5000 # this is cheap, it's just text
525 525 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
526 526 self.banner2 = banner2
527 527
528 528 # TraceBack handlers:
529 529
530 530 # Syntax error handler.
531 531 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
532 532
533 533 # The interactive one is initialized with an offset, meaning we always
534 534 # want to remove the topmost item in the traceback, which is our own
535 535 # internal code. Valid modes: ['Plain','Context','Verbose']
536 536 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
537 537 color_scheme='NoColor',
538 538 tb_offset = 1)
539 539
540 540 # IPython itself shouldn't crash. This will produce a detailed
541 541 # post-mortem if it does. But we only install the crash handler for
542 542 # non-threaded shells, the threaded ones use a normal verbose reporter
543 543 # and lose the crash handler. This is because exceptions in the main
544 544 # thread (such as in GUI code) propagate directly to sys.excepthook,
545 545 # and there's no point in printing crash dumps for every user exception.
546 546 if self.isthreaded:
547 547 sys.excepthook = ultraTB.FormattedTB()
548 548 else:
549 549 from IPython import CrashHandler
550 550 sys.excepthook = CrashHandler.CrashHandler(self)
551 551
552 552 # The instance will store a pointer to this, so that runtime code
553 553 # (such as magics) can access it. This is because during the
554 554 # read-eval loop, it gets temporarily overwritten (to deal with GUI
555 555 # frameworks).
556 556 self.sys_excepthook = sys.excepthook
557 557
558 558 # and add any custom exception handlers the user may have specified
559 559 self.set_custom_exc(*custom_exceptions)
560 560
561 561 # Object inspector
562 562 self.inspector = OInspect.Inspector(OInspect.InspectColors,
563 563 PyColorize.ANSICodeColors,
564 564 'NoColor')
565 565 # indentation management
566 566 self.autoindent = False
567 567 self.indent_current_nsp = 0
568 568
569 569 # Make some aliases automatically
570 570 # Prepare list of shell aliases to auto-define
571 571 if os.name == 'posix':
572 572 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
573 573 'mv mv -i','rm rm -i','cp cp -i',
574 574 'cat cat','less less','clear clear',
575 575 # a better ls
576 576 'ls ls -F',
577 577 # long ls
578 578 'll ls -lF',
579 579 # color ls
580 580 'lc ls -F -o --color',
581 581 # ls normal files only
582 582 'lf ls -F -o --color %l | grep ^-',
583 583 # ls symbolic links
584 584 'lk ls -F -o --color %l | grep ^l',
585 585 # directories or links to directories,
586 586 'ldir ls -F -o --color %l | grep /$',
587 587 # things which are executable
588 588 'lx ls -F -o --color %l | grep ^-..x',
589 589 )
590 590 elif os.name in ['nt','dos']:
591 591 auto_alias = ('dir dir /on', 'ls dir /on',
592 592 'ddir dir /ad /on', 'ldir dir /ad /on',
593 593 'mkdir mkdir','rmdir rmdir','echo echo',
594 594 'ren ren','cls cls','copy copy')
595 595 else:
596 596 auto_alias = ()
597 597 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
598 598 # Call the actual (public) initializer
599 599 self.init_auto_alias()
600 600 # end __init__
601 601
602 602 def post_config_initialization(self):
603 603 """Post configuration init method
604 604
605 605 This is called after the configuration files have been processed to
606 606 'finalize' the initialization."""
607 607
608 608 rc = self.rc
609 609
610 610 # Load readline proper
611 611 if rc.readline:
612 612 self.init_readline()
613 613
614 614 # local shortcut, this is used a LOT
615 615 self.log = self.logger.log
616 616
617 617 # Initialize cache, set in/out prompts and printing system
618 618 self.outputcache = CachedOutput(self,
619 619 rc.cache_size,
620 620 rc.pprint,
621 621 input_sep = rc.separate_in,
622 622 output_sep = rc.separate_out,
623 623 output_sep2 = rc.separate_out2,
624 624 ps1 = rc.prompt_in1,
625 625 ps2 = rc.prompt_in2,
626 626 ps_out = rc.prompt_out,
627 627 pad_left = rc.prompts_pad_left)
628 628
629 629 # user may have over-ridden the default print hook:
630 630 try:
631 631 self.outputcache.__class__.display = self.hooks.display
632 632 except AttributeError:
633 633 pass
634 634
635 635 # I don't like assigning globally to sys, because it means when embedding
636 636 # instances, each embedded instance overrides the previous choice. But
637 637 # sys.displayhook seems to be called internally by exec, so I don't see a
638 638 # way around it.
639 639 sys.displayhook = self.outputcache
640 640
641 641 # Set user colors (don't do it in the constructor above so that it
642 642 # doesn't crash if colors option is invalid)
643 643 self.magic_colors(rc.colors)
644 644
645 645 # Set calling of pdb on exceptions
646 646 self.call_pdb = rc.pdb
647 647
648 648 # Load user aliases
649 649 for alias in rc.alias:
650 650 self.magic_alias(alias)
651 651
652 652 # dynamic data that survives through sessions
653 653 # XXX make the filename a config option?
654 654 persist_base = 'persist'
655 655 if rc.profile:
656 656 persist_base += '_%s' % rc.profile
657 657 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
658 658
659 659 try:
660 660 self.persist = pickle.load(file(self.persist_fname))
661 661 except:
662 662 self.persist = {}
663 663
664 664
665 665 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
666 666 try:
667 667 obj = pickle.loads(value)
668 668 except:
669 669
670 670 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
671 671 print "The error was:",sys.exc_info()[0]
672 672 continue
673 673
674 674
675 675 self.user_ns[key] = obj
676 676
677 677 def add_builtins(self):
678 678 """Store ipython references into the builtin namespace.
679 679
680 680 Some parts of ipython operate via builtins injected here, which hold a
681 681 reference to IPython itself."""
682 682
683 # TODO: deprecate all except _ip; 'jobs' should be installed
684 # by an extension and the rest are under _ip
683 685 builtins_new = dict(__IPYTHON__ = self,
684 686 ip_set_hook = self.set_hook,
685 687 jobs = self.jobs,
686 688 ipmagic = self.ipmagic,
687 689 ipalias = self.ipalias,
688 690 ipsystem = self.ipsystem,
691 _ip = self.api
689 692 )
690 693 for biname,bival in builtins_new.items():
691 694 try:
692 695 # store the orignal value so we can restore it
693 696 self.builtins_added[biname] = __builtin__.__dict__[biname]
694 697 except KeyError:
695 698 # or mark that it wasn't defined, and we'll just delete it at
696 699 # cleanup
697 700 self.builtins_added[biname] = Undefined
698 701 __builtin__.__dict__[biname] = bival
699 702
700 703 # Keep in the builtins a flag for when IPython is active. We set it
701 704 # with setdefault so that multiple nested IPythons don't clobber one
702 705 # another. Each will increase its value by one upon being activated,
703 706 # which also gives us a way to determine the nesting level.
704 707 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
705 708
706 709 def clean_builtins(self):
707 710 """Remove any builtins which might have been added by add_builtins, or
708 711 restore overwritten ones to their previous values."""
709 712 for biname,bival in self.builtins_added.items():
710 713 if bival is Undefined:
711 714 del __builtin__.__dict__[biname]
712 715 else:
713 716 __builtin__.__dict__[biname] = bival
714 717 self.builtins_added.clear()
715 718
716 719 def set_hook(self,name,hook, priority = 50):
717 720 """set_hook(name,hook) -> sets an internal IPython hook.
718 721
719 722 IPython exposes some of its internal API as user-modifiable hooks. By
720 723 adding your function to one of these hooks, you can modify IPython's
721 724 behavior to call at runtime your own routines."""
722 725
723 726 # At some point in the future, this should validate the hook before it
724 727 # accepts it. Probably at least check that the hook takes the number
725 728 # of args it's supposed to.
726 729 dp = getattr(self.hooks, name, None)
727 730 if name not in IPython.hooks.__all__:
728 731 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
729 732 if not dp:
730 733 dp = IPython.hooks.CommandChainDispatcher()
731 734
732 735 f = new.instancemethod(hook,self,self.__class__)
733 736 try:
734 737 dp.add(f,priority)
735 738 except AttributeError:
736 739 # it was not commandchain, plain old func - replace
737 740 dp = f
738 741
739 742 setattr(self.hooks,name, dp)
740 743
741 744
742 745 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
743 746
744 747 def set_custom_exc(self,exc_tuple,handler):
745 748 """set_custom_exc(exc_tuple,handler)
746 749
747 750 Set a custom exception handler, which will be called if any of the
748 751 exceptions in exc_tuple occur in the mainloop (specifically, in the
749 752 runcode() method.
750 753
751 754 Inputs:
752 755
753 756 - exc_tuple: a *tuple* of valid exceptions to call the defined
754 757 handler for. It is very important that you use a tuple, and NOT A
755 758 LIST here, because of the way Python's except statement works. If
756 759 you only want to trap a single exception, use a singleton tuple:
757 760
758 761 exc_tuple == (MyCustomException,)
759 762
760 763 - handler: this must be defined as a function with the following
761 764 basic interface: def my_handler(self,etype,value,tb).
762 765
763 766 This will be made into an instance method (via new.instancemethod)
764 767 of IPython itself, and it will be called if any of the exceptions
765 768 listed in the exc_tuple are caught. If the handler is None, an
766 769 internal basic one is used, which just prints basic info.
767 770
768 771 WARNING: by putting in your own exception handler into IPython's main
769 772 execution loop, you run a very good chance of nasty crashes. This
770 773 facility should only be used if you really know what you are doing."""
771 774
772 775 assert type(exc_tuple)==type(()) , \
773 776 "The custom exceptions must be given AS A TUPLE."
774 777
775 778 def dummy_handler(self,etype,value,tb):
776 779 print '*** Simple custom exception handler ***'
777 780 print 'Exception type :',etype
778 781 print 'Exception value:',value
779 782 print 'Traceback :',tb
780 783 print 'Source code :','\n'.join(self.buffer)
781 784
782 785 if handler is None: handler = dummy_handler
783 786
784 787 self.CustomTB = new.instancemethod(handler,self,self.__class__)
785 788 self.custom_exceptions = exc_tuple
786 789
787 790 def set_custom_completer(self,completer,pos=0):
788 791 """set_custom_completer(completer,pos=0)
789 792
790 793 Adds a new custom completer function.
791 794
792 795 The position argument (defaults to 0) is the index in the completers
793 796 list where you want the completer to be inserted."""
794 797
795 798 newcomp = new.instancemethod(completer,self.Completer,
796 799 self.Completer.__class__)
797 800 self.Completer.matchers.insert(pos,newcomp)
798 801
799 802 def _get_call_pdb(self):
800 803 return self._call_pdb
801 804
802 805 def _set_call_pdb(self,val):
803 806
804 807 if val not in (0,1,False,True):
805 808 raise ValueError,'new call_pdb value must be boolean'
806 809
807 810 # store value in instance
808 811 self._call_pdb = val
809 812
810 813 # notify the actual exception handlers
811 814 self.InteractiveTB.call_pdb = val
812 815 if self.isthreaded:
813 816 try:
814 817 self.sys_excepthook.call_pdb = val
815 818 except:
816 819 warn('Failed to activate pdb for threaded exception handler')
817 820
818 821 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
819 822 'Control auto-activation of pdb at exceptions')
820 823
821 824
822 825 # These special functions get installed in the builtin namespace, to
823 826 # provide programmatic (pure python) access to magics, aliases and system
824 827 # calls. This is important for logging, user scripting, and more.
825 828
826 829 # We are basically exposing, via normal python functions, the three
827 830 # mechanisms in which ipython offers special call modes (magics for
828 831 # internal control, aliases for direct system access via pre-selected
829 832 # names, and !cmd for calling arbitrary system commands).
830 833
831 834 def ipmagic(self,arg_s):
832 835 """Call a magic function by name.
833 836
834 837 Input: a string containing the name of the magic function to call and any
835 838 additional arguments to be passed to the magic.
836 839
837 840 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
838 841 prompt:
839 842
840 843 In[1]: %name -opt foo bar
841 844
842 845 To call a magic without arguments, simply use ipmagic('name').
843 846
844 847 This provides a proper Python function to call IPython's magics in any
845 848 valid Python code you can type at the interpreter, including loops and
846 849 compound statements. It is added by IPython to the Python builtin
847 850 namespace upon initialization."""
848 851
849 852 args = arg_s.split(' ',1)
850 853 magic_name = args[0]
851 854 magic_name = magic_name.lstrip(self.ESC_MAGIC)
852 855
853 856 try:
854 857 magic_args = args[1]
855 858 except IndexError:
856 859 magic_args = ''
857 860 fn = getattr(self,'magic_'+magic_name,None)
858 861 if fn is None:
859 862 error("Magic function `%s` not found." % magic_name)
860 863 else:
861 864 magic_args = self.var_expand(magic_args)
862 865 return fn(magic_args)
863 866
864 867 def ipalias(self,arg_s):
865 868 """Call an alias by name.
866 869
867 870 Input: a string containing the name of the alias to call and any
868 871 additional arguments to be passed to the magic.
869 872
870 873 ipalias('name -opt foo bar') is equivalent to typing at the ipython
871 874 prompt:
872 875
873 876 In[1]: name -opt foo bar
874 877
875 878 To call an alias without arguments, simply use ipalias('name').
876 879
877 880 This provides a proper Python function to call IPython's aliases in any
878 881 valid Python code you can type at the interpreter, including loops and
879 882 compound statements. It is added by IPython to the Python builtin
880 883 namespace upon initialization."""
881 884
882 885 args = arg_s.split(' ',1)
883 886 alias_name = args[0]
884 887 try:
885 888 alias_args = args[1]
886 889 except IndexError:
887 890 alias_args = ''
888 891 if alias_name in self.alias_table:
889 892 self.call_alias(alias_name,alias_args)
890 893 else:
891 894 error("Alias `%s` not found." % alias_name)
892 895
893 896 def ipsystem(self,arg_s):
894 897 """Make a system call, using IPython."""
895 898
896 899 self.system(arg_s)
897 900
898 901 def complete(self,text):
899 902 """Return a sorted list of all possible completions on text.
900 903
901 904 Inputs:
902 905
903 906 - text: a string of text to be completed on.
904 907
905 908 This is a wrapper around the completion mechanism, similar to what
906 909 readline does at the command line when the TAB key is hit. By
907 910 exposing it as a method, it can be used by other non-readline
908 911 environments (such as GUIs) for text completion.
909 912
910 913 Simple usage example:
911 914
912 915 In [1]: x = 'hello'
913 916
914 917 In [2]: __IP.complete('x.l')
915 918 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
916 919
917 920 complete = self.Completer.complete
918 921 state = 0
919 922 # use a dict so we get unique keys, since ipyhton's multiple
920 923 # completers can return duplicates.
921 924 comps = {}
922 925 while True:
923 926 newcomp = complete(text,state)
924 927 if newcomp is None:
925 928 break
926 929 comps[newcomp] = 1
927 930 state += 1
928 931 outcomps = comps.keys()
929 932 outcomps.sort()
930 933 return outcomps
931 934
932 935 def set_completer_frame(self, frame=None):
933 936 if frame:
934 937 self.Completer.namespace = frame.f_locals
935 938 self.Completer.global_namespace = frame.f_globals
936 939 else:
937 940 self.Completer.namespace = self.user_ns
938 941 self.Completer.global_namespace = self.user_global_ns
939 942
940 943 def init_auto_alias(self):
941 944 """Define some aliases automatically.
942 945
943 946 These are ALL parameter-less aliases"""
944 947
945 948 for alias,cmd in self.auto_alias:
946 949 self.alias_table[alias] = (0,cmd)
947 950
948 951 def alias_table_validate(self,verbose=0):
949 952 """Update information about the alias table.
950 953
951 954 In particular, make sure no Python keywords/builtins are in it."""
952 955
953 956 no_alias = self.no_alias
954 957 for k in self.alias_table.keys():
955 958 if k in no_alias:
956 959 del self.alias_table[k]
957 960 if verbose:
958 961 print ("Deleting alias <%s>, it's a Python "
959 962 "keyword or builtin." % k)
960 963
961 964 def set_autoindent(self,value=None):
962 965 """Set the autoindent flag, checking for readline support.
963 966
964 967 If called with no arguments, it acts as a toggle."""
965 968
966 969 if not self.has_readline:
967 970 if os.name == 'posix':
968 971 warn("The auto-indent feature requires the readline library")
969 972 self.autoindent = 0
970 973 return
971 974 if value is None:
972 975 self.autoindent = not self.autoindent
973 976 else:
974 977 self.autoindent = value
975 978
976 979 def rc_set_toggle(self,rc_field,value=None):
977 980 """Set or toggle a field in IPython's rc config. structure.
978 981
979 982 If called with no arguments, it acts as a toggle.
980 983
981 984 If called with a non-existent field, the resulting AttributeError
982 985 exception will propagate out."""
983 986
984 987 rc_val = getattr(self.rc,rc_field)
985 988 if value is None:
986 989 value = not rc_val
987 990 setattr(self.rc,rc_field,value)
988 991
989 992 def user_setup(self,ipythondir,rc_suffix,mode='install'):
990 993 """Install the user configuration directory.
991 994
992 995 Can be called when running for the first time or to upgrade the user's
993 996 .ipython/ directory with the mode parameter. Valid modes are 'install'
994 997 and 'upgrade'."""
995 998
996 999 def wait():
997 1000 try:
998 1001 raw_input("Please press <RETURN> to start IPython.")
999 1002 except EOFError:
1000 1003 print >> Term.cout
1001 1004 print '*'*70
1002 1005
1003 1006 cwd = os.getcwd() # remember where we started
1004 1007 glb = glob.glob
1005 1008 print '*'*70
1006 1009 if mode == 'install':
1007 1010 print \
1008 1011 """Welcome to IPython. I will try to create a personal configuration directory
1009 1012 where you can customize many aspects of IPython's functionality in:\n"""
1010 1013 else:
1011 1014 print 'I am going to upgrade your configuration in:'
1012 1015
1013 1016 print ipythondir
1014 1017
1015 1018 rcdirend = os.path.join('IPython','UserConfig')
1016 1019 cfg = lambda d: os.path.join(d,rcdirend)
1017 1020 try:
1018 1021 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1019 1022 except IOError:
1020 1023 warning = """
1021 1024 Installation error. IPython's directory was not found.
1022 1025
1023 1026 Check the following:
1024 1027
1025 1028 The ipython/IPython directory should be in a directory belonging to your
1026 1029 PYTHONPATH environment variable (that is, it should be in a directory
1027 1030 belonging to sys.path). You can copy it explicitly there or just link to it.
1028 1031
1029 1032 IPython will proceed with builtin defaults.
1030 1033 """
1031 1034 warn(warning)
1032 1035 wait()
1033 1036 return
1034 1037
1035 1038 if mode == 'install':
1036 1039 try:
1037 1040 shutil.copytree(rcdir,ipythondir)
1038 1041 os.chdir(ipythondir)
1039 1042 rc_files = glb("ipythonrc*")
1040 1043 for rc_file in rc_files:
1041 1044 os.rename(rc_file,rc_file+rc_suffix)
1042 1045 except:
1043 1046 warning = """
1044 1047
1045 1048 There was a problem with the installation:
1046 1049 %s
1047 1050 Try to correct it or contact the developers if you think it's a bug.
1048 1051 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1049 1052 warn(warning)
1050 1053 wait()
1051 1054 return
1052 1055
1053 1056 elif mode == 'upgrade':
1054 1057 try:
1055 1058 os.chdir(ipythondir)
1056 1059 except:
1057 1060 print """
1058 1061 Can not upgrade: changing to directory %s failed. Details:
1059 1062 %s
1060 1063 """ % (ipythondir,sys.exc_info()[1])
1061 1064 wait()
1062 1065 return
1063 1066 else:
1064 1067 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1065 1068 for new_full_path in sources:
1066 1069 new_filename = os.path.basename(new_full_path)
1067 1070 if new_filename.startswith('ipythonrc'):
1068 1071 new_filename = new_filename + rc_suffix
1069 1072 # The config directory should only contain files, skip any
1070 1073 # directories which may be there (like CVS)
1071 1074 if os.path.isdir(new_full_path):
1072 1075 continue
1073 1076 if os.path.exists(new_filename):
1074 1077 old_file = new_filename+'.old'
1075 1078 if os.path.exists(old_file):
1076 1079 os.remove(old_file)
1077 1080 os.rename(new_filename,old_file)
1078 1081 shutil.copy(new_full_path,new_filename)
1079 1082 else:
1080 1083 raise ValueError,'unrecognized mode for install:',`mode`
1081 1084
1082 1085 # Fix line-endings to those native to each platform in the config
1083 1086 # directory.
1084 1087 try:
1085 1088 os.chdir(ipythondir)
1086 1089 except:
1087 1090 print """
1088 1091 Problem: changing to directory %s failed.
1089 1092 Details:
1090 1093 %s
1091 1094
1092 1095 Some configuration files may have incorrect line endings. This should not
1093 1096 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1094 1097 wait()
1095 1098 else:
1096 1099 for fname in glb('ipythonrc*'):
1097 1100 try:
1098 1101 native_line_ends(fname,backup=0)
1099 1102 except IOError:
1100 1103 pass
1101 1104
1102 1105 if mode == 'install':
1103 1106 print """
1104 1107 Successful installation!
1105 1108
1106 1109 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1107 1110 IPython manual (there are both HTML and PDF versions supplied with the
1108 1111 distribution) to make sure that your system environment is properly configured
1109 1112 to take advantage of IPython's features.
1110 1113
1111 1114 Important note: the configuration system has changed! The old system is
1112 1115 still in place, but its setting may be partly overridden by the settings in
1113 1116 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1114 1117 if some of the new settings bother you.
1115 1118
1116 1119 """
1117 1120 else:
1118 1121 print """
1119 1122 Successful upgrade!
1120 1123
1121 1124 All files in your directory:
1122 1125 %(ipythondir)s
1123 1126 which would have been overwritten by the upgrade were backed up with a .old
1124 1127 extension. If you had made particular customizations in those files you may
1125 1128 want to merge them back into the new files.""" % locals()
1126 1129 wait()
1127 1130 os.chdir(cwd)
1128 1131 # end user_setup()
1129 1132
1130 1133 def atexit_operations(self):
1131 1134 """This will be executed at the time of exit.
1132 1135
1133 1136 Saving of persistent data should be performed here. """
1134 1137
1135 1138 #print '*** IPython exit cleanup ***' # dbg
1136 1139 # input history
1137 1140 self.savehist()
1138 1141
1139 1142 # Cleanup all tempfiles left around
1140 1143 for tfile in self.tempfiles:
1141 1144 try:
1142 1145 os.unlink(tfile)
1143 1146 except OSError:
1144 1147 pass
1145 1148
1146 1149 # save the "persistent data" catch-all dictionary
1147 1150 try:
1148 1151 pickle.dump(self.persist, open(self.persist_fname,"w"))
1149 1152 except:
1150 1153 print "*** ERROR *** persistent data saving failed."
1151 1154
1152 1155 def savehist(self):
1153 1156 """Save input history to a file (via readline library)."""
1154 1157 try:
1155 1158 self.readline.write_history_file(self.histfile)
1156 1159 except:
1157 1160 print 'Unable to save IPython command history to file: ' + \
1158 1161 `self.histfile`
1159 1162
1160 1163 def pre_readline(self):
1161 1164 """readline hook to be used at the start of each line.
1162 1165
1163 1166 Currently it handles auto-indent only."""
1164 1167
1165 1168 #debugx('self.indent_current_nsp','pre_readline:')
1166 1169 self.readline.insert_text(self.indent_current_str())
1167 1170
1168 1171 def init_readline(self):
1169 1172 """Command history completion/saving/reloading."""
1170 1173 try:
1171 1174 import readline
1172 1175 except ImportError:
1173 1176 self.has_readline = 0
1174 1177 self.readline = None
1175 1178 # no point in bugging windows users with this every time:
1176 1179 if os.name == 'posix':
1177 1180 warn('Readline services not available on this platform.')
1178 1181 else:
1179 1182 import atexit
1180 1183 from IPython.completer import IPCompleter
1181 1184 self.Completer = IPCompleter(self,
1182 1185 self.user_ns,
1183 1186 self.user_global_ns,
1184 1187 self.rc.readline_omit__names,
1185 1188 self.alias_table)
1186 1189
1187 1190 # Platform-specific configuration
1188 1191 if os.name == 'nt':
1189 1192 self.readline_startup_hook = readline.set_pre_input_hook
1190 1193 else:
1191 1194 self.readline_startup_hook = readline.set_startup_hook
1192 1195
1193 1196 # Load user's initrc file (readline config)
1194 1197 inputrc_name = os.environ.get('INPUTRC')
1195 1198 if inputrc_name is None:
1196 1199 home_dir = get_home_dir()
1197 1200 if home_dir is not None:
1198 1201 inputrc_name = os.path.join(home_dir,'.inputrc')
1199 1202 if os.path.isfile(inputrc_name):
1200 1203 try:
1201 1204 readline.read_init_file(inputrc_name)
1202 1205 except:
1203 1206 warn('Problems reading readline initialization file <%s>'
1204 1207 % inputrc_name)
1205 1208
1206 1209 self.has_readline = 1
1207 1210 self.readline = readline
1208 1211 # save this in sys so embedded copies can restore it properly
1209 1212 sys.ipcompleter = self.Completer.complete
1210 1213 readline.set_completer(self.Completer.complete)
1211 1214
1212 1215 # Configure readline according to user's prefs
1213 1216 for rlcommand in self.rc.readline_parse_and_bind:
1214 1217 readline.parse_and_bind(rlcommand)
1215 1218
1216 1219 # remove some chars from the delimiters list
1217 1220 delims = readline.get_completer_delims()
1218 1221 delims = delims.translate(string._idmap,
1219 1222 self.rc.readline_remove_delims)
1220 1223 readline.set_completer_delims(delims)
1221 1224 # otherwise we end up with a monster history after a while:
1222 1225 readline.set_history_length(1000)
1223 1226 try:
1224 1227 #print '*** Reading readline history' # dbg
1225 1228 readline.read_history_file(self.histfile)
1226 1229 except IOError:
1227 1230 pass # It doesn't exist yet.
1228 1231
1229 1232 atexit.register(self.atexit_operations)
1230 1233 del atexit
1231 1234
1232 1235 # Configure auto-indent for all platforms
1233 1236 self.set_autoindent(self.rc.autoindent)
1234 1237
1235 1238 def _should_recompile(self,e):
1236 1239 """Utility routine for edit_syntax_error"""
1237 1240
1238 1241 if e.filename in ('<ipython console>','<input>','<string>',
1239 1242 '<console>',None):
1240 1243
1241 1244 return False
1242 1245 try:
1243 if not ask_yes_no('Return to editor to correct syntax error? '
1244 '[Y/n] ','y'):
1246 if (self.rc.autoedit_syntax != 2 and
1247 not ask_yes_no('Return to editor to correct syntax error? '
1248 '[Y/n] ','y')):
1245 1249 return False
1246 1250 except EOFError:
1247 1251 return False
1248 1252
1249 1253 def int0(x):
1250 1254 try:
1251 1255 return int(x)
1252 1256 except TypeError:
1253 1257 return 0
1254 1258 # always pass integer line and offset values to editor hook
1255 1259 self.hooks.fix_error_editor(e.filename,
1256 1260 int0(e.lineno),int0(e.offset),e.msg)
1257 1261 return True
1258 1262
1259 1263 def edit_syntax_error(self):
1260 1264 """The bottom half of the syntax error handler called in the main loop.
1261 1265
1262 1266 Loop until syntax error is fixed or user cancels.
1263 1267 """
1264 1268
1265 1269 while self.SyntaxTB.last_syntax_error:
1266 1270 # copy and clear last_syntax_error
1267 1271 err = self.SyntaxTB.clear_err_state()
1268 1272 if not self._should_recompile(err):
1269 1273 return
1270 1274 try:
1271 1275 # may set last_syntax_error again if a SyntaxError is raised
1272 1276 self.safe_execfile(err.filename,self.shell.user_ns)
1273 1277 except:
1274 1278 self.showtraceback()
1275 1279 else:
1276 1280 f = file(err.filename)
1277 1281 try:
1278 1282 sys.displayhook(f.read())
1279 1283 finally:
1280 1284 f.close()
1281 1285
1282 1286 def showsyntaxerror(self, filename=None):
1283 1287 """Display the syntax error that just occurred.
1284 1288
1285 1289 This doesn't display a stack trace because there isn't one.
1286 1290
1287 1291 If a filename is given, it is stuffed in the exception instead
1288 1292 of what was there before (because Python's parser always uses
1289 1293 "<string>" when reading from a string).
1290 1294 """
1291 1295 etype, value, last_traceback = sys.exc_info()
1292 1296 if filename and etype is SyntaxError:
1293 1297 # Work hard to stuff the correct filename in the exception
1294 1298 try:
1295 1299 msg, (dummy_filename, lineno, offset, line) = value
1296 1300 except:
1297 1301 # Not the format we expect; leave it alone
1298 1302 pass
1299 1303 else:
1300 1304 # Stuff in the right filename
1301 1305 try:
1302 1306 # Assume SyntaxError is a class exception
1303 1307 value = SyntaxError(msg, (filename, lineno, offset, line))
1304 1308 except:
1305 1309 # If that failed, assume SyntaxError is a string
1306 1310 value = msg, (filename, lineno, offset, line)
1307 1311 self.SyntaxTB(etype,value,[])
1308 1312
1309 1313 def debugger(self):
1310 1314 """Call the pdb debugger."""
1311 1315
1312 1316 if not self.rc.pdb:
1313 1317 return
1314 1318 pdb.pm()
1315 1319
1316 1320 def showtraceback(self,exc_tuple = None,filename=None):
1317 1321 """Display the exception that just occurred."""
1318 1322
1319 1323 # Though this won't be called by syntax errors in the input line,
1320 1324 # there may be SyntaxError cases whith imported code.
1321 1325 if exc_tuple is None:
1322 1326 type, value, tb = sys.exc_info()
1323 1327 else:
1324 1328 type, value, tb = exc_tuple
1325 1329 if type is SyntaxError:
1326 1330 self.showsyntaxerror(filename)
1327 1331 else:
1328 1332 self.InteractiveTB()
1329 1333 if self.InteractiveTB.call_pdb and self.has_readline:
1330 1334 # pdb mucks up readline, fix it back
1331 1335 self.readline.set_completer(self.Completer.complete)
1332 1336
1333 1337 def mainloop(self,banner=None):
1334 1338 """Creates the local namespace and starts the mainloop.
1335 1339
1336 1340 If an optional banner argument is given, it will override the
1337 1341 internally created default banner."""
1338 1342
1339 1343 if self.rc.c: # Emulate Python's -c option
1340 1344 self.exec_init_cmd()
1341 1345 if banner is None:
1342 1346 if self.rc.banner:
1343 1347 banner = self.BANNER+self.banner2
1344 1348 else:
1345 1349 banner = ''
1346 1350 self.interact(banner)
1347 1351
1348 1352 def exec_init_cmd(self):
1349 1353 """Execute a command given at the command line.
1350 1354
1351 1355 This emulates Python's -c option."""
1352 1356
1353 1357 #sys.argv = ['-c']
1354 1358 self.push(self.rc.c)
1355 1359
1356 1360 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1357 1361 """Embeds IPython into a running python program.
1358 1362
1359 1363 Input:
1360 1364
1361 1365 - header: An optional header message can be specified.
1362 1366
1363 1367 - local_ns, global_ns: working namespaces. If given as None, the
1364 1368 IPython-initialized one is updated with __main__.__dict__, so that
1365 1369 program variables become visible but user-specific configuration
1366 1370 remains possible.
1367 1371
1368 1372 - stack_depth: specifies how many levels in the stack to go to
1369 1373 looking for namespaces (when local_ns and global_ns are None). This
1370 1374 allows an intermediate caller to make sure that this function gets
1371 1375 the namespace from the intended level in the stack. By default (0)
1372 1376 it will get its locals and globals from the immediate caller.
1373 1377
1374 1378 Warning: it's possible to use this in a program which is being run by
1375 1379 IPython itself (via %run), but some funny things will happen (a few
1376 1380 globals get overwritten). In the future this will be cleaned up, as
1377 1381 there is no fundamental reason why it can't work perfectly."""
1378 1382
1379 1383 # Get locals and globals from caller
1380 1384 if local_ns is None or global_ns is None:
1381 1385 call_frame = sys._getframe(stack_depth).f_back
1382 1386
1383 1387 if local_ns is None:
1384 1388 local_ns = call_frame.f_locals
1385 1389 if global_ns is None:
1386 1390 global_ns = call_frame.f_globals
1387 1391
1388 1392 # Update namespaces and fire up interpreter
1389 1393
1390 1394 # The global one is easy, we can just throw it in
1391 1395 self.user_global_ns = global_ns
1392 1396
1393 1397 # but the user/local one is tricky: ipython needs it to store internal
1394 1398 # data, but we also need the locals. We'll copy locals in the user
1395 1399 # one, but will track what got copied so we can delete them at exit.
1396 1400 # This is so that a later embedded call doesn't see locals from a
1397 1401 # previous call (which most likely existed in a separate scope).
1398 1402 local_varnames = local_ns.keys()
1399 1403 self.user_ns.update(local_ns)
1400 1404
1401 1405 # Patch for global embedding to make sure that things don't overwrite
1402 1406 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1403 1407 # FIXME. Test this a bit more carefully (the if.. is new)
1404 1408 if local_ns is None and global_ns is None:
1405 1409 self.user_global_ns.update(__main__.__dict__)
1406 1410
1407 1411 # make sure the tab-completer has the correct frame information, so it
1408 1412 # actually completes using the frame's locals/globals
1409 1413 self.set_completer_frame()
1410 1414
1411 1415 # before activating the interactive mode, we need to make sure that
1412 1416 # all names in the builtin namespace needed by ipython point to
1413 1417 # ourselves, and not to other instances.
1414 1418 self.add_builtins()
1415 1419
1416 1420 self.interact(header)
1417 1421
1418 1422 # now, purge out the user namespace from anything we might have added
1419 1423 # from the caller's local namespace
1420 1424 delvar = self.user_ns.pop
1421 1425 for var in local_varnames:
1422 1426 delvar(var,None)
1423 1427 # and clean builtins we may have overridden
1424 1428 self.clean_builtins()
1425 1429
1426 1430 def interact(self, banner=None):
1427 1431 """Closely emulate the interactive Python console.
1428 1432
1429 1433 The optional banner argument specify the banner to print
1430 1434 before the first interaction; by default it prints a banner
1431 1435 similar to the one printed by the real Python interpreter,
1432 1436 followed by the current class name in parentheses (so as not
1433 1437 to confuse this with the real interpreter -- since it's so
1434 1438 close!).
1435 1439
1436 1440 """
1437 1441 cprt = 'Type "copyright", "credits" or "license" for more information.'
1438 1442 if banner is None:
1439 1443 self.write("Python %s on %s\n%s\n(%s)\n" %
1440 1444 (sys.version, sys.platform, cprt,
1441 1445 self.__class__.__name__))
1442 1446 else:
1443 1447 self.write(banner)
1444 1448
1445 1449 more = 0
1446 1450
1447 1451 # Mark activity in the builtins
1448 1452 __builtin__.__dict__['__IPYTHON__active'] += 1
1449 1453
1450 1454 # exit_now is set by a call to %Exit or %Quit
1451 1455 self.exit_now = False
1452 1456 while not self.exit_now:
1453 1457
1454 1458 try:
1455 1459 if more:
1456 1460 prompt = self.outputcache.prompt2
1457 1461 if self.autoindent:
1458 1462 self.readline_startup_hook(self.pre_readline)
1459 1463 else:
1460 1464 prompt = self.outputcache.prompt1
1461 1465 try:
1462 1466 line = self.raw_input(prompt,more)
1463 1467 if self.autoindent:
1464 1468 self.readline_startup_hook(None)
1465 1469 except EOFError:
1466 1470 if self.autoindent:
1467 1471 self.readline_startup_hook(None)
1468 1472 self.write("\n")
1469 1473 self.exit()
1470 1474 except:
1471 1475 # exceptions here are VERY RARE, but they can be triggered
1472 1476 # asynchronously by signal handlers, for example.
1473 1477 self.showtraceback()
1474 1478 else:
1475 1479 more = self.push(line)
1476 1480
1477 1481 if (self.SyntaxTB.last_syntax_error and
1478 1482 self.rc.autoedit_syntax):
1479 1483 self.edit_syntax_error()
1480 1484
1481 1485 except KeyboardInterrupt:
1482 1486 self.write("\nKeyboardInterrupt\n")
1483 1487 self.resetbuffer()
1484 1488 more = 0
1485 1489 # keep cache in sync with the prompt counter:
1486 1490 self.outputcache.prompt_count -= 1
1487 1491
1488 1492 if self.autoindent:
1489 1493 self.indent_current_nsp = 0
1490 1494
1491 1495 except bdb.BdbQuit:
1492 1496 warn("The Python debugger has exited with a BdbQuit exception.\n"
1493 1497 "Because of how pdb handles the stack, it is impossible\n"
1494 1498 "for IPython to properly format this particular exception.\n"
1495 1499 "IPython will resume normal operation.")
1496 1500
1497 1501 # We are off again...
1498 1502 __builtin__.__dict__['__IPYTHON__active'] -= 1
1499 1503
1500 1504 def excepthook(self, type, value, tb):
1501 1505 """One more defense for GUI apps that call sys.excepthook.
1502 1506
1503 1507 GUI frameworks like wxPython trap exceptions and call
1504 1508 sys.excepthook themselves. I guess this is a feature that
1505 1509 enables them to keep running after exceptions that would
1506 1510 otherwise kill their mainloop. This is a bother for IPython
1507 1511 which excepts to catch all of the program exceptions with a try:
1508 1512 except: statement.
1509 1513
1510 1514 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1511 1515 any app directly invokes sys.excepthook, it will look to the user like
1512 1516 IPython crashed. In order to work around this, we can disable the
1513 1517 CrashHandler and replace it with this excepthook instead, which prints a
1514 1518 regular traceback using our InteractiveTB. In this fashion, apps which
1515 1519 call sys.excepthook will generate a regular-looking exception from
1516 1520 IPython, and the CrashHandler will only be triggered by real IPython
1517 1521 crashes.
1518 1522
1519 1523 This hook should be used sparingly, only in places which are not likely
1520 1524 to be true IPython errors.
1521 1525 """
1522 1526
1523 1527 self.InteractiveTB(type, value, tb, tb_offset=0)
1524 1528 if self.InteractiveTB.call_pdb and self.has_readline:
1525 1529 self.readline.set_completer(self.Completer.complete)
1526 1530
1527 1531 def call_alias(self,alias,rest=''):
1528 1532 """Call an alias given its name and the rest of the line.
1529 1533
1530 1534 This function MUST be given a proper alias, because it doesn't make
1531 1535 any checks when looking up into the alias table. The caller is
1532 1536 responsible for invoking it only with a valid alias."""
1533 1537
1534 1538 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1535 1539 nargs,cmd = self.alias_table[alias]
1536 1540 # Expand the %l special to be the user's input line
1537 1541 if cmd.find('%l') >= 0:
1538 1542 cmd = cmd.replace('%l',rest)
1539 1543 rest = ''
1540 1544 if nargs==0:
1541 1545 # Simple, argument-less aliases
1542 1546 cmd = '%s %s' % (cmd,rest)
1543 1547 else:
1544 1548 # Handle aliases with positional arguments
1545 1549 args = rest.split(None,nargs)
1546 1550 if len(args)< nargs:
1547 1551 error('Alias <%s> requires %s arguments, %s given.' %
1548 1552 (alias,nargs,len(args)))
1549 1553 return
1550 1554 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1551 1555 # Now call the macro, evaluating in the user's namespace
1552 1556 try:
1553 1557 self.system(cmd)
1554 1558 except:
1555 1559 self.showtraceback()
1556 1560
1557 1561 def indent_current_str(self):
1558 1562 """return the current level of indentation as a string"""
1559 1563 return self.indent_current_nsp * ' '
1560 1564
1561 1565 def autoindent_update(self,line):
1562 1566 """Keep track of the indent level."""
1563 1567
1564 1568 #debugx('line')
1565 1569 #debugx('self.indent_current_nsp')
1566 1570 if self.autoindent:
1567 1571 if line:
1568 1572 inisp = num_ini_spaces(line)
1569 1573 if inisp < self.indent_current_nsp:
1570 1574 self.indent_current_nsp = inisp
1571 1575
1572 1576 if line[-1] == ':':
1573 1577 self.indent_current_nsp += 4
1574 1578 elif dedent_re.match(line):
1575 1579 self.indent_current_nsp -= 4
1576 1580 else:
1577 1581 self.indent_current_nsp = 0
1578 1582
1579 1583 def runlines(self,lines):
1580 1584 """Run a string of one or more lines of source.
1581 1585
1582 1586 This method is capable of running a string containing multiple source
1583 1587 lines, as if they had been entered at the IPython prompt. Since it
1584 1588 exposes IPython's processing machinery, the given strings can contain
1585 1589 magic calls (%magic), special shell access (!cmd), etc."""
1586 1590
1587 1591 # We must start with a clean buffer, in case this is run from an
1588 1592 # interactive IPython session (via a magic, for example).
1589 1593 self.resetbuffer()
1590 1594 lines = lines.split('\n')
1591 1595 more = 0
1592 1596 for line in lines:
1593 1597 # skip blank lines so we don't mess up the prompt counter, but do
1594 1598 # NOT skip even a blank line if we are in a code block (more is
1595 1599 # true)
1596 1600 if line or more:
1597 1601 more = self.push(self.prefilter(line,more))
1598 1602 # IPython's runsource returns None if there was an error
1599 1603 # compiling the code. This allows us to stop processing right
1600 1604 # away, so the user gets the error message at the right place.
1601 1605 if more is None:
1602 1606 break
1603 1607 # final newline in case the input didn't have it, so that the code
1604 1608 # actually does get executed
1605 1609 if more:
1606 1610 self.push('\n')
1607 1611
1608 1612 def runsource(self, source, filename='<input>', symbol='single'):
1609 1613 """Compile and run some source in the interpreter.
1610 1614
1611 1615 Arguments are as for compile_command().
1612 1616
1613 1617 One several things can happen:
1614 1618
1615 1619 1) The input is incorrect; compile_command() raised an
1616 1620 exception (SyntaxError or OverflowError). A syntax traceback
1617 1621 will be printed by calling the showsyntaxerror() method.
1618 1622
1619 1623 2) The input is incomplete, and more input is required;
1620 1624 compile_command() returned None. Nothing happens.
1621 1625
1622 1626 3) The input is complete; compile_command() returned a code
1623 1627 object. The code is executed by calling self.runcode() (which
1624 1628 also handles run-time exceptions, except for SystemExit).
1625 1629
1626 1630 The return value is:
1627 1631
1628 1632 - True in case 2
1629 1633
1630 1634 - False in the other cases, unless an exception is raised, where
1631 1635 None is returned instead. This can be used by external callers to
1632 1636 know whether to continue feeding input or not.
1633 1637
1634 1638 The return value can be used to decide whether to use sys.ps1 or
1635 1639 sys.ps2 to prompt the next line."""
1636 1640
1637 1641 try:
1638 1642 code = self.compile(source,filename,symbol)
1639 1643 except (OverflowError, SyntaxError, ValueError):
1640 1644 # Case 1
1641 1645 self.showsyntaxerror(filename)
1642 1646 return None
1643 1647
1644 1648 if code is None:
1645 1649 # Case 2
1646 1650 return True
1647 1651
1648 1652 # Case 3
1649 1653 # We store the code object so that threaded shells and
1650 1654 # custom exception handlers can access all this info if needed.
1651 1655 # The source corresponding to this can be obtained from the
1652 1656 # buffer attribute as '\n'.join(self.buffer).
1653 1657 self.code_to_run = code
1654 1658 # now actually execute the code object
1655 1659 if self.runcode(code) == 0:
1656 1660 return False
1657 1661 else:
1658 1662 return None
1659 1663
1660 1664 def runcode(self,code_obj):
1661 1665 """Execute a code object.
1662 1666
1663 1667 When an exception occurs, self.showtraceback() is called to display a
1664 1668 traceback.
1665 1669
1666 1670 Return value: a flag indicating whether the code to be run completed
1667 1671 successfully:
1668 1672
1669 1673 - 0: successful execution.
1670 1674 - 1: an error occurred.
1671 1675 """
1672 1676
1673 1677 # Set our own excepthook in case the user code tries to call it
1674 1678 # directly, so that the IPython crash handler doesn't get triggered
1675 1679 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1676 1680
1677 1681 # we save the original sys.excepthook in the instance, in case config
1678 1682 # code (such as magics) needs access to it.
1679 1683 self.sys_excepthook = old_excepthook
1680 1684 outflag = 1 # happens in more places, so it's easier as default
1681 1685 try:
1682 1686 try:
1683 1687 # Embedded instances require separate global/local namespaces
1684 1688 # so they can see both the surrounding (local) namespace and
1685 1689 # the module-level globals when called inside another function.
1686 1690 if self.embedded:
1687 1691 exec code_obj in self.user_global_ns, self.user_ns
1688 1692 # Normal (non-embedded) instances should only have a single
1689 1693 # namespace for user code execution, otherwise functions won't
1690 1694 # see interactive top-level globals.
1691 1695 else:
1692 1696 exec code_obj in self.user_ns
1693 1697 finally:
1694 1698 # Reset our crash handler in place
1695 1699 sys.excepthook = old_excepthook
1696 1700 except SystemExit:
1697 1701 self.resetbuffer()
1698 1702 self.showtraceback()
1699 1703 warn("Type exit or quit to exit IPython "
1700 1704 "(%Exit or %Quit do so unconditionally).",level=1)
1701 1705 except self.custom_exceptions:
1702 1706 etype,value,tb = sys.exc_info()
1703 1707 self.CustomTB(etype,value,tb)
1704 1708 except:
1705 1709 self.showtraceback()
1706 1710 else:
1707 1711 outflag = 0
1708 1712 if softspace(sys.stdout, 0):
1709 1713 print
1710 1714 # Flush out code object which has been run (and source)
1711 1715 self.code_to_run = None
1712 1716 return outflag
1713 1717
1714 1718 def push(self, line):
1715 1719 """Push a line to the interpreter.
1716 1720
1717 1721 The line should not have a trailing newline; it may have
1718 1722 internal newlines. The line is appended to a buffer and the
1719 1723 interpreter's runsource() method is called with the
1720 1724 concatenated contents of the buffer as source. If this
1721 1725 indicates that the command was executed or invalid, the buffer
1722 1726 is reset; otherwise, the command is incomplete, and the buffer
1723 1727 is left as it was after the line was appended. The return
1724 1728 value is 1 if more input is required, 0 if the line was dealt
1725 1729 with in some way (this is the same as runsource()).
1726 1730 """
1727 1731
1728 1732 # autoindent management should be done here, and not in the
1729 1733 # interactive loop, since that one is only seen by keyboard input. We
1730 1734 # need this done correctly even for code run via runlines (which uses
1731 1735 # push).
1732 1736
1733 1737 #print 'push line: <%s>' % line # dbg
1734 1738 self.autoindent_update(line)
1735 1739
1736 1740 self.buffer.append(line)
1737 1741 more = self.runsource('\n'.join(self.buffer), self.filename)
1738 1742 if not more:
1739 1743 self.resetbuffer()
1740 1744 return more
1741 1745
1742 1746 def resetbuffer(self):
1743 1747 """Reset the input buffer."""
1744 1748 self.buffer[:] = []
1745 1749
1746 1750 def raw_input(self,prompt='',continue_prompt=False):
1747 1751 """Write a prompt and read a line.
1748 1752
1749 1753 The returned line does not include the trailing newline.
1750 1754 When the user enters the EOF key sequence, EOFError is raised.
1751 1755
1752 1756 Optional inputs:
1753 1757
1754 1758 - prompt(''): a string to be printed to prompt the user.
1755 1759
1756 1760 - continue_prompt(False): whether this line is the first one or a
1757 1761 continuation in a sequence of inputs.
1758 1762 """
1759 1763
1760 1764 line = raw_input_original(prompt)
1761 1765 # Try to be reasonably smart about not re-indenting pasted input more
1762 1766 # than necessary. We do this by trimming out the auto-indent initial
1763 1767 # spaces, if the user's actual input started itself with whitespace.
1764 1768 #debugx('self.buffer[-1]')
1765 1769
1766 1770 if self.autoindent:
1767 1771 if num_ini_spaces(line) > self.indent_current_nsp:
1768 1772 line = line[self.indent_current_nsp:]
1769 1773 self.indent_current_nsp = 0
1770 1774
1771 1775 # store the unfiltered input before the user has any chance to modify
1772 1776 # it.
1773 1777 if line.strip():
1774 1778 if continue_prompt:
1775 1779 self.input_hist_raw[-1] += '%s\n' % line
1776 1780 else:
1777 1781 self.input_hist_raw.append('%s\n' % line)
1778 1782
1779 1783 lineout = self.prefilter(line,continue_prompt)
1780 1784 return lineout
1781 1785
1782 1786 def split_user_input(self,line):
1783 1787 """Split user input into pre-char, function part and rest."""
1784 1788
1785 1789 lsplit = self.line_split.match(line)
1786 1790 if lsplit is None: # no regexp match returns None
1787 1791 try:
1788 1792 iFun,theRest = line.split(None,1)
1789 1793 except ValueError:
1790 1794 iFun,theRest = line,''
1791 1795 pre = re.match('^(\s*)(.*)',line).groups()[0]
1792 1796 else:
1793 1797 pre,iFun,theRest = lsplit.groups()
1794 1798
1795 1799 #print 'line:<%s>' % line # dbg
1796 1800 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1797 1801 return pre,iFun.strip(),theRest
1798 1802
1799 1803 def _prefilter(self, line, continue_prompt):
1800 1804 """Calls different preprocessors, depending on the form of line."""
1801 1805
1802 1806 # All handlers *must* return a value, even if it's blank ('').
1803 1807
1804 1808 # Lines are NOT logged here. Handlers should process the line as
1805 1809 # needed, update the cache AND log it (so that the input cache array
1806 1810 # stays synced).
1807 1811
1808 1812 # This function is _very_ delicate, and since it's also the one which
1809 1813 # determines IPython's response to user input, it must be as efficient
1810 1814 # as possible. For this reason it has _many_ returns in it, trying
1811 1815 # always to exit as quickly as it can figure out what it needs to do.
1812 1816
1813 1817 # This function is the main responsible for maintaining IPython's
1814 1818 # behavior respectful of Python's semantics. So be _very_ careful if
1815 1819 # making changes to anything here.
1816 1820
1817 1821 #.....................................................................
1818 1822 # Code begins
1819 1823
1820 1824 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1821 1825
1822 1826 # save the line away in case we crash, so the post-mortem handler can
1823 1827 # record it
1824 1828 self._last_input_line = line
1825 1829
1826 1830 #print '***line: <%s>' % line # dbg
1827 1831
1828 1832 # the input history needs to track even empty lines
1829 1833 stripped = line.strip()
1830 1834
1831 1835 if not stripped:
1832 1836 if not continue_prompt:
1833 1837 self.outputcache.prompt_count -= 1
1834 1838 return self.handle_normal(line,continue_prompt)
1835 1839 #return self.handle_normal('',continue_prompt)
1836 1840
1837 1841 # print '***cont',continue_prompt # dbg
1838 1842 # special handlers are only allowed for single line statements
1839 1843 if continue_prompt and not self.rc.multi_line_specials:
1840 1844 return self.handle_normal(line,continue_prompt)
1841 1845
1842 1846
1843 1847 # For the rest, we need the structure of the input
1844 1848 pre,iFun,theRest = self.split_user_input(line)
1845 1849
1846 1850 # See whether any pre-existing handler can take care of it
1847 1851
1848 1852 rewritten = self.hooks.input_prefilter(stripped)
1849 1853 if rewritten != stripped: # ok, some prefilter did something
1850 1854 rewritten = pre + rewritten # add indentation
1851 1855 return self.handle_normal(rewritten)
1852 1856
1853 1857
1854 1858
1855 1859
1856 1860 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1857 1861
1858 1862 # First check for explicit escapes in the last/first character
1859 1863 handler = None
1860 1864 if line[-1] == self.ESC_HELP:
1861 1865 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1862 1866 if handler is None:
1863 1867 # look at the first character of iFun, NOT of line, so we skip
1864 1868 # leading whitespace in multiline input
1865 1869 handler = self.esc_handlers.get(iFun[0:1])
1866 1870 if handler is not None:
1867 1871 return handler(line,continue_prompt,pre,iFun,theRest)
1868 1872 # Emacs ipython-mode tags certain input lines
1869 1873 if line.endswith('# PYTHON-MODE'):
1870 1874 return self.handle_emacs(line,continue_prompt)
1871 1875
1872 1876 # Next, check if we can automatically execute this thing
1873 1877
1874 1878 # Allow ! in multi-line statements if multi_line_specials is on:
1875 1879 if continue_prompt and self.rc.multi_line_specials and \
1876 1880 iFun.startswith(self.ESC_SHELL):
1877 1881 return self.handle_shell_escape(line,continue_prompt,
1878 1882 pre=pre,iFun=iFun,
1879 1883 theRest=theRest)
1880 1884
1881 1885 # Let's try to find if the input line is a magic fn
1882 1886 oinfo = None
1883 1887 if hasattr(self,'magic_'+iFun):
1884 1888 # WARNING: _ofind uses getattr(), so it can consume generators and
1885 1889 # cause other side effects.
1886 1890 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1887 1891 if oinfo['ismagic']:
1888 1892 # Be careful not to call magics when a variable assignment is
1889 1893 # being made (ls='hi', for example)
1890 1894 if self.rc.automagic and \
1891 1895 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1892 1896 (self.rc.multi_line_specials or not continue_prompt):
1893 1897 return self.handle_magic(line,continue_prompt,
1894 1898 pre,iFun,theRest)
1895 1899 else:
1896 1900 return self.handle_normal(line,continue_prompt)
1897 1901
1898 1902 # If the rest of the line begins with an (in)equality, assginment or
1899 1903 # function call, we should not call _ofind but simply execute it.
1900 1904 # This avoids spurious geattr() accesses on objects upon assignment.
1901 1905 #
1902 1906 # It also allows users to assign to either alias or magic names true
1903 1907 # python variables (the magic/alias systems always take second seat to
1904 1908 # true python code).
1905 1909 if theRest and theRest[0] in '!=()':
1906 1910 return self.handle_normal(line,continue_prompt)
1907 1911
1908 1912 if oinfo is None:
1909 1913 # let's try to ensure that _oinfo is ONLY called when autocall is
1910 1914 # on. Since it has inevitable potential side effects, at least
1911 1915 # having autocall off should be a guarantee to the user that no
1912 1916 # weird things will happen.
1913 1917
1914 1918 if self.rc.autocall:
1915 1919 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1916 1920 else:
1917 1921 # in this case, all that's left is either an alias or
1918 1922 # processing the line normally.
1919 1923 if iFun in self.alias_table:
1920 1924 return self.handle_alias(line,continue_prompt,
1921 1925 pre,iFun,theRest)
1922 1926
1923 1927 else:
1924 1928 return self.handle_normal(line,continue_prompt)
1925 1929
1926 1930 if not oinfo['found']:
1927 1931 return self.handle_normal(line,continue_prompt)
1928 1932 else:
1929 1933 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1930 1934 if oinfo['isalias']:
1931 1935 return self.handle_alias(line,continue_prompt,
1932 1936 pre,iFun,theRest)
1933 1937
1934 1938 if (self.rc.autocall
1935 1939 and
1936 1940 (
1937 1941 #only consider exclusion re if not "," or ";" autoquoting
1938 1942 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
1939 1943 or pre == self.ESC_PAREN) or
1940 1944 (not self.re_exclude_auto.match(theRest)))
1941 1945 and
1942 1946 self.re_fun_name.match(iFun) and
1943 1947 callable(oinfo['obj'])) :
1944 1948 #print 'going auto' # dbg
1945 1949 return self.handle_auto(line,continue_prompt,
1946 1950 pre,iFun,theRest,oinfo['obj'])
1947 1951 else:
1948 1952 #print 'was callable?', callable(oinfo['obj']) # dbg
1949 1953 return self.handle_normal(line,continue_prompt)
1950 1954
1951 1955 # If we get here, we have a normal Python line. Log and return.
1952 1956 return self.handle_normal(line,continue_prompt)
1953 1957
1954 1958 def _prefilter_dumb(self, line, continue_prompt):
1955 1959 """simple prefilter function, for debugging"""
1956 1960 return self.handle_normal(line,continue_prompt)
1957 1961
1958 1962 # Set the default prefilter() function (this can be user-overridden)
1959 1963 prefilter = _prefilter
1960 1964
1961 1965 def handle_normal(self,line,continue_prompt=None,
1962 1966 pre=None,iFun=None,theRest=None):
1963 1967 """Handle normal input lines. Use as a template for handlers."""
1964 1968
1965 1969 # With autoindent on, we need some way to exit the input loop, and I
1966 1970 # don't want to force the user to have to backspace all the way to
1967 1971 # clear the line. The rule will be in this case, that either two
1968 1972 # lines of pure whitespace in a row, or a line of pure whitespace but
1969 1973 # of a size different to the indent level, will exit the input loop.
1970 1974
1971 1975 if (continue_prompt and self.autoindent and line.isspace() and
1972 1976 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
1973 1977 (self.buffer[-1]).isspace() )):
1974 1978 line = ''
1975 1979
1976 1980 self.log(line,continue_prompt)
1977 1981 return line
1978 1982
1979 1983 def handle_alias(self,line,continue_prompt=None,
1980 1984 pre=None,iFun=None,theRest=None):
1981 1985 """Handle alias input lines. """
1982 1986
1983 1987 # pre is needed, because it carries the leading whitespace. Otherwise
1984 1988 # aliases won't work in indented sections.
1985 1989 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1986 1990 self.log(line_out,continue_prompt)
1987 1991 return line_out
1988 1992
1989 1993 def handle_shell_escape(self, line, continue_prompt=None,
1990 1994 pre=None,iFun=None,theRest=None):
1991 1995 """Execute the line in a shell, empty return value"""
1992 1996
1993 1997 #print 'line in :', `line` # dbg
1994 1998 # Example of a special handler. Others follow a similar pattern.
1995 1999 if line.lstrip().startswith('!!'):
1996 2000 # rewrite iFun/theRest to properly hold the call to %sx and
1997 2001 # the actual command to be executed, so handle_magic can work
1998 2002 # correctly
1999 2003 theRest = '%s %s' % (iFun[2:],theRest)
2000 2004 iFun = 'sx'
2001 2005 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2002 2006 line.lstrip()[2:]),
2003 2007 continue_prompt,pre,iFun,theRest)
2004 2008 else:
2005 2009 cmd=line.lstrip().lstrip('!')
2006 2010 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
2007 2011 # update cache/log and return
2008 2012 self.log(line_out,continue_prompt)
2009 2013 return line_out
2010 2014
2011 2015 def handle_magic(self, line, continue_prompt=None,
2012 2016 pre=None,iFun=None,theRest=None):
2013 2017 """Execute magic functions."""
2014 2018
2015 2019
2016 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2020 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2017 2021 self.log(cmd,continue_prompt)
2018 2022 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2019 2023 return cmd
2020 2024
2021 2025 def handle_auto(self, line, continue_prompt=None,
2022 2026 pre=None,iFun=None,theRest=None,obj=None):
2023 2027 """Hande lines which can be auto-executed, quoting if requested."""
2024 2028
2025 2029 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2026 2030
2027 2031 # This should only be active for single-line input!
2028 2032 if continue_prompt:
2029 2033 self.log(line,continue_prompt)
2030 2034 return line
2031 2035
2032 2036 auto_rewrite = True
2033 2037
2034 2038 if pre == self.ESC_QUOTE:
2035 2039 # Auto-quote splitting on whitespace
2036 2040 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2037 2041 elif pre == self.ESC_QUOTE2:
2038 2042 # Auto-quote whole string
2039 2043 newcmd = '%s("%s")' % (iFun,theRest)
2040 2044 elif pre == self.ESC_PAREN:
2041 2045 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2042 2046 else:
2043 2047 # Auto-paren.
2044 2048 # We only apply it to argument-less calls if the autocall
2045 2049 # parameter is set to 2. We only need to check that autocall is <
2046 2050 # 2, since this function isn't called unless it's at least 1.
2047 2051 if not theRest and (self.rc.autocall < 2):
2048 2052 newcmd = '%s %s' % (iFun,theRest)
2049 2053 auto_rewrite = False
2050 2054 else:
2051 2055 if theRest.startswith('['):
2052 2056 if hasattr(obj,'__getitem__'):
2053 2057 # Don't autocall in this case: item access for an object
2054 2058 # which is BOTH callable and implements __getitem__.
2055 2059 newcmd = '%s %s' % (iFun,theRest)
2056 2060 auto_rewrite = False
2057 2061 else:
2058 2062 # if the object doesn't support [] access, go ahead and
2059 2063 # autocall
2060 2064 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2061 2065 elif theRest.endswith(';'):
2062 2066 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2063 2067 else:
2064 2068 newcmd = '%s(%s)' % (iFun.rstrip(),",".join(theRest.split()))
2065 2069
2066 2070 if auto_rewrite:
2067 2071 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2068 2072 # log what is now valid Python, not the actual user input (without the
2069 2073 # final newline)
2070 2074 self.log(newcmd,continue_prompt)
2071 2075 return newcmd
2072 2076
2073 2077 def handle_help(self, line, continue_prompt=None,
2074 2078 pre=None,iFun=None,theRest=None):
2075 2079 """Try to get some help for the object.
2076 2080
2077 2081 obj? or ?obj -> basic information.
2078 2082 obj?? or ??obj -> more details.
2079 2083 """
2080 2084
2081 2085 # We need to make sure that we don't process lines which would be
2082 2086 # otherwise valid python, such as "x=1 # what?"
2083 2087 try:
2084 2088 codeop.compile_command(line)
2085 2089 except SyntaxError:
2086 2090 # We should only handle as help stuff which is NOT valid syntax
2087 2091 if line[0]==self.ESC_HELP:
2088 2092 line = line[1:]
2089 2093 elif line[-1]==self.ESC_HELP:
2090 2094 line = line[:-1]
2091 2095 self.log('#?'+line)
2092 2096 if line:
2093 2097 self.magic_pinfo(line)
2094 2098 else:
2095 2099 page(self.usage,screen_lines=self.rc.screen_length)
2096 2100 return '' # Empty string is needed here!
2097 2101 except:
2098 2102 # Pass any other exceptions through to the normal handler
2099 2103 return self.handle_normal(line,continue_prompt)
2100 2104 else:
2101 2105 # If the code compiles ok, we should handle it normally
2102 2106 return self.handle_normal(line,continue_prompt)
2103 2107
2104 2108 def getapi(self):
2105 2109 """ Get an IPApi object for this shell instance
2106 2110
2107 2111 Getting an IPApi object is always preferable to accessing the shell
2108 2112 directly, but this holds true especially for extensions.
2109 2113
2110 2114 It should always be possible to implement an extension with IPApi
2111 2115 alone. If not, contact maintainer to request an addition.
2112 2116
2113 2117 """
2114 2118 return self.api
2115 2119
2116 2120 def handle_emacs(self,line,continue_prompt=None,
2117 2121 pre=None,iFun=None,theRest=None):
2118 2122 """Handle input lines marked by python-mode."""
2119 2123
2120 2124 # Currently, nothing is done. Later more functionality can be added
2121 2125 # here if needed.
2122 2126
2123 2127 # The input cache shouldn't be updated
2124 2128
2125 2129 return line
2126 2130
2127 2131 def mktempfile(self,data=None):
2128 2132 """Make a new tempfile and return its filename.
2129 2133
2130 2134 This makes a call to tempfile.mktemp, but it registers the created
2131 2135 filename internally so ipython cleans it up at exit time.
2132 2136
2133 2137 Optional inputs:
2134 2138
2135 2139 - data(None): if data is given, it gets written out to the temp file
2136 2140 immediately, and the file is closed again."""
2137 2141
2138 2142 filename = tempfile.mktemp('.py','ipython_edit_')
2139 2143 self.tempfiles.append(filename)
2140 2144
2141 2145 if data:
2142 2146 tmp_file = open(filename,'w')
2143 2147 tmp_file.write(data)
2144 2148 tmp_file.close()
2145 2149 return filename
2146 2150
2147 2151 def write(self,data):
2148 2152 """Write a string to the default output"""
2149 2153 Term.cout.write(data)
2150 2154
2151 2155 def write_err(self,data):
2152 2156 """Write a string to the default error output"""
2153 2157 Term.cerr.write(data)
2154 2158
2155 2159 def exit(self):
2156 2160 """Handle interactive exit.
2157 2161
2158 2162 This method sets the exit_now attribute."""
2159 2163
2160 2164 if self.rc.confirm_exit:
2161 2165 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2162 2166 self.exit_now = True
2163 2167 else:
2164 2168 self.exit_now = True
2165 2169 return self.exit_now
2166 2170
2167 2171 def safe_execfile(self,fname,*where,**kw):
2168 2172 fname = os.path.expanduser(fname)
2169 2173
2170 2174 # find things also in current directory
2171 2175 dname = os.path.dirname(fname)
2172 2176 if not sys.path.count(dname):
2173 2177 sys.path.append(dname)
2174 2178
2175 2179 try:
2176 2180 xfile = open(fname)
2177 2181 except:
2178 2182 print >> Term.cerr, \
2179 2183 'Could not open file <%s> for safe execution.' % fname
2180 2184 return None
2181 2185
2182 2186 kw.setdefault('islog',0)
2183 2187 kw.setdefault('quiet',1)
2184 2188 kw.setdefault('exit_ignore',0)
2185 2189 first = xfile.readline()
2186 2190 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2187 2191 xfile.close()
2188 2192 # line by line execution
2189 2193 if first.startswith(loghead) or kw['islog']:
2190 2194 print 'Loading log file <%s> one line at a time...' % fname
2191 2195 if kw['quiet']:
2192 2196 stdout_save = sys.stdout
2193 2197 sys.stdout = StringIO.StringIO()
2194 2198 try:
2195 2199 globs,locs = where[0:2]
2196 2200 except:
2197 2201 try:
2198 2202 globs = locs = where[0]
2199 2203 except:
2200 2204 globs = locs = globals()
2201 2205 badblocks = []
2202 2206
2203 2207 # we also need to identify indented blocks of code when replaying
2204 2208 # logs and put them together before passing them to an exec
2205 2209 # statement. This takes a bit of regexp and look-ahead work in the
2206 2210 # file. It's easiest if we swallow the whole thing in memory
2207 2211 # first, and manually walk through the lines list moving the
2208 2212 # counter ourselves.
2209 2213 indent_re = re.compile('\s+\S')
2210 2214 xfile = open(fname)
2211 2215 filelines = xfile.readlines()
2212 2216 xfile.close()
2213 2217 nlines = len(filelines)
2214 2218 lnum = 0
2215 2219 while lnum < nlines:
2216 2220 line = filelines[lnum]
2217 2221 lnum += 1
2218 2222 # don't re-insert logger status info into cache
2219 2223 if line.startswith('#log#'):
2220 2224 continue
2221 2225 else:
2222 2226 # build a block of code (maybe a single line) for execution
2223 2227 block = line
2224 2228 try:
2225 2229 next = filelines[lnum] # lnum has already incremented
2226 2230 except:
2227 2231 next = None
2228 2232 while next and indent_re.match(next):
2229 2233 block += next
2230 2234 lnum += 1
2231 2235 try:
2232 2236 next = filelines[lnum]
2233 2237 except:
2234 2238 next = None
2235 2239 # now execute the block of one or more lines
2236 2240 try:
2237 2241 exec block in globs,locs
2238 2242 except SystemExit:
2239 2243 pass
2240 2244 except:
2241 2245 badblocks.append(block.rstrip())
2242 2246 if kw['quiet']: # restore stdout
2243 2247 sys.stdout.close()
2244 2248 sys.stdout = stdout_save
2245 2249 print 'Finished replaying log file <%s>' % fname
2246 2250 if badblocks:
2247 2251 print >> sys.stderr, ('\nThe following lines/blocks in file '
2248 2252 '<%s> reported errors:' % fname)
2249 2253
2250 2254 for badline in badblocks:
2251 2255 print >> sys.stderr, badline
2252 2256 else: # regular file execution
2253 2257 try:
2254 2258 execfile(fname,*where)
2255 2259 except SyntaxError:
2256 2260 etype,evalue = sys.exc_info()[:2]
2257 2261 self.SyntaxTB(etype,evalue,[])
2258 2262 warn('Failure executing file: <%s>' % fname)
2259 2263 except SystemExit,status:
2260 2264 if not kw['exit_ignore']:
2261 2265 self.InteractiveTB()
2262 2266 warn('Failure executing file: <%s>' % fname)
2263 2267 except:
2264 2268 self.InteractiveTB()
2265 2269 warn('Failure executing file: <%s>' % fname)
2266 2270
2267 2271 #************************* end of file <iplib.py> *****************************
@@ -1,5106 +1,5116 b''
1 1 2006-01-27 Ville Vainio <vivainio@gmail.com>
2 2
3 * iplib.py: Expose ipapi as _ip in builtin namespace.
4 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
5 and ip_set_hook (-> _ip.set_hook) redundant. % and !
6 syntax now produce _ip.* variant of the commands.
7
8 * "_ip.options().autoedit_syntax = 2" automatically throws
9 user to editor for syntax error correction without prompting.
10
11 2006-01-27 Ville Vainio <vivainio@gmail.com>
12
3 13 * ipmaker.py: Give "realistic" sys.argv for scripts (without
4 14 'ipython' at argv[0]) executed through command line.
5 15 NOTE: this DEPRECATES calling ipython with multiple scripts
6 16 ("ipython a.py b.py c.py")
7 17
8 18 * iplib.py, hooks.py: Added configurable input prefilter,
9 19 named 'input_prefilter'. See ext_rescapture.py for example
10 20 usage.
11 21
12 22 * ext_rescapture.py, Magic.py: Better system command output capture
13 23 through 'var = !ls' (deprecates user-visible %sc). Same notation
14 24 applies for magics, 'var = %alias' assigns alias list to var.
15 25
16 26 * ipapi.py: added meta() for accessing extension-usable data store.
17 27
18 28 * iplib.py: added InteractiveShell.getapi(). New magics should be
19 29 written doing self.getapi() instead of using the shell directly.
20 30
21 31 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
22 32 %store foo >> ~/myfoo.txt to store variables to files (in clean
23 33 textual form, not a restorable pickle).
24 34
25 35 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
26 36
27 37 * usage.py, Magic.py: added %quickref
28 38
29 39 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
30 40
31 41 * GetoptErrors when invoking magics etc. with wrong args
32 42 are now more helpful:
33 43 GetoptError: option -l not recognized (allowed: "qb" )
34 44
35 45 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
36 46
37 47 * IPython/demo.py (Demo.show): Flush stdout after each block, so
38 48 computationally intensive blocks don't appear to stall the demo.
39 49
40 50 2006-01-24 Ville Vainio <vivainio@gmail.com>
41 51
42 52 * iplib.py, hooks.py: 'result_display' hook can return a non-None
43 53 value to manipulate resulting history entry.
44 54
45 55 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
46 56 to instance methods of IPApi class, to make extending an embedded
47 57 IPython feasible. See ext_rehashdir.py for example usage.
48 58
49 59 * Merged 1071-1076 from banches/0.7.1
50 60
51 61
52 62 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
53 63
54 64 * tools/release (daystamp): Fix build tools to use the new
55 65 eggsetup.py script to build lightweight eggs.
56 66
57 67 * Applied changesets 1062 and 1064 before 0.7.1 release.
58 68
59 69 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
60 70 see the raw input history (without conversions like %ls ->
61 71 ipmagic("ls")). After a request from W. Stein, SAGE
62 72 (http://modular.ucsd.edu/sage) developer. This information is
63 73 stored in the input_hist_raw attribute of the IPython instance, so
64 74 developers can access it if needed (it's an InputList instance).
65 75
66 76 * Versionstring = 0.7.2.svn
67 77
68 78 * eggsetup.py: A separate script for constructing eggs, creates
69 79 proper launch scripts even on Windows (an .exe file in
70 80 \python24\scripts).
71 81
72 82 * ipapi.py: launch_new_instance, launch entry point needed for the
73 83 egg.
74 84
75 85 2006-01-23 Ville Vainio <vivainio@gmail.com>
76 86
77 87 * Added %cpaste magic for pasting python code
78 88
79 89 2006-01-22 Ville Vainio <vivainio@gmail.com>
80 90
81 91 * Merge from branches/0.7.1 into trunk, revs 1052-1057
82 92
83 93 * Versionstring = 0.7.2.svn
84 94
85 95 * eggsetup.py: A separate script for constructing eggs, creates
86 96 proper launch scripts even on Windows (an .exe file in
87 97 \python24\scripts).
88 98
89 99 * ipapi.py: launch_new_instance, launch entry point needed for the
90 100 egg.
91 101
92 102 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
93 103
94 104 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
95 105 %pfile foo would print the file for foo even if it was a binary.
96 106 Now, extensions '.so' and '.dll' are skipped.
97 107
98 108 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
99 109 bug, where macros would fail in all threaded modes. I'm not 100%
100 110 sure, so I'm going to put out an rc instead of making a release
101 111 today, and wait for feedback for at least a few days.
102 112
103 113 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
104 114 it...) the handling of pasting external code with autoindent on.
105 115 To get out of a multiline input, the rule will appear for most
106 116 users unchanged: two blank lines or change the indent level
107 117 proposed by IPython. But there is a twist now: you can
108 118 add/subtract only *one or two spaces*. If you add/subtract three
109 119 or more (unless you completely delete the line), IPython will
110 120 accept that line, and you'll need to enter a second one of pure
111 121 whitespace. I know it sounds complicated, but I can't find a
112 122 different solution that covers all the cases, with the right
113 123 heuristics. Hopefully in actual use, nobody will really notice
114 124 all these strange rules and things will 'just work'.
115 125
116 126 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
117 127
118 128 * IPython/iplib.py (interact): catch exceptions which can be
119 129 triggered asynchronously by signal handlers. Thanks to an
120 130 automatic crash report, submitted by Colin Kingsley
121 131 <tercel-AT-gentoo.org>.
122 132
123 133 2006-01-20 Ville Vainio <vivainio@gmail.com>
124 134
125 135 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
126 136 (%rehashdir, very useful, try it out) of how to extend ipython
127 137 with new magics. Also added Extensions dir to pythonpath to make
128 138 importing extensions easy.
129 139
130 140 * %store now complains when trying to store interactively declared
131 141 classes / instances of those classes.
132 142
133 143 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
134 144 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
135 145 if they exist, and ipy_user_conf.py with some defaults is created for
136 146 the user.
137 147
138 148 * Startup rehashing done by the config file, not InterpreterExec.
139 149 This means system commands are available even without selecting the
140 150 pysh profile. It's the sensible default after all.
141 151
142 152 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
143 153
144 154 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
145 155 multiline code with autoindent on working. But I am really not
146 156 sure, so this needs more testing. Will commit a debug-enabled
147 157 version for now, while I test it some more, so that Ville and
148 158 others may also catch any problems. Also made
149 159 self.indent_current_str() a method, to ensure that there's no
150 160 chance of the indent space count and the corresponding string
151 161 falling out of sync. All code needing the string should just call
152 162 the method.
153 163
154 164 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
155 165
156 166 * IPython/Magic.py (magic_edit): fix check for when users don't
157 167 save their output files, the try/except was in the wrong section.
158 168
159 169 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
160 170
161 171 * IPython/Magic.py (magic_run): fix __file__ global missing from
162 172 script's namespace when executed via %run. After a report by
163 173 Vivian.
164 174
165 175 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
166 176 when using python 2.4. The parent constructor changed in 2.4, and
167 177 we need to track it directly (we can't call it, as it messes up
168 178 readline and tab-completion inside our pdb would stop working).
169 179 After a bug report by R. Bernstein <rocky-AT-panix.com>.
170 180
171 181 2006-01-16 Ville Vainio <vivainio@gmail.com>
172 182
173 183 * Ipython/magic.py:Reverted back to old %edit functionality
174 184 that returns file contents on exit.
175 185
176 186 * IPython/path.py: Added Jason Orendorff's "path" module to
177 187 IPython tree, http://www.jorendorff.com/articles/python/path/.
178 188 You can get path objects conveniently through %sc, and !!, e.g.:
179 189 sc files=ls
180 190 for p in files.paths: # or files.p
181 191 print p,p.mtime
182 192
183 193 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
184 194 now work again without considering the exclusion regexp -
185 195 hence, things like ',foo my/path' turn to 'foo("my/path")'
186 196 instead of syntax error.
187 197
188 198
189 199 2006-01-14 Ville Vainio <vivainio@gmail.com>
190 200
191 201 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
192 202 ipapi decorators for python 2.4 users, options() provides access to rc
193 203 data.
194 204
195 205 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
196 206 as path separators (even on Linux ;-). Space character after
197 207 backslash (as yielded by tab completer) is still space;
198 208 "%cd long\ name" works as expected.
199 209
200 210 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
201 211 as "chain of command", with priority. API stays the same,
202 212 TryNext exception raised by a hook function signals that
203 213 current hook failed and next hook should try handling it, as
204 214 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
205 215 requested configurable display hook, which is now implemented.
206 216
207 217 2006-01-13 Ville Vainio <vivainio@gmail.com>
208 218
209 219 * IPython/platutils*.py: platform specific utility functions,
210 220 so far only set_term_title is implemented (change terminal
211 221 label in windowing systems). %cd now changes the title to
212 222 current dir.
213 223
214 224 * IPython/Release.py: Added myself to "authors" list,
215 225 had to create new files.
216 226
217 227 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
218 228 shell escape; not a known bug but had potential to be one in the
219 229 future.
220 230
221 231 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
222 232 extension API for IPython! See the module for usage example. Fix
223 233 OInspect for docstring-less magic functions.
224 234
225 235
226 236 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
227 237
228 238 * IPython/iplib.py (raw_input): temporarily deactivate all
229 239 attempts at allowing pasting of code with autoindent on. It
230 240 introduced bugs (reported by Prabhu) and I can't seem to find a
231 241 robust combination which works in all cases. Will have to revisit
232 242 later.
233 243
234 244 * IPython/genutils.py: remove isspace() function. We've dropped
235 245 2.2 compatibility, so it's OK to use the string method.
236 246
237 247 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
238 248
239 249 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
240 250 matching what NOT to autocall on, to include all python binary
241 251 operators (including things like 'and', 'or', 'is' and 'in').
242 252 Prompted by a bug report on 'foo & bar', but I realized we had
243 253 many more potential bug cases with other operators. The regexp is
244 254 self.re_exclude_auto, it's fairly commented.
245 255
246 256 2006-01-12 Ville Vainio <vivainio@gmail.com>
247 257
248 258 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
249 259 Prettified and hardened string/backslash quoting with ipsystem(),
250 260 ipalias() and ipmagic(). Now even \ characters are passed to
251 261 %magics, !shell escapes and aliases exactly as they are in the
252 262 ipython command line. Should improve backslash experience,
253 263 particularly in Windows (path delimiter for some commands that
254 264 won't understand '/'), but Unix benefits as well (regexps). %cd
255 265 magic still doesn't support backslash path delimiters, though. Also
256 266 deleted all pretense of supporting multiline command strings in
257 267 !system or %magic commands. Thanks to Jerry McRae for suggestions.
258 268
259 269 * doc/build_doc_instructions.txt added. Documentation on how to
260 270 use doc/update_manual.py, added yesterday. Both files contributed
261 271 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
262 272 doc/*.sh for deprecation at a later date.
263 273
264 274 * /ipython.py Added ipython.py to root directory for
265 275 zero-installation (tar xzvf ipython.tgz; cd ipython; python
266 276 ipython.py) and development convenience (no need to kee doing
267 277 "setup.py install" between changes).
268 278
269 279 * Made ! and !! shell escapes work (again) in multiline expressions:
270 280 if 1:
271 281 !ls
272 282 !!ls
273 283
274 284 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
275 285
276 286 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
277 287 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
278 288 module in case-insensitive installation. Was causing crashes
279 289 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
280 290
281 291 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
282 292 <marienz-AT-gentoo.org>, closes
283 293 http://www.scipy.net/roundup/ipython/issue51.
284 294
285 295 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
286 296
287 297 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
288 298 problem of excessive CPU usage under *nix and keyboard lag under
289 299 win32.
290 300
291 301 2006-01-10 *** Released version 0.7.0
292 302
293 303 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
294 304
295 305 * IPython/Release.py (revision): tag version number to 0.7.0,
296 306 ready for release.
297 307
298 308 * IPython/Magic.py (magic_edit): Add print statement to %edit so
299 309 it informs the user of the name of the temp. file used. This can
300 310 help if you decide later to reuse that same file, so you know
301 311 where to copy the info from.
302 312
303 313 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
304 314
305 315 * setup_bdist_egg.py: little script to build an egg. Added
306 316 support in the release tools as well.
307 317
308 318 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
309 319
310 320 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
311 321 version selection (new -wxversion command line and ipythonrc
312 322 parameter). Patch contributed by Arnd Baecker
313 323 <arnd.baecker-AT-web.de>.
314 324
315 325 * IPython/iplib.py (embed_mainloop): fix tab-completion in
316 326 embedded instances, for variables defined at the interactive
317 327 prompt of the embedded ipython. Reported by Arnd.
318 328
319 329 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
320 330 it can be used as a (stateful) toggle, or with a direct parameter.
321 331
322 332 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
323 333 could be triggered in certain cases and cause the traceback
324 334 printer not to work.
325 335
326 336 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
327 337
328 338 * IPython/iplib.py (_should_recompile): Small fix, closes
329 339 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
330 340
331 341 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
332 342
333 343 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
334 344 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
335 345 Moad for help with tracking it down.
336 346
337 347 * IPython/iplib.py (handle_auto): fix autocall handling for
338 348 objects which support BOTH __getitem__ and __call__ (so that f [x]
339 349 is left alone, instead of becoming f([x]) automatically).
340 350
341 351 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
342 352 Ville's patch.
343 353
344 354 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
345 355
346 356 * IPython/iplib.py (handle_auto): changed autocall semantics to
347 357 include 'smart' mode, where the autocall transformation is NOT
348 358 applied if there are no arguments on the line. This allows you to
349 359 just type 'foo' if foo is a callable to see its internal form,
350 360 instead of having it called with no arguments (typically a
351 361 mistake). The old 'full' autocall still exists: for that, you
352 362 need to set the 'autocall' parameter to 2 in your ipythonrc file.
353 363
354 364 * IPython/completer.py (Completer.attr_matches): add
355 365 tab-completion support for Enthoughts' traits. After a report by
356 366 Arnd and a patch by Prabhu.
357 367
358 368 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
359 369
360 370 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
361 371 Schmolck's patch to fix inspect.getinnerframes().
362 372
363 373 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
364 374 for embedded instances, regarding handling of namespaces and items
365 375 added to the __builtin__ one. Multiple embedded instances and
366 376 recursive embeddings should work better now (though I'm not sure
367 377 I've got all the corner cases fixed, that code is a bit of a brain
368 378 twister).
369 379
370 380 * IPython/Magic.py (magic_edit): added support to edit in-memory
371 381 macros (automatically creates the necessary temp files). %edit
372 382 also doesn't return the file contents anymore, it's just noise.
373 383
374 384 * IPython/completer.py (Completer.attr_matches): revert change to
375 385 complete only on attributes listed in __all__. I realized it
376 386 cripples the tab-completion system as a tool for exploring the
377 387 internals of unknown libraries (it renders any non-__all__
378 388 attribute off-limits). I got bit by this when trying to see
379 389 something inside the dis module.
380 390
381 391 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
382 392
383 393 * IPython/iplib.py (InteractiveShell.__init__): add .meta
384 394 namespace for users and extension writers to hold data in. This
385 395 follows the discussion in
386 396 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
387 397
388 398 * IPython/completer.py (IPCompleter.complete): small patch to help
389 399 tab-completion under Emacs, after a suggestion by John Barnard
390 400 <barnarj-AT-ccf.org>.
391 401
392 402 * IPython/Magic.py (Magic.extract_input_slices): added support for
393 403 the slice notation in magics to use N-M to represent numbers N...M
394 404 (closed endpoints). This is used by %macro and %save.
395 405
396 406 * IPython/completer.py (Completer.attr_matches): for modules which
397 407 define __all__, complete only on those. After a patch by Jeffrey
398 408 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
399 409 speed up this routine.
400 410
401 411 * IPython/Logger.py (Logger.log): fix a history handling bug. I
402 412 don't know if this is the end of it, but the behavior now is
403 413 certainly much more correct. Note that coupled with macros,
404 414 slightly surprising (at first) behavior may occur: a macro will in
405 415 general expand to multiple lines of input, so upon exiting, the
406 416 in/out counters will both be bumped by the corresponding amount
407 417 (as if the macro's contents had been typed interactively). Typing
408 418 %hist will reveal the intermediate (silently processed) lines.
409 419
410 420 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
411 421 pickle to fail (%run was overwriting __main__ and not restoring
412 422 it, but pickle relies on __main__ to operate).
413 423
414 424 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
415 425 using properties, but forgot to make the main InteractiveShell
416 426 class a new-style class. Properties fail silently, and
417 427 misteriously, with old-style class (getters work, but
418 428 setters don't do anything).
419 429
420 430 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
421 431
422 432 * IPython/Magic.py (magic_history): fix history reporting bug (I
423 433 know some nasties are still there, I just can't seem to find a
424 434 reproducible test case to track them down; the input history is
425 435 falling out of sync...)
426 436
427 437 * IPython/iplib.py (handle_shell_escape): fix bug where both
428 438 aliases and system accesses where broken for indented code (such
429 439 as loops).
430 440
431 441 * IPython/genutils.py (shell): fix small but critical bug for
432 442 win32 system access.
433 443
434 444 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
435 445
436 446 * IPython/iplib.py (showtraceback): remove use of the
437 447 sys.last_{type/value/traceback} structures, which are non
438 448 thread-safe.
439 449 (_prefilter): change control flow to ensure that we NEVER
440 450 introspect objects when autocall is off. This will guarantee that
441 451 having an input line of the form 'x.y', where access to attribute
442 452 'y' has side effects, doesn't trigger the side effect TWICE. It
443 453 is important to note that, with autocall on, these side effects
444 454 can still happen.
445 455 (ipsystem): new builtin, to complete the ip{magic/alias/system}
446 456 trio. IPython offers these three kinds of special calls which are
447 457 not python code, and it's a good thing to have their call method
448 458 be accessible as pure python functions (not just special syntax at
449 459 the command line). It gives us a better internal implementation
450 460 structure, as well as exposing these for user scripting more
451 461 cleanly.
452 462
453 463 * IPython/macro.py (Macro.__init__): moved macros to a standalone
454 464 file. Now that they'll be more likely to be used with the
455 465 persistance system (%store), I want to make sure their module path
456 466 doesn't change in the future, so that we don't break things for
457 467 users' persisted data.
458 468
459 469 * IPython/iplib.py (autoindent_update): move indentation
460 470 management into the _text_ processing loop, not the keyboard
461 471 interactive one. This is necessary to correctly process non-typed
462 472 multiline input (such as macros).
463 473
464 474 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
465 475 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
466 476 which was producing problems in the resulting manual.
467 477 (magic_whos): improve reporting of instances (show their class,
468 478 instead of simply printing 'instance' which isn't terribly
469 479 informative).
470 480
471 481 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
472 482 (minor mods) to support network shares under win32.
473 483
474 484 * IPython/winconsole.py (get_console_size): add new winconsole
475 485 module and fixes to page_dumb() to improve its behavior under
476 486 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
477 487
478 488 * IPython/Magic.py (Macro): simplified Macro class to just
479 489 subclass list. We've had only 2.2 compatibility for a very long
480 490 time, yet I was still avoiding subclassing the builtin types. No
481 491 more (I'm also starting to use properties, though I won't shift to
482 492 2.3-specific features quite yet).
483 493 (magic_store): added Ville's patch for lightweight variable
484 494 persistence, after a request on the user list by Matt Wilkie
485 495 <maphew-AT-gmail.com>. The new %store magic's docstring has full
486 496 details.
487 497
488 498 * IPython/iplib.py (InteractiveShell.post_config_initialization):
489 499 changed the default logfile name from 'ipython.log' to
490 500 'ipython_log.py'. These logs are real python files, and now that
491 501 we have much better multiline support, people are more likely to
492 502 want to use them as such. Might as well name them correctly.
493 503
494 504 * IPython/Magic.py: substantial cleanup. While we can't stop
495 505 using magics as mixins, due to the existing customizations 'out
496 506 there' which rely on the mixin naming conventions, at least I
497 507 cleaned out all cross-class name usage. So once we are OK with
498 508 breaking compatibility, the two systems can be separated.
499 509
500 510 * IPython/Logger.py: major cleanup. This one is NOT a mixin
501 511 anymore, and the class is a fair bit less hideous as well. New
502 512 features were also introduced: timestamping of input, and logging
503 513 of output results. These are user-visible with the -t and -o
504 514 options to %logstart. Closes
505 515 http://www.scipy.net/roundup/ipython/issue11 and a request by
506 516 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
507 517
508 518 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
509 519
510 520 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
511 521 better hadnle backslashes in paths. See the thread 'More Windows
512 522 questions part 2 - \/ characters revisited' on the iypthon user
513 523 list:
514 524 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
515 525
516 526 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
517 527
518 528 (InteractiveShell.__init__): change threaded shells to not use the
519 529 ipython crash handler. This was causing more problems than not,
520 530 as exceptions in the main thread (GUI code, typically) would
521 531 always show up as a 'crash', when they really weren't.
522 532
523 533 The colors and exception mode commands (%colors/%xmode) have been
524 534 synchronized to also take this into account, so users can get
525 535 verbose exceptions for their threaded code as well. I also added
526 536 support for activating pdb inside this exception handler as well,
527 537 so now GUI authors can use IPython's enhanced pdb at runtime.
528 538
529 539 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
530 540 true by default, and add it to the shipped ipythonrc file. Since
531 541 this asks the user before proceeding, I think it's OK to make it
532 542 true by default.
533 543
534 544 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
535 545 of the previous special-casing of input in the eval loop. I think
536 546 this is cleaner, as they really are commands and shouldn't have
537 547 a special role in the middle of the core code.
538 548
539 549 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
540 550
541 551 * IPython/iplib.py (edit_syntax_error): added support for
542 552 automatically reopening the editor if the file had a syntax error
543 553 in it. Thanks to scottt who provided the patch at:
544 554 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
545 555 version committed).
546 556
547 557 * IPython/iplib.py (handle_normal): add suport for multi-line
548 558 input with emtpy lines. This fixes
549 559 http://www.scipy.net/roundup/ipython/issue43 and a similar
550 560 discussion on the user list.
551 561
552 562 WARNING: a behavior change is necessarily introduced to support
553 563 blank lines: now a single blank line with whitespace does NOT
554 564 break the input loop, which means that when autoindent is on, by
555 565 default hitting return on the next (indented) line does NOT exit.
556 566
557 567 Instead, to exit a multiline input you can either have:
558 568
559 569 - TWO whitespace lines (just hit return again), or
560 570 - a single whitespace line of a different length than provided
561 571 by the autoindent (add or remove a space).
562 572
563 573 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
564 574 module to better organize all readline-related functionality.
565 575 I've deleted FlexCompleter and put all completion clases here.
566 576
567 577 * IPython/iplib.py (raw_input): improve indentation management.
568 578 It is now possible to paste indented code with autoindent on, and
569 579 the code is interpreted correctly (though it still looks bad on
570 580 screen, due to the line-oriented nature of ipython).
571 581 (MagicCompleter.complete): change behavior so that a TAB key on an
572 582 otherwise empty line actually inserts a tab, instead of completing
573 583 on the entire global namespace. This makes it easier to use the
574 584 TAB key for indentation. After a request by Hans Meine
575 585 <hans_meine-AT-gmx.net>
576 586 (_prefilter): add support so that typing plain 'exit' or 'quit'
577 587 does a sensible thing. Originally I tried to deviate as little as
578 588 possible from the default python behavior, but even that one may
579 589 change in this direction (thread on python-dev to that effect).
580 590 Regardless, ipython should do the right thing even if CPython's
581 591 '>>>' prompt doesn't.
582 592 (InteractiveShell): removed subclassing code.InteractiveConsole
583 593 class. By now we'd overridden just about all of its methods: I've
584 594 copied the remaining two over, and now ipython is a standalone
585 595 class. This will provide a clearer picture for the chainsaw
586 596 branch refactoring.
587 597
588 598 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
589 599
590 600 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
591 601 failures for objects which break when dir() is called on them.
592 602
593 603 * IPython/FlexCompleter.py (Completer.__init__): Added support for
594 604 distinct local and global namespaces in the completer API. This
595 605 change allows us top properly handle completion with distinct
596 606 scopes, including in embedded instances (this had never really
597 607 worked correctly).
598 608
599 609 Note: this introduces a change in the constructor for
600 610 MagicCompleter, as a new global_namespace parameter is now the
601 611 second argument (the others were bumped one position).
602 612
603 613 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
604 614
605 615 * IPython/iplib.py (embed_mainloop): fix tab-completion in
606 616 embedded instances (which can be done now thanks to Vivian's
607 617 frame-handling fixes for pdb).
608 618 (InteractiveShell.__init__): Fix namespace handling problem in
609 619 embedded instances. We were overwriting __main__ unconditionally,
610 620 and this should only be done for 'full' (non-embedded) IPython;
611 621 embedded instances must respect the caller's __main__. Thanks to
612 622 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
613 623
614 624 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
615 625
616 626 * setup.py: added download_url to setup(). This registers the
617 627 download address at PyPI, which is not only useful to humans
618 628 browsing the site, but is also picked up by setuptools (the Eggs
619 629 machinery). Thanks to Ville and R. Kern for the info/discussion
620 630 on this.
621 631
622 632 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
623 633
624 634 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
625 635 This brings a lot of nice functionality to the pdb mode, which now
626 636 has tab-completion, syntax highlighting, and better stack handling
627 637 than before. Many thanks to Vivian De Smedt
628 638 <vivian-AT-vdesmedt.com> for the original patches.
629 639
630 640 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
631 641
632 642 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
633 643 sequence to consistently accept the banner argument. The
634 644 inconsistency was tripping SAGE, thanks to Gary Zablackis
635 645 <gzabl-AT-yahoo.com> for the report.
636 646
637 647 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
638 648
639 649 * IPython/iplib.py (InteractiveShell.post_config_initialization):
640 650 Fix bug where a naked 'alias' call in the ipythonrc file would
641 651 cause a crash. Bug reported by Jorgen Stenarson.
642 652
643 653 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
644 654
645 655 * IPython/ipmaker.py (make_IPython): cleanups which should improve
646 656 startup time.
647 657
648 658 * IPython/iplib.py (runcode): my globals 'fix' for embedded
649 659 instances had introduced a bug with globals in normal code. Now
650 660 it's working in all cases.
651 661
652 662 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
653 663 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
654 664 has been introduced to set the default case sensitivity of the
655 665 searches. Users can still select either mode at runtime on a
656 666 per-search basis.
657 667
658 668 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
659 669
660 670 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
661 671 attributes in wildcard searches for subclasses. Modified version
662 672 of a patch by Jorgen.
663 673
664 674 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
665 675
666 676 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
667 677 embedded instances. I added a user_global_ns attribute to the
668 678 InteractiveShell class to handle this.
669 679
670 680 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
671 681
672 682 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
673 683 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
674 684 (reported under win32, but may happen also in other platforms).
675 685 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
676 686
677 687 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
678 688
679 689 * IPython/Magic.py (magic_psearch): new support for wildcard
680 690 patterns. Now, typing ?a*b will list all names which begin with a
681 691 and end in b, for example. The %psearch magic has full
682 692 docstrings. Many thanks to Jörgen Stenarson
683 693 <jorgen.stenarson-AT-bostream.nu>, author of the patches
684 694 implementing this functionality.
685 695
686 696 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
687 697
688 698 * Manual: fixed long-standing annoyance of double-dashes (as in
689 699 --prefix=~, for example) being stripped in the HTML version. This
690 700 is a latex2html bug, but a workaround was provided. Many thanks
691 701 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
692 702 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
693 703 rolling. This seemingly small issue had tripped a number of users
694 704 when first installing, so I'm glad to see it gone.
695 705
696 706 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
697 707
698 708 * IPython/Extensions/numeric_formats.py: fix missing import,
699 709 reported by Stephen Walton.
700 710
701 711 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
702 712
703 713 * IPython/demo.py: finish demo module, fully documented now.
704 714
705 715 * IPython/genutils.py (file_read): simple little utility to read a
706 716 file and ensure it's closed afterwards.
707 717
708 718 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
709 719
710 720 * IPython/demo.py (Demo.__init__): added support for individually
711 721 tagging blocks for automatic execution.
712 722
713 723 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
714 724 syntax-highlighted python sources, requested by John.
715 725
716 726 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
717 727
718 728 * IPython/demo.py (Demo.again): fix bug where again() blocks after
719 729 finishing.
720 730
721 731 * IPython/genutils.py (shlex_split): moved from Magic to here,
722 732 where all 2.2 compatibility stuff lives. I needed it for demo.py.
723 733
724 734 * IPython/demo.py (Demo.__init__): added support for silent
725 735 blocks, improved marks as regexps, docstrings written.
726 736 (Demo.__init__): better docstring, added support for sys.argv.
727 737
728 738 * IPython/genutils.py (marquee): little utility used by the demo
729 739 code, handy in general.
730 740
731 741 * IPython/demo.py (Demo.__init__): new class for interactive
732 742 demos. Not documented yet, I just wrote it in a hurry for
733 743 scipy'05. Will docstring later.
734 744
735 745 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
736 746
737 747 * IPython/Shell.py (sigint_handler): Drastic simplification which
738 748 also seems to make Ctrl-C work correctly across threads! This is
739 749 so simple, that I can't beleive I'd missed it before. Needs more
740 750 testing, though.
741 751 (KBINT): Never mind, revert changes. I'm sure I'd tried something
742 752 like this before...
743 753
744 754 * IPython/genutils.py (get_home_dir): add protection against
745 755 non-dirs in win32 registry.
746 756
747 757 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
748 758 bug where dict was mutated while iterating (pysh crash).
749 759
750 760 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
751 761
752 762 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
753 763 spurious newlines added by this routine. After a report by
754 764 F. Mantegazza.
755 765
756 766 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
757 767
758 768 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
759 769 calls. These were a leftover from the GTK 1.x days, and can cause
760 770 problems in certain cases (after a report by John Hunter).
761 771
762 772 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
763 773 os.getcwd() fails at init time. Thanks to patch from David Remahl
764 774 <chmod007-AT-mac.com>.
765 775 (InteractiveShell.__init__): prevent certain special magics from
766 776 being shadowed by aliases. Closes
767 777 http://www.scipy.net/roundup/ipython/issue41.
768 778
769 779 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
770 780
771 781 * IPython/iplib.py (InteractiveShell.complete): Added new
772 782 top-level completion method to expose the completion mechanism
773 783 beyond readline-based environments.
774 784
775 785 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
776 786
777 787 * tools/ipsvnc (svnversion): fix svnversion capture.
778 788
779 789 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
780 790 attribute to self, which was missing. Before, it was set by a
781 791 routine which in certain cases wasn't being called, so the
782 792 instance could end up missing the attribute. This caused a crash.
783 793 Closes http://www.scipy.net/roundup/ipython/issue40.
784 794
785 795 2005-08-16 Fernando Perez <fperez@colorado.edu>
786 796
787 797 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
788 798 contains non-string attribute. Closes
789 799 http://www.scipy.net/roundup/ipython/issue38.
790 800
791 801 2005-08-14 Fernando Perez <fperez@colorado.edu>
792 802
793 803 * tools/ipsvnc: Minor improvements, to add changeset info.
794 804
795 805 2005-08-12 Fernando Perez <fperez@colorado.edu>
796 806
797 807 * IPython/iplib.py (runsource): remove self.code_to_run_src
798 808 attribute. I realized this is nothing more than
799 809 '\n'.join(self.buffer), and having the same data in two different
800 810 places is just asking for synchronization bugs. This may impact
801 811 people who have custom exception handlers, so I need to warn
802 812 ipython-dev about it (F. Mantegazza may use them).
803 813
804 814 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
805 815
806 816 * IPython/genutils.py: fix 2.2 compatibility (generators)
807 817
808 818 2005-07-18 Fernando Perez <fperez@colorado.edu>
809 819
810 820 * IPython/genutils.py (get_home_dir): fix to help users with
811 821 invalid $HOME under win32.
812 822
813 823 2005-07-17 Fernando Perez <fperez@colorado.edu>
814 824
815 825 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
816 826 some old hacks and clean up a bit other routines; code should be
817 827 simpler and a bit faster.
818 828
819 829 * IPython/iplib.py (interact): removed some last-resort attempts
820 830 to survive broken stdout/stderr. That code was only making it
821 831 harder to abstract out the i/o (necessary for gui integration),
822 832 and the crashes it could prevent were extremely rare in practice
823 833 (besides being fully user-induced in a pretty violent manner).
824 834
825 835 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
826 836 Nothing major yet, but the code is simpler to read; this should
827 837 make it easier to do more serious modifications in the future.
828 838
829 839 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
830 840 which broke in .15 (thanks to a report by Ville).
831 841
832 842 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
833 843 be quite correct, I know next to nothing about unicode). This
834 844 will allow unicode strings to be used in prompts, amongst other
835 845 cases. It also will prevent ipython from crashing when unicode
836 846 shows up unexpectedly in many places. If ascii encoding fails, we
837 847 assume utf_8. Currently the encoding is not a user-visible
838 848 setting, though it could be made so if there is demand for it.
839 849
840 850 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
841 851
842 852 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
843 853
844 854 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
845 855
846 856 * IPython/genutils.py: Add 2.2 compatibility here, so all other
847 857 code can work transparently for 2.2/2.3.
848 858
849 859 2005-07-16 Fernando Perez <fperez@colorado.edu>
850 860
851 861 * IPython/ultraTB.py (ExceptionColors): Make a global variable
852 862 out of the color scheme table used for coloring exception
853 863 tracebacks. This allows user code to add new schemes at runtime.
854 864 This is a minimally modified version of the patch at
855 865 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
856 866 for the contribution.
857 867
858 868 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
859 869 slightly modified version of the patch in
860 870 http://www.scipy.net/roundup/ipython/issue34, which also allows me
861 871 to remove the previous try/except solution (which was costlier).
862 872 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
863 873
864 874 2005-06-08 Fernando Perez <fperez@colorado.edu>
865 875
866 876 * IPython/iplib.py (write/write_err): Add methods to abstract all
867 877 I/O a bit more.
868 878
869 879 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
870 880 warning, reported by Aric Hagberg, fix by JD Hunter.
871 881
872 882 2005-06-02 *** Released version 0.6.15
873 883
874 884 2005-06-01 Fernando Perez <fperez@colorado.edu>
875 885
876 886 * IPython/iplib.py (MagicCompleter.file_matches): Fix
877 887 tab-completion of filenames within open-quoted strings. Note that
878 888 this requires that in ~/.ipython/ipythonrc, users change the
879 889 readline delimiters configuration to read:
880 890
881 891 readline_remove_delims -/~
882 892
883 893
884 894 2005-05-31 *** Released version 0.6.14
885 895
886 896 2005-05-29 Fernando Perez <fperez@colorado.edu>
887 897
888 898 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
889 899 with files not on the filesystem. Reported by Eliyahu Sandler
890 900 <eli@gondolin.net>
891 901
892 902 2005-05-22 Fernando Perez <fperez@colorado.edu>
893 903
894 904 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
895 905 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
896 906
897 907 2005-05-19 Fernando Perez <fperez@colorado.edu>
898 908
899 909 * IPython/iplib.py (safe_execfile): close a file which could be
900 910 left open (causing problems in win32, which locks open files).
901 911 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
902 912
903 913 2005-05-18 Fernando Perez <fperez@colorado.edu>
904 914
905 915 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
906 916 keyword arguments correctly to safe_execfile().
907 917
908 918 2005-05-13 Fernando Perez <fperez@colorado.edu>
909 919
910 920 * ipython.1: Added info about Qt to manpage, and threads warning
911 921 to usage page (invoked with --help).
912 922
913 923 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
914 924 new matcher (it goes at the end of the priority list) to do
915 925 tab-completion on named function arguments. Submitted by George
916 926 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
917 927 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
918 928 for more details.
919 929
920 930 * IPython/Magic.py (magic_run): Added new -e flag to ignore
921 931 SystemExit exceptions in the script being run. Thanks to a report
922 932 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
923 933 producing very annoying behavior when running unit tests.
924 934
925 935 2005-05-12 Fernando Perez <fperez@colorado.edu>
926 936
927 937 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
928 938 which I'd broken (again) due to a changed regexp. In the process,
929 939 added ';' as an escape to auto-quote the whole line without
930 940 splitting its arguments. Thanks to a report by Jerry McRae
931 941 <qrs0xyc02-AT-sneakemail.com>.
932 942
933 943 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
934 944 possible crashes caused by a TokenError. Reported by Ed Schofield
935 945 <schofield-AT-ftw.at>.
936 946
937 947 2005-05-06 Fernando Perez <fperez@colorado.edu>
938 948
939 949 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
940 950
941 951 2005-04-29 Fernando Perez <fperez@colorado.edu>
942 952
943 953 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
944 954 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
945 955 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
946 956 which provides support for Qt interactive usage (similar to the
947 957 existing one for WX and GTK). This had been often requested.
948 958
949 959 2005-04-14 *** Released version 0.6.13
950 960
951 961 2005-04-08 Fernando Perez <fperez@colorado.edu>
952 962
953 963 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
954 964 from _ofind, which gets called on almost every input line. Now,
955 965 we only try to get docstrings if they are actually going to be
956 966 used (the overhead of fetching unnecessary docstrings can be
957 967 noticeable for certain objects, such as Pyro proxies).
958 968
959 969 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
960 970 for completers. For some reason I had been passing them the state
961 971 variable, which completers never actually need, and was in
962 972 conflict with the rlcompleter API. Custom completers ONLY need to
963 973 take the text parameter.
964 974
965 975 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
966 976 work correctly in pysh. I've also moved all the logic which used
967 977 to be in pysh.py here, which will prevent problems with future
968 978 upgrades. However, this time I must warn users to update their
969 979 pysh profile to include the line
970 980
971 981 import_all IPython.Extensions.InterpreterExec
972 982
973 983 because otherwise things won't work for them. They MUST also
974 984 delete pysh.py and the line
975 985
976 986 execfile pysh.py
977 987
978 988 from their ipythonrc-pysh.
979 989
980 990 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
981 991 robust in the face of objects whose dir() returns non-strings
982 992 (which it shouldn't, but some broken libs like ITK do). Thanks to
983 993 a patch by John Hunter (implemented differently, though). Also
984 994 minor improvements by using .extend instead of + on lists.
985 995
986 996 * pysh.py:
987 997
988 998 2005-04-06 Fernando Perez <fperez@colorado.edu>
989 999
990 1000 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
991 1001 by default, so that all users benefit from it. Those who don't
992 1002 want it can still turn it off.
993 1003
994 1004 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
995 1005 config file, I'd forgotten about this, so users were getting it
996 1006 off by default.
997 1007
998 1008 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
999 1009 consistency. Now magics can be called in multiline statements,
1000 1010 and python variables can be expanded in magic calls via $var.
1001 1011 This makes the magic system behave just like aliases or !system
1002 1012 calls.
1003 1013
1004 1014 2005-03-28 Fernando Perez <fperez@colorado.edu>
1005 1015
1006 1016 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1007 1017 expensive string additions for building command. Add support for
1008 1018 trailing ';' when autocall is used.
1009 1019
1010 1020 2005-03-26 Fernando Perez <fperez@colorado.edu>
1011 1021
1012 1022 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1013 1023 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1014 1024 ipython.el robust against prompts with any number of spaces
1015 1025 (including 0) after the ':' character.
1016 1026
1017 1027 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1018 1028 continuation prompt, which misled users to think the line was
1019 1029 already indented. Closes debian Bug#300847, reported to me by
1020 1030 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1021 1031
1022 1032 2005-03-23 Fernando Perez <fperez@colorado.edu>
1023 1033
1024 1034 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1025 1035 properly aligned if they have embedded newlines.
1026 1036
1027 1037 * IPython/iplib.py (runlines): Add a public method to expose
1028 1038 IPython's code execution machinery, so that users can run strings
1029 1039 as if they had been typed at the prompt interactively.
1030 1040 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1031 1041 methods which can call the system shell, but with python variable
1032 1042 expansion. The three such methods are: __IPYTHON__.system,
1033 1043 .getoutput and .getoutputerror. These need to be documented in a
1034 1044 'public API' section (to be written) of the manual.
1035 1045
1036 1046 2005-03-20 Fernando Perez <fperez@colorado.edu>
1037 1047
1038 1048 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1039 1049 for custom exception handling. This is quite powerful, and it
1040 1050 allows for user-installable exception handlers which can trap
1041 1051 custom exceptions at runtime and treat them separately from
1042 1052 IPython's default mechanisms. At the request of Frédéric
1043 1053 Mantegazza <mantegazza-AT-ill.fr>.
1044 1054 (InteractiveShell.set_custom_completer): public API function to
1045 1055 add new completers at runtime.
1046 1056
1047 1057 2005-03-19 Fernando Perez <fperez@colorado.edu>
1048 1058
1049 1059 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1050 1060 allow objects which provide their docstrings via non-standard
1051 1061 mechanisms (like Pyro proxies) to still be inspected by ipython's
1052 1062 ? system.
1053 1063
1054 1064 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1055 1065 automatic capture system. I tried quite hard to make it work
1056 1066 reliably, and simply failed. I tried many combinations with the
1057 1067 subprocess module, but eventually nothing worked in all needed
1058 1068 cases (not blocking stdin for the child, duplicating stdout
1059 1069 without blocking, etc). The new %sc/%sx still do capture to these
1060 1070 magical list/string objects which make shell use much more
1061 1071 conveninent, so not all is lost.
1062 1072
1063 1073 XXX - FIX MANUAL for the change above!
1064 1074
1065 1075 (runsource): I copied code.py's runsource() into ipython to modify
1066 1076 it a bit. Now the code object and source to be executed are
1067 1077 stored in ipython. This makes this info accessible to third-party
1068 1078 tools, like custom exception handlers. After a request by Frédéric
1069 1079 Mantegazza <mantegazza-AT-ill.fr>.
1070 1080
1071 1081 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1072 1082 history-search via readline (like C-p/C-n). I'd wanted this for a
1073 1083 long time, but only recently found out how to do it. For users
1074 1084 who already have their ipythonrc files made and want this, just
1075 1085 add:
1076 1086
1077 1087 readline_parse_and_bind "\e[A": history-search-backward
1078 1088 readline_parse_and_bind "\e[B": history-search-forward
1079 1089
1080 1090 2005-03-18 Fernando Perez <fperez@colorado.edu>
1081 1091
1082 1092 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1083 1093 LSString and SList classes which allow transparent conversions
1084 1094 between list mode and whitespace-separated string.
1085 1095 (magic_r): Fix recursion problem in %r.
1086 1096
1087 1097 * IPython/genutils.py (LSString): New class to be used for
1088 1098 automatic storage of the results of all alias/system calls in _o
1089 1099 and _e (stdout/err). These provide a .l/.list attribute which
1090 1100 does automatic splitting on newlines. This means that for most
1091 1101 uses, you'll never need to do capturing of output with %sc/%sx
1092 1102 anymore, since ipython keeps this always done for you. Note that
1093 1103 only the LAST results are stored, the _o/e variables are
1094 1104 overwritten on each call. If you need to save their contents
1095 1105 further, simply bind them to any other name.
1096 1106
1097 1107 2005-03-17 Fernando Perez <fperez@colorado.edu>
1098 1108
1099 1109 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1100 1110 prompt namespace handling.
1101 1111
1102 1112 2005-03-16 Fernando Perez <fperez@colorado.edu>
1103 1113
1104 1114 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1105 1115 classic prompts to be '>>> ' (final space was missing, and it
1106 1116 trips the emacs python mode).
1107 1117 (BasePrompt.__str__): Added safe support for dynamic prompt
1108 1118 strings. Now you can set your prompt string to be '$x', and the
1109 1119 value of x will be printed from your interactive namespace. The
1110 1120 interpolation syntax includes the full Itpl support, so
1111 1121 ${foo()+x+bar()} is a valid prompt string now, and the function
1112 1122 calls will be made at runtime.
1113 1123
1114 1124 2005-03-15 Fernando Perez <fperez@colorado.edu>
1115 1125
1116 1126 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1117 1127 avoid name clashes in pylab. %hist still works, it just forwards
1118 1128 the call to %history.
1119 1129
1120 1130 2005-03-02 *** Released version 0.6.12
1121 1131
1122 1132 2005-03-02 Fernando Perez <fperez@colorado.edu>
1123 1133
1124 1134 * IPython/iplib.py (handle_magic): log magic calls properly as
1125 1135 ipmagic() function calls.
1126 1136
1127 1137 * IPython/Magic.py (magic_time): Improved %time to support
1128 1138 statements and provide wall-clock as well as CPU time.
1129 1139
1130 1140 2005-02-27 Fernando Perez <fperez@colorado.edu>
1131 1141
1132 1142 * IPython/hooks.py: New hooks module, to expose user-modifiable
1133 1143 IPython functionality in a clean manner. For now only the editor
1134 1144 hook is actually written, and other thigns which I intend to turn
1135 1145 into proper hooks aren't yet there. The display and prefilter
1136 1146 stuff, for example, should be hooks. But at least now the
1137 1147 framework is in place, and the rest can be moved here with more
1138 1148 time later. IPython had had a .hooks variable for a long time for
1139 1149 this purpose, but I'd never actually used it for anything.
1140 1150
1141 1151 2005-02-26 Fernando Perez <fperez@colorado.edu>
1142 1152
1143 1153 * IPython/ipmaker.py (make_IPython): make the default ipython
1144 1154 directory be called _ipython under win32, to follow more the
1145 1155 naming peculiarities of that platform (where buggy software like
1146 1156 Visual Sourcesafe breaks with .named directories). Reported by
1147 1157 Ville Vainio.
1148 1158
1149 1159 2005-02-23 Fernando Perez <fperez@colorado.edu>
1150 1160
1151 1161 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1152 1162 auto_aliases for win32 which were causing problems. Users can
1153 1163 define the ones they personally like.
1154 1164
1155 1165 2005-02-21 Fernando Perez <fperez@colorado.edu>
1156 1166
1157 1167 * IPython/Magic.py (magic_time): new magic to time execution of
1158 1168 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1159 1169
1160 1170 2005-02-19 Fernando Perez <fperez@colorado.edu>
1161 1171
1162 1172 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1163 1173 into keys (for prompts, for example).
1164 1174
1165 1175 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1166 1176 prompts in case users want them. This introduces a small behavior
1167 1177 change: ipython does not automatically add a space to all prompts
1168 1178 anymore. To get the old prompts with a space, users should add it
1169 1179 manually to their ipythonrc file, so for example prompt_in1 should
1170 1180 now read 'In [\#]: ' instead of 'In [\#]:'.
1171 1181 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1172 1182 file) to control left-padding of secondary prompts.
1173 1183
1174 1184 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1175 1185 the profiler can't be imported. Fix for Debian, which removed
1176 1186 profile.py because of License issues. I applied a slightly
1177 1187 modified version of the original Debian patch at
1178 1188 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1179 1189
1180 1190 2005-02-17 Fernando Perez <fperez@colorado.edu>
1181 1191
1182 1192 * IPython/genutils.py (native_line_ends): Fix bug which would
1183 1193 cause improper line-ends under win32 b/c I was not opening files
1184 1194 in binary mode. Bug report and fix thanks to Ville.
1185 1195
1186 1196 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1187 1197 trying to catch spurious foo[1] autocalls. My fix actually broke
1188 1198 ',/' autoquote/call with explicit escape (bad regexp).
1189 1199
1190 1200 2005-02-15 *** Released version 0.6.11
1191 1201
1192 1202 2005-02-14 Fernando Perez <fperez@colorado.edu>
1193 1203
1194 1204 * IPython/background_jobs.py: New background job management
1195 1205 subsystem. This is implemented via a new set of classes, and
1196 1206 IPython now provides a builtin 'jobs' object for background job
1197 1207 execution. A convenience %bg magic serves as a lightweight
1198 1208 frontend for starting the more common type of calls. This was
1199 1209 inspired by discussions with B. Granger and the BackgroundCommand
1200 1210 class described in the book Python Scripting for Computational
1201 1211 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1202 1212 (although ultimately no code from this text was used, as IPython's
1203 1213 system is a separate implementation).
1204 1214
1205 1215 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1206 1216 to control the completion of single/double underscore names
1207 1217 separately. As documented in the example ipytonrc file, the
1208 1218 readline_omit__names variable can now be set to 2, to omit even
1209 1219 single underscore names. Thanks to a patch by Brian Wong
1210 1220 <BrianWong-AT-AirgoNetworks.Com>.
1211 1221 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1212 1222 be autocalled as foo([1]) if foo were callable. A problem for
1213 1223 things which are both callable and implement __getitem__.
1214 1224 (init_readline): Fix autoindentation for win32. Thanks to a patch
1215 1225 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1216 1226
1217 1227 2005-02-12 Fernando Perez <fperez@colorado.edu>
1218 1228
1219 1229 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1220 1230 which I had written long ago to sort out user error messages which
1221 1231 may occur during startup. This seemed like a good idea initially,
1222 1232 but it has proven a disaster in retrospect. I don't want to
1223 1233 change much code for now, so my fix is to set the internal 'debug'
1224 1234 flag to true everywhere, whose only job was precisely to control
1225 1235 this subsystem. This closes issue 28 (as well as avoiding all
1226 1236 sorts of strange hangups which occur from time to time).
1227 1237
1228 1238 2005-02-07 Fernando Perez <fperez@colorado.edu>
1229 1239
1230 1240 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1231 1241 previous call produced a syntax error.
1232 1242
1233 1243 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1234 1244 classes without constructor.
1235 1245
1236 1246 2005-02-06 Fernando Perez <fperez@colorado.edu>
1237 1247
1238 1248 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1239 1249 completions with the results of each matcher, so we return results
1240 1250 to the user from all namespaces. This breaks with ipython
1241 1251 tradition, but I think it's a nicer behavior. Now you get all
1242 1252 possible completions listed, from all possible namespaces (python,
1243 1253 filesystem, magics...) After a request by John Hunter
1244 1254 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1245 1255
1246 1256 2005-02-05 Fernando Perez <fperez@colorado.edu>
1247 1257
1248 1258 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1249 1259 the call had quote characters in it (the quotes were stripped).
1250 1260
1251 1261 2005-01-31 Fernando Perez <fperez@colorado.edu>
1252 1262
1253 1263 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1254 1264 Itpl.itpl() to make the code more robust against psyco
1255 1265 optimizations.
1256 1266
1257 1267 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1258 1268 of causing an exception. Quicker, cleaner.
1259 1269
1260 1270 2005-01-28 Fernando Perez <fperez@colorado.edu>
1261 1271
1262 1272 * scripts/ipython_win_post_install.py (install): hardcode
1263 1273 sys.prefix+'python.exe' as the executable path. It turns out that
1264 1274 during the post-installation run, sys.executable resolves to the
1265 1275 name of the binary installer! I should report this as a distutils
1266 1276 bug, I think. I updated the .10 release with this tiny fix, to
1267 1277 avoid annoying the lists further.
1268 1278
1269 1279 2005-01-27 *** Released version 0.6.10
1270 1280
1271 1281 2005-01-27 Fernando Perez <fperez@colorado.edu>
1272 1282
1273 1283 * IPython/numutils.py (norm): Added 'inf' as optional name for
1274 1284 L-infinity norm, included references to mathworld.com for vector
1275 1285 norm definitions.
1276 1286 (amin/amax): added amin/amax for array min/max. Similar to what
1277 1287 pylab ships with after the recent reorganization of names.
1278 1288 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1279 1289
1280 1290 * ipython.el: committed Alex's recent fixes and improvements.
1281 1291 Tested with python-mode from CVS, and it looks excellent. Since
1282 1292 python-mode hasn't released anything in a while, I'm temporarily
1283 1293 putting a copy of today's CVS (v 4.70) of python-mode in:
1284 1294 http://ipython.scipy.org/tmp/python-mode.el
1285 1295
1286 1296 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1287 1297 sys.executable for the executable name, instead of assuming it's
1288 1298 called 'python.exe' (the post-installer would have produced broken
1289 1299 setups on systems with a differently named python binary).
1290 1300
1291 1301 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1292 1302 references to os.linesep, to make the code more
1293 1303 platform-independent. This is also part of the win32 coloring
1294 1304 fixes.
1295 1305
1296 1306 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1297 1307 lines, which actually cause coloring bugs because the length of
1298 1308 the line is very difficult to correctly compute with embedded
1299 1309 escapes. This was the source of all the coloring problems under
1300 1310 Win32. I think that _finally_, Win32 users have a properly
1301 1311 working ipython in all respects. This would never have happened
1302 1312 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1303 1313
1304 1314 2005-01-26 *** Released version 0.6.9
1305 1315
1306 1316 2005-01-25 Fernando Perez <fperez@colorado.edu>
1307 1317
1308 1318 * setup.py: finally, we have a true Windows installer, thanks to
1309 1319 the excellent work of Viktor Ransmayr
1310 1320 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1311 1321 Windows users. The setup routine is quite a bit cleaner thanks to
1312 1322 this, and the post-install script uses the proper functions to
1313 1323 allow a clean de-installation using the standard Windows Control
1314 1324 Panel.
1315 1325
1316 1326 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1317 1327 environment variable under all OSes (including win32) if
1318 1328 available. This will give consistency to win32 users who have set
1319 1329 this variable for any reason. If os.environ['HOME'] fails, the
1320 1330 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1321 1331
1322 1332 2005-01-24 Fernando Perez <fperez@colorado.edu>
1323 1333
1324 1334 * IPython/numutils.py (empty_like): add empty_like(), similar to
1325 1335 zeros_like() but taking advantage of the new empty() Numeric routine.
1326 1336
1327 1337 2005-01-23 *** Released version 0.6.8
1328 1338
1329 1339 2005-01-22 Fernando Perez <fperez@colorado.edu>
1330 1340
1331 1341 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1332 1342 automatic show() calls. After discussing things with JDH, it
1333 1343 turns out there are too many corner cases where this can go wrong.
1334 1344 It's best not to try to be 'too smart', and simply have ipython
1335 1345 reproduce as much as possible the default behavior of a normal
1336 1346 python shell.
1337 1347
1338 1348 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1339 1349 line-splitting regexp and _prefilter() to avoid calling getattr()
1340 1350 on assignments. This closes
1341 1351 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1342 1352 readline uses getattr(), so a simple <TAB> keypress is still
1343 1353 enough to trigger getattr() calls on an object.
1344 1354
1345 1355 2005-01-21 Fernando Perez <fperez@colorado.edu>
1346 1356
1347 1357 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1348 1358 docstring under pylab so it doesn't mask the original.
1349 1359
1350 1360 2005-01-21 *** Released version 0.6.7
1351 1361
1352 1362 2005-01-21 Fernando Perez <fperez@colorado.edu>
1353 1363
1354 1364 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1355 1365 signal handling for win32 users in multithreaded mode.
1356 1366
1357 1367 2005-01-17 Fernando Perez <fperez@colorado.edu>
1358 1368
1359 1369 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1360 1370 instances with no __init__. After a crash report by Norbert Nemec
1361 1371 <Norbert-AT-nemec-online.de>.
1362 1372
1363 1373 2005-01-14 Fernando Perez <fperez@colorado.edu>
1364 1374
1365 1375 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1366 1376 names for verbose exceptions, when multiple dotted names and the
1367 1377 'parent' object were present on the same line.
1368 1378
1369 1379 2005-01-11 Fernando Perez <fperez@colorado.edu>
1370 1380
1371 1381 * IPython/genutils.py (flag_calls): new utility to trap and flag
1372 1382 calls in functions. I need it to clean up matplotlib support.
1373 1383 Also removed some deprecated code in genutils.
1374 1384
1375 1385 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1376 1386 that matplotlib scripts called with %run, which don't call show()
1377 1387 themselves, still have their plotting windows open.
1378 1388
1379 1389 2005-01-05 Fernando Perez <fperez@colorado.edu>
1380 1390
1381 1391 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1382 1392 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1383 1393
1384 1394 2004-12-19 Fernando Perez <fperez@colorado.edu>
1385 1395
1386 1396 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1387 1397 parent_runcode, which was an eyesore. The same result can be
1388 1398 obtained with Python's regular superclass mechanisms.
1389 1399
1390 1400 2004-12-17 Fernando Perez <fperez@colorado.edu>
1391 1401
1392 1402 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1393 1403 reported by Prabhu.
1394 1404 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1395 1405 sys.stderr) instead of explicitly calling sys.stderr. This helps
1396 1406 maintain our I/O abstractions clean, for future GUI embeddings.
1397 1407
1398 1408 * IPython/genutils.py (info): added new utility for sys.stderr
1399 1409 unified info message handling (thin wrapper around warn()).
1400 1410
1401 1411 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1402 1412 composite (dotted) names on verbose exceptions.
1403 1413 (VerboseTB.nullrepr): harden against another kind of errors which
1404 1414 Python's inspect module can trigger, and which were crashing
1405 1415 IPython. Thanks to a report by Marco Lombardi
1406 1416 <mlombard-AT-ma010192.hq.eso.org>.
1407 1417
1408 1418 2004-12-13 *** Released version 0.6.6
1409 1419
1410 1420 2004-12-12 Fernando Perez <fperez@colorado.edu>
1411 1421
1412 1422 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1413 1423 generated by pygtk upon initialization if it was built without
1414 1424 threads (for matplotlib users). After a crash reported by
1415 1425 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1416 1426
1417 1427 * IPython/ipmaker.py (make_IPython): fix small bug in the
1418 1428 import_some parameter for multiple imports.
1419 1429
1420 1430 * IPython/iplib.py (ipmagic): simplified the interface of
1421 1431 ipmagic() to take a single string argument, just as it would be
1422 1432 typed at the IPython cmd line.
1423 1433 (ipalias): Added new ipalias() with an interface identical to
1424 1434 ipmagic(). This completes exposing a pure python interface to the
1425 1435 alias and magic system, which can be used in loops or more complex
1426 1436 code where IPython's automatic line mangling is not active.
1427 1437
1428 1438 * IPython/genutils.py (timing): changed interface of timing to
1429 1439 simply run code once, which is the most common case. timings()
1430 1440 remains unchanged, for the cases where you want multiple runs.
1431 1441
1432 1442 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1433 1443 bug where Python2.2 crashes with exec'ing code which does not end
1434 1444 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1435 1445 before.
1436 1446
1437 1447 2004-12-10 Fernando Perez <fperez@colorado.edu>
1438 1448
1439 1449 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1440 1450 -t to -T, to accomodate the new -t flag in %run (the %run and
1441 1451 %prun options are kind of intermixed, and it's not easy to change
1442 1452 this with the limitations of python's getopt).
1443 1453
1444 1454 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1445 1455 the execution of scripts. It's not as fine-tuned as timeit.py,
1446 1456 but it works from inside ipython (and under 2.2, which lacks
1447 1457 timeit.py). Optionally a number of runs > 1 can be given for
1448 1458 timing very short-running code.
1449 1459
1450 1460 * IPython/genutils.py (uniq_stable): new routine which returns a
1451 1461 list of unique elements in any iterable, but in stable order of
1452 1462 appearance. I needed this for the ultraTB fixes, and it's a handy
1453 1463 utility.
1454 1464
1455 1465 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1456 1466 dotted names in Verbose exceptions. This had been broken since
1457 1467 the very start, now x.y will properly be printed in a Verbose
1458 1468 traceback, instead of x being shown and y appearing always as an
1459 1469 'undefined global'. Getting this to work was a bit tricky,
1460 1470 because by default python tokenizers are stateless. Saved by
1461 1471 python's ability to easily add a bit of state to an arbitrary
1462 1472 function (without needing to build a full-blown callable object).
1463 1473
1464 1474 Also big cleanup of this code, which had horrendous runtime
1465 1475 lookups of zillions of attributes for colorization. Moved all
1466 1476 this code into a few templates, which make it cleaner and quicker.
1467 1477
1468 1478 Printout quality was also improved for Verbose exceptions: one
1469 1479 variable per line, and memory addresses are printed (this can be
1470 1480 quite handy in nasty debugging situations, which is what Verbose
1471 1481 is for).
1472 1482
1473 1483 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1474 1484 the command line as scripts to be loaded by embedded instances.
1475 1485 Doing so has the potential for an infinite recursion if there are
1476 1486 exceptions thrown in the process. This fixes a strange crash
1477 1487 reported by Philippe MULLER <muller-AT-irit.fr>.
1478 1488
1479 1489 2004-12-09 Fernando Perez <fperez@colorado.edu>
1480 1490
1481 1491 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1482 1492 to reflect new names in matplotlib, which now expose the
1483 1493 matlab-compatible interface via a pylab module instead of the
1484 1494 'matlab' name. The new code is backwards compatible, so users of
1485 1495 all matplotlib versions are OK. Patch by J. Hunter.
1486 1496
1487 1497 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1488 1498 of __init__ docstrings for instances (class docstrings are already
1489 1499 automatically printed). Instances with customized docstrings
1490 1500 (indep. of the class) are also recognized and all 3 separate
1491 1501 docstrings are printed (instance, class, constructor). After some
1492 1502 comments/suggestions by J. Hunter.
1493 1503
1494 1504 2004-12-05 Fernando Perez <fperez@colorado.edu>
1495 1505
1496 1506 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1497 1507 warnings when tab-completion fails and triggers an exception.
1498 1508
1499 1509 2004-12-03 Fernando Perez <fperez@colorado.edu>
1500 1510
1501 1511 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1502 1512 be triggered when using 'run -p'. An incorrect option flag was
1503 1513 being set ('d' instead of 'D').
1504 1514 (manpage): fix missing escaped \- sign.
1505 1515
1506 1516 2004-11-30 *** Released version 0.6.5
1507 1517
1508 1518 2004-11-30 Fernando Perez <fperez@colorado.edu>
1509 1519
1510 1520 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1511 1521 setting with -d option.
1512 1522
1513 1523 * setup.py (docfiles): Fix problem where the doc glob I was using
1514 1524 was COMPLETELY BROKEN. It was giving the right files by pure
1515 1525 accident, but failed once I tried to include ipython.el. Note:
1516 1526 glob() does NOT allow you to do exclusion on multiple endings!
1517 1527
1518 1528 2004-11-29 Fernando Perez <fperez@colorado.edu>
1519 1529
1520 1530 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1521 1531 the manpage as the source. Better formatting & consistency.
1522 1532
1523 1533 * IPython/Magic.py (magic_run): Added new -d option, to run
1524 1534 scripts under the control of the python pdb debugger. Note that
1525 1535 this required changing the %prun option -d to -D, to avoid a clash
1526 1536 (since %run must pass options to %prun, and getopt is too dumb to
1527 1537 handle options with string values with embedded spaces). Thanks
1528 1538 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1529 1539 (magic_who_ls): added type matching to %who and %whos, so that one
1530 1540 can filter their output to only include variables of certain
1531 1541 types. Another suggestion by Matthew.
1532 1542 (magic_whos): Added memory summaries in kb and Mb for arrays.
1533 1543 (magic_who): Improve formatting (break lines every 9 vars).
1534 1544
1535 1545 2004-11-28 Fernando Perez <fperez@colorado.edu>
1536 1546
1537 1547 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1538 1548 cache when empty lines were present.
1539 1549
1540 1550 2004-11-24 Fernando Perez <fperez@colorado.edu>
1541 1551
1542 1552 * IPython/usage.py (__doc__): document the re-activated threading
1543 1553 options for WX and GTK.
1544 1554
1545 1555 2004-11-23 Fernando Perez <fperez@colorado.edu>
1546 1556
1547 1557 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1548 1558 the -wthread and -gthread options, along with a new -tk one to try
1549 1559 and coordinate Tk threading with wx/gtk. The tk support is very
1550 1560 platform dependent, since it seems to require Tcl and Tk to be
1551 1561 built with threads (Fedora1/2 appears NOT to have it, but in
1552 1562 Prabhu's Debian boxes it works OK). But even with some Tk
1553 1563 limitations, this is a great improvement.
1554 1564
1555 1565 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1556 1566 info in user prompts. Patch by Prabhu.
1557 1567
1558 1568 2004-11-18 Fernando Perez <fperez@colorado.edu>
1559 1569
1560 1570 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1561 1571 EOFErrors and bail, to avoid infinite loops if a non-terminating
1562 1572 file is fed into ipython. Patch submitted in issue 19 by user,
1563 1573 many thanks.
1564 1574
1565 1575 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1566 1576 autoquote/parens in continuation prompts, which can cause lots of
1567 1577 problems. Closes roundup issue 20.
1568 1578
1569 1579 2004-11-17 Fernando Perez <fperez@colorado.edu>
1570 1580
1571 1581 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1572 1582 reported as debian bug #280505. I'm not sure my local changelog
1573 1583 entry has the proper debian format (Jack?).
1574 1584
1575 1585 2004-11-08 *** Released version 0.6.4
1576 1586
1577 1587 2004-11-08 Fernando Perez <fperez@colorado.edu>
1578 1588
1579 1589 * IPython/iplib.py (init_readline): Fix exit message for Windows
1580 1590 when readline is active. Thanks to a report by Eric Jones
1581 1591 <eric-AT-enthought.com>.
1582 1592
1583 1593 2004-11-07 Fernando Perez <fperez@colorado.edu>
1584 1594
1585 1595 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1586 1596 sometimes seen by win2k/cygwin users.
1587 1597
1588 1598 2004-11-06 Fernando Perez <fperez@colorado.edu>
1589 1599
1590 1600 * IPython/iplib.py (interact): Change the handling of %Exit from
1591 1601 trying to propagate a SystemExit to an internal ipython flag.
1592 1602 This is less elegant than using Python's exception mechanism, but
1593 1603 I can't get that to work reliably with threads, so under -pylab
1594 1604 %Exit was hanging IPython. Cross-thread exception handling is
1595 1605 really a bitch. Thaks to a bug report by Stephen Walton
1596 1606 <stephen.walton-AT-csun.edu>.
1597 1607
1598 1608 2004-11-04 Fernando Perez <fperez@colorado.edu>
1599 1609
1600 1610 * IPython/iplib.py (raw_input_original): store a pointer to the
1601 1611 true raw_input to harden against code which can modify it
1602 1612 (wx.py.PyShell does this and would otherwise crash ipython).
1603 1613 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1604 1614
1605 1615 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1606 1616 Ctrl-C problem, which does not mess up the input line.
1607 1617
1608 1618 2004-11-03 Fernando Perez <fperez@colorado.edu>
1609 1619
1610 1620 * IPython/Release.py: Changed licensing to BSD, in all files.
1611 1621 (name): lowercase name for tarball/RPM release.
1612 1622
1613 1623 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1614 1624 use throughout ipython.
1615 1625
1616 1626 * IPython/Magic.py (Magic._ofind): Switch to using the new
1617 1627 OInspect.getdoc() function.
1618 1628
1619 1629 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1620 1630 of the line currently being canceled via Ctrl-C. It's extremely
1621 1631 ugly, but I don't know how to do it better (the problem is one of
1622 1632 handling cross-thread exceptions).
1623 1633
1624 1634 2004-10-28 Fernando Perez <fperez@colorado.edu>
1625 1635
1626 1636 * IPython/Shell.py (signal_handler): add signal handlers to trap
1627 1637 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1628 1638 report by Francesc Alted.
1629 1639
1630 1640 2004-10-21 Fernando Perez <fperez@colorado.edu>
1631 1641
1632 1642 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1633 1643 to % for pysh syntax extensions.
1634 1644
1635 1645 2004-10-09 Fernando Perez <fperez@colorado.edu>
1636 1646
1637 1647 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1638 1648 arrays to print a more useful summary, without calling str(arr).
1639 1649 This avoids the problem of extremely lengthy computations which
1640 1650 occur if arr is large, and appear to the user as a system lockup
1641 1651 with 100% cpu activity. After a suggestion by Kristian Sandberg
1642 1652 <Kristian.Sandberg@colorado.edu>.
1643 1653 (Magic.__init__): fix bug in global magic escapes not being
1644 1654 correctly set.
1645 1655
1646 1656 2004-10-08 Fernando Perez <fperez@colorado.edu>
1647 1657
1648 1658 * IPython/Magic.py (__license__): change to absolute imports of
1649 1659 ipython's own internal packages, to start adapting to the absolute
1650 1660 import requirement of PEP-328.
1651 1661
1652 1662 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1653 1663 files, and standardize author/license marks through the Release
1654 1664 module instead of having per/file stuff (except for files with
1655 1665 particular licenses, like the MIT/PSF-licensed codes).
1656 1666
1657 1667 * IPython/Debugger.py: remove dead code for python 2.1
1658 1668
1659 1669 2004-10-04 Fernando Perez <fperez@colorado.edu>
1660 1670
1661 1671 * IPython/iplib.py (ipmagic): New function for accessing magics
1662 1672 via a normal python function call.
1663 1673
1664 1674 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1665 1675 from '@' to '%', to accomodate the new @decorator syntax of python
1666 1676 2.4.
1667 1677
1668 1678 2004-09-29 Fernando Perez <fperez@colorado.edu>
1669 1679
1670 1680 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1671 1681 matplotlib.use to prevent running scripts which try to switch
1672 1682 interactive backends from within ipython. This will just crash
1673 1683 the python interpreter, so we can't allow it (but a detailed error
1674 1684 is given to the user).
1675 1685
1676 1686 2004-09-28 Fernando Perez <fperez@colorado.edu>
1677 1687
1678 1688 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1679 1689 matplotlib-related fixes so that using @run with non-matplotlib
1680 1690 scripts doesn't pop up spurious plot windows. This requires
1681 1691 matplotlib >= 0.63, where I had to make some changes as well.
1682 1692
1683 1693 * IPython/ipmaker.py (make_IPython): update version requirement to
1684 1694 python 2.2.
1685 1695
1686 1696 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1687 1697 banner arg for embedded customization.
1688 1698
1689 1699 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1690 1700 explicit uses of __IP as the IPython's instance name. Now things
1691 1701 are properly handled via the shell.name value. The actual code
1692 1702 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1693 1703 is much better than before. I'll clean things completely when the
1694 1704 magic stuff gets a real overhaul.
1695 1705
1696 1706 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1697 1707 minor changes to debian dir.
1698 1708
1699 1709 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1700 1710 pointer to the shell itself in the interactive namespace even when
1701 1711 a user-supplied dict is provided. This is needed for embedding
1702 1712 purposes (found by tests with Michel Sanner).
1703 1713
1704 1714 2004-09-27 Fernando Perez <fperez@colorado.edu>
1705 1715
1706 1716 * IPython/UserConfig/ipythonrc: remove []{} from
1707 1717 readline_remove_delims, so that things like [modname.<TAB> do
1708 1718 proper completion. This disables [].TAB, but that's a less common
1709 1719 case than module names in list comprehensions, for example.
1710 1720 Thanks to a report by Andrea Riciputi.
1711 1721
1712 1722 2004-09-09 Fernando Perez <fperez@colorado.edu>
1713 1723
1714 1724 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1715 1725 blocking problems in win32 and osx. Fix by John.
1716 1726
1717 1727 2004-09-08 Fernando Perez <fperez@colorado.edu>
1718 1728
1719 1729 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1720 1730 for Win32 and OSX. Fix by John Hunter.
1721 1731
1722 1732 2004-08-30 *** Released version 0.6.3
1723 1733
1724 1734 2004-08-30 Fernando Perez <fperez@colorado.edu>
1725 1735
1726 1736 * setup.py (isfile): Add manpages to list of dependent files to be
1727 1737 updated.
1728 1738
1729 1739 2004-08-27 Fernando Perez <fperez@colorado.edu>
1730 1740
1731 1741 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1732 1742 for now. They don't really work with standalone WX/GTK code
1733 1743 (though matplotlib IS working fine with both of those backends).
1734 1744 This will neeed much more testing. I disabled most things with
1735 1745 comments, so turning it back on later should be pretty easy.
1736 1746
1737 1747 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1738 1748 autocalling of expressions like r'foo', by modifying the line
1739 1749 split regexp. Closes
1740 1750 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1741 1751 Riley <ipythonbugs-AT-sabi.net>.
1742 1752 (InteractiveShell.mainloop): honor --nobanner with banner
1743 1753 extensions.
1744 1754
1745 1755 * IPython/Shell.py: Significant refactoring of all classes, so
1746 1756 that we can really support ALL matplotlib backends and threading
1747 1757 models (John spotted a bug with Tk which required this). Now we
1748 1758 should support single-threaded, WX-threads and GTK-threads, both
1749 1759 for generic code and for matplotlib.
1750 1760
1751 1761 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1752 1762 -pylab, to simplify things for users. Will also remove the pylab
1753 1763 profile, since now all of matplotlib configuration is directly
1754 1764 handled here. This also reduces startup time.
1755 1765
1756 1766 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1757 1767 shell wasn't being correctly called. Also in IPShellWX.
1758 1768
1759 1769 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1760 1770 fine-tune banner.
1761 1771
1762 1772 * IPython/numutils.py (spike): Deprecate these spike functions,
1763 1773 delete (long deprecated) gnuplot_exec handler.
1764 1774
1765 1775 2004-08-26 Fernando Perez <fperez@colorado.edu>
1766 1776
1767 1777 * ipython.1: Update for threading options, plus some others which
1768 1778 were missing.
1769 1779
1770 1780 * IPython/ipmaker.py (__call__): Added -wthread option for
1771 1781 wxpython thread handling. Make sure threading options are only
1772 1782 valid at the command line.
1773 1783
1774 1784 * scripts/ipython: moved shell selection into a factory function
1775 1785 in Shell.py, to keep the starter script to a minimum.
1776 1786
1777 1787 2004-08-25 Fernando Perez <fperez@colorado.edu>
1778 1788
1779 1789 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1780 1790 John. Along with some recent changes he made to matplotlib, the
1781 1791 next versions of both systems should work very well together.
1782 1792
1783 1793 2004-08-24 Fernando Perez <fperez@colorado.edu>
1784 1794
1785 1795 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1786 1796 tried to switch the profiling to using hotshot, but I'm getting
1787 1797 strange errors from prof.runctx() there. I may be misreading the
1788 1798 docs, but it looks weird. For now the profiling code will
1789 1799 continue to use the standard profiler.
1790 1800
1791 1801 2004-08-23 Fernando Perez <fperez@colorado.edu>
1792 1802
1793 1803 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1794 1804 threaded shell, by John Hunter. It's not quite ready yet, but
1795 1805 close.
1796 1806
1797 1807 2004-08-22 Fernando Perez <fperez@colorado.edu>
1798 1808
1799 1809 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1800 1810 in Magic and ultraTB.
1801 1811
1802 1812 * ipython.1: document threading options in manpage.
1803 1813
1804 1814 * scripts/ipython: Changed name of -thread option to -gthread,
1805 1815 since this is GTK specific. I want to leave the door open for a
1806 1816 -wthread option for WX, which will most likely be necessary. This
1807 1817 change affects usage and ipmaker as well.
1808 1818
1809 1819 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1810 1820 handle the matplotlib shell issues. Code by John Hunter
1811 1821 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1812 1822 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1813 1823 broken (and disabled for end users) for now, but it puts the
1814 1824 infrastructure in place.
1815 1825
1816 1826 2004-08-21 Fernando Perez <fperez@colorado.edu>
1817 1827
1818 1828 * ipythonrc-pylab: Add matplotlib support.
1819 1829
1820 1830 * matplotlib_config.py: new files for matplotlib support, part of
1821 1831 the pylab profile.
1822 1832
1823 1833 * IPython/usage.py (__doc__): documented the threading options.
1824 1834
1825 1835 2004-08-20 Fernando Perez <fperez@colorado.edu>
1826 1836
1827 1837 * ipython: Modified the main calling routine to handle the -thread
1828 1838 and -mpthread options. This needs to be done as a top-level hack,
1829 1839 because it determines which class to instantiate for IPython
1830 1840 itself.
1831 1841
1832 1842 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1833 1843 classes to support multithreaded GTK operation without blocking,
1834 1844 and matplotlib with all backends. This is a lot of still very
1835 1845 experimental code, and threads are tricky. So it may still have a
1836 1846 few rough edges... This code owes a lot to
1837 1847 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1838 1848 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1839 1849 to John Hunter for all the matplotlib work.
1840 1850
1841 1851 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1842 1852 options for gtk thread and matplotlib support.
1843 1853
1844 1854 2004-08-16 Fernando Perez <fperez@colorado.edu>
1845 1855
1846 1856 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1847 1857 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1848 1858 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1849 1859
1850 1860 2004-08-11 Fernando Perez <fperez@colorado.edu>
1851 1861
1852 1862 * setup.py (isfile): Fix build so documentation gets updated for
1853 1863 rpms (it was only done for .tgz builds).
1854 1864
1855 1865 2004-08-10 Fernando Perez <fperez@colorado.edu>
1856 1866
1857 1867 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1858 1868
1859 1869 * iplib.py : Silence syntax error exceptions in tab-completion.
1860 1870
1861 1871 2004-08-05 Fernando Perez <fperez@colorado.edu>
1862 1872
1863 1873 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1864 1874 'color off' mark for continuation prompts. This was causing long
1865 1875 continuation lines to mis-wrap.
1866 1876
1867 1877 2004-08-01 Fernando Perez <fperez@colorado.edu>
1868 1878
1869 1879 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1870 1880 for building ipython to be a parameter. All this is necessary
1871 1881 right now to have a multithreaded version, but this insane
1872 1882 non-design will be cleaned up soon. For now, it's a hack that
1873 1883 works.
1874 1884
1875 1885 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1876 1886 args in various places. No bugs so far, but it's a dangerous
1877 1887 practice.
1878 1888
1879 1889 2004-07-31 Fernando Perez <fperez@colorado.edu>
1880 1890
1881 1891 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1882 1892 fix completion of files with dots in their names under most
1883 1893 profiles (pysh was OK because the completion order is different).
1884 1894
1885 1895 2004-07-27 Fernando Perez <fperez@colorado.edu>
1886 1896
1887 1897 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1888 1898 keywords manually, b/c the one in keyword.py was removed in python
1889 1899 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1890 1900 This is NOT a bug under python 2.3 and earlier.
1891 1901
1892 1902 2004-07-26 Fernando Perez <fperez@colorado.edu>
1893 1903
1894 1904 * IPython/ultraTB.py (VerboseTB.text): Add another
1895 1905 linecache.checkcache() call to try to prevent inspect.py from
1896 1906 crashing under python 2.3. I think this fixes
1897 1907 http://www.scipy.net/roundup/ipython/issue17.
1898 1908
1899 1909 2004-07-26 *** Released version 0.6.2
1900 1910
1901 1911 2004-07-26 Fernando Perez <fperez@colorado.edu>
1902 1912
1903 1913 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1904 1914 fail for any number.
1905 1915 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1906 1916 empty bookmarks.
1907 1917
1908 1918 2004-07-26 *** Released version 0.6.1
1909 1919
1910 1920 2004-07-26 Fernando Perez <fperez@colorado.edu>
1911 1921
1912 1922 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1913 1923
1914 1924 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1915 1925 escaping '()[]{}' in filenames.
1916 1926
1917 1927 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1918 1928 Python 2.2 users who lack a proper shlex.split.
1919 1929
1920 1930 2004-07-19 Fernando Perez <fperez@colorado.edu>
1921 1931
1922 1932 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1923 1933 for reading readline's init file. I follow the normal chain:
1924 1934 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1925 1935 report by Mike Heeter. This closes
1926 1936 http://www.scipy.net/roundup/ipython/issue16.
1927 1937
1928 1938 2004-07-18 Fernando Perez <fperez@colorado.edu>
1929 1939
1930 1940 * IPython/iplib.py (__init__): Add better handling of '\' under
1931 1941 Win32 for filenames. After a patch by Ville.
1932 1942
1933 1943 2004-07-17 Fernando Perez <fperez@colorado.edu>
1934 1944
1935 1945 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1936 1946 autocalling would be triggered for 'foo is bar' if foo is
1937 1947 callable. I also cleaned up the autocall detection code to use a
1938 1948 regexp, which is faster. Bug reported by Alexander Schmolck.
1939 1949
1940 1950 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1941 1951 '?' in them would confuse the help system. Reported by Alex
1942 1952 Schmolck.
1943 1953
1944 1954 2004-07-16 Fernando Perez <fperez@colorado.edu>
1945 1955
1946 1956 * IPython/GnuplotInteractive.py (__all__): added plot2.
1947 1957
1948 1958 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1949 1959 plotting dictionaries, lists or tuples of 1d arrays.
1950 1960
1951 1961 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1952 1962 optimizations.
1953 1963
1954 1964 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1955 1965 the information which was there from Janko's original IPP code:
1956 1966
1957 1967 03.05.99 20:53 porto.ifm.uni-kiel.de
1958 1968 --Started changelog.
1959 1969 --make clear do what it say it does
1960 1970 --added pretty output of lines from inputcache
1961 1971 --Made Logger a mixin class, simplifies handling of switches
1962 1972 --Added own completer class. .string<TAB> expands to last history
1963 1973 line which starts with string. The new expansion is also present
1964 1974 with Ctrl-r from the readline library. But this shows, who this
1965 1975 can be done for other cases.
1966 1976 --Added convention that all shell functions should accept a
1967 1977 parameter_string This opens the door for different behaviour for
1968 1978 each function. @cd is a good example of this.
1969 1979
1970 1980 04.05.99 12:12 porto.ifm.uni-kiel.de
1971 1981 --added logfile rotation
1972 1982 --added new mainloop method which freezes first the namespace
1973 1983
1974 1984 07.05.99 21:24 porto.ifm.uni-kiel.de
1975 1985 --added the docreader classes. Now there is a help system.
1976 1986 -This is only a first try. Currently it's not easy to put new
1977 1987 stuff in the indices. But this is the way to go. Info would be
1978 1988 better, but HTML is every where and not everybody has an info
1979 1989 system installed and it's not so easy to change html-docs to info.
1980 1990 --added global logfile option
1981 1991 --there is now a hook for object inspection method pinfo needs to
1982 1992 be provided for this. Can be reached by two '??'.
1983 1993
1984 1994 08.05.99 20:51 porto.ifm.uni-kiel.de
1985 1995 --added a README
1986 1996 --bug in rc file. Something has changed so functions in the rc
1987 1997 file need to reference the shell and not self. Not clear if it's a
1988 1998 bug or feature.
1989 1999 --changed rc file for new behavior
1990 2000
1991 2001 2004-07-15 Fernando Perez <fperez@colorado.edu>
1992 2002
1993 2003 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1994 2004 cache was falling out of sync in bizarre manners when multi-line
1995 2005 input was present. Minor optimizations and cleanup.
1996 2006
1997 2007 (Logger): Remove old Changelog info for cleanup. This is the
1998 2008 information which was there from Janko's original code:
1999 2009
2000 2010 Changes to Logger: - made the default log filename a parameter
2001 2011
2002 2012 - put a check for lines beginning with !@? in log(). Needed
2003 2013 (even if the handlers properly log their lines) for mid-session
2004 2014 logging activation to work properly. Without this, lines logged
2005 2015 in mid session, which get read from the cache, would end up
2006 2016 'bare' (with !@? in the open) in the log. Now they are caught
2007 2017 and prepended with a #.
2008 2018
2009 2019 * IPython/iplib.py (InteractiveShell.init_readline): added check
2010 2020 in case MagicCompleter fails to be defined, so we don't crash.
2011 2021
2012 2022 2004-07-13 Fernando Perez <fperez@colorado.edu>
2013 2023
2014 2024 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2015 2025 of EPS if the requested filename ends in '.eps'.
2016 2026
2017 2027 2004-07-04 Fernando Perez <fperez@colorado.edu>
2018 2028
2019 2029 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2020 2030 escaping of quotes when calling the shell.
2021 2031
2022 2032 2004-07-02 Fernando Perez <fperez@colorado.edu>
2023 2033
2024 2034 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2025 2035 gettext not working because we were clobbering '_'. Fixes
2026 2036 http://www.scipy.net/roundup/ipython/issue6.
2027 2037
2028 2038 2004-07-01 Fernando Perez <fperez@colorado.edu>
2029 2039
2030 2040 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2031 2041 into @cd. Patch by Ville.
2032 2042
2033 2043 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2034 2044 new function to store things after ipmaker runs. Patch by Ville.
2035 2045 Eventually this will go away once ipmaker is removed and the class
2036 2046 gets cleaned up, but for now it's ok. Key functionality here is
2037 2047 the addition of the persistent storage mechanism, a dict for
2038 2048 keeping data across sessions (for now just bookmarks, but more can
2039 2049 be implemented later).
2040 2050
2041 2051 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2042 2052 persistent across sections. Patch by Ville, I modified it
2043 2053 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2044 2054 added a '-l' option to list all bookmarks.
2045 2055
2046 2056 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2047 2057 center for cleanup. Registered with atexit.register(). I moved
2048 2058 here the old exit_cleanup(). After a patch by Ville.
2049 2059
2050 2060 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2051 2061 characters in the hacked shlex_split for python 2.2.
2052 2062
2053 2063 * IPython/iplib.py (file_matches): more fixes to filenames with
2054 2064 whitespace in them. It's not perfect, but limitations in python's
2055 2065 readline make it impossible to go further.
2056 2066
2057 2067 2004-06-29 Fernando Perez <fperez@colorado.edu>
2058 2068
2059 2069 * IPython/iplib.py (file_matches): escape whitespace correctly in
2060 2070 filename completions. Bug reported by Ville.
2061 2071
2062 2072 2004-06-28 Fernando Perez <fperez@colorado.edu>
2063 2073
2064 2074 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2065 2075 the history file will be called 'history-PROFNAME' (or just
2066 2076 'history' if no profile is loaded). I was getting annoyed at
2067 2077 getting my Numerical work history clobbered by pysh sessions.
2068 2078
2069 2079 * IPython/iplib.py (InteractiveShell.__init__): Internal
2070 2080 getoutputerror() function so that we can honor the system_verbose
2071 2081 flag for _all_ system calls. I also added escaping of #
2072 2082 characters here to avoid confusing Itpl.
2073 2083
2074 2084 * IPython/Magic.py (shlex_split): removed call to shell in
2075 2085 parse_options and replaced it with shlex.split(). The annoying
2076 2086 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2077 2087 to backport it from 2.3, with several frail hacks (the shlex
2078 2088 module is rather limited in 2.2). Thanks to a suggestion by Ville
2079 2089 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2080 2090 problem.
2081 2091
2082 2092 (Magic.magic_system_verbose): new toggle to print the actual
2083 2093 system calls made by ipython. Mainly for debugging purposes.
2084 2094
2085 2095 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2086 2096 doesn't support persistence. Reported (and fix suggested) by
2087 2097 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2088 2098
2089 2099 2004-06-26 Fernando Perez <fperez@colorado.edu>
2090 2100
2091 2101 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2092 2102 continue prompts.
2093 2103
2094 2104 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2095 2105 function (basically a big docstring) and a few more things here to
2096 2106 speedup startup. pysh.py is now very lightweight. We want because
2097 2107 it gets execfile'd, while InterpreterExec gets imported, so
2098 2108 byte-compilation saves time.
2099 2109
2100 2110 2004-06-25 Fernando Perez <fperez@colorado.edu>
2101 2111
2102 2112 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2103 2113 -NUM', which was recently broken.
2104 2114
2105 2115 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2106 2116 in multi-line input (but not !!, which doesn't make sense there).
2107 2117
2108 2118 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2109 2119 It's just too useful, and people can turn it off in the less
2110 2120 common cases where it's a problem.
2111 2121
2112 2122 2004-06-24 Fernando Perez <fperez@colorado.edu>
2113 2123
2114 2124 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2115 2125 special syntaxes (like alias calling) is now allied in multi-line
2116 2126 input. This is still _very_ experimental, but it's necessary for
2117 2127 efficient shell usage combining python looping syntax with system
2118 2128 calls. For now it's restricted to aliases, I don't think it
2119 2129 really even makes sense to have this for magics.
2120 2130
2121 2131 2004-06-23 Fernando Perez <fperez@colorado.edu>
2122 2132
2123 2133 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2124 2134 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2125 2135
2126 2136 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2127 2137 extensions under Windows (after code sent by Gary Bishop). The
2128 2138 extensions considered 'executable' are stored in IPython's rc
2129 2139 structure as win_exec_ext.
2130 2140
2131 2141 * IPython/genutils.py (shell): new function, like system() but
2132 2142 without return value. Very useful for interactive shell work.
2133 2143
2134 2144 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2135 2145 delete aliases.
2136 2146
2137 2147 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2138 2148 sure that the alias table doesn't contain python keywords.
2139 2149
2140 2150 2004-06-21 Fernando Perez <fperez@colorado.edu>
2141 2151
2142 2152 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2143 2153 non-existent items are found in $PATH. Reported by Thorsten.
2144 2154
2145 2155 2004-06-20 Fernando Perez <fperez@colorado.edu>
2146 2156
2147 2157 * IPython/iplib.py (complete): modified the completer so that the
2148 2158 order of priorities can be easily changed at runtime.
2149 2159
2150 2160 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2151 2161 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2152 2162
2153 2163 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2154 2164 expand Python variables prepended with $ in all system calls. The
2155 2165 same was done to InteractiveShell.handle_shell_escape. Now all
2156 2166 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2157 2167 expansion of python variables and expressions according to the
2158 2168 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2159 2169
2160 2170 Though PEP-215 has been rejected, a similar (but simpler) one
2161 2171 seems like it will go into Python 2.4, PEP-292 -
2162 2172 http://www.python.org/peps/pep-0292.html.
2163 2173
2164 2174 I'll keep the full syntax of PEP-215, since IPython has since the
2165 2175 start used Ka-Ping Yee's reference implementation discussed there
2166 2176 (Itpl), and I actually like the powerful semantics it offers.
2167 2177
2168 2178 In order to access normal shell variables, the $ has to be escaped
2169 2179 via an extra $. For example:
2170 2180
2171 2181 In [7]: PATH='a python variable'
2172 2182
2173 2183 In [8]: !echo $PATH
2174 2184 a python variable
2175 2185
2176 2186 In [9]: !echo $$PATH
2177 2187 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2178 2188
2179 2189 (Magic.parse_options): escape $ so the shell doesn't evaluate
2180 2190 things prematurely.
2181 2191
2182 2192 * IPython/iplib.py (InteractiveShell.call_alias): added the
2183 2193 ability for aliases to expand python variables via $.
2184 2194
2185 2195 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2186 2196 system, now there's a @rehash/@rehashx pair of magics. These work
2187 2197 like the csh rehash command, and can be invoked at any time. They
2188 2198 build a table of aliases to everything in the user's $PATH
2189 2199 (@rehash uses everything, @rehashx is slower but only adds
2190 2200 executable files). With this, the pysh.py-based shell profile can
2191 2201 now simply call rehash upon startup, and full access to all
2192 2202 programs in the user's path is obtained.
2193 2203
2194 2204 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2195 2205 functionality is now fully in place. I removed the old dynamic
2196 2206 code generation based approach, in favor of a much lighter one
2197 2207 based on a simple dict. The advantage is that this allows me to
2198 2208 now have thousands of aliases with negligible cost (unthinkable
2199 2209 with the old system).
2200 2210
2201 2211 2004-06-19 Fernando Perez <fperez@colorado.edu>
2202 2212
2203 2213 * IPython/iplib.py (__init__): extended MagicCompleter class to
2204 2214 also complete (last in priority) on user aliases.
2205 2215
2206 2216 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2207 2217 call to eval.
2208 2218 (ItplNS.__init__): Added a new class which functions like Itpl,
2209 2219 but allows configuring the namespace for the evaluation to occur
2210 2220 in.
2211 2221
2212 2222 2004-06-18 Fernando Perez <fperez@colorado.edu>
2213 2223
2214 2224 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2215 2225 better message when 'exit' or 'quit' are typed (a common newbie
2216 2226 confusion).
2217 2227
2218 2228 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2219 2229 check for Windows users.
2220 2230
2221 2231 * IPython/iplib.py (InteractiveShell.user_setup): removed
2222 2232 disabling of colors for Windows. I'll test at runtime and issue a
2223 2233 warning if Gary's readline isn't found, as to nudge users to
2224 2234 download it.
2225 2235
2226 2236 2004-06-16 Fernando Perez <fperez@colorado.edu>
2227 2237
2228 2238 * IPython/genutils.py (Stream.__init__): changed to print errors
2229 2239 to sys.stderr. I had a circular dependency here. Now it's
2230 2240 possible to run ipython as IDLE's shell (consider this pre-alpha,
2231 2241 since true stdout things end up in the starting terminal instead
2232 2242 of IDLE's out).
2233 2243
2234 2244 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2235 2245 users who haven't # updated their prompt_in2 definitions. Remove
2236 2246 eventually.
2237 2247 (multiple_replace): added credit to original ASPN recipe.
2238 2248
2239 2249 2004-06-15 Fernando Perez <fperez@colorado.edu>
2240 2250
2241 2251 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2242 2252 list of auto-defined aliases.
2243 2253
2244 2254 2004-06-13 Fernando Perez <fperez@colorado.edu>
2245 2255
2246 2256 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2247 2257 install was really requested (so setup.py can be used for other
2248 2258 things under Windows).
2249 2259
2250 2260 2004-06-10 Fernando Perez <fperez@colorado.edu>
2251 2261
2252 2262 * IPython/Logger.py (Logger.create_log): Manually remove any old
2253 2263 backup, since os.remove may fail under Windows. Fixes bug
2254 2264 reported by Thorsten.
2255 2265
2256 2266 2004-06-09 Fernando Perez <fperez@colorado.edu>
2257 2267
2258 2268 * examples/example-embed.py: fixed all references to %n (replaced
2259 2269 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2260 2270 for all examples and the manual as well.
2261 2271
2262 2272 2004-06-08 Fernando Perez <fperez@colorado.edu>
2263 2273
2264 2274 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2265 2275 alignment and color management. All 3 prompt subsystems now
2266 2276 inherit from BasePrompt.
2267 2277
2268 2278 * tools/release: updates for windows installer build and tag rpms
2269 2279 with python version (since paths are fixed).
2270 2280
2271 2281 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2272 2282 which will become eventually obsolete. Also fixed the default
2273 2283 prompt_in2 to use \D, so at least new users start with the correct
2274 2284 defaults.
2275 2285 WARNING: Users with existing ipythonrc files will need to apply
2276 2286 this fix manually!
2277 2287
2278 2288 * setup.py: make windows installer (.exe). This is finally the
2279 2289 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2280 2290 which I hadn't included because it required Python 2.3 (or recent
2281 2291 distutils).
2282 2292
2283 2293 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2284 2294 usage of new '\D' escape.
2285 2295
2286 2296 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2287 2297 lacks os.getuid())
2288 2298 (CachedOutput.set_colors): Added the ability to turn coloring
2289 2299 on/off with @colors even for manually defined prompt colors. It
2290 2300 uses a nasty global, but it works safely and via the generic color
2291 2301 handling mechanism.
2292 2302 (Prompt2.__init__): Introduced new escape '\D' for continuation
2293 2303 prompts. It represents the counter ('\#') as dots.
2294 2304 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2295 2305 need to update their ipythonrc files and replace '%n' with '\D' in
2296 2306 their prompt_in2 settings everywhere. Sorry, but there's
2297 2307 otherwise no clean way to get all prompts to properly align. The
2298 2308 ipythonrc shipped with IPython has been updated.
2299 2309
2300 2310 2004-06-07 Fernando Perez <fperez@colorado.edu>
2301 2311
2302 2312 * setup.py (isfile): Pass local_icons option to latex2html, so the
2303 2313 resulting HTML file is self-contained. Thanks to
2304 2314 dryice-AT-liu.com.cn for the tip.
2305 2315
2306 2316 * pysh.py: I created a new profile 'shell', which implements a
2307 2317 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2308 2318 system shell, nor will it become one anytime soon. It's mainly
2309 2319 meant to illustrate the use of the new flexible bash-like prompts.
2310 2320 I guess it could be used by hardy souls for true shell management,
2311 2321 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2312 2322 profile. This uses the InterpreterExec extension provided by
2313 2323 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2314 2324
2315 2325 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2316 2326 auto-align itself with the length of the previous input prompt
2317 2327 (taking into account the invisible color escapes).
2318 2328 (CachedOutput.__init__): Large restructuring of this class. Now
2319 2329 all three prompts (primary1, primary2, output) are proper objects,
2320 2330 managed by the 'parent' CachedOutput class. The code is still a
2321 2331 bit hackish (all prompts share state via a pointer to the cache),
2322 2332 but it's overall far cleaner than before.
2323 2333
2324 2334 * IPython/genutils.py (getoutputerror): modified to add verbose,
2325 2335 debug and header options. This makes the interface of all getout*
2326 2336 functions uniform.
2327 2337 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2328 2338
2329 2339 * IPython/Magic.py (Magic.default_option): added a function to
2330 2340 allow registering default options for any magic command. This
2331 2341 makes it easy to have profiles which customize the magics globally
2332 2342 for a certain use. The values set through this function are
2333 2343 picked up by the parse_options() method, which all magics should
2334 2344 use to parse their options.
2335 2345
2336 2346 * IPython/genutils.py (warn): modified the warnings framework to
2337 2347 use the Term I/O class. I'm trying to slowly unify all of
2338 2348 IPython's I/O operations to pass through Term.
2339 2349
2340 2350 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2341 2351 the secondary prompt to correctly match the length of the primary
2342 2352 one for any prompt. Now multi-line code will properly line up
2343 2353 even for path dependent prompts, such as the new ones available
2344 2354 via the prompt_specials.
2345 2355
2346 2356 2004-06-06 Fernando Perez <fperez@colorado.edu>
2347 2357
2348 2358 * IPython/Prompts.py (prompt_specials): Added the ability to have
2349 2359 bash-like special sequences in the prompts, which get
2350 2360 automatically expanded. Things like hostname, current working
2351 2361 directory and username are implemented already, but it's easy to
2352 2362 add more in the future. Thanks to a patch by W.J. van der Laan
2353 2363 <gnufnork-AT-hetdigitalegat.nl>
2354 2364 (prompt_specials): Added color support for prompt strings, so
2355 2365 users can define arbitrary color setups for their prompts.
2356 2366
2357 2367 2004-06-05 Fernando Perez <fperez@colorado.edu>
2358 2368
2359 2369 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2360 2370 code to load Gary Bishop's readline and configure it
2361 2371 automatically. Thanks to Gary for help on this.
2362 2372
2363 2373 2004-06-01 Fernando Perez <fperez@colorado.edu>
2364 2374
2365 2375 * IPython/Logger.py (Logger.create_log): fix bug for logging
2366 2376 with no filename (previous fix was incomplete).
2367 2377
2368 2378 2004-05-25 Fernando Perez <fperez@colorado.edu>
2369 2379
2370 2380 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2371 2381 parens would get passed to the shell.
2372 2382
2373 2383 2004-05-20 Fernando Perez <fperez@colorado.edu>
2374 2384
2375 2385 * IPython/Magic.py (Magic.magic_prun): changed default profile
2376 2386 sort order to 'time' (the more common profiling need).
2377 2387
2378 2388 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2379 2389 so that source code shown is guaranteed in sync with the file on
2380 2390 disk (also changed in psource). Similar fix to the one for
2381 2391 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2382 2392 <yann.ledu-AT-noos.fr>.
2383 2393
2384 2394 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2385 2395 with a single option would not be correctly parsed. Closes
2386 2396 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2387 2397 introduced in 0.6.0 (on 2004-05-06).
2388 2398
2389 2399 2004-05-13 *** Released version 0.6.0
2390 2400
2391 2401 2004-05-13 Fernando Perez <fperez@colorado.edu>
2392 2402
2393 2403 * debian/: Added debian/ directory to CVS, so that debian support
2394 2404 is publicly accessible. The debian package is maintained by Jack
2395 2405 Moffit <jack-AT-xiph.org>.
2396 2406
2397 2407 * Documentation: included the notes about an ipython-based system
2398 2408 shell (the hypothetical 'pysh') into the new_design.pdf document,
2399 2409 so that these ideas get distributed to users along with the
2400 2410 official documentation.
2401 2411
2402 2412 2004-05-10 Fernando Perez <fperez@colorado.edu>
2403 2413
2404 2414 * IPython/Logger.py (Logger.create_log): fix recently introduced
2405 2415 bug (misindented line) where logstart would fail when not given an
2406 2416 explicit filename.
2407 2417
2408 2418 2004-05-09 Fernando Perez <fperez@colorado.edu>
2409 2419
2410 2420 * IPython/Magic.py (Magic.parse_options): skip system call when
2411 2421 there are no options to look for. Faster, cleaner for the common
2412 2422 case.
2413 2423
2414 2424 * Documentation: many updates to the manual: describing Windows
2415 2425 support better, Gnuplot updates, credits, misc small stuff. Also
2416 2426 updated the new_design doc a bit.
2417 2427
2418 2428 2004-05-06 *** Released version 0.6.0.rc1
2419 2429
2420 2430 2004-05-06 Fernando Perez <fperez@colorado.edu>
2421 2431
2422 2432 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2423 2433 operations to use the vastly more efficient list/''.join() method.
2424 2434 (FormattedTB.text): Fix
2425 2435 http://www.scipy.net/roundup/ipython/issue12 - exception source
2426 2436 extract not updated after reload. Thanks to Mike Salib
2427 2437 <msalib-AT-mit.edu> for pinning the source of the problem.
2428 2438 Fortunately, the solution works inside ipython and doesn't require
2429 2439 any changes to python proper.
2430 2440
2431 2441 * IPython/Magic.py (Magic.parse_options): Improved to process the
2432 2442 argument list as a true shell would (by actually using the
2433 2443 underlying system shell). This way, all @magics automatically get
2434 2444 shell expansion for variables. Thanks to a comment by Alex
2435 2445 Schmolck.
2436 2446
2437 2447 2004-04-04 Fernando Perez <fperez@colorado.edu>
2438 2448
2439 2449 * IPython/iplib.py (InteractiveShell.interact): Added a special
2440 2450 trap for a debugger quit exception, which is basically impossible
2441 2451 to handle by normal mechanisms, given what pdb does to the stack.
2442 2452 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2443 2453
2444 2454 2004-04-03 Fernando Perez <fperez@colorado.edu>
2445 2455
2446 2456 * IPython/genutils.py (Term): Standardized the names of the Term
2447 2457 class streams to cin/cout/cerr, following C++ naming conventions
2448 2458 (I can't use in/out/err because 'in' is not a valid attribute
2449 2459 name).
2450 2460
2451 2461 * IPython/iplib.py (InteractiveShell.interact): don't increment
2452 2462 the prompt if there's no user input. By Daniel 'Dang' Griffith
2453 2463 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2454 2464 Francois Pinard.
2455 2465
2456 2466 2004-04-02 Fernando Perez <fperez@colorado.edu>
2457 2467
2458 2468 * IPython/genutils.py (Stream.__init__): Modified to survive at
2459 2469 least importing in contexts where stdin/out/err aren't true file
2460 2470 objects, such as PyCrust (they lack fileno() and mode). However,
2461 2471 the recovery facilities which rely on these things existing will
2462 2472 not work.
2463 2473
2464 2474 2004-04-01 Fernando Perez <fperez@colorado.edu>
2465 2475
2466 2476 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2467 2477 use the new getoutputerror() function, so it properly
2468 2478 distinguishes stdout/err.
2469 2479
2470 2480 * IPython/genutils.py (getoutputerror): added a function to
2471 2481 capture separately the standard output and error of a command.
2472 2482 After a comment from dang on the mailing lists. This code is
2473 2483 basically a modified version of commands.getstatusoutput(), from
2474 2484 the standard library.
2475 2485
2476 2486 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2477 2487 '!!' as a special syntax (shorthand) to access @sx.
2478 2488
2479 2489 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2480 2490 command and return its output as a list split on '\n'.
2481 2491
2482 2492 2004-03-31 Fernando Perez <fperez@colorado.edu>
2483 2493
2484 2494 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2485 2495 method to dictionaries used as FakeModule instances if they lack
2486 2496 it. At least pydoc in python2.3 breaks for runtime-defined
2487 2497 functions without this hack. At some point I need to _really_
2488 2498 understand what FakeModule is doing, because it's a gross hack.
2489 2499 But it solves Arnd's problem for now...
2490 2500
2491 2501 2004-02-27 Fernando Perez <fperez@colorado.edu>
2492 2502
2493 2503 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2494 2504 mode would behave erratically. Also increased the number of
2495 2505 possible logs in rotate mod to 999. Thanks to Rod Holland
2496 2506 <rhh@StructureLABS.com> for the report and fixes.
2497 2507
2498 2508 2004-02-26 Fernando Perez <fperez@colorado.edu>
2499 2509
2500 2510 * IPython/genutils.py (page): Check that the curses module really
2501 2511 has the initscr attribute before trying to use it. For some
2502 2512 reason, the Solaris curses module is missing this. I think this
2503 2513 should be considered a Solaris python bug, but I'm not sure.
2504 2514
2505 2515 2004-01-17 Fernando Perez <fperez@colorado.edu>
2506 2516
2507 2517 * IPython/genutils.py (Stream.__init__): Changes to try to make
2508 2518 ipython robust against stdin/out/err being closed by the user.
2509 2519 This is 'user error' (and blocks a normal python session, at least
2510 2520 the stdout case). However, Ipython should be able to survive such
2511 2521 instances of abuse as gracefully as possible. To simplify the
2512 2522 coding and maintain compatibility with Gary Bishop's Term
2513 2523 contributions, I've made use of classmethods for this. I think
2514 2524 this introduces a dependency on python 2.2.
2515 2525
2516 2526 2004-01-13 Fernando Perez <fperez@colorado.edu>
2517 2527
2518 2528 * IPython/numutils.py (exp_safe): simplified the code a bit and
2519 2529 removed the need for importing the kinds module altogether.
2520 2530
2521 2531 2004-01-06 Fernando Perez <fperez@colorado.edu>
2522 2532
2523 2533 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2524 2534 a magic function instead, after some community feedback. No
2525 2535 special syntax will exist for it, but its name is deliberately
2526 2536 very short.
2527 2537
2528 2538 2003-12-20 Fernando Perez <fperez@colorado.edu>
2529 2539
2530 2540 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2531 2541 new functionality, to automagically assign the result of a shell
2532 2542 command to a variable. I'll solicit some community feedback on
2533 2543 this before making it permanent.
2534 2544
2535 2545 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2536 2546 requested about callables for which inspect couldn't obtain a
2537 2547 proper argspec. Thanks to a crash report sent by Etienne
2538 2548 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2539 2549
2540 2550 2003-12-09 Fernando Perez <fperez@colorado.edu>
2541 2551
2542 2552 * IPython/genutils.py (page): patch for the pager to work across
2543 2553 various versions of Windows. By Gary Bishop.
2544 2554
2545 2555 2003-12-04 Fernando Perez <fperez@colorado.edu>
2546 2556
2547 2557 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2548 2558 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2549 2559 While I tested this and it looks ok, there may still be corner
2550 2560 cases I've missed.
2551 2561
2552 2562 2003-12-01 Fernando Perez <fperez@colorado.edu>
2553 2563
2554 2564 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2555 2565 where a line like 'p,q=1,2' would fail because the automagic
2556 2566 system would be triggered for @p.
2557 2567
2558 2568 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2559 2569 cleanups, code unmodified.
2560 2570
2561 2571 * IPython/genutils.py (Term): added a class for IPython to handle
2562 2572 output. In most cases it will just be a proxy for stdout/err, but
2563 2573 having this allows modifications to be made for some platforms,
2564 2574 such as handling color escapes under Windows. All of this code
2565 2575 was contributed by Gary Bishop, with minor modifications by me.
2566 2576 The actual changes affect many files.
2567 2577
2568 2578 2003-11-30 Fernando Perez <fperez@colorado.edu>
2569 2579
2570 2580 * IPython/iplib.py (file_matches): new completion code, courtesy
2571 2581 of Jeff Collins. This enables filename completion again under
2572 2582 python 2.3, which disabled it at the C level.
2573 2583
2574 2584 2003-11-11 Fernando Perez <fperez@colorado.edu>
2575 2585
2576 2586 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2577 2587 for Numeric.array(map(...)), but often convenient.
2578 2588
2579 2589 2003-11-05 Fernando Perez <fperez@colorado.edu>
2580 2590
2581 2591 * IPython/numutils.py (frange): Changed a call from int() to
2582 2592 int(round()) to prevent a problem reported with arange() in the
2583 2593 numpy list.
2584 2594
2585 2595 2003-10-06 Fernando Perez <fperez@colorado.edu>
2586 2596
2587 2597 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2588 2598 prevent crashes if sys lacks an argv attribute (it happens with
2589 2599 embedded interpreters which build a bare-bones sys module).
2590 2600 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2591 2601
2592 2602 2003-09-24 Fernando Perez <fperez@colorado.edu>
2593 2603
2594 2604 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2595 2605 to protect against poorly written user objects where __getattr__
2596 2606 raises exceptions other than AttributeError. Thanks to a bug
2597 2607 report by Oliver Sander <osander-AT-gmx.de>.
2598 2608
2599 2609 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2600 2610 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2601 2611
2602 2612 2003-09-09 Fernando Perez <fperez@colorado.edu>
2603 2613
2604 2614 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2605 2615 unpacking a list whith a callable as first element would
2606 2616 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2607 2617 Collins.
2608 2618
2609 2619 2003-08-25 *** Released version 0.5.0
2610 2620
2611 2621 2003-08-22 Fernando Perez <fperez@colorado.edu>
2612 2622
2613 2623 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2614 2624 improperly defined user exceptions. Thanks to feedback from Mark
2615 2625 Russell <mrussell-AT-verio.net>.
2616 2626
2617 2627 2003-08-20 Fernando Perez <fperez@colorado.edu>
2618 2628
2619 2629 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2620 2630 printing so that it would print multi-line string forms starting
2621 2631 with a new line. This way the formatting is better respected for
2622 2632 objects which work hard to make nice string forms.
2623 2633
2624 2634 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2625 2635 autocall would overtake data access for objects with both
2626 2636 __getitem__ and __call__.
2627 2637
2628 2638 2003-08-19 *** Released version 0.5.0-rc1
2629 2639
2630 2640 2003-08-19 Fernando Perez <fperez@colorado.edu>
2631 2641
2632 2642 * IPython/deep_reload.py (load_tail): single tiny change here
2633 2643 seems to fix the long-standing bug of dreload() failing to work
2634 2644 for dotted names. But this module is pretty tricky, so I may have
2635 2645 missed some subtlety. Needs more testing!.
2636 2646
2637 2647 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2638 2648 exceptions which have badly implemented __str__ methods.
2639 2649 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2640 2650 which I've been getting reports about from Python 2.3 users. I
2641 2651 wish I had a simple test case to reproduce the problem, so I could
2642 2652 either write a cleaner workaround or file a bug report if
2643 2653 necessary.
2644 2654
2645 2655 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2646 2656 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2647 2657 a bug report by Tjabo Kloppenburg.
2648 2658
2649 2659 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2650 2660 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2651 2661 seems rather unstable. Thanks to a bug report by Tjabo
2652 2662 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2653 2663
2654 2664 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2655 2665 this out soon because of the critical fixes in the inner loop for
2656 2666 generators.
2657 2667
2658 2668 * IPython/Magic.py (Magic.getargspec): removed. This (and
2659 2669 _get_def) have been obsoleted by OInspect for a long time, I
2660 2670 hadn't noticed that they were dead code.
2661 2671 (Magic._ofind): restored _ofind functionality for a few literals
2662 2672 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2663 2673 for things like "hello".capitalize?, since that would require a
2664 2674 potentially dangerous eval() again.
2665 2675
2666 2676 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2667 2677 logic a bit more to clean up the escapes handling and minimize the
2668 2678 use of _ofind to only necessary cases. The interactive 'feel' of
2669 2679 IPython should have improved quite a bit with the changes in
2670 2680 _prefilter and _ofind (besides being far safer than before).
2671 2681
2672 2682 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2673 2683 obscure, never reported). Edit would fail to find the object to
2674 2684 edit under some circumstances.
2675 2685 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2676 2686 which were causing double-calling of generators. Those eval calls
2677 2687 were _very_ dangerous, since code with side effects could be
2678 2688 triggered. As they say, 'eval is evil'... These were the
2679 2689 nastiest evals in IPython. Besides, _ofind is now far simpler,
2680 2690 and it should also be quite a bit faster. Its use of inspect is
2681 2691 also safer, so perhaps some of the inspect-related crashes I've
2682 2692 seen lately with Python 2.3 might be taken care of. That will
2683 2693 need more testing.
2684 2694
2685 2695 2003-08-17 Fernando Perez <fperez@colorado.edu>
2686 2696
2687 2697 * IPython/iplib.py (InteractiveShell._prefilter): significant
2688 2698 simplifications to the logic for handling user escapes. Faster
2689 2699 and simpler code.
2690 2700
2691 2701 2003-08-14 Fernando Perez <fperez@colorado.edu>
2692 2702
2693 2703 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2694 2704 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2695 2705 but it should be quite a bit faster. And the recursive version
2696 2706 generated O(log N) intermediate storage for all rank>1 arrays,
2697 2707 even if they were contiguous.
2698 2708 (l1norm): Added this function.
2699 2709 (norm): Added this function for arbitrary norms (including
2700 2710 l-infinity). l1 and l2 are still special cases for convenience
2701 2711 and speed.
2702 2712
2703 2713 2003-08-03 Fernando Perez <fperez@colorado.edu>
2704 2714
2705 2715 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2706 2716 exceptions, which now raise PendingDeprecationWarnings in Python
2707 2717 2.3. There were some in Magic and some in Gnuplot2.
2708 2718
2709 2719 2003-06-30 Fernando Perez <fperez@colorado.edu>
2710 2720
2711 2721 * IPython/genutils.py (page): modified to call curses only for
2712 2722 terminals where TERM=='xterm'. After problems under many other
2713 2723 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2714 2724
2715 2725 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2716 2726 would be triggered when readline was absent. This was just an old
2717 2727 debugging statement I'd forgotten to take out.
2718 2728
2719 2729 2003-06-20 Fernando Perez <fperez@colorado.edu>
2720 2730
2721 2731 * IPython/genutils.py (clock): modified to return only user time
2722 2732 (not counting system time), after a discussion on scipy. While
2723 2733 system time may be a useful quantity occasionally, it may much
2724 2734 more easily be skewed by occasional swapping or other similar
2725 2735 activity.
2726 2736
2727 2737 2003-06-05 Fernando Perez <fperez@colorado.edu>
2728 2738
2729 2739 * IPython/numutils.py (identity): new function, for building
2730 2740 arbitrary rank Kronecker deltas (mostly backwards compatible with
2731 2741 Numeric.identity)
2732 2742
2733 2743 2003-06-03 Fernando Perez <fperez@colorado.edu>
2734 2744
2735 2745 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2736 2746 arguments passed to magics with spaces, to allow trailing '\' to
2737 2747 work normally (mainly for Windows users).
2738 2748
2739 2749 2003-05-29 Fernando Perez <fperez@colorado.edu>
2740 2750
2741 2751 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2742 2752 instead of pydoc.help. This fixes a bizarre behavior where
2743 2753 printing '%s' % locals() would trigger the help system. Now
2744 2754 ipython behaves like normal python does.
2745 2755
2746 2756 Note that if one does 'from pydoc import help', the bizarre
2747 2757 behavior returns, but this will also happen in normal python, so
2748 2758 it's not an ipython bug anymore (it has to do with how pydoc.help
2749 2759 is implemented).
2750 2760
2751 2761 2003-05-22 Fernando Perez <fperez@colorado.edu>
2752 2762
2753 2763 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2754 2764 return [] instead of None when nothing matches, also match to end
2755 2765 of line. Patch by Gary Bishop.
2756 2766
2757 2767 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2758 2768 protection as before, for files passed on the command line. This
2759 2769 prevents the CrashHandler from kicking in if user files call into
2760 2770 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2761 2771 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2762 2772
2763 2773 2003-05-20 *** Released version 0.4.0
2764 2774
2765 2775 2003-05-20 Fernando Perez <fperez@colorado.edu>
2766 2776
2767 2777 * setup.py: added support for manpages. It's a bit hackish b/c of
2768 2778 a bug in the way the bdist_rpm distutils target handles gzipped
2769 2779 manpages, but it works. After a patch by Jack.
2770 2780
2771 2781 2003-05-19 Fernando Perez <fperez@colorado.edu>
2772 2782
2773 2783 * IPython/numutils.py: added a mockup of the kinds module, since
2774 2784 it was recently removed from Numeric. This way, numutils will
2775 2785 work for all users even if they are missing kinds.
2776 2786
2777 2787 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2778 2788 failure, which can occur with SWIG-wrapped extensions. After a
2779 2789 crash report from Prabhu.
2780 2790
2781 2791 2003-05-16 Fernando Perez <fperez@colorado.edu>
2782 2792
2783 2793 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2784 2794 protect ipython from user code which may call directly
2785 2795 sys.excepthook (this looks like an ipython crash to the user, even
2786 2796 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2787 2797 This is especially important to help users of WxWindows, but may
2788 2798 also be useful in other cases.
2789 2799
2790 2800 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2791 2801 an optional tb_offset to be specified, and to preserve exception
2792 2802 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2793 2803
2794 2804 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2795 2805
2796 2806 2003-05-15 Fernando Perez <fperez@colorado.edu>
2797 2807
2798 2808 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2799 2809 installing for a new user under Windows.
2800 2810
2801 2811 2003-05-12 Fernando Perez <fperez@colorado.edu>
2802 2812
2803 2813 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2804 2814 handler for Emacs comint-based lines. Currently it doesn't do
2805 2815 much (but importantly, it doesn't update the history cache). In
2806 2816 the future it may be expanded if Alex needs more functionality
2807 2817 there.
2808 2818
2809 2819 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2810 2820 info to crash reports.
2811 2821
2812 2822 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2813 2823 just like Python's -c. Also fixed crash with invalid -color
2814 2824 option value at startup. Thanks to Will French
2815 2825 <wfrench-AT-bestweb.net> for the bug report.
2816 2826
2817 2827 2003-05-09 Fernando Perez <fperez@colorado.edu>
2818 2828
2819 2829 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2820 2830 to EvalDict (it's a mapping, after all) and simplified its code
2821 2831 quite a bit, after a nice discussion on c.l.py where Gustavo
2822 2832 Córdova <gcordova-AT-sismex.com> suggested the new version.
2823 2833
2824 2834 2003-04-30 Fernando Perez <fperez@colorado.edu>
2825 2835
2826 2836 * IPython/genutils.py (timings_out): modified it to reduce its
2827 2837 overhead in the common reps==1 case.
2828 2838
2829 2839 2003-04-29 Fernando Perez <fperez@colorado.edu>
2830 2840
2831 2841 * IPython/genutils.py (timings_out): Modified to use the resource
2832 2842 module, which avoids the wraparound problems of time.clock().
2833 2843
2834 2844 2003-04-17 *** Released version 0.2.15pre4
2835 2845
2836 2846 2003-04-17 Fernando Perez <fperez@colorado.edu>
2837 2847
2838 2848 * setup.py (scriptfiles): Split windows-specific stuff over to a
2839 2849 separate file, in an attempt to have a Windows GUI installer.
2840 2850 That didn't work, but part of the groundwork is done.
2841 2851
2842 2852 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2843 2853 indent/unindent with 4 spaces. Particularly useful in combination
2844 2854 with the new auto-indent option.
2845 2855
2846 2856 2003-04-16 Fernando Perez <fperez@colorado.edu>
2847 2857
2848 2858 * IPython/Magic.py: various replacements of self.rc for
2849 2859 self.shell.rc. A lot more remains to be done to fully disentangle
2850 2860 this class from the main Shell class.
2851 2861
2852 2862 * IPython/GnuplotRuntime.py: added checks for mouse support so
2853 2863 that we don't try to enable it if the current gnuplot doesn't
2854 2864 really support it. Also added checks so that we don't try to
2855 2865 enable persist under Windows (where Gnuplot doesn't recognize the
2856 2866 option).
2857 2867
2858 2868 * IPython/iplib.py (InteractiveShell.interact): Added optional
2859 2869 auto-indenting code, after a patch by King C. Shu
2860 2870 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2861 2871 get along well with pasting indented code. If I ever figure out
2862 2872 how to make that part go well, it will become on by default.
2863 2873
2864 2874 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2865 2875 crash ipython if there was an unmatched '%' in the user's prompt
2866 2876 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2867 2877
2868 2878 * IPython/iplib.py (InteractiveShell.interact): removed the
2869 2879 ability to ask the user whether he wants to crash or not at the
2870 2880 'last line' exception handler. Calling functions at that point
2871 2881 changes the stack, and the error reports would have incorrect
2872 2882 tracebacks.
2873 2883
2874 2884 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2875 2885 pass through a peger a pretty-printed form of any object. After a
2876 2886 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2877 2887
2878 2888 2003-04-14 Fernando Perez <fperez@colorado.edu>
2879 2889
2880 2890 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2881 2891 all files in ~ would be modified at first install (instead of
2882 2892 ~/.ipython). This could be potentially disastrous, as the
2883 2893 modification (make line-endings native) could damage binary files.
2884 2894
2885 2895 2003-04-10 Fernando Perez <fperez@colorado.edu>
2886 2896
2887 2897 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2888 2898 handle only lines which are invalid python. This now means that
2889 2899 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2890 2900 for the bug report.
2891 2901
2892 2902 2003-04-01 Fernando Perez <fperez@colorado.edu>
2893 2903
2894 2904 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2895 2905 where failing to set sys.last_traceback would crash pdb.pm().
2896 2906 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2897 2907 report.
2898 2908
2899 2909 2003-03-25 Fernando Perez <fperez@colorado.edu>
2900 2910
2901 2911 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2902 2912 before printing it (it had a lot of spurious blank lines at the
2903 2913 end).
2904 2914
2905 2915 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2906 2916 output would be sent 21 times! Obviously people don't use this
2907 2917 too often, or I would have heard about it.
2908 2918
2909 2919 2003-03-24 Fernando Perez <fperez@colorado.edu>
2910 2920
2911 2921 * setup.py (scriptfiles): renamed the data_files parameter from
2912 2922 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2913 2923 for the patch.
2914 2924
2915 2925 2003-03-20 Fernando Perez <fperez@colorado.edu>
2916 2926
2917 2927 * IPython/genutils.py (error): added error() and fatal()
2918 2928 functions.
2919 2929
2920 2930 2003-03-18 *** Released version 0.2.15pre3
2921 2931
2922 2932 2003-03-18 Fernando Perez <fperez@colorado.edu>
2923 2933
2924 2934 * setupext/install_data_ext.py
2925 2935 (install_data_ext.initialize_options): Class contributed by Jack
2926 2936 Moffit for fixing the old distutils hack. He is sending this to
2927 2937 the distutils folks so in the future we may not need it as a
2928 2938 private fix.
2929 2939
2930 2940 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2931 2941 changes for Debian packaging. See his patch for full details.
2932 2942 The old distutils hack of making the ipythonrc* files carry a
2933 2943 bogus .py extension is gone, at last. Examples were moved to a
2934 2944 separate subdir under doc/, and the separate executable scripts
2935 2945 now live in their own directory. Overall a great cleanup. The
2936 2946 manual was updated to use the new files, and setup.py has been
2937 2947 fixed for this setup.
2938 2948
2939 2949 * IPython/PyColorize.py (Parser.usage): made non-executable and
2940 2950 created a pycolor wrapper around it to be included as a script.
2941 2951
2942 2952 2003-03-12 *** Released version 0.2.15pre2
2943 2953
2944 2954 2003-03-12 Fernando Perez <fperez@colorado.edu>
2945 2955
2946 2956 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2947 2957 long-standing problem with garbage characters in some terminals.
2948 2958 The issue was really that the \001 and \002 escapes must _only_ be
2949 2959 passed to input prompts (which call readline), but _never_ to
2950 2960 normal text to be printed on screen. I changed ColorANSI to have
2951 2961 two classes: TermColors and InputTermColors, each with the
2952 2962 appropriate escapes for input prompts or normal text. The code in
2953 2963 Prompts.py got slightly more complicated, but this very old and
2954 2964 annoying bug is finally fixed.
2955 2965
2956 2966 All the credit for nailing down the real origin of this problem
2957 2967 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2958 2968 *Many* thanks to him for spending quite a bit of effort on this.
2959 2969
2960 2970 2003-03-05 *** Released version 0.2.15pre1
2961 2971
2962 2972 2003-03-03 Fernando Perez <fperez@colorado.edu>
2963 2973
2964 2974 * IPython/FakeModule.py: Moved the former _FakeModule to a
2965 2975 separate file, because it's also needed by Magic (to fix a similar
2966 2976 pickle-related issue in @run).
2967 2977
2968 2978 2003-03-02 Fernando Perez <fperez@colorado.edu>
2969 2979
2970 2980 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2971 2981 the autocall option at runtime.
2972 2982 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2973 2983 across Magic.py to start separating Magic from InteractiveShell.
2974 2984 (Magic._ofind): Fixed to return proper namespace for dotted
2975 2985 names. Before, a dotted name would always return 'not currently
2976 2986 defined', because it would find the 'parent'. s.x would be found,
2977 2987 but since 'x' isn't defined by itself, it would get confused.
2978 2988 (Magic.magic_run): Fixed pickling problems reported by Ralf
2979 2989 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2980 2990 that I'd used when Mike Heeter reported similar issues at the
2981 2991 top-level, but now for @run. It boils down to injecting the
2982 2992 namespace where code is being executed with something that looks
2983 2993 enough like a module to fool pickle.dump(). Since a pickle stores
2984 2994 a named reference to the importing module, we need this for
2985 2995 pickles to save something sensible.
2986 2996
2987 2997 * IPython/ipmaker.py (make_IPython): added an autocall option.
2988 2998
2989 2999 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2990 3000 the auto-eval code. Now autocalling is an option, and the code is
2991 3001 also vastly safer. There is no more eval() involved at all.
2992 3002
2993 3003 2003-03-01 Fernando Perez <fperez@colorado.edu>
2994 3004
2995 3005 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2996 3006 dict with named keys instead of a tuple.
2997 3007
2998 3008 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2999 3009
3000 3010 * setup.py (make_shortcut): Fixed message about directories
3001 3011 created during Windows installation (the directories were ok, just
3002 3012 the printed message was misleading). Thanks to Chris Liechti
3003 3013 <cliechti-AT-gmx.net> for the heads up.
3004 3014
3005 3015 2003-02-21 Fernando Perez <fperez@colorado.edu>
3006 3016
3007 3017 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3008 3018 of ValueError exception when checking for auto-execution. This
3009 3019 one is raised by things like Numeric arrays arr.flat when the
3010 3020 array is non-contiguous.
3011 3021
3012 3022 2003-01-31 Fernando Perez <fperez@colorado.edu>
3013 3023
3014 3024 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3015 3025 not return any value at all (even though the command would get
3016 3026 executed).
3017 3027 (xsys): Flush stdout right after printing the command to ensure
3018 3028 proper ordering of commands and command output in the total
3019 3029 output.
3020 3030 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3021 3031 system/getoutput as defaults. The old ones are kept for
3022 3032 compatibility reasons, so no code which uses this library needs
3023 3033 changing.
3024 3034
3025 3035 2003-01-27 *** Released version 0.2.14
3026 3036
3027 3037 2003-01-25 Fernando Perez <fperez@colorado.edu>
3028 3038
3029 3039 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3030 3040 functions defined in previous edit sessions could not be re-edited
3031 3041 (because the temp files were immediately removed). Now temp files
3032 3042 are removed only at IPython's exit.
3033 3043 (Magic.magic_run): Improved @run to perform shell-like expansions
3034 3044 on its arguments (~users and $VARS). With this, @run becomes more
3035 3045 like a normal command-line.
3036 3046
3037 3047 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3038 3048 bugs related to embedding and cleaned up that code. A fairly
3039 3049 important one was the impossibility to access the global namespace
3040 3050 through the embedded IPython (only local variables were visible).
3041 3051
3042 3052 2003-01-14 Fernando Perez <fperez@colorado.edu>
3043 3053
3044 3054 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3045 3055 auto-calling to be a bit more conservative. Now it doesn't get
3046 3056 triggered if any of '!=()<>' are in the rest of the input line, to
3047 3057 allow comparing callables. Thanks to Alex for the heads up.
3048 3058
3049 3059 2003-01-07 Fernando Perez <fperez@colorado.edu>
3050 3060
3051 3061 * IPython/genutils.py (page): fixed estimation of the number of
3052 3062 lines in a string to be paged to simply count newlines. This
3053 3063 prevents over-guessing due to embedded escape sequences. A better
3054 3064 long-term solution would involve stripping out the control chars
3055 3065 for the count, but it's potentially so expensive I just don't
3056 3066 think it's worth doing.
3057 3067
3058 3068 2002-12-19 *** Released version 0.2.14pre50
3059 3069
3060 3070 2002-12-19 Fernando Perez <fperez@colorado.edu>
3061 3071
3062 3072 * tools/release (version): Changed release scripts to inform
3063 3073 Andrea and build a NEWS file with a list of recent changes.
3064 3074
3065 3075 * IPython/ColorANSI.py (__all__): changed terminal detection
3066 3076 code. Seems to work better for xterms without breaking
3067 3077 konsole. Will need more testing to determine if WinXP and Mac OSX
3068 3078 also work ok.
3069 3079
3070 3080 2002-12-18 *** Released version 0.2.14pre49
3071 3081
3072 3082 2002-12-18 Fernando Perez <fperez@colorado.edu>
3073 3083
3074 3084 * Docs: added new info about Mac OSX, from Andrea.
3075 3085
3076 3086 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3077 3087 allow direct plotting of python strings whose format is the same
3078 3088 of gnuplot data files.
3079 3089
3080 3090 2002-12-16 Fernando Perez <fperez@colorado.edu>
3081 3091
3082 3092 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3083 3093 value of exit question to be acknowledged.
3084 3094
3085 3095 2002-12-03 Fernando Perez <fperez@colorado.edu>
3086 3096
3087 3097 * IPython/ipmaker.py: removed generators, which had been added
3088 3098 by mistake in an earlier debugging run. This was causing trouble
3089 3099 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3090 3100 for pointing this out.
3091 3101
3092 3102 2002-11-17 Fernando Perez <fperez@colorado.edu>
3093 3103
3094 3104 * Manual: updated the Gnuplot section.
3095 3105
3096 3106 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3097 3107 a much better split of what goes in Runtime and what goes in
3098 3108 Interactive.
3099 3109
3100 3110 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3101 3111 being imported from iplib.
3102 3112
3103 3113 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3104 3114 for command-passing. Now the global Gnuplot instance is called
3105 3115 'gp' instead of 'g', which was really a far too fragile and
3106 3116 common name.
3107 3117
3108 3118 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3109 3119 bounding boxes generated by Gnuplot for square plots.
3110 3120
3111 3121 * IPython/genutils.py (popkey): new function added. I should
3112 3122 suggest this on c.l.py as a dict method, it seems useful.
3113 3123
3114 3124 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3115 3125 to transparently handle PostScript generation. MUCH better than
3116 3126 the previous plot_eps/replot_eps (which I removed now). The code
3117 3127 is also fairly clean and well documented now (including
3118 3128 docstrings).
3119 3129
3120 3130 2002-11-13 Fernando Perez <fperez@colorado.edu>
3121 3131
3122 3132 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3123 3133 (inconsistent with options).
3124 3134
3125 3135 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3126 3136 manually disabled, I don't know why. Fixed it.
3127 3137 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3128 3138 eps output.
3129 3139
3130 3140 2002-11-12 Fernando Perez <fperez@colorado.edu>
3131 3141
3132 3142 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3133 3143 don't propagate up to caller. Fixes crash reported by François
3134 3144 Pinard.
3135 3145
3136 3146 2002-11-09 Fernando Perez <fperez@colorado.edu>
3137 3147
3138 3148 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3139 3149 history file for new users.
3140 3150 (make_IPython): fixed bug where initial install would leave the
3141 3151 user running in the .ipython dir.
3142 3152 (make_IPython): fixed bug where config dir .ipython would be
3143 3153 created regardless of the given -ipythondir option. Thanks to Cory
3144 3154 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3145 3155
3146 3156 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3147 3157 type confirmations. Will need to use it in all of IPython's code
3148 3158 consistently.
3149 3159
3150 3160 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3151 3161 context to print 31 lines instead of the default 5. This will make
3152 3162 the crash reports extremely detailed in case the problem is in
3153 3163 libraries I don't have access to.
3154 3164
3155 3165 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3156 3166 line of defense' code to still crash, but giving users fair
3157 3167 warning. I don't want internal errors to go unreported: if there's
3158 3168 an internal problem, IPython should crash and generate a full
3159 3169 report.
3160 3170
3161 3171 2002-11-08 Fernando Perez <fperez@colorado.edu>
3162 3172
3163 3173 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3164 3174 otherwise uncaught exceptions which can appear if people set
3165 3175 sys.stdout to something badly broken. Thanks to a crash report
3166 3176 from henni-AT-mail.brainbot.com.
3167 3177
3168 3178 2002-11-04 Fernando Perez <fperez@colorado.edu>
3169 3179
3170 3180 * IPython/iplib.py (InteractiveShell.interact): added
3171 3181 __IPYTHON__active to the builtins. It's a flag which goes on when
3172 3182 the interaction starts and goes off again when it stops. This
3173 3183 allows embedding code to detect being inside IPython. Before this
3174 3184 was done via __IPYTHON__, but that only shows that an IPython
3175 3185 instance has been created.
3176 3186
3177 3187 * IPython/Magic.py (Magic.magic_env): I realized that in a
3178 3188 UserDict, instance.data holds the data as a normal dict. So I
3179 3189 modified @env to return os.environ.data instead of rebuilding a
3180 3190 dict by hand.
3181 3191
3182 3192 2002-11-02 Fernando Perez <fperez@colorado.edu>
3183 3193
3184 3194 * IPython/genutils.py (warn): changed so that level 1 prints no
3185 3195 header. Level 2 is now the default (with 'WARNING' header, as
3186 3196 before). I think I tracked all places where changes were needed in
3187 3197 IPython, but outside code using the old level numbering may have
3188 3198 broken.
3189 3199
3190 3200 * IPython/iplib.py (InteractiveShell.runcode): added this to
3191 3201 handle the tracebacks in SystemExit traps correctly. The previous
3192 3202 code (through interact) was printing more of the stack than
3193 3203 necessary, showing IPython internal code to the user.
3194 3204
3195 3205 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3196 3206 default. Now that the default at the confirmation prompt is yes,
3197 3207 it's not so intrusive. François' argument that ipython sessions
3198 3208 tend to be complex enough not to lose them from an accidental C-d,
3199 3209 is a valid one.
3200 3210
3201 3211 * IPython/iplib.py (InteractiveShell.interact): added a
3202 3212 showtraceback() call to the SystemExit trap, and modified the exit
3203 3213 confirmation to have yes as the default.
3204 3214
3205 3215 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3206 3216 this file. It's been gone from the code for a long time, this was
3207 3217 simply leftover junk.
3208 3218
3209 3219 2002-11-01 Fernando Perez <fperez@colorado.edu>
3210 3220
3211 3221 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3212 3222 added. If set, IPython now traps EOF and asks for
3213 3223 confirmation. After a request by François Pinard.
3214 3224
3215 3225 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3216 3226 of @abort, and with a new (better) mechanism for handling the
3217 3227 exceptions.
3218 3228
3219 3229 2002-10-27 Fernando Perez <fperez@colorado.edu>
3220 3230
3221 3231 * IPython/usage.py (__doc__): updated the --help information and
3222 3232 the ipythonrc file to indicate that -log generates
3223 3233 ./ipython.log. Also fixed the corresponding info in @logstart.
3224 3234 This and several other fixes in the manuals thanks to reports by
3225 3235 François Pinard <pinard-AT-iro.umontreal.ca>.
3226 3236
3227 3237 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3228 3238 refer to @logstart (instead of @log, which doesn't exist).
3229 3239
3230 3240 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3231 3241 AttributeError crash. Thanks to Christopher Armstrong
3232 3242 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3233 3243 introduced recently (in 0.2.14pre37) with the fix to the eval
3234 3244 problem mentioned below.
3235 3245
3236 3246 2002-10-17 Fernando Perez <fperez@colorado.edu>
3237 3247
3238 3248 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3239 3249 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3240 3250
3241 3251 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3242 3252 this function to fix a problem reported by Alex Schmolck. He saw
3243 3253 it with list comprehensions and generators, which were getting
3244 3254 called twice. The real problem was an 'eval' call in testing for
3245 3255 automagic which was evaluating the input line silently.
3246 3256
3247 3257 This is a potentially very nasty bug, if the input has side
3248 3258 effects which must not be repeated. The code is much cleaner now,
3249 3259 without any blanket 'except' left and with a regexp test for
3250 3260 actual function names.
3251 3261
3252 3262 But an eval remains, which I'm not fully comfortable with. I just
3253 3263 don't know how to find out if an expression could be a callable in
3254 3264 the user's namespace without doing an eval on the string. However
3255 3265 that string is now much more strictly checked so that no code
3256 3266 slips by, so the eval should only happen for things that can
3257 3267 really be only function/method names.
3258 3268
3259 3269 2002-10-15 Fernando Perez <fperez@colorado.edu>
3260 3270
3261 3271 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3262 3272 OSX information to main manual, removed README_Mac_OSX file from
3263 3273 distribution. Also updated credits for recent additions.
3264 3274
3265 3275 2002-10-10 Fernando Perez <fperez@colorado.edu>
3266 3276
3267 3277 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3268 3278 terminal-related issues. Many thanks to Andrea Riciputi
3269 3279 <andrea.riciputi-AT-libero.it> for writing it.
3270 3280
3271 3281 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3272 3282 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3273 3283
3274 3284 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3275 3285 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3276 3286 <syver-en-AT-online.no> who both submitted patches for this problem.
3277 3287
3278 3288 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3279 3289 global embedding to make sure that things don't overwrite user
3280 3290 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3281 3291
3282 3292 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3283 3293 compatibility. Thanks to Hayden Callow
3284 3294 <h.callow-AT-elec.canterbury.ac.nz>
3285 3295
3286 3296 2002-10-04 Fernando Perez <fperez@colorado.edu>
3287 3297
3288 3298 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3289 3299 Gnuplot.File objects.
3290 3300
3291 3301 2002-07-23 Fernando Perez <fperez@colorado.edu>
3292 3302
3293 3303 * IPython/genutils.py (timing): Added timings() and timing() for
3294 3304 quick access to the most commonly needed data, the execution
3295 3305 times. Old timing() renamed to timings_out().
3296 3306
3297 3307 2002-07-18 Fernando Perez <fperez@colorado.edu>
3298 3308
3299 3309 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3300 3310 bug with nested instances disrupting the parent's tab completion.
3301 3311
3302 3312 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3303 3313 all_completions code to begin the emacs integration.
3304 3314
3305 3315 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3306 3316 argument to allow titling individual arrays when plotting.
3307 3317
3308 3318 2002-07-15 Fernando Perez <fperez@colorado.edu>
3309 3319
3310 3320 * setup.py (make_shortcut): changed to retrieve the value of
3311 3321 'Program Files' directory from the registry (this value changes in
3312 3322 non-english versions of Windows). Thanks to Thomas Fanslau
3313 3323 <tfanslau-AT-gmx.de> for the report.
3314 3324
3315 3325 2002-07-10 Fernando Perez <fperez@colorado.edu>
3316 3326
3317 3327 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3318 3328 a bug in pdb, which crashes if a line with only whitespace is
3319 3329 entered. Bug report submitted to sourceforge.
3320 3330
3321 3331 2002-07-09 Fernando Perez <fperez@colorado.edu>
3322 3332
3323 3333 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3324 3334 reporting exceptions (it's a bug in inspect.py, I just set a
3325 3335 workaround).
3326 3336
3327 3337 2002-07-08 Fernando Perez <fperez@colorado.edu>
3328 3338
3329 3339 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3330 3340 __IPYTHON__ in __builtins__ to show up in user_ns.
3331 3341
3332 3342 2002-07-03 Fernando Perez <fperez@colorado.edu>
3333 3343
3334 3344 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3335 3345 name from @gp_set_instance to @gp_set_default.
3336 3346
3337 3347 * IPython/ipmaker.py (make_IPython): default editor value set to
3338 3348 '0' (a string), to match the rc file. Otherwise will crash when
3339 3349 .strip() is called on it.
3340 3350
3341 3351
3342 3352 2002-06-28 Fernando Perez <fperez@colorado.edu>
3343 3353
3344 3354 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3345 3355 of files in current directory when a file is executed via
3346 3356 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3347 3357
3348 3358 * setup.py (manfiles): fix for rpm builds, submitted by RA
3349 3359 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3350 3360
3351 3361 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3352 3362 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3353 3363 string!). A. Schmolck caught this one.
3354 3364
3355 3365 2002-06-27 Fernando Perez <fperez@colorado.edu>
3356 3366
3357 3367 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3358 3368 defined files at the cmd line. __name__ wasn't being set to
3359 3369 __main__.
3360 3370
3361 3371 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3362 3372 regular lists and tuples besides Numeric arrays.
3363 3373
3364 3374 * IPython/Prompts.py (CachedOutput.__call__): Added output
3365 3375 supression for input ending with ';'. Similar to Mathematica and
3366 3376 Matlab. The _* vars and Out[] list are still updated, just like
3367 3377 Mathematica behaves.
3368 3378
3369 3379 2002-06-25 Fernando Perez <fperez@colorado.edu>
3370 3380
3371 3381 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3372 3382 .ini extensions for profiels under Windows.
3373 3383
3374 3384 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3375 3385 string form. Fix contributed by Alexander Schmolck
3376 3386 <a.schmolck-AT-gmx.net>
3377 3387
3378 3388 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3379 3389 pre-configured Gnuplot instance.
3380 3390
3381 3391 2002-06-21 Fernando Perez <fperez@colorado.edu>
3382 3392
3383 3393 * IPython/numutils.py (exp_safe): new function, works around the
3384 3394 underflow problems in Numeric.
3385 3395 (log2): New fn. Safe log in base 2: returns exact integer answer
3386 3396 for exact integer powers of 2.
3387 3397
3388 3398 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3389 3399 properly.
3390 3400
3391 3401 2002-06-20 Fernando Perez <fperez@colorado.edu>
3392 3402
3393 3403 * IPython/genutils.py (timing): new function like
3394 3404 Mathematica's. Similar to time_test, but returns more info.
3395 3405
3396 3406 2002-06-18 Fernando Perez <fperez@colorado.edu>
3397 3407
3398 3408 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3399 3409 according to Mike Heeter's suggestions.
3400 3410
3401 3411 2002-06-16 Fernando Perez <fperez@colorado.edu>
3402 3412
3403 3413 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3404 3414 system. GnuplotMagic is gone as a user-directory option. New files
3405 3415 make it easier to use all the gnuplot stuff both from external
3406 3416 programs as well as from IPython. Had to rewrite part of
3407 3417 hardcopy() b/c of a strange bug: often the ps files simply don't
3408 3418 get created, and require a repeat of the command (often several
3409 3419 times).
3410 3420
3411 3421 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3412 3422 resolve output channel at call time, so that if sys.stderr has
3413 3423 been redirected by user this gets honored.
3414 3424
3415 3425 2002-06-13 Fernando Perez <fperez@colorado.edu>
3416 3426
3417 3427 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3418 3428 IPShell. Kept a copy with the old names to avoid breaking people's
3419 3429 embedded code.
3420 3430
3421 3431 * IPython/ipython: simplified it to the bare minimum after
3422 3432 Holger's suggestions. Added info about how to use it in
3423 3433 PYTHONSTARTUP.
3424 3434
3425 3435 * IPython/Shell.py (IPythonShell): changed the options passing
3426 3436 from a string with funky %s replacements to a straight list. Maybe
3427 3437 a bit more typing, but it follows sys.argv conventions, so there's
3428 3438 less special-casing to remember.
3429 3439
3430 3440 2002-06-12 Fernando Perez <fperez@colorado.edu>
3431 3441
3432 3442 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3433 3443 command. Thanks to a suggestion by Mike Heeter.
3434 3444 (Magic.magic_pfile): added behavior to look at filenames if given
3435 3445 arg is not a defined object.
3436 3446 (Magic.magic_save): New @save function to save code snippets. Also
3437 3447 a Mike Heeter idea.
3438 3448
3439 3449 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3440 3450 plot() and replot(). Much more convenient now, especially for
3441 3451 interactive use.
3442 3452
3443 3453 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3444 3454 filenames.
3445 3455
3446 3456 2002-06-02 Fernando Perez <fperez@colorado.edu>
3447 3457
3448 3458 * IPython/Struct.py (Struct.__init__): modified to admit
3449 3459 initialization via another struct.
3450 3460
3451 3461 * IPython/genutils.py (SystemExec.__init__): New stateful
3452 3462 interface to xsys and bq. Useful for writing system scripts.
3453 3463
3454 3464 2002-05-30 Fernando Perez <fperez@colorado.edu>
3455 3465
3456 3466 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3457 3467 documents. This will make the user download smaller (it's getting
3458 3468 too big).
3459 3469
3460 3470 2002-05-29 Fernando Perez <fperez@colorado.edu>
3461 3471
3462 3472 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3463 3473 fix problems with shelve and pickle. Seems to work, but I don't
3464 3474 know if corner cases break it. Thanks to Mike Heeter
3465 3475 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3466 3476
3467 3477 2002-05-24 Fernando Perez <fperez@colorado.edu>
3468 3478
3469 3479 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3470 3480 macros having broken.
3471 3481
3472 3482 2002-05-21 Fernando Perez <fperez@colorado.edu>
3473 3483
3474 3484 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3475 3485 introduced logging bug: all history before logging started was
3476 3486 being written one character per line! This came from the redesign
3477 3487 of the input history as a special list which slices to strings,
3478 3488 not to lists.
3479 3489
3480 3490 2002-05-20 Fernando Perez <fperez@colorado.edu>
3481 3491
3482 3492 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3483 3493 be an attribute of all classes in this module. The design of these
3484 3494 classes needs some serious overhauling.
3485 3495
3486 3496 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3487 3497 which was ignoring '_' in option names.
3488 3498
3489 3499 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3490 3500 'Verbose_novars' to 'Context' and made it the new default. It's a
3491 3501 bit more readable and also safer than verbose.
3492 3502
3493 3503 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3494 3504 triple-quoted strings.
3495 3505
3496 3506 * IPython/OInspect.py (__all__): new module exposing the object
3497 3507 introspection facilities. Now the corresponding magics are dummy
3498 3508 wrappers around this. Having this module will make it much easier
3499 3509 to put these functions into our modified pdb.
3500 3510 This new object inspector system uses the new colorizing module,
3501 3511 so source code and other things are nicely syntax highlighted.
3502 3512
3503 3513 2002-05-18 Fernando Perez <fperez@colorado.edu>
3504 3514
3505 3515 * IPython/ColorANSI.py: Split the coloring tools into a separate
3506 3516 module so I can use them in other code easier (they were part of
3507 3517 ultraTB).
3508 3518
3509 3519 2002-05-17 Fernando Perez <fperez@colorado.edu>
3510 3520
3511 3521 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3512 3522 fixed it to set the global 'g' also to the called instance, as
3513 3523 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3514 3524 user's 'g' variables).
3515 3525
3516 3526 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3517 3527 global variables (aliases to _ih,_oh) so that users which expect
3518 3528 In[5] or Out[7] to work aren't unpleasantly surprised.
3519 3529 (InputList.__getslice__): new class to allow executing slices of
3520 3530 input history directly. Very simple class, complements the use of
3521 3531 macros.
3522 3532
3523 3533 2002-05-16 Fernando Perez <fperez@colorado.edu>
3524 3534
3525 3535 * setup.py (docdirbase): make doc directory be just doc/IPython
3526 3536 without version numbers, it will reduce clutter for users.
3527 3537
3528 3538 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3529 3539 execfile call to prevent possible memory leak. See for details:
3530 3540 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3531 3541
3532 3542 2002-05-15 Fernando Perez <fperez@colorado.edu>
3533 3543
3534 3544 * IPython/Magic.py (Magic.magic_psource): made the object
3535 3545 introspection names be more standard: pdoc, pdef, pfile and
3536 3546 psource. They all print/page their output, and it makes
3537 3547 remembering them easier. Kept old names for compatibility as
3538 3548 aliases.
3539 3549
3540 3550 2002-05-14 Fernando Perez <fperez@colorado.edu>
3541 3551
3542 3552 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3543 3553 what the mouse problem was. The trick is to use gnuplot with temp
3544 3554 files and NOT with pipes (for data communication), because having
3545 3555 both pipes and the mouse on is bad news.
3546 3556
3547 3557 2002-05-13 Fernando Perez <fperez@colorado.edu>
3548 3558
3549 3559 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3550 3560 bug. Information would be reported about builtins even when
3551 3561 user-defined functions overrode them.
3552 3562
3553 3563 2002-05-11 Fernando Perez <fperez@colorado.edu>
3554 3564
3555 3565 * IPython/__init__.py (__all__): removed FlexCompleter from
3556 3566 __all__ so that things don't fail in platforms without readline.
3557 3567
3558 3568 2002-05-10 Fernando Perez <fperez@colorado.edu>
3559 3569
3560 3570 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3561 3571 it requires Numeric, effectively making Numeric a dependency for
3562 3572 IPython.
3563 3573
3564 3574 * Released 0.2.13
3565 3575
3566 3576 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3567 3577 profiler interface. Now all the major options from the profiler
3568 3578 module are directly supported in IPython, both for single
3569 3579 expressions (@prun) and for full programs (@run -p).
3570 3580
3571 3581 2002-05-09 Fernando Perez <fperez@colorado.edu>
3572 3582
3573 3583 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3574 3584 magic properly formatted for screen.
3575 3585
3576 3586 * setup.py (make_shortcut): Changed things to put pdf version in
3577 3587 doc/ instead of doc/manual (had to change lyxport a bit).
3578 3588
3579 3589 * IPython/Magic.py (Profile.string_stats): made profile runs go
3580 3590 through pager (they are long and a pager allows searching, saving,
3581 3591 etc.)
3582 3592
3583 3593 2002-05-08 Fernando Perez <fperez@colorado.edu>
3584 3594
3585 3595 * Released 0.2.12
3586 3596
3587 3597 2002-05-06 Fernando Perez <fperez@colorado.edu>
3588 3598
3589 3599 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3590 3600 introduced); 'hist n1 n2' was broken.
3591 3601 (Magic.magic_pdb): added optional on/off arguments to @pdb
3592 3602 (Magic.magic_run): added option -i to @run, which executes code in
3593 3603 the IPython namespace instead of a clean one. Also added @irun as
3594 3604 an alias to @run -i.
3595 3605
3596 3606 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3597 3607 fixed (it didn't really do anything, the namespaces were wrong).
3598 3608
3599 3609 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3600 3610
3601 3611 * IPython/__init__.py (__all__): Fixed package namespace, now
3602 3612 'import IPython' does give access to IPython.<all> as
3603 3613 expected. Also renamed __release__ to Release.
3604 3614
3605 3615 * IPython/Debugger.py (__license__): created new Pdb class which
3606 3616 functions like a drop-in for the normal pdb.Pdb but does NOT
3607 3617 import readline by default. This way it doesn't muck up IPython's
3608 3618 readline handling, and now tab-completion finally works in the
3609 3619 debugger -- sort of. It completes things globally visible, but the
3610 3620 completer doesn't track the stack as pdb walks it. That's a bit
3611 3621 tricky, and I'll have to implement it later.
3612 3622
3613 3623 2002-05-05 Fernando Perez <fperez@colorado.edu>
3614 3624
3615 3625 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3616 3626 magic docstrings when printed via ? (explicit \'s were being
3617 3627 printed).
3618 3628
3619 3629 * IPython/ipmaker.py (make_IPython): fixed namespace
3620 3630 identification bug. Now variables loaded via logs or command-line
3621 3631 files are recognized in the interactive namespace by @who.
3622 3632
3623 3633 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3624 3634 log replay system stemming from the string form of Structs.
3625 3635
3626 3636 * IPython/Magic.py (Macro.__init__): improved macros to properly
3627 3637 handle magic commands in them.
3628 3638 (Magic.magic_logstart): usernames are now expanded so 'logstart
3629 3639 ~/mylog' now works.
3630 3640
3631 3641 * IPython/iplib.py (complete): fixed bug where paths starting with
3632 3642 '/' would be completed as magic names.
3633 3643
3634 3644 2002-05-04 Fernando Perez <fperez@colorado.edu>
3635 3645
3636 3646 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3637 3647 allow running full programs under the profiler's control.
3638 3648
3639 3649 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3640 3650 mode to report exceptions verbosely but without formatting
3641 3651 variables. This addresses the issue of ipython 'freezing' (it's
3642 3652 not frozen, but caught in an expensive formatting loop) when huge
3643 3653 variables are in the context of an exception.
3644 3654 (VerboseTB.text): Added '--->' markers at line where exception was
3645 3655 triggered. Much clearer to read, especially in NoColor modes.
3646 3656
3647 3657 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3648 3658 implemented in reverse when changing to the new parse_options().
3649 3659
3650 3660 2002-05-03 Fernando Perez <fperez@colorado.edu>
3651 3661
3652 3662 * IPython/Magic.py (Magic.parse_options): new function so that
3653 3663 magics can parse options easier.
3654 3664 (Magic.magic_prun): new function similar to profile.run(),
3655 3665 suggested by Chris Hart.
3656 3666 (Magic.magic_cd): fixed behavior so that it only changes if
3657 3667 directory actually is in history.
3658 3668
3659 3669 * IPython/usage.py (__doc__): added information about potential
3660 3670 slowness of Verbose exception mode when there are huge data
3661 3671 structures to be formatted (thanks to Archie Paulson).
3662 3672
3663 3673 * IPython/ipmaker.py (make_IPython): Changed default logging
3664 3674 (when simply called with -log) to use curr_dir/ipython.log in
3665 3675 rotate mode. Fixed crash which was occuring with -log before
3666 3676 (thanks to Jim Boyle).
3667 3677
3668 3678 2002-05-01 Fernando Perez <fperez@colorado.edu>
3669 3679
3670 3680 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3671 3681 was nasty -- though somewhat of a corner case).
3672 3682
3673 3683 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3674 3684 text (was a bug).
3675 3685
3676 3686 2002-04-30 Fernando Perez <fperez@colorado.edu>
3677 3687
3678 3688 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3679 3689 a print after ^D or ^C from the user so that the In[] prompt
3680 3690 doesn't over-run the gnuplot one.
3681 3691
3682 3692 2002-04-29 Fernando Perez <fperez@colorado.edu>
3683 3693
3684 3694 * Released 0.2.10
3685 3695
3686 3696 * IPython/__release__.py (version): get date dynamically.
3687 3697
3688 3698 * Misc. documentation updates thanks to Arnd's comments. Also ran
3689 3699 a full spellcheck on the manual (hadn't been done in a while).
3690 3700
3691 3701 2002-04-27 Fernando Perez <fperez@colorado.edu>
3692 3702
3693 3703 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3694 3704 starting a log in mid-session would reset the input history list.
3695 3705
3696 3706 2002-04-26 Fernando Perez <fperez@colorado.edu>
3697 3707
3698 3708 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3699 3709 all files were being included in an update. Now anything in
3700 3710 UserConfig that matches [A-Za-z]*.py will go (this excludes
3701 3711 __init__.py)
3702 3712
3703 3713 2002-04-25 Fernando Perez <fperez@colorado.edu>
3704 3714
3705 3715 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3706 3716 to __builtins__ so that any form of embedded or imported code can
3707 3717 test for being inside IPython.
3708 3718
3709 3719 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3710 3720 changed to GnuplotMagic because it's now an importable module,
3711 3721 this makes the name follow that of the standard Gnuplot module.
3712 3722 GnuplotMagic can now be loaded at any time in mid-session.
3713 3723
3714 3724 2002-04-24 Fernando Perez <fperez@colorado.edu>
3715 3725
3716 3726 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3717 3727 the globals (IPython has its own namespace) and the
3718 3728 PhysicalQuantity stuff is much better anyway.
3719 3729
3720 3730 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3721 3731 embedding example to standard user directory for
3722 3732 distribution. Also put it in the manual.
3723 3733
3724 3734 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3725 3735 instance as first argument (so it doesn't rely on some obscure
3726 3736 hidden global).
3727 3737
3728 3738 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3729 3739 delimiters. While it prevents ().TAB from working, it allows
3730 3740 completions in open (... expressions. This is by far a more common
3731 3741 case.
3732 3742
3733 3743 2002-04-23 Fernando Perez <fperez@colorado.edu>
3734 3744
3735 3745 * IPython/Extensions/InterpreterPasteInput.py: new
3736 3746 syntax-processing module for pasting lines with >>> or ... at the
3737 3747 start.
3738 3748
3739 3749 * IPython/Extensions/PhysicalQ_Interactive.py
3740 3750 (PhysicalQuantityInteractive.__int__): fixed to work with either
3741 3751 Numeric or math.
3742 3752
3743 3753 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3744 3754 provided profiles. Now we have:
3745 3755 -math -> math module as * and cmath with its own namespace.
3746 3756 -numeric -> Numeric as *, plus gnuplot & grace
3747 3757 -physics -> same as before
3748 3758
3749 3759 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3750 3760 user-defined magics wouldn't be found by @magic if they were
3751 3761 defined as class methods. Also cleaned up the namespace search
3752 3762 logic and the string building (to use %s instead of many repeated
3753 3763 string adds).
3754 3764
3755 3765 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3756 3766 of user-defined magics to operate with class methods (cleaner, in
3757 3767 line with the gnuplot code).
3758 3768
3759 3769 2002-04-22 Fernando Perez <fperez@colorado.edu>
3760 3770
3761 3771 * setup.py: updated dependency list so that manual is updated when
3762 3772 all included files change.
3763 3773
3764 3774 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3765 3775 the delimiter removal option (the fix is ugly right now).
3766 3776
3767 3777 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3768 3778 all of the math profile (quicker loading, no conflict between
3769 3779 g-9.8 and g-gnuplot).
3770 3780
3771 3781 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3772 3782 name of post-mortem files to IPython_crash_report.txt.
3773 3783
3774 3784 * Cleanup/update of the docs. Added all the new readline info and
3775 3785 formatted all lists as 'real lists'.
3776 3786
3777 3787 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3778 3788 tab-completion options, since the full readline parse_and_bind is
3779 3789 now accessible.
3780 3790
3781 3791 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3782 3792 handling of readline options. Now users can specify any string to
3783 3793 be passed to parse_and_bind(), as well as the delimiters to be
3784 3794 removed.
3785 3795 (InteractiveShell.__init__): Added __name__ to the global
3786 3796 namespace so that things like Itpl which rely on its existence
3787 3797 don't crash.
3788 3798 (InteractiveShell._prefilter): Defined the default with a _ so
3789 3799 that prefilter() is easier to override, while the default one
3790 3800 remains available.
3791 3801
3792 3802 2002-04-18 Fernando Perez <fperez@colorado.edu>
3793 3803
3794 3804 * Added information about pdb in the docs.
3795 3805
3796 3806 2002-04-17 Fernando Perez <fperez@colorado.edu>
3797 3807
3798 3808 * IPython/ipmaker.py (make_IPython): added rc_override option to
3799 3809 allow passing config options at creation time which may override
3800 3810 anything set in the config files or command line. This is
3801 3811 particularly useful for configuring embedded instances.
3802 3812
3803 3813 2002-04-15 Fernando Perez <fperez@colorado.edu>
3804 3814
3805 3815 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3806 3816 crash embedded instances because of the input cache falling out of
3807 3817 sync with the output counter.
3808 3818
3809 3819 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3810 3820 mode which calls pdb after an uncaught exception in IPython itself.
3811 3821
3812 3822 2002-04-14 Fernando Perez <fperez@colorado.edu>
3813 3823
3814 3824 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3815 3825 readline, fix it back after each call.
3816 3826
3817 3827 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3818 3828 method to force all access via __call__(), which guarantees that
3819 3829 traceback references are properly deleted.
3820 3830
3821 3831 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3822 3832 improve printing when pprint is in use.
3823 3833
3824 3834 2002-04-13 Fernando Perez <fperez@colorado.edu>
3825 3835
3826 3836 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3827 3837 exceptions aren't caught anymore. If the user triggers one, he
3828 3838 should know why he's doing it and it should go all the way up,
3829 3839 just like any other exception. So now @abort will fully kill the
3830 3840 embedded interpreter and the embedding code (unless that happens
3831 3841 to catch SystemExit).
3832 3842
3833 3843 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3834 3844 and a debugger() method to invoke the interactive pdb debugger
3835 3845 after printing exception information. Also added the corresponding
3836 3846 -pdb option and @pdb magic to control this feature, and updated
3837 3847 the docs. After a suggestion from Christopher Hart
3838 3848 (hart-AT-caltech.edu).
3839 3849
3840 3850 2002-04-12 Fernando Perez <fperez@colorado.edu>
3841 3851
3842 3852 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3843 3853 the exception handlers defined by the user (not the CrashHandler)
3844 3854 so that user exceptions don't trigger an ipython bug report.
3845 3855
3846 3856 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3847 3857 configurable (it should have always been so).
3848 3858
3849 3859 2002-03-26 Fernando Perez <fperez@colorado.edu>
3850 3860
3851 3861 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3852 3862 and there to fix embedding namespace issues. This should all be
3853 3863 done in a more elegant way.
3854 3864
3855 3865 2002-03-25 Fernando Perez <fperez@colorado.edu>
3856 3866
3857 3867 * IPython/genutils.py (get_home_dir): Try to make it work under
3858 3868 win9x also.
3859 3869
3860 3870 2002-03-20 Fernando Perez <fperez@colorado.edu>
3861 3871
3862 3872 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3863 3873 sys.displayhook untouched upon __init__.
3864 3874
3865 3875 2002-03-19 Fernando Perez <fperez@colorado.edu>
3866 3876
3867 3877 * Released 0.2.9 (for embedding bug, basically).
3868 3878
3869 3879 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3870 3880 exceptions so that enclosing shell's state can be restored.
3871 3881
3872 3882 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3873 3883 naming conventions in the .ipython/ dir.
3874 3884
3875 3885 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3876 3886 from delimiters list so filenames with - in them get expanded.
3877 3887
3878 3888 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3879 3889 sys.displayhook not being properly restored after an embedded call.
3880 3890
3881 3891 2002-03-18 Fernando Perez <fperez@colorado.edu>
3882 3892
3883 3893 * Released 0.2.8
3884 3894
3885 3895 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3886 3896 some files weren't being included in a -upgrade.
3887 3897 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3888 3898 on' so that the first tab completes.
3889 3899 (InteractiveShell.handle_magic): fixed bug with spaces around
3890 3900 quotes breaking many magic commands.
3891 3901
3892 3902 * setup.py: added note about ignoring the syntax error messages at
3893 3903 installation.
3894 3904
3895 3905 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3896 3906 streamlining the gnuplot interface, now there's only one magic @gp.
3897 3907
3898 3908 2002-03-17 Fernando Perez <fperez@colorado.edu>
3899 3909
3900 3910 * IPython/UserConfig/magic_gnuplot.py: new name for the
3901 3911 example-magic_pm.py file. Much enhanced system, now with a shell
3902 3912 for communicating directly with gnuplot, one command at a time.
3903 3913
3904 3914 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3905 3915 setting __name__=='__main__'.
3906 3916
3907 3917 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3908 3918 mini-shell for accessing gnuplot from inside ipython. Should
3909 3919 extend it later for grace access too. Inspired by Arnd's
3910 3920 suggestion.
3911 3921
3912 3922 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3913 3923 calling magic functions with () in their arguments. Thanks to Arnd
3914 3924 Baecker for pointing this to me.
3915 3925
3916 3926 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3917 3927 infinitely for integer or complex arrays (only worked with floats).
3918 3928
3919 3929 2002-03-16 Fernando Perez <fperez@colorado.edu>
3920 3930
3921 3931 * setup.py: Merged setup and setup_windows into a single script
3922 3932 which properly handles things for windows users.
3923 3933
3924 3934 2002-03-15 Fernando Perez <fperez@colorado.edu>
3925 3935
3926 3936 * Big change to the manual: now the magics are all automatically
3927 3937 documented. This information is generated from their docstrings
3928 3938 and put in a latex file included by the manual lyx file. This way
3929 3939 we get always up to date information for the magics. The manual
3930 3940 now also has proper version information, also auto-synced.
3931 3941
3932 3942 For this to work, an undocumented --magic_docstrings option was added.
3933 3943
3934 3944 2002-03-13 Fernando Perez <fperez@colorado.edu>
3935 3945
3936 3946 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3937 3947 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3938 3948
3939 3949 2002-03-12 Fernando Perez <fperez@colorado.edu>
3940 3950
3941 3951 * IPython/ultraTB.py (TermColors): changed color escapes again to
3942 3952 fix the (old, reintroduced) line-wrapping bug. Basically, if
3943 3953 \001..\002 aren't given in the color escapes, lines get wrapped
3944 3954 weirdly. But giving those screws up old xterms and emacs terms. So
3945 3955 I added some logic for emacs terms to be ok, but I can't identify old
3946 3956 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3947 3957
3948 3958 2002-03-10 Fernando Perez <fperez@colorado.edu>
3949 3959
3950 3960 * IPython/usage.py (__doc__): Various documentation cleanups and
3951 3961 updates, both in usage docstrings and in the manual.
3952 3962
3953 3963 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3954 3964 handling of caching. Set minimum acceptabe value for having a
3955 3965 cache at 20 values.
3956 3966
3957 3967 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3958 3968 install_first_time function to a method, renamed it and added an
3959 3969 'upgrade' mode. Now people can update their config directory with
3960 3970 a simple command line switch (-upgrade, also new).
3961 3971
3962 3972 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3963 3973 @file (convenient for automagic users under Python >= 2.2).
3964 3974 Removed @files (it seemed more like a plural than an abbrev. of
3965 3975 'file show').
3966 3976
3967 3977 * IPython/iplib.py (install_first_time): Fixed crash if there were
3968 3978 backup files ('~') in .ipython/ install directory.
3969 3979
3970 3980 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3971 3981 system. Things look fine, but these changes are fairly
3972 3982 intrusive. Test them for a few days.
3973 3983
3974 3984 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3975 3985 the prompts system. Now all in/out prompt strings are user
3976 3986 controllable. This is particularly useful for embedding, as one
3977 3987 can tag embedded instances with particular prompts.
3978 3988
3979 3989 Also removed global use of sys.ps1/2, which now allows nested
3980 3990 embeddings without any problems. Added command-line options for
3981 3991 the prompt strings.
3982 3992
3983 3993 2002-03-08 Fernando Perez <fperez@colorado.edu>
3984 3994
3985 3995 * IPython/UserConfig/example-embed-short.py (ipshell): added
3986 3996 example file with the bare minimum code for embedding.
3987 3997
3988 3998 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3989 3999 functionality for the embeddable shell to be activated/deactivated
3990 4000 either globally or at each call.
3991 4001
3992 4002 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3993 4003 rewriting the prompt with '--->' for auto-inputs with proper
3994 4004 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3995 4005 this is handled by the prompts class itself, as it should.
3996 4006
3997 4007 2002-03-05 Fernando Perez <fperez@colorado.edu>
3998 4008
3999 4009 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4000 4010 @logstart to avoid name clashes with the math log function.
4001 4011
4002 4012 * Big updates to X/Emacs section of the manual.
4003 4013
4004 4014 * Removed ipython_emacs. Milan explained to me how to pass
4005 4015 arguments to ipython through Emacs. Some day I'm going to end up
4006 4016 learning some lisp...
4007 4017
4008 4018 2002-03-04 Fernando Perez <fperez@colorado.edu>
4009 4019
4010 4020 * IPython/ipython_emacs: Created script to be used as the
4011 4021 py-python-command Emacs variable so we can pass IPython
4012 4022 parameters. I can't figure out how to tell Emacs directly to pass
4013 4023 parameters to IPython, so a dummy shell script will do it.
4014 4024
4015 4025 Other enhancements made for things to work better under Emacs'
4016 4026 various types of terminals. Many thanks to Milan Zamazal
4017 4027 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4018 4028
4019 4029 2002-03-01 Fernando Perez <fperez@colorado.edu>
4020 4030
4021 4031 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4022 4032 that loading of readline is now optional. This gives better
4023 4033 control to emacs users.
4024 4034
4025 4035 * IPython/ultraTB.py (__date__): Modified color escape sequences
4026 4036 and now things work fine under xterm and in Emacs' term buffers
4027 4037 (though not shell ones). Well, in emacs you get colors, but all
4028 4038 seem to be 'light' colors (no difference between dark and light
4029 4039 ones). But the garbage chars are gone, and also in xterms. It
4030 4040 seems that now I'm using 'cleaner' ansi sequences.
4031 4041
4032 4042 2002-02-21 Fernando Perez <fperez@colorado.edu>
4033 4043
4034 4044 * Released 0.2.7 (mainly to publish the scoping fix).
4035 4045
4036 4046 * IPython/Logger.py (Logger.logstate): added. A corresponding
4037 4047 @logstate magic was created.
4038 4048
4039 4049 * IPython/Magic.py: fixed nested scoping problem under Python
4040 4050 2.1.x (automagic wasn't working).
4041 4051
4042 4052 2002-02-20 Fernando Perez <fperez@colorado.edu>
4043 4053
4044 4054 * Released 0.2.6.
4045 4055
4046 4056 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4047 4057 option so that logs can come out without any headers at all.
4048 4058
4049 4059 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4050 4060 SciPy.
4051 4061
4052 4062 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4053 4063 that embedded IPython calls don't require vars() to be explicitly
4054 4064 passed. Now they are extracted from the caller's frame (code
4055 4065 snatched from Eric Jones' weave). Added better documentation to
4056 4066 the section on embedding and the example file.
4057 4067
4058 4068 * IPython/genutils.py (page): Changed so that under emacs, it just
4059 4069 prints the string. You can then page up and down in the emacs
4060 4070 buffer itself. This is how the builtin help() works.
4061 4071
4062 4072 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4063 4073 macro scoping: macros need to be executed in the user's namespace
4064 4074 to work as if they had been typed by the user.
4065 4075
4066 4076 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4067 4077 execute automatically (no need to type 'exec...'). They then
4068 4078 behave like 'true macros'. The printing system was also modified
4069 4079 for this to work.
4070 4080
4071 4081 2002-02-19 Fernando Perez <fperez@colorado.edu>
4072 4082
4073 4083 * IPython/genutils.py (page_file): new function for paging files
4074 4084 in an OS-independent way. Also necessary for file viewing to work
4075 4085 well inside Emacs buffers.
4076 4086 (page): Added checks for being in an emacs buffer.
4077 4087 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4078 4088 same bug in iplib.
4079 4089
4080 4090 2002-02-18 Fernando Perez <fperez@colorado.edu>
4081 4091
4082 4092 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4083 4093 of readline so that IPython can work inside an Emacs buffer.
4084 4094
4085 4095 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4086 4096 method signatures (they weren't really bugs, but it looks cleaner
4087 4097 and keeps PyChecker happy).
4088 4098
4089 4099 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4090 4100 for implementing various user-defined hooks. Currently only
4091 4101 display is done.
4092 4102
4093 4103 * IPython/Prompts.py (CachedOutput._display): changed display
4094 4104 functions so that they can be dynamically changed by users easily.
4095 4105
4096 4106 * IPython/Extensions/numeric_formats.py (num_display): added an
4097 4107 extension for printing NumPy arrays in flexible manners. It
4098 4108 doesn't do anything yet, but all the structure is in
4099 4109 place. Ultimately the plan is to implement output format control
4100 4110 like in Octave.
4101 4111
4102 4112 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4103 4113 methods are found at run-time by all the automatic machinery.
4104 4114
4105 4115 2002-02-17 Fernando Perez <fperez@colorado.edu>
4106 4116
4107 4117 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4108 4118 whole file a little.
4109 4119
4110 4120 * ToDo: closed this document. Now there's a new_design.lyx
4111 4121 document for all new ideas. Added making a pdf of it for the
4112 4122 end-user distro.
4113 4123
4114 4124 * IPython/Logger.py (Logger.switch_log): Created this to replace
4115 4125 logon() and logoff(). It also fixes a nasty crash reported by
4116 4126 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4117 4127
4118 4128 * IPython/iplib.py (complete): got auto-completion to work with
4119 4129 automagic (I had wanted this for a long time).
4120 4130
4121 4131 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4122 4132 to @file, since file() is now a builtin and clashes with automagic
4123 4133 for @file.
4124 4134
4125 4135 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4126 4136 of this was previously in iplib, which had grown to more than 2000
4127 4137 lines, way too long. No new functionality, but it makes managing
4128 4138 the code a bit easier.
4129 4139
4130 4140 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4131 4141 information to crash reports.
4132 4142
4133 4143 2002-02-12 Fernando Perez <fperez@colorado.edu>
4134 4144
4135 4145 * Released 0.2.5.
4136 4146
4137 4147 2002-02-11 Fernando Perez <fperez@colorado.edu>
4138 4148
4139 4149 * Wrote a relatively complete Windows installer. It puts
4140 4150 everything in place, creates Start Menu entries and fixes the
4141 4151 color issues. Nothing fancy, but it works.
4142 4152
4143 4153 2002-02-10 Fernando Perez <fperez@colorado.edu>
4144 4154
4145 4155 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4146 4156 os.path.expanduser() call so that we can type @run ~/myfile.py and
4147 4157 have thigs work as expected.
4148 4158
4149 4159 * IPython/genutils.py (page): fixed exception handling so things
4150 4160 work both in Unix and Windows correctly. Quitting a pager triggers
4151 4161 an IOError/broken pipe in Unix, and in windows not finding a pager
4152 4162 is also an IOError, so I had to actually look at the return value
4153 4163 of the exception, not just the exception itself. Should be ok now.
4154 4164
4155 4165 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4156 4166 modified to allow case-insensitive color scheme changes.
4157 4167
4158 4168 2002-02-09 Fernando Perez <fperez@colorado.edu>
4159 4169
4160 4170 * IPython/genutils.py (native_line_ends): new function to leave
4161 4171 user config files with os-native line-endings.
4162 4172
4163 4173 * README and manual updates.
4164 4174
4165 4175 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4166 4176 instead of StringType to catch Unicode strings.
4167 4177
4168 4178 * IPython/genutils.py (filefind): fixed bug for paths with
4169 4179 embedded spaces (very common in Windows).
4170 4180
4171 4181 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4172 4182 files under Windows, so that they get automatically associated
4173 4183 with a text editor. Windows makes it a pain to handle
4174 4184 extension-less files.
4175 4185
4176 4186 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4177 4187 warning about readline only occur for Posix. In Windows there's no
4178 4188 way to get readline, so why bother with the warning.
4179 4189
4180 4190 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4181 4191 for __str__ instead of dir(self), since dir() changed in 2.2.
4182 4192
4183 4193 * Ported to Windows! Tested on XP, I suspect it should work fine
4184 4194 on NT/2000, but I don't think it will work on 98 et al. That
4185 4195 series of Windows is such a piece of junk anyway that I won't try
4186 4196 porting it there. The XP port was straightforward, showed a few
4187 4197 bugs here and there (fixed all), in particular some string
4188 4198 handling stuff which required considering Unicode strings (which
4189 4199 Windows uses). This is good, but hasn't been too tested :) No
4190 4200 fancy installer yet, I'll put a note in the manual so people at
4191 4201 least make manually a shortcut.
4192 4202
4193 4203 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4194 4204 into a single one, "colors". This now controls both prompt and
4195 4205 exception color schemes, and can be changed both at startup
4196 4206 (either via command-line switches or via ipythonrc files) and at
4197 4207 runtime, with @colors.
4198 4208 (Magic.magic_run): renamed @prun to @run and removed the old
4199 4209 @run. The two were too similar to warrant keeping both.
4200 4210
4201 4211 2002-02-03 Fernando Perez <fperez@colorado.edu>
4202 4212
4203 4213 * IPython/iplib.py (install_first_time): Added comment on how to
4204 4214 configure the color options for first-time users. Put a <return>
4205 4215 request at the end so that small-terminal users get a chance to
4206 4216 read the startup info.
4207 4217
4208 4218 2002-01-23 Fernando Perez <fperez@colorado.edu>
4209 4219
4210 4220 * IPython/iplib.py (CachedOutput.update): Changed output memory
4211 4221 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4212 4222 input history we still use _i. Did this b/c these variable are
4213 4223 very commonly used in interactive work, so the less we need to
4214 4224 type the better off we are.
4215 4225 (Magic.magic_prun): updated @prun to better handle the namespaces
4216 4226 the file will run in, including a fix for __name__ not being set
4217 4227 before.
4218 4228
4219 4229 2002-01-20 Fernando Perez <fperez@colorado.edu>
4220 4230
4221 4231 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4222 4232 extra garbage for Python 2.2. Need to look more carefully into
4223 4233 this later.
4224 4234
4225 4235 2002-01-19 Fernando Perez <fperez@colorado.edu>
4226 4236
4227 4237 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4228 4238 display SyntaxError exceptions properly formatted when they occur
4229 4239 (they can be triggered by imported code).
4230 4240
4231 4241 2002-01-18 Fernando Perez <fperez@colorado.edu>
4232 4242
4233 4243 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4234 4244 SyntaxError exceptions are reported nicely formatted, instead of
4235 4245 spitting out only offset information as before.
4236 4246 (Magic.magic_prun): Added the @prun function for executing
4237 4247 programs with command line args inside IPython.
4238 4248
4239 4249 2002-01-16 Fernando Perez <fperez@colorado.edu>
4240 4250
4241 4251 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4242 4252 to *not* include the last item given in a range. This brings their
4243 4253 behavior in line with Python's slicing:
4244 4254 a[n1:n2] -> a[n1]...a[n2-1]
4245 4255 It may be a bit less convenient, but I prefer to stick to Python's
4246 4256 conventions *everywhere*, so users never have to wonder.
4247 4257 (Magic.magic_macro): Added @macro function to ease the creation of
4248 4258 macros.
4249 4259
4250 4260 2002-01-05 Fernando Perez <fperez@colorado.edu>
4251 4261
4252 4262 * Released 0.2.4.
4253 4263
4254 4264 * IPython/iplib.py (Magic.magic_pdef):
4255 4265 (InteractiveShell.safe_execfile): report magic lines and error
4256 4266 lines without line numbers so one can easily copy/paste them for
4257 4267 re-execution.
4258 4268
4259 4269 * Updated manual with recent changes.
4260 4270
4261 4271 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4262 4272 docstring printing when class? is called. Very handy for knowing
4263 4273 how to create class instances (as long as __init__ is well
4264 4274 documented, of course :)
4265 4275 (Magic.magic_doc): print both class and constructor docstrings.
4266 4276 (Magic.magic_pdef): give constructor info if passed a class and
4267 4277 __call__ info for callable object instances.
4268 4278
4269 4279 2002-01-04 Fernando Perez <fperez@colorado.edu>
4270 4280
4271 4281 * Made deep_reload() off by default. It doesn't always work
4272 4282 exactly as intended, so it's probably safer to have it off. It's
4273 4283 still available as dreload() anyway, so nothing is lost.
4274 4284
4275 4285 2002-01-02 Fernando Perez <fperez@colorado.edu>
4276 4286
4277 4287 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4278 4288 so I wanted an updated release).
4279 4289
4280 4290 2001-12-27 Fernando Perez <fperez@colorado.edu>
4281 4291
4282 4292 * IPython/iplib.py (InteractiveShell.interact): Added the original
4283 4293 code from 'code.py' for this module in order to change the
4284 4294 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4285 4295 the history cache would break when the user hit Ctrl-C, and
4286 4296 interact() offers no way to add any hooks to it.
4287 4297
4288 4298 2001-12-23 Fernando Perez <fperez@colorado.edu>
4289 4299
4290 4300 * setup.py: added check for 'MANIFEST' before trying to remove
4291 4301 it. Thanks to Sean Reifschneider.
4292 4302
4293 4303 2001-12-22 Fernando Perez <fperez@colorado.edu>
4294 4304
4295 4305 * Released 0.2.2.
4296 4306
4297 4307 * Finished (reasonably) writing the manual. Later will add the
4298 4308 python-standard navigation stylesheets, but for the time being
4299 4309 it's fairly complete. Distribution will include html and pdf
4300 4310 versions.
4301 4311
4302 4312 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4303 4313 (MayaVi author).
4304 4314
4305 4315 2001-12-21 Fernando Perez <fperez@colorado.edu>
4306 4316
4307 4317 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4308 4318 good public release, I think (with the manual and the distutils
4309 4319 installer). The manual can use some work, but that can go
4310 4320 slowly. Otherwise I think it's quite nice for end users. Next
4311 4321 summer, rewrite the guts of it...
4312 4322
4313 4323 * Changed format of ipythonrc files to use whitespace as the
4314 4324 separator instead of an explicit '='. Cleaner.
4315 4325
4316 4326 2001-12-20 Fernando Perez <fperez@colorado.edu>
4317 4327
4318 4328 * Started a manual in LyX. For now it's just a quick merge of the
4319 4329 various internal docstrings and READMEs. Later it may grow into a
4320 4330 nice, full-blown manual.
4321 4331
4322 4332 * Set up a distutils based installer. Installation should now be
4323 4333 trivially simple for end-users.
4324 4334
4325 4335 2001-12-11 Fernando Perez <fperez@colorado.edu>
4326 4336
4327 4337 * Released 0.2.0. First public release, announced it at
4328 4338 comp.lang.python. From now on, just bugfixes...
4329 4339
4330 4340 * Went through all the files, set copyright/license notices and
4331 4341 cleaned up things. Ready for release.
4332 4342
4333 4343 2001-12-10 Fernando Perez <fperez@colorado.edu>
4334 4344
4335 4345 * Changed the first-time installer not to use tarfiles. It's more
4336 4346 robust now and less unix-dependent. Also makes it easier for
4337 4347 people to later upgrade versions.
4338 4348
4339 4349 * Changed @exit to @abort to reflect the fact that it's pretty
4340 4350 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4341 4351 becomes significant only when IPyhton is embedded: in that case,
4342 4352 C-D closes IPython only, but @abort kills the enclosing program
4343 4353 too (unless it had called IPython inside a try catching
4344 4354 SystemExit).
4345 4355
4346 4356 * Created Shell module which exposes the actuall IPython Shell
4347 4357 classes, currently the normal and the embeddable one. This at
4348 4358 least offers a stable interface we won't need to change when
4349 4359 (later) the internals are rewritten. That rewrite will be confined
4350 4360 to iplib and ipmaker, but the Shell interface should remain as is.
4351 4361
4352 4362 * Added embed module which offers an embeddable IPShell object,
4353 4363 useful to fire up IPython *inside* a running program. Great for
4354 4364 debugging or dynamical data analysis.
4355 4365
4356 4366 2001-12-08 Fernando Perez <fperez@colorado.edu>
4357 4367
4358 4368 * Fixed small bug preventing seeing info from methods of defined
4359 4369 objects (incorrect namespace in _ofind()).
4360 4370
4361 4371 * Documentation cleanup. Moved the main usage docstrings to a
4362 4372 separate file, usage.py (cleaner to maintain, and hopefully in the
4363 4373 future some perlpod-like way of producing interactive, man and
4364 4374 html docs out of it will be found).
4365 4375
4366 4376 * Added @profile to see your profile at any time.
4367 4377
4368 4378 * Added @p as an alias for 'print'. It's especially convenient if
4369 4379 using automagic ('p x' prints x).
4370 4380
4371 4381 * Small cleanups and fixes after a pychecker run.
4372 4382
4373 4383 * Changed the @cd command to handle @cd - and @cd -<n> for
4374 4384 visiting any directory in _dh.
4375 4385
4376 4386 * Introduced _dh, a history of visited directories. @dhist prints
4377 4387 it out with numbers.
4378 4388
4379 4389 2001-12-07 Fernando Perez <fperez@colorado.edu>
4380 4390
4381 4391 * Released 0.1.22
4382 4392
4383 4393 * Made initialization a bit more robust against invalid color
4384 4394 options in user input (exit, not traceback-crash).
4385 4395
4386 4396 * Changed the bug crash reporter to write the report only in the
4387 4397 user's .ipython directory. That way IPython won't litter people's
4388 4398 hard disks with crash files all over the place. Also print on
4389 4399 screen the necessary mail command.
4390 4400
4391 4401 * With the new ultraTB, implemented LightBG color scheme for light
4392 4402 background terminals. A lot of people like white backgrounds, so I
4393 4403 guess we should at least give them something readable.
4394 4404
4395 4405 2001-12-06 Fernando Perez <fperez@colorado.edu>
4396 4406
4397 4407 * Modified the structure of ultraTB. Now there's a proper class
4398 4408 for tables of color schemes which allow adding schemes easily and
4399 4409 switching the active scheme without creating a new instance every
4400 4410 time (which was ridiculous). The syntax for creating new schemes
4401 4411 is also cleaner. I think ultraTB is finally done, with a clean
4402 4412 class structure. Names are also much cleaner (now there's proper
4403 4413 color tables, no need for every variable to also have 'color' in
4404 4414 its name).
4405 4415
4406 4416 * Broke down genutils into separate files. Now genutils only
4407 4417 contains utility functions, and classes have been moved to their
4408 4418 own files (they had enough independent functionality to warrant
4409 4419 it): ConfigLoader, OutputTrap, Struct.
4410 4420
4411 4421 2001-12-05 Fernando Perez <fperez@colorado.edu>
4412 4422
4413 4423 * IPython turns 21! Released version 0.1.21, as a candidate for
4414 4424 public consumption. If all goes well, release in a few days.
4415 4425
4416 4426 * Fixed path bug (files in Extensions/ directory wouldn't be found
4417 4427 unless IPython/ was explicitly in sys.path).
4418 4428
4419 4429 * Extended the FlexCompleter class as MagicCompleter to allow
4420 4430 completion of @-starting lines.
4421 4431
4422 4432 * Created __release__.py file as a central repository for release
4423 4433 info that other files can read from.
4424 4434
4425 4435 * Fixed small bug in logging: when logging was turned on in
4426 4436 mid-session, old lines with special meanings (!@?) were being
4427 4437 logged without the prepended comment, which is necessary since
4428 4438 they are not truly valid python syntax. This should make session
4429 4439 restores produce less errors.
4430 4440
4431 4441 * The namespace cleanup forced me to make a FlexCompleter class
4432 4442 which is nothing but a ripoff of rlcompleter, but with selectable
4433 4443 namespace (rlcompleter only works in __main__.__dict__). I'll try
4434 4444 to submit a note to the authors to see if this change can be
4435 4445 incorporated in future rlcompleter releases (Dec.6: done)
4436 4446
4437 4447 * More fixes to namespace handling. It was a mess! Now all
4438 4448 explicit references to __main__.__dict__ are gone (except when
4439 4449 really needed) and everything is handled through the namespace
4440 4450 dicts in the IPython instance. We seem to be getting somewhere
4441 4451 with this, finally...
4442 4452
4443 4453 * Small documentation updates.
4444 4454
4445 4455 * Created the Extensions directory under IPython (with an
4446 4456 __init__.py). Put the PhysicalQ stuff there. This directory should
4447 4457 be used for all special-purpose extensions.
4448 4458
4449 4459 * File renaming:
4450 4460 ipythonlib --> ipmaker
4451 4461 ipplib --> iplib
4452 4462 This makes a bit more sense in terms of what these files actually do.
4453 4463
4454 4464 * Moved all the classes and functions in ipythonlib to ipplib, so
4455 4465 now ipythonlib only has make_IPython(). This will ease up its
4456 4466 splitting in smaller functional chunks later.
4457 4467
4458 4468 * Cleaned up (done, I think) output of @whos. Better column
4459 4469 formatting, and now shows str(var) for as much as it can, which is
4460 4470 typically what one gets with a 'print var'.
4461 4471
4462 4472 2001-12-04 Fernando Perez <fperez@colorado.edu>
4463 4473
4464 4474 * Fixed namespace problems. Now builtin/IPyhton/user names get
4465 4475 properly reported in their namespace. Internal namespace handling
4466 4476 is finally getting decent (not perfect yet, but much better than
4467 4477 the ad-hoc mess we had).
4468 4478
4469 4479 * Removed -exit option. If people just want to run a python
4470 4480 script, that's what the normal interpreter is for. Less
4471 4481 unnecessary options, less chances for bugs.
4472 4482
4473 4483 * Added a crash handler which generates a complete post-mortem if
4474 4484 IPython crashes. This will help a lot in tracking bugs down the
4475 4485 road.
4476 4486
4477 4487 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4478 4488 which were boud to functions being reassigned would bypass the
4479 4489 logger, breaking the sync of _il with the prompt counter. This
4480 4490 would then crash IPython later when a new line was logged.
4481 4491
4482 4492 2001-12-02 Fernando Perez <fperez@colorado.edu>
4483 4493
4484 4494 * Made IPython a package. This means people don't have to clutter
4485 4495 their sys.path with yet another directory. Changed the INSTALL
4486 4496 file accordingly.
4487 4497
4488 4498 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4489 4499 sorts its output (so @who shows it sorted) and @whos formats the
4490 4500 table according to the width of the first column. Nicer, easier to
4491 4501 read. Todo: write a generic table_format() which takes a list of
4492 4502 lists and prints it nicely formatted, with optional row/column
4493 4503 separators and proper padding and justification.
4494 4504
4495 4505 * Released 0.1.20
4496 4506
4497 4507 * Fixed bug in @log which would reverse the inputcache list (a
4498 4508 copy operation was missing).
4499 4509
4500 4510 * Code cleanup. @config was changed to use page(). Better, since
4501 4511 its output is always quite long.
4502 4512
4503 4513 * Itpl is back as a dependency. I was having too many problems
4504 4514 getting the parametric aliases to work reliably, and it's just
4505 4515 easier to code weird string operations with it than playing %()s
4506 4516 games. It's only ~6k, so I don't think it's too big a deal.
4507 4517
4508 4518 * Found (and fixed) a very nasty bug with history. !lines weren't
4509 4519 getting cached, and the out of sync caches would crash
4510 4520 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4511 4521 division of labor a bit better. Bug fixed, cleaner structure.
4512 4522
4513 4523 2001-12-01 Fernando Perez <fperez@colorado.edu>
4514 4524
4515 4525 * Released 0.1.19
4516 4526
4517 4527 * Added option -n to @hist to prevent line number printing. Much
4518 4528 easier to copy/paste code this way.
4519 4529
4520 4530 * Created global _il to hold the input list. Allows easy
4521 4531 re-execution of blocks of code by slicing it (inspired by Janko's
4522 4532 comment on 'macros').
4523 4533
4524 4534 * Small fixes and doc updates.
4525 4535
4526 4536 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4527 4537 much too fragile with automagic. Handles properly multi-line
4528 4538 statements and takes parameters.
4529 4539
4530 4540 2001-11-30 Fernando Perez <fperez@colorado.edu>
4531 4541
4532 4542 * Version 0.1.18 released.
4533 4543
4534 4544 * Fixed nasty namespace bug in initial module imports.
4535 4545
4536 4546 * Added copyright/license notes to all code files (except
4537 4547 DPyGetOpt). For the time being, LGPL. That could change.
4538 4548
4539 4549 * Rewrote a much nicer README, updated INSTALL, cleaned up
4540 4550 ipythonrc-* samples.
4541 4551
4542 4552 * Overall code/documentation cleanup. Basically ready for
4543 4553 release. Only remaining thing: licence decision (LGPL?).
4544 4554
4545 4555 * Converted load_config to a class, ConfigLoader. Now recursion
4546 4556 control is better organized. Doesn't include the same file twice.
4547 4557
4548 4558 2001-11-29 Fernando Perez <fperez@colorado.edu>
4549 4559
4550 4560 * Got input history working. Changed output history variables from
4551 4561 _p to _o so that _i is for input and _o for output. Just cleaner
4552 4562 convention.
4553 4563
4554 4564 * Implemented parametric aliases. This pretty much allows the
4555 4565 alias system to offer full-blown shell convenience, I think.
4556 4566
4557 4567 * Version 0.1.17 released, 0.1.18 opened.
4558 4568
4559 4569 * dot_ipython/ipythonrc (alias): added documentation.
4560 4570 (xcolor): Fixed small bug (xcolors -> xcolor)
4561 4571
4562 4572 * Changed the alias system. Now alias is a magic command to define
4563 4573 aliases just like the shell. Rationale: the builtin magics should
4564 4574 be there for things deeply connected to IPython's
4565 4575 architecture. And this is a much lighter system for what I think
4566 4576 is the really important feature: allowing users to define quickly
4567 4577 magics that will do shell things for them, so they can customize
4568 4578 IPython easily to match their work habits. If someone is really
4569 4579 desperate to have another name for a builtin alias, they can
4570 4580 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4571 4581 works.
4572 4582
4573 4583 2001-11-28 Fernando Perez <fperez@colorado.edu>
4574 4584
4575 4585 * Changed @file so that it opens the source file at the proper
4576 4586 line. Since it uses less, if your EDITOR environment is
4577 4587 configured, typing v will immediately open your editor of choice
4578 4588 right at the line where the object is defined. Not as quick as
4579 4589 having a direct @edit command, but for all intents and purposes it
4580 4590 works. And I don't have to worry about writing @edit to deal with
4581 4591 all the editors, less does that.
4582 4592
4583 4593 * Version 0.1.16 released, 0.1.17 opened.
4584 4594
4585 4595 * Fixed some nasty bugs in the page/page_dumb combo that could
4586 4596 crash IPython.
4587 4597
4588 4598 2001-11-27 Fernando Perez <fperez@colorado.edu>
4589 4599
4590 4600 * Version 0.1.15 released, 0.1.16 opened.
4591 4601
4592 4602 * Finally got ? and ?? to work for undefined things: now it's
4593 4603 possible to type {}.get? and get information about the get method
4594 4604 of dicts, or os.path? even if only os is defined (so technically
4595 4605 os.path isn't). Works at any level. For example, after import os,
4596 4606 os?, os.path?, os.path.abspath? all work. This is great, took some
4597 4607 work in _ofind.
4598 4608
4599 4609 * Fixed more bugs with logging. The sanest way to do it was to add
4600 4610 to @log a 'mode' parameter. Killed two in one shot (this mode
4601 4611 option was a request of Janko's). I think it's finally clean
4602 4612 (famous last words).
4603 4613
4604 4614 * Added a page_dumb() pager which does a decent job of paging on
4605 4615 screen, if better things (like less) aren't available. One less
4606 4616 unix dependency (someday maybe somebody will port this to
4607 4617 windows).
4608 4618
4609 4619 * Fixed problem in magic_log: would lock of logging out if log
4610 4620 creation failed (because it would still think it had succeeded).
4611 4621
4612 4622 * Improved the page() function using curses to auto-detect screen
4613 4623 size. Now it can make a much better decision on whether to print
4614 4624 or page a string. Option screen_length was modified: a value 0
4615 4625 means auto-detect, and that's the default now.
4616 4626
4617 4627 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4618 4628 go out. I'll test it for a few days, then talk to Janko about
4619 4629 licences and announce it.
4620 4630
4621 4631 * Fixed the length of the auto-generated ---> prompt which appears
4622 4632 for auto-parens and auto-quotes. Getting this right isn't trivial,
4623 4633 with all the color escapes, different prompt types and optional
4624 4634 separators. But it seems to be working in all the combinations.
4625 4635
4626 4636 2001-11-26 Fernando Perez <fperez@colorado.edu>
4627 4637
4628 4638 * Wrote a regexp filter to get option types from the option names
4629 4639 string. This eliminates the need to manually keep two duplicate
4630 4640 lists.
4631 4641
4632 4642 * Removed the unneeded check_option_names. Now options are handled
4633 4643 in a much saner manner and it's easy to visually check that things
4634 4644 are ok.
4635 4645
4636 4646 * Updated version numbers on all files I modified to carry a
4637 4647 notice so Janko and Nathan have clear version markers.
4638 4648
4639 4649 * Updated docstring for ultraTB with my changes. I should send
4640 4650 this to Nathan.
4641 4651
4642 4652 * Lots of small fixes. Ran everything through pychecker again.
4643 4653
4644 4654 * Made loading of deep_reload an cmd line option. If it's not too
4645 4655 kosher, now people can just disable it. With -nodeep_reload it's
4646 4656 still available as dreload(), it just won't overwrite reload().
4647 4657
4648 4658 * Moved many options to the no| form (-opt and -noopt
4649 4659 accepted). Cleaner.
4650 4660
4651 4661 * Changed magic_log so that if called with no parameters, it uses
4652 4662 'rotate' mode. That way auto-generated logs aren't automatically
4653 4663 over-written. For normal logs, now a backup is made if it exists
4654 4664 (only 1 level of backups). A new 'backup' mode was added to the
4655 4665 Logger class to support this. This was a request by Janko.
4656 4666
4657 4667 * Added @logoff/@logon to stop/restart an active log.
4658 4668
4659 4669 * Fixed a lot of bugs in log saving/replay. It was pretty
4660 4670 broken. Now special lines (!@,/) appear properly in the command
4661 4671 history after a log replay.
4662 4672
4663 4673 * Tried and failed to implement full session saving via pickle. My
4664 4674 idea was to pickle __main__.__dict__, but modules can't be
4665 4675 pickled. This would be a better alternative to replaying logs, but
4666 4676 seems quite tricky to get to work. Changed -session to be called
4667 4677 -logplay, which more accurately reflects what it does. And if we
4668 4678 ever get real session saving working, -session is now available.
4669 4679
4670 4680 * Implemented color schemes for prompts also. As for tracebacks,
4671 4681 currently only NoColor and Linux are supported. But now the
4672 4682 infrastructure is in place, based on a generic ColorScheme
4673 4683 class. So writing and activating new schemes both for the prompts
4674 4684 and the tracebacks should be straightforward.
4675 4685
4676 4686 * Version 0.1.13 released, 0.1.14 opened.
4677 4687
4678 4688 * Changed handling of options for output cache. Now counter is
4679 4689 hardwired starting at 1 and one specifies the maximum number of
4680 4690 entries *in the outcache* (not the max prompt counter). This is
4681 4691 much better, since many statements won't increase the cache
4682 4692 count. It also eliminated some confusing options, now there's only
4683 4693 one: cache_size.
4684 4694
4685 4695 * Added 'alias' magic function and magic_alias option in the
4686 4696 ipythonrc file. Now the user can easily define whatever names he
4687 4697 wants for the magic functions without having to play weird
4688 4698 namespace games. This gives IPython a real shell-like feel.
4689 4699
4690 4700 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4691 4701 @ or not).
4692 4702
4693 4703 This was one of the last remaining 'visible' bugs (that I know
4694 4704 of). I think if I can clean up the session loading so it works
4695 4705 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4696 4706 about licensing).
4697 4707
4698 4708 2001-11-25 Fernando Perez <fperez@colorado.edu>
4699 4709
4700 4710 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4701 4711 there's a cleaner distinction between what ? and ?? show.
4702 4712
4703 4713 * Added screen_length option. Now the user can define his own
4704 4714 screen size for page() operations.
4705 4715
4706 4716 * Implemented magic shell-like functions with automatic code
4707 4717 generation. Now adding another function is just a matter of adding
4708 4718 an entry to a dict, and the function is dynamically generated at
4709 4719 run-time. Python has some really cool features!
4710 4720
4711 4721 * Renamed many options to cleanup conventions a little. Now all
4712 4722 are lowercase, and only underscores where needed. Also in the code
4713 4723 option name tables are clearer.
4714 4724
4715 4725 * Changed prompts a little. Now input is 'In [n]:' instead of
4716 4726 'In[n]:='. This allows it the numbers to be aligned with the
4717 4727 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4718 4728 Python (it was a Mathematica thing). The '...' continuation prompt
4719 4729 was also changed a little to align better.
4720 4730
4721 4731 * Fixed bug when flushing output cache. Not all _p<n> variables
4722 4732 exist, so their deletion needs to be wrapped in a try:
4723 4733
4724 4734 * Figured out how to properly use inspect.formatargspec() (it
4725 4735 requires the args preceded by *). So I removed all the code from
4726 4736 _get_pdef in Magic, which was just replicating that.
4727 4737
4728 4738 * Added test to prefilter to allow redefining magic function names
4729 4739 as variables. This is ok, since the @ form is always available,
4730 4740 but whe should allow the user to define a variable called 'ls' if
4731 4741 he needs it.
4732 4742
4733 4743 * Moved the ToDo information from README into a separate ToDo.
4734 4744
4735 4745 * General code cleanup and small bugfixes. I think it's close to a
4736 4746 state where it can be released, obviously with a big 'beta'
4737 4747 warning on it.
4738 4748
4739 4749 * Got the magic function split to work. Now all magics are defined
4740 4750 in a separate class. It just organizes things a bit, and now
4741 4751 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4742 4752 was too long).
4743 4753
4744 4754 * Changed @clear to @reset to avoid potential confusions with
4745 4755 the shell command clear. Also renamed @cl to @clear, which does
4746 4756 exactly what people expect it to from their shell experience.
4747 4757
4748 4758 Added a check to the @reset command (since it's so
4749 4759 destructive, it's probably a good idea to ask for confirmation).
4750 4760 But now reset only works for full namespace resetting. Since the
4751 4761 del keyword is already there for deleting a few specific
4752 4762 variables, I don't see the point of having a redundant magic
4753 4763 function for the same task.
4754 4764
4755 4765 2001-11-24 Fernando Perez <fperez@colorado.edu>
4756 4766
4757 4767 * Updated the builtin docs (esp. the ? ones).
4758 4768
4759 4769 * Ran all the code through pychecker. Not terribly impressed with
4760 4770 it: lots of spurious warnings and didn't really find anything of
4761 4771 substance (just a few modules being imported and not used).
4762 4772
4763 4773 * Implemented the new ultraTB functionality into IPython. New
4764 4774 option: xcolors. This chooses color scheme. xmode now only selects
4765 4775 between Plain and Verbose. Better orthogonality.
4766 4776
4767 4777 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4768 4778 mode and color scheme for the exception handlers. Now it's
4769 4779 possible to have the verbose traceback with no coloring.
4770 4780
4771 4781 2001-11-23 Fernando Perez <fperez@colorado.edu>
4772 4782
4773 4783 * Version 0.1.12 released, 0.1.13 opened.
4774 4784
4775 4785 * Removed option to set auto-quote and auto-paren escapes by
4776 4786 user. The chances of breaking valid syntax are just too high. If
4777 4787 someone *really* wants, they can always dig into the code.
4778 4788
4779 4789 * Made prompt separators configurable.
4780 4790
4781 4791 2001-11-22 Fernando Perez <fperez@colorado.edu>
4782 4792
4783 4793 * Small bugfixes in many places.
4784 4794
4785 4795 * Removed the MyCompleter class from ipplib. It seemed redundant
4786 4796 with the C-p,C-n history search functionality. Less code to
4787 4797 maintain.
4788 4798
4789 4799 * Moved all the original ipython.py code into ipythonlib.py. Right
4790 4800 now it's just one big dump into a function called make_IPython, so
4791 4801 no real modularity has been gained. But at least it makes the
4792 4802 wrapper script tiny, and since ipythonlib is a module, it gets
4793 4803 compiled and startup is much faster.
4794 4804
4795 4805 This is a reasobably 'deep' change, so we should test it for a
4796 4806 while without messing too much more with the code.
4797 4807
4798 4808 2001-11-21 Fernando Perez <fperez@colorado.edu>
4799 4809
4800 4810 * Version 0.1.11 released, 0.1.12 opened for further work.
4801 4811
4802 4812 * Removed dependency on Itpl. It was only needed in one place. It
4803 4813 would be nice if this became part of python, though. It makes life
4804 4814 *a lot* easier in some cases.
4805 4815
4806 4816 * Simplified the prefilter code a bit. Now all handlers are
4807 4817 expected to explicitly return a value (at least a blank string).
4808 4818
4809 4819 * Heavy edits in ipplib. Removed the help system altogether. Now
4810 4820 obj?/?? is used for inspecting objects, a magic @doc prints
4811 4821 docstrings, and full-blown Python help is accessed via the 'help'
4812 4822 keyword. This cleans up a lot of code (less to maintain) and does
4813 4823 the job. Since 'help' is now a standard Python component, might as
4814 4824 well use it and remove duplicate functionality.
4815 4825
4816 4826 Also removed the option to use ipplib as a standalone program. By
4817 4827 now it's too dependent on other parts of IPython to function alone.
4818 4828
4819 4829 * Fixed bug in genutils.pager. It would crash if the pager was
4820 4830 exited immediately after opening (broken pipe).
4821 4831
4822 4832 * Trimmed down the VerboseTB reporting a little. The header is
4823 4833 much shorter now and the repeated exception arguments at the end
4824 4834 have been removed. For interactive use the old header seemed a bit
4825 4835 excessive.
4826 4836
4827 4837 * Fixed small bug in output of @whos for variables with multi-word
4828 4838 types (only first word was displayed).
4829 4839
4830 4840 2001-11-17 Fernando Perez <fperez@colorado.edu>
4831 4841
4832 4842 * Version 0.1.10 released, 0.1.11 opened for further work.
4833 4843
4834 4844 * Modified dirs and friends. dirs now *returns* the stack (not
4835 4845 prints), so one can manipulate it as a variable. Convenient to
4836 4846 travel along many directories.
4837 4847
4838 4848 * Fixed bug in magic_pdef: would only work with functions with
4839 4849 arguments with default values.
4840 4850
4841 4851 2001-11-14 Fernando Perez <fperez@colorado.edu>
4842 4852
4843 4853 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4844 4854 example with IPython. Various other minor fixes and cleanups.
4845 4855
4846 4856 * Version 0.1.9 released, 0.1.10 opened for further work.
4847 4857
4848 4858 * Added sys.path to the list of directories searched in the
4849 4859 execfile= option. It used to be the current directory and the
4850 4860 user's IPYTHONDIR only.
4851 4861
4852 4862 2001-11-13 Fernando Perez <fperez@colorado.edu>
4853 4863
4854 4864 * Reinstated the raw_input/prefilter separation that Janko had
4855 4865 initially. This gives a more convenient setup for extending the
4856 4866 pre-processor from the outside: raw_input always gets a string,
4857 4867 and prefilter has to process it. We can then redefine prefilter
4858 4868 from the outside and implement extensions for special
4859 4869 purposes.
4860 4870
4861 4871 Today I got one for inputting PhysicalQuantity objects
4862 4872 (from Scientific) without needing any function calls at
4863 4873 all. Extremely convenient, and it's all done as a user-level
4864 4874 extension (no IPython code was touched). Now instead of:
4865 4875 a = PhysicalQuantity(4.2,'m/s**2')
4866 4876 one can simply say
4867 4877 a = 4.2 m/s**2
4868 4878 or even
4869 4879 a = 4.2 m/s^2
4870 4880
4871 4881 I use this, but it's also a proof of concept: IPython really is
4872 4882 fully user-extensible, even at the level of the parsing of the
4873 4883 command line. It's not trivial, but it's perfectly doable.
4874 4884
4875 4885 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4876 4886 the problem of modules being loaded in the inverse order in which
4877 4887 they were defined in
4878 4888
4879 4889 * Version 0.1.8 released, 0.1.9 opened for further work.
4880 4890
4881 4891 * Added magics pdef, source and file. They respectively show the
4882 4892 definition line ('prototype' in C), source code and full python
4883 4893 file for any callable object. The object inspector oinfo uses
4884 4894 these to show the same information.
4885 4895
4886 4896 * Version 0.1.7 released, 0.1.8 opened for further work.
4887 4897
4888 4898 * Separated all the magic functions into a class called Magic. The
4889 4899 InteractiveShell class was becoming too big for Xemacs to handle
4890 4900 (de-indenting a line would lock it up for 10 seconds while it
4891 4901 backtracked on the whole class!)
4892 4902
4893 4903 FIXME: didn't work. It can be done, but right now namespaces are
4894 4904 all messed up. Do it later (reverted it for now, so at least
4895 4905 everything works as before).
4896 4906
4897 4907 * Got the object introspection system (magic_oinfo) working! I
4898 4908 think this is pretty much ready for release to Janko, so he can
4899 4909 test it for a while and then announce it. Pretty much 100% of what
4900 4910 I wanted for the 'phase 1' release is ready. Happy, tired.
4901 4911
4902 4912 2001-11-12 Fernando Perez <fperez@colorado.edu>
4903 4913
4904 4914 * Version 0.1.6 released, 0.1.7 opened for further work.
4905 4915
4906 4916 * Fixed bug in printing: it used to test for truth before
4907 4917 printing, so 0 wouldn't print. Now checks for None.
4908 4918
4909 4919 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4910 4920 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4911 4921 reaches by hand into the outputcache. Think of a better way to do
4912 4922 this later.
4913 4923
4914 4924 * Various small fixes thanks to Nathan's comments.
4915 4925
4916 4926 * Changed magic_pprint to magic_Pprint. This way it doesn't
4917 4927 collide with pprint() and the name is consistent with the command
4918 4928 line option.
4919 4929
4920 4930 * Changed prompt counter behavior to be fully like
4921 4931 Mathematica's. That is, even input that doesn't return a result
4922 4932 raises the prompt counter. The old behavior was kind of confusing
4923 4933 (getting the same prompt number several times if the operation
4924 4934 didn't return a result).
4925 4935
4926 4936 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4927 4937
4928 4938 * Fixed -Classic mode (wasn't working anymore).
4929 4939
4930 4940 * Added colored prompts using Nathan's new code. Colors are
4931 4941 currently hardwired, they can be user-configurable. For
4932 4942 developers, they can be chosen in file ipythonlib.py, at the
4933 4943 beginning of the CachedOutput class def.
4934 4944
4935 4945 2001-11-11 Fernando Perez <fperez@colorado.edu>
4936 4946
4937 4947 * Version 0.1.5 released, 0.1.6 opened for further work.
4938 4948
4939 4949 * Changed magic_env to *return* the environment as a dict (not to
4940 4950 print it). This way it prints, but it can also be processed.
4941 4951
4942 4952 * Added Verbose exception reporting to interactive
4943 4953 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4944 4954 traceback. Had to make some changes to the ultraTB file. This is
4945 4955 probably the last 'big' thing in my mental todo list. This ties
4946 4956 in with the next entry:
4947 4957
4948 4958 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4949 4959 has to specify is Plain, Color or Verbose for all exception
4950 4960 handling.
4951 4961
4952 4962 * Removed ShellServices option. All this can really be done via
4953 4963 the magic system. It's easier to extend, cleaner and has automatic
4954 4964 namespace protection and documentation.
4955 4965
4956 4966 2001-11-09 Fernando Perez <fperez@colorado.edu>
4957 4967
4958 4968 * Fixed bug in output cache flushing (missing parameter to
4959 4969 __init__). Other small bugs fixed (found using pychecker).
4960 4970
4961 4971 * Version 0.1.4 opened for bugfixing.
4962 4972
4963 4973 2001-11-07 Fernando Perez <fperez@colorado.edu>
4964 4974
4965 4975 * Version 0.1.3 released, mainly because of the raw_input bug.
4966 4976
4967 4977 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4968 4978 and when testing for whether things were callable, a call could
4969 4979 actually be made to certain functions. They would get called again
4970 4980 once 'really' executed, with a resulting double call. A disaster
4971 4981 in many cases (list.reverse() would never work!).
4972 4982
4973 4983 * Removed prefilter() function, moved its code to raw_input (which
4974 4984 after all was just a near-empty caller for prefilter). This saves
4975 4985 a function call on every prompt, and simplifies the class a tiny bit.
4976 4986
4977 4987 * Fix _ip to __ip name in magic example file.
4978 4988
4979 4989 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4980 4990 work with non-gnu versions of tar.
4981 4991
4982 4992 2001-11-06 Fernando Perez <fperez@colorado.edu>
4983 4993
4984 4994 * Version 0.1.2. Just to keep track of the recent changes.
4985 4995
4986 4996 * Fixed nasty bug in output prompt routine. It used to check 'if
4987 4997 arg != None...'. Problem is, this fails if arg implements a
4988 4998 special comparison (__cmp__) which disallows comparing to
4989 4999 None. Found it when trying to use the PhysicalQuantity module from
4990 5000 ScientificPython.
4991 5001
4992 5002 2001-11-05 Fernando Perez <fperez@colorado.edu>
4993 5003
4994 5004 * Also added dirs. Now the pushd/popd/dirs family functions
4995 5005 basically like the shell, with the added convenience of going home
4996 5006 when called with no args.
4997 5007
4998 5008 * pushd/popd slightly modified to mimic shell behavior more
4999 5009 closely.
5000 5010
5001 5011 * Added env,pushd,popd from ShellServices as magic functions. I
5002 5012 think the cleanest will be to port all desired functions from
5003 5013 ShellServices as magics and remove ShellServices altogether. This
5004 5014 will provide a single, clean way of adding functionality
5005 5015 (shell-type or otherwise) to IP.
5006 5016
5007 5017 2001-11-04 Fernando Perez <fperez@colorado.edu>
5008 5018
5009 5019 * Added .ipython/ directory to sys.path. This way users can keep
5010 5020 customizations there and access them via import.
5011 5021
5012 5022 2001-11-03 Fernando Perez <fperez@colorado.edu>
5013 5023
5014 5024 * Opened version 0.1.1 for new changes.
5015 5025
5016 5026 * Changed version number to 0.1.0: first 'public' release, sent to
5017 5027 Nathan and Janko.
5018 5028
5019 5029 * Lots of small fixes and tweaks.
5020 5030
5021 5031 * Minor changes to whos format. Now strings are shown, snipped if
5022 5032 too long.
5023 5033
5024 5034 * Changed ShellServices to work on __main__ so they show up in @who
5025 5035
5026 5036 * Help also works with ? at the end of a line:
5027 5037 ?sin and sin?
5028 5038 both produce the same effect. This is nice, as often I use the
5029 5039 tab-complete to find the name of a method, but I used to then have
5030 5040 to go to the beginning of the line to put a ? if I wanted more
5031 5041 info. Now I can just add the ? and hit return. Convenient.
5032 5042
5033 5043 2001-11-02 Fernando Perez <fperez@colorado.edu>
5034 5044
5035 5045 * Python version check (>=2.1) added.
5036 5046
5037 5047 * Added LazyPython documentation. At this point the docs are quite
5038 5048 a mess. A cleanup is in order.
5039 5049
5040 5050 * Auto-installer created. For some bizarre reason, the zipfiles
5041 5051 module isn't working on my system. So I made a tar version
5042 5052 (hopefully the command line options in various systems won't kill
5043 5053 me).
5044 5054
5045 5055 * Fixes to Struct in genutils. Now all dictionary-like methods are
5046 5056 protected (reasonably).
5047 5057
5048 5058 * Added pager function to genutils and changed ? to print usage
5049 5059 note through it (it was too long).
5050 5060
5051 5061 * Added the LazyPython functionality. Works great! I changed the
5052 5062 auto-quote escape to ';', it's on home row and next to '. But
5053 5063 both auto-quote and auto-paren (still /) escapes are command-line
5054 5064 parameters.
5055 5065
5056 5066
5057 5067 2001-11-01 Fernando Perez <fperez@colorado.edu>
5058 5068
5059 5069 * Version changed to 0.0.7. Fairly large change: configuration now
5060 5070 is all stored in a directory, by default .ipython. There, all
5061 5071 config files have normal looking names (not .names)
5062 5072
5063 5073 * Version 0.0.6 Released first to Lucas and Archie as a test
5064 5074 run. Since it's the first 'semi-public' release, change version to
5065 5075 > 0.0.6 for any changes now.
5066 5076
5067 5077 * Stuff I had put in the ipplib.py changelog:
5068 5078
5069 5079 Changes to InteractiveShell:
5070 5080
5071 5081 - Made the usage message a parameter.
5072 5082
5073 5083 - Require the name of the shell variable to be given. It's a bit
5074 5084 of a hack, but allows the name 'shell' not to be hardwire in the
5075 5085 magic (@) handler, which is problematic b/c it requires
5076 5086 polluting the global namespace with 'shell'. This in turn is
5077 5087 fragile: if a user redefines a variable called shell, things
5078 5088 break.
5079 5089
5080 5090 - magic @: all functions available through @ need to be defined
5081 5091 as magic_<name>, even though they can be called simply as
5082 5092 @<name>. This allows the special command @magic to gather
5083 5093 information automatically about all existing magic functions,
5084 5094 even if they are run-time user extensions, by parsing the shell
5085 5095 instance __dict__ looking for special magic_ names.
5086 5096
5087 5097 - mainloop: added *two* local namespace parameters. This allows
5088 5098 the class to differentiate between parameters which were there
5089 5099 before and after command line initialization was processed. This
5090 5100 way, later @who can show things loaded at startup by the
5091 5101 user. This trick was necessary to make session saving/reloading
5092 5102 really work: ideally after saving/exiting/reloading a session,
5093 5103 *everythin* should look the same, including the output of @who. I
5094 5104 was only able to make this work with this double namespace
5095 5105 trick.
5096 5106
5097 5107 - added a header to the logfile which allows (almost) full
5098 5108 session restoring.
5099 5109
5100 5110 - prepend lines beginning with @ or !, with a and log
5101 5111 them. Why? !lines: may be useful to know what you did @lines:
5102 5112 they may affect session state. So when restoring a session, at
5103 5113 least inform the user of their presence. I couldn't quite get
5104 5114 them to properly re-execute, but at least the user is warned.
5105 5115
5106 5116 * Started ChangeLog.
@@ -1,28 +1,28 b''
1 1 #!/usr/bin/env ipython
2 2 """ Must be launched via ipython not normal python
3 3
4 4 Run by:
5 5
6 6 ipython update_manual.py
7 7 """
8 8
9 9 import sys,IPython,re
10 10
11 11 fil=open("magic.tex","w")
12 12 oldout=sys.stdout
13 13 sys.stdout=fil
14 ipmagic("magic -latex")
14 _ip.magic("magic -latex")
15 15 sys.stdout=oldout
16 16 fil.close()
17 17
18 18 fil=open("manual_base.lyx")
19 19 txt=fil.read()
20 20 fil.close()
21 21
22 22 manualtext=re.sub("__version__",IPython.__version__,txt)
23 23 fil=open("manual.lyx","w")
24 24 fil.write(manualtext)
25 25 fil.close()
26 26 print "Manual (magic.tex, manual.lyx) succesfully updated, exiting..."
27 27 import os
28 28 os.abort()
General Comments 0
You need to be logged in to leave comments. Login now