\input texinfo
@c %**start of header
@setfilename python-lib.info
@settitle Python library reference
@setchapternewpage odd
@footnotestyle end
@c %**end of header

@ifinfo
This file describes the built-in types, exceptions and functions and the
standard modules that come with the Python system.  It assumes basic
knowledge about the Python language.  For an informal introduction to
the language, see the @cite{Python Tutorial}.
The @cite{Python Reference Manual} gives a more formal definition of the
language.  (These manuals are not  available in INFO or Texinfo format.)

Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or
CNRI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.

STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
@end ifinfo

@titlepage
@title Python library reference
@author Guido van Rossum

@c  The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1991-1995 by Stichting Mathematisch Centrum,
Amsterdam, The Netherlands.

@center All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI or Corporation for National Research Initiatives or
CNRI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior
permission.

While CWI is the initial source for this software, a modified version
is made available by the Corporation for National Research Initiatives
(CNRI) at the Internet address ftp://ftp.python.org.

STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
@end titlepage


@ifinfo
@node Top, Overview, (dir), (dir)
@top The Python library

This file describes the built-in types, exceptions and functions and the
standard modules that come with the Python system.  It assumes basic
knowledge about the Python language.  For an informal introduction to
the language, see the @cite{Python Tutorial}.  The @cite{Python
Reference Manual} gives a more formal definition of the language.
(These manuals are not yet available in INFO or Texinfo format.)

This version corresponds to Python version 1.5 (Feb 17, 1998).

@c placeholder for the master menu -- patched by texinfo-all-menus-update
@menu
@end menu

@end ifinfo
