elif mval == '1100': self.x(qid_cod[2]) elif mval == '0010': self.z(qid_cod[2]) elif mval == '1110': self.z(qid_cod[2]).x(qid_cod[2]) elif mval == '0110': self.x(qid_cod[3]) elif mval == '1001': self.z(qid_cod[3]) elif mval == '1111': self.z(qid_cod[3]).x(qid_cod[3]) elif mval == '0011': self.x(qid_cod[4]) elif mval == '0100': self.z(qid_cod[4]) elif mval == '0111': self.z(qid_cod[4]).x(qid_cod[4]) return self if __name__ == '__main__': QState.add_methods(logic_x, logic_z, ctr_logic_x, ctr_logic_z, ctr_g1, ctr_g2, ctr_g3, ctr_g4, encode, add_noise, correct_err) # create registers qid_anc = QState.create_register(5) qid_cod = QState.create_register(5) qnum = QState.init_register(qid_anc, qid_cod) # parameters for input quantum state (U3 gate params) phase = [np.random.rand(), np.random.rand(), np.random.rand()] # encode quantum state qs_ini = QState(qnum) qs_ini.encode(phase, qid_anc, qid_cod) qs_fin = qs_ini.clone() # noise
def Lz(self, q): [self.z(i) for i in LZ_OPERATORS[q]['edges']] return self def Lx(self, q): [self.x(i) for i in LX_OPERATORS[q]['edges']] return self if __name__ == '__main__': QState.add_methods(Lz, Lx) print("* initial state: logical |11>") qs_ini, mval_list = make_logical_zero() # logical |00> qs_ini.Lx(0).Lx(1) # logical |00> -> |11> qs_fin = qs_ini.clone() # for evaluating later print("* add noise") qs_fin.x(7) # bit flip error at #7 # qs_fin.z(7).x(7) # bit and phase flip error at #7 syndrome = measure_syndrome(qs_fin, mval_list) err_chain = get_error_chain(syndrome) print("* syndrome measurement:", syndrome) print("* error chain:", err_chain)