'Changes problem state to unfinished -- removes student answers,
Causes problem to rerender itself if randomization is enabled.
Returns a dictionary of the form:
{\'success\': True/False,
\'html\': Problem HTML string }
If an error occurs, the dictionary will also have an
`error` key containing an error message.'

def reset_problem(self, _data):

    event_info = dict()
    event_info['old_state'] = self.lcp.get_state()
    event_info['problem_id'] = self.location.to_deprecated_string()
    _ = self.runtime.service(self, 'i18n').ugettext
    if self.closed():
        event_info['failure'] = 'closed'
        self.track_function_unmask('reset_problem_fail', event_info)
        return {'success': False, 'msg': _('You    cannot    select    Reset    for    a    problem    that    is    closed.')}
    if (not self.is_submitted()):
        event_info['failure'] = 'not_done'
        self.track_function_unmask('reset_problem_fail', event_info)
        return {'success': False, 'msg': _('You    must    submit    an    answer    before    you    can    select    Reset.')}
    if (self.is_submitted() and (self.rerandomize in [RANDOMIZATION.ALWAYS, RANDOMIZATION.ONRESET])):
        self.choose_new_seed()
    self.lcp = self.new_lcp(None)
    self.set_state_from_lcp()
    self.set_score(self.score_from_lcp())
    self.publish_grade()
    event_info['new_state'] = self.lcp.get_state()
    self.track_function_unmask('reset_problem', event_info)
    return {'success': True, 'html': self.get_problem_html(encapsulate=False)}
