QCOR
qec_utils.hpp
1 #pragma once
2 #include <qcor_common>
3 
4 int syndrome_array_to_int(const std::vector<int> &syndromes) {
5  int result = 0;
6  for (int i = 0; i < syndromes.size(); ++i) {
7  result += ((1 << i) * syndromes[i]);
8  }
9  return result;
10 }
11 
12 #ifdef _QCOR_FTQC_RUNTIME
13 namespace ftqc {
14 __qpu__ void measure_stabilizer_generators(
15  qreg q, std::vector<std::vector<qcor::Operator>> stabilizerGroup,
16  std::vector<int> logicalReg, int scratchQubitIdx,
17  std::vector<int> &out_syndromes) {
18  for (auto &stabilizer : stabilizerGroup) {
19  for (auto &op : stabilizer) {
20  std::map<int, int> bitMap;
21  for (int i = 0; i < logicalReg.size(); ++i) {
22  bitMap[i] = logicalReg[i];
23  }
24  op.mapQubitSites(bitMap);
25  }
26  int syndromeResult;
27  measure_basis_with_scratch(q, scratchQubitIdx, stabilizer, syndromeResult);
28  out_syndromes.emplace_back(syndromeResult);
29  }
30 }
31 } // namespace ftqc
32 #endif