<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_transaction_execution_result( self, txn_signature, is_valid, context_id, state_changes, events, data, error_message, error_data):
 """Set the status of an executed transaction. Called by the executor after a transaction has been processed. The scheduler must know when transactions have finished being applied so that it can determine which transactions will become eligible for processing. Args: txn_signature (str):
 The signature of the transaction, which must match the header_signature field of the Transaction object which was part of the added Batch. is_valid (bool):
 True if transaction applied successfully or False if the transaction failed and was not applied. context_id (str):
 If status is True, contains the context_id associated with the state changes made by the transaction. If status is False, this should be set to None. Raises: ValueError: Thrown if transaction_signature does not match a transaction. """

        raise NotImplementedError()