\section{\module{pickletools} --- Tools for pickle developers.}

\declaremodule{standard}{pickletools}
\modulesynopsis{Contains extensive comments about the pickle protocols and pickle-machine opcodes, as well as some useful functions.}

This module contains various constants relating to the intimate
details of the \refmodule{pickle} module, some lengthy comments about
the implementation, and a few useful functions for analyzing pickled
data.  The contents of this module are useful for Python core
developers who are working on the \module{pickle} and \module{cPickle}
implementations; ordinary users of the \module{pickle} module probably
won't find the \module{pickletools} module relevant.

\begin{funcdesc}{dis}{pickle\optional{, out=None, memo=None, indentlevel=4}}
Outputs a symbolic disassembly of the pickle to the file-like object
\var{out}, defaulting to \code{sys.stdout}.  \var{pickle} can be a
string or a file-like object.  \var{memo} can be a Python dictionary
that will be used as the pickle's memo; it can be used to perform
disassemblies across multiple pickles created by the same pickler.
Successive levels, indicated by \code{MARK} opcodes in the stream, are
indented by \var{indentlevel} spaces.
\end{funcdesc}

\begin{funcdesc}{genops}{pickle}
Provides an iterator over all of the opcodes in a pickle, returning a
sequence of \code{(\var{opcode}, \var{arg}, \var{pos})} triples.
\var{opcode} is an instance of an \class{OpcodeInfo} class; \var{arg} 
is the decoded value, as a Python object, of the opcode's argument; 
\var{pos} is the position at which this opcode is located.
\var{pickle} can be a string or a file-like object.
\end{funcdesc}

