code: def TransferFrom(self, wallet, from_addr, to_addr, amount):
          
          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
docs: 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.