def verify_problem_answer(self, answer: models.ProblemAnswer): ans = decode_qp( msg=dict(answer=answer.dict(), type=self.problem_type.value)) var = set(chain(*self.quadratic)) | self.linear.keys() self.assertEqual(set(ans['active_variables']), var) self.assertEqual(len(ans['energies']), len(ans['solutions'])) self.assertEqual(sum(ans['num_occurrences']), self.params['num_reads'])
def test_qp_response_decoding(self): res = decode_qp(copy.deepcopy(self.res_msg)) self.assertEqual(res.get('format'), 'qp') self.assertEqual(res.get('num_variables'), self.res_num_variables) self.assertEqual(res.get('active_variables'), self.res_active_variables) self.assertEqual(res.get('solutions'), self.res_solutions) self.assertEqual(res.get('energies'), self.res_energies) self.assertEqual(res.get('num_occurrences'), self.res_num_occurrences)
def _decode(self): """Choose the right decoding method based on format and environment.""" if self._message['type'] not in ['qubo', 'ising']: raise ValueError('Unknown problem format used.') # If format is set, it must be qp if self._message.get('answer', {}).get('format') != 'qp': raise ValueError('Data format returned by server not understood.') # prefer numpy decoding, but fallback to python # TODO: we should really be explicit about numpy usage start = time.time() if _numpy: self._result = decode_qp_numpy(self._message, return_matrix=self.return_matrix) else: self._result = decode_qp(self._message) self.parse_time = time.time() - start self._alias_result() return self._result
def _decode_qp(self, msg): if _numpy: return decode_qp_numpy(msg, return_matrix=self.return_matrix) else: return decode_qp(msg)
def test_offset_present_in_answer(self): res = decode_qp(copy.deepcopy(self.res_msg)) self.assertEqual(res.get('offset'), self.res_offset)