class AlrReward:
    """
    A base class for non-Markovian reward functions which may need trajectory information to calculate an episodic
    reward. Call the methods in reset() and step() of the environment.
    """

    # methods to override:
    # ----------------------------
    def reset(self, *args, **kwargs):
        """
        Reset the reward function, empty state buffers before an episode, set contexts that influence reward, etc.
        """
        raise NotImplementedError

    def compute_reward(self, *args, **kwargs):
        """

        Returns: Useful things to return are reward values, success flags or crash flags

        """
        raise NotImplementedError