<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read_prov(self, document_id=None):
 """ Load the provenance of this document .. note:: This method is called automatically if needed when the :py:meth:`prov` property is accessed. Manual use of this method is unusual. :param document_id: (optional) set the document id if this is an :py:meth:`abstract` document :return: :py:class:`prov.model.ProvDocument """

        if document_id:
            if not self.abstract:
                raise ImmutableDocumentException()
            self._id = document_id

        if self.abstract:
            raise AbstractDocumentException()

        self._prov = self._api.get_document_prov(self.id)
        return self._prov