def METHOD_NAME(self, save_restore=False,reset_data=False):
    """
    Test a complicated parallel matrix, complete the matrix and
    Reset somewhere in the middle. It should complete the row that we
    Reset to, and retain all previous answers.
    """
    self.workflow.do_engine_steps()
    firsttaskid = None
    steps = [{'taskname':'First',
              'formvar': 'First',
              'answer': 'Yes'},
             {'taskname': 'FormA1',
              'formvar': 'A1',
              'answer': 'xa1'},
             {'taskname': 'FormA2',
              'formvar': 'A2',
              'answer': 'xa2'},
             {'taskname': 'FormA3',
              'formvar': 'A3',
              'answer': 'xa3'},
             {'taskname': 'FormB1',
              'formvar': 'B1',
              'answer': 'xb1'},
             {'taskname': 'FormB2',
              'formvar': 'B2',
              'answer': 'xb2'},
             {'taskname': 'FormB3',
              'formvar': 'B3',
              'answer': 'xb3'},
             {'taskname': 'FormC1',
              'formvar': 'C1',
              'answer': 'xc1'},
             {'taskname': 'FormC2',
              'formvar': 'C2',
              'answer': 'xc2'},
             {'taskname': 'FormC3',
              'formvar': 'C3',
              'answer': 'xc3'},
             ]
    for step in steps:
        task = self.workflow.get_ready_user_tasks()[0]
        if firsttaskid is None and step['taskname']=='FormB2':
            firsttaskid = task.id
        self.assertEqual(step['taskname'], task.task_spec.name)
        task.update_data({step['formvar']: step['answer']})
        self.workflow.run_task_from_id(task.id)
        self.workflow.do_engine_steps()
        if save_restore:
            self.save_restore()
    self.workflow.reset_from_task_id(firsttaskid)
    self.workflow.do_engine_steps()
    #NB - this won't test random access
    steps = [{'taskname': 'FormB2',
              'formvar': 'B2',
              'answer': 'b2'},
             {'taskname': 'FormD',
              'formvar': 'D',
              'answer': 'd'},
             ]
    for step in steps:
        task = self.workflow.get_ready_user_tasks()[0]
        self.assertEqual(step['taskname'], task.task_spec.name)
        task.update_data({step['formvar']: step['answer']})
        self.workflow.run_task_from_id(task.id)
        self.workflow.do_engine_steps()
        if save_restore:
            self.save_restore()
    self.workflow.get_ready_user_tasks()
    self.assertTrue(self.workflow.is_completed())
    self.assertEqual({'First': 'Yes',
                      'A1': 'xa1',
                      'A2': 'xa2',
                      'A3': 'xa3',
                      'B1': 'xb1',
                      'B2': 'b2',
                      'B3': 'xb3',
                      'C1': 'xc1',
                      'C2': 'xc2',
                      'C3': 'xc3',
                      'D': 'd'},
                      self.workflow.last_task.data)