<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def TransferFrom(self, wallet, from_addr, to_addr, amount):
 """ Transfer a specified amount of a token from the wallet specified in the `from_addr` to the `to_addr` if the originator `wallet` has been approved to do so. Args: wallet (neo.Wallets.Wallet):
 a wallet instance. from_addr (str):
 public address of the account to transfer the given amount from. to_addr (str):
 public address of the account to transfer the given amount to. amount (int):
 quantity to send. Returns: tuple: InvocationTransaction: the transaction. int: the transaction fee. list: the neo VM evaluation stack results. """

        invoke_args = [self.ScriptHash.ToString(), 'transferFrom',
                       [PromptUtils.parse_param(from_addr, wallet), PromptUtils.parse_param(to_addr, wallet), PromptUtils.parse_param(amount)]]

        tx, fee, results, num_ops, engine_success = TestInvokeContract(wallet, invoke_args, None, True)

        return tx, fee, results