\section{\module{copy_reg} ---
         Register \module{pickle} support functions}

\declaremodule[copyreg]{standard}{copy_reg}
\modulesynopsis{Register \module{pickle} support functions.}


The \module{copy_reg} module provides support for the
\refmodule{pickle}\refstmodindex{pickle} and
\refmodule{cPickle}\refbimodindex{cPickle} modules.  The
\refmodule{copy}\refstmodindex{copy} module is likely to use this in the
future as well.  It provides configuration information about object
constructors which are not classes.  Such constructors may be factory
functions or class instances.


\begin{funcdesc}{constructor}{object}
  Declares \var{object} to be a valid constructor.  If \var{object} is
  not callable (and hence not valid as a constructor), raises
  \exception{TypeError}.
\end{funcdesc}

\begin{funcdesc}{pickle}{type, function\optional{, constructor}}
  Declares that \var{function} should be used as a ``reduction''
  function for objects of type \var{type}; \var{type} should not a
  class object.  \var{function} should return either a string or a
  tuple containing two or three elements.

  The optional \var{constructor} parameter, if provided, is a
  callable object which can be used to reconstruct the object when
  called with the tuple of arguments returned by \var{function} at
  pickling time.  \exception{TypeError} will be raised if
  \var{object} is a class or \var{constructor} is not callable.

  See the \refmodule{pickle} module for more
  details on the interface expected of \var{function} and
  \var{constructor}.
\end{funcdesc}
