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__': # 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 = MyQState(qnum) qs_ini.encode(phase, qid_anc, qid_cod) qs_fin = qs_ini.clone() # noise q = np.random.randint(0, len(qid_cod)) kind = np.random.choice(['X', 'Z', 'XZ']) print("* noise '{:}' to #{:} qubit".format(kind, q)) qs_fin.add_noise(q, qid_cod, kind)
qs_ini = qs_C.tenspro(qs_S) qs_fin = qs_ini.clone() print("== random state (a |0L> + b |1L>) ==") print("- a = {:.4f}".format(a)) print("- b = {:.4f}".format(b)) # QState.free_all(qs_C, qs_S) return qs_ini, qs_fin if __name__ == '__main__': # set registers qid_C = QState.create_register(7) # registers for code space qid_S = QState.create_register(3) # registers for error syndrome QState.init_register(qid_C, qid_S) # generate initial quantum state qs_ini, qs_fin = generate_qstate(qid_C, qid_S) # add noise qs_fin.noise(qid_C) # error correction qs_fin.correct('bit_flip', qid_C, qid_S) qs_fin.correct('phase_flip', qid_C, qid_S) # print result print("== result ==") print("- fidelity = {:.6f}".format(qs_fin.fidelity(qs_ini, qid=qid_C)))