4 std::vector<std::vector<qcor::Operator>> seven_qubit_code_stabilizers() {
5 static const std::vector<std::vector<qcor::Operator>> STABILIZERS{
8 {qcor::X(0), qcor::X(2), qcor::X(4), qcor::X(6)},
9 {qcor::X(1), qcor::X(2), qcor::X(5), qcor::X(6)},
10 {qcor::X(3), qcor::X(4), qcor::X(5), qcor::X(6)},
12 {qcor::Z(0), qcor::Z(2), qcor::Z(4), qcor::Z(6)},
13 {qcor::Z(1), qcor::Z(2), qcor::Z(5), qcor::Z(6)},
14 {qcor::Z(3), qcor::Z(4), qcor::Z(5), qcor::Z(6)}};
18 __qpu__
void seven_qubit_code_encoder(qreg q,
int dataQubitIdx,
19 std::vector<int> scratchQubitIdx) {
20 H(q[scratchQubitIdx[0]]);
21 H(q[scratchQubitIdx[2]]);
22 H(q[scratchQubitIdx[5]]);
23 CX(q[dataQubitIdx], q[scratchQubitIdx[4]]);
24 CX(q[scratchQubitIdx[5]], q[scratchQubitIdx[1]]);
25 CX(q[scratchQubitIdx[5]], q[scratchQubitIdx[3]]);
26 CX(q[scratchQubitIdx[1]], q[dataQubitIdx]);
27 CX(q[scratchQubitIdx[2]], q[scratchQubitIdx[4]]);
28 CX(q[scratchQubitIdx[0]], q[scratchQubitIdx[4]]);
29 CX(q[scratchQubitIdx[4]], q[scratchQubitIdx[5]]);
30 CX(q[scratchQubitIdx[2]], q[scratchQubitIdx[3]]);
31 CX(q[scratchQubitIdx[0]], q[scratchQubitIdx[1]]);
34 __qpu__
void seven_qubit_code_recover(qreg q, std::vector<int> logicalReg,
35 std::vector<int> syndromes) {
36 auto xSyndromes = {syndromes[0], syndromes[1], syndromes[2]};
37 auto zSyndromes = {syndromes[3], syndromes[4], syndromes[5]};
38 auto xSyndromeIdx = syndrome_array_to_int(xSyndromes);
39 auto zSyndromeIdx = syndrome_array_to_int(zSyndromes);
40 if (xSyndromeIdx > 0) {
41 Z(q[xSyndromeIdx - 1]);
43 if (zSyndromeIdx > 0) {
44 X(q[zSyndromeIdx - 1]);