<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def retrieve_review(self, reviewer, product):
 """Retrieve review that the given reviewer put the given product. Args: reviewer: An instance of Reviewer. product: An instance of Product. Returns: A review object. Raises: TypeError: when given reviewer and product aren't instance of specified reviewer and product class when this graph is constructed. KeyError: When the reviewer does not review the product. """

        if not isinstance(reviewer, self._reviewer_cls):
            raise TypeError(
                "Type of given reviewer isn't acceptable:", reviewer,
                ", expected:", self._reviewer_cls)
        elif not isinstance(product, self._product_cls):
            raise TypeError(
                "Type of given product isn't acceptable:", product,
                ", expected:", self._product_cls)

        try:
            return self.graph[reviewer][product]["review"]
        except TypeError:
            raise KeyError(
                "{0} does not review {1}.".format(reviewer, product))