class BaseScenario:  # defines scenario upon which the world is built
    def make_world(self):  # create elements of the world
        raise NotImplementedError()

    def reset_world(self, world, np_random):  # create initial conditions of the world
        raise NotImplementedError()

    def benchmark_data(self, agent, world):  # return benchmark metrics for evaluation
        return {}

    def is_terminal(self, world):  # return True to end the episode early on success
        return False
