QCOR
bit_flip_code.hpp
1 #pragma once
2 
3 std::vector<std::vector<qcor::Operator>> bit_flip_code_stabilizers() {
4  static const std::vector<std::vector<qcor::Operator>> STABILIZERS{
5  {qcor::Z(0), qcor::Z(1)}, {qcor::Z(1), qcor::Z(2)}};
6  return STABILIZERS;
7 }
8 
9 __qpu__ void bit_flip_encoder(qreg q, int dataQubitIdx,
10  std::vector<int> scratchQubitIdx) {
11  CX(q[dataQubitIdx], q[scratchQubitIdx[0]]);
12  CX(q[dataQubitIdx], q[scratchQubitIdx[1]]);
13 }
14 
15 __qpu__ void bit_flip_recover(qreg q, std::vector<int> logicalReg,
16  std::vector<int> syndromes) {
17  const bool parity01 = (syndromes[0] == 1);
18  const bool parity12 = (syndromes[1] == 1);
19  // Correct error based on parity results
20  if (parity01 && !parity12) {
21  X(q[logicalReg[0]]);
22  }
23 
24  if (parity01 && parity12) {
25  X(q[logicalReg[1]]);
26  }
27 
28  if (!parity01 && parity12) {
29  X(q[logicalReg[2]]);
30  }
31 }