<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_output(self, transaction_hash, output_index):
 """ Gets an output and information about its asset ID and asset quantity. :param bytes transaction_hash: The hash of the transaction containing the output. :param int output_index: The index of the output. :return: An object containing the output as well as its asset ID and asset quantity. :rtype: Future[TransactionOutput] """

        cached_output = yield from self._cache.get(transaction_hash, output_index)

        if cached_output is not None:
            return cached_output

        transaction = yield from self._transaction_provider(transaction_hash)

        if transaction is None:
            raise ValueError('Transaction {0} could not be retrieved'.format(bitcoin.core.b2lx(transaction_hash)))

        colored_outputs = yield from self.color_transaction(transaction)

        for index, output in enumerate(colored_outputs):
            yield from self._cache.put(transaction_hash, index, output)

        return colored_outputs[output_index]