PYTHON DOCUMENTATION TO-DO LIST			-*- indented-text -*-
===============================


* The "Very High Level Interface" in the API document has been
  requested; I guess it wouldn't hurt to fill in a bit there.  Request 
  by Albert Hofkamp <a.hofkamp@wtb.tue.nl>.  (Partly done.)

* Describe implementing types in C, including use of the 'self'
  parameter to the method implementation function.  (Missing material
  mentioned in the Extending & Embedding manual, section 1.1; problem
  reported by Clay Spence <cspence@sarnoff.com>.)

* In the extensions manual, more information is needed about building
  dynamically linked extensions in C++.  Specifically, the extensions
  must be linked against the C++ libraries (and possibly runtime).
  Also noted by Albert Hofkamp <a.hofkamp@wtb.tue.nl>.

* Update the pickle documentation to describe all of the current
  behavior; only a subset is described.  __reduce__, etc.

* Update the code/codeop module documentation.

* In the indexes, some subitem entries are separated from the item
  entries by column- or page-breaks.  Reported by Lorenzo M. Catucci
  <lorenzo@argon.roma2.infn.it>.  This one will be hard; probably not
  really worth the pain.  (Only an issue at all when a header-letter
  and the first index entry get separated -- can change as soon as we
  change the index entries in the text.)

* Fix problem with howto documents getting the last module synopsis
  twice (in \localmoduletable) so we can get rid of the ugly 'uniq'
  hack in tools/mkhowto.sh.  (Probably not worth the trouble of
  fixing.)

* Figure out HTMLHelp generation for the Windows world.

* Straighten out random/whrandom.


BEFORE NEXT PYTHON RELEASE, BUT NOT UNTIL THEN:

* Document that the mode parameter to wave.open() may be omitted, and
  how it is determined if omitted.  (Same of aifc, sunau open()
  functions.)

* Document that fpformat.NotANumber is a subclass of ValueError, has
  the string that failed as the "exception value".
