Exemplo n.º 1
0
def run_latt_surg_circ(init_state, circuits):

    supra_circ = qcirc.CNOT_latt_surg(init_state, circuits, code, chp_loc)
    supra_circ.run_all_gates()

    final_stabs = supra_circ.state[0][:]
    final_destabs = supra_circ.state[1][:]

    # do perfect EC on ctrl and target logical qubits
    corr_circ = qfun.create_EC_subcircs(code, False, False, False, True)
    corr_circ2 = qfun.create_EC_subcircs(code, False, False, False, True)
    corr_circ.join_circuit_at(range(n_code, 2 * n_code), corr_circ2)

    final_state = (final_stabs, final_destabs)
    bare_anc = True
    supra_circ = qcirc.CNOT_latt_surg(final_state, corr_circ, code, chp_loc,
                                      bare_anc)
    supra_circ.run_all_gates()

    corr_stabs = supra_circ.state[0]

    # Determine if a failure has occurred
    fail = False
    for stab in corr_stabs:
        if stab[0] == '-':
            fail = True
            break

    return fail
Exemplo n.º 2
0
def run_QEC_d3(init_state, QEC_circ_list, chp_loc, alternating, decoder='old'):
    '''
    '''

    QEC_object = qwrap.QEC_with_flags(init_state, QEC_circ_list[:], chp_loc)
    supra_gates = QEC_object.run_stabilizers_high_indet_ion(
        0, alternating, 'any', decoder)

    final_stabs, final_destabs = QEC_object.stabs[:], QEC_object.destabs[:]

    # Determine if there is an error (both failures and correctable errors)
    final_error = False
    for stab in final_stabs:
        if stab[0] != '+':
            final_error = True
            break

    # Do perfect EC on the final state
    corr_circ = qfun.create_EC_subcircs('Steane', False, False, False, True)
    final_state = (final_stabs, final_destabs)
    bare_anc = True
    supra_circ = qwrap.CNOT_latt_surg(final_state, corr_circ, 'Steane',
                                      chp_loc, bare_anc)
    supra_circ.run_all_gates()
    corr_stabs = supra_circ.state[0]

    # Determine if a failure has occured.
    fail = False
    for stab in corr_stabs:
        if stab[0] != '+':
            fail = True
            break

    return final_error, fail, supra_gates
Exemplo n.º 3
0
def run_circ(CNOT_circ_copy, chp_loc):
    '''
    '''
    ion = True
    initial_state_copy = copy.deepcopy(initial_state)
    latt_object = qcirc.CNOT_latt_surg(initial_state_copy, CNOT_circ_copy, 'Steane', chp_loc,
                                   False, ion)
    latt_object.run_all_gates()
    final_stabs, final_destabs = latt_object.state[0][:], latt_object.state[1][:]

    #print latt_object.total_subcircs_run
    #sys.exit(0)

    # Determine if there is an error (both failures and correctable errors)
    final_errorX, final_errorZ = False, False
    for stab in final_stabs:
        if stab[0] != '+':
            if 'Z' in stab:
                final_errorX = True
            elif 'X' in stab:
                final_errorZ = True

    # do perfect EC on ctrl and target logical qubits
    corr_circ = qfun.create_EC_subcircs('Steane', False, False, False, True)
    corr_circ2 = qfun.create_EC_subcircs('Steane', False, False, False, True)
    corr_circ.join_circuit_at(range(n_code,2*n_code), corr_circ2)

    final_state = (final_stabs[:], final_destabs[:])
    bare_anc = True
    supra_circ = qcirc.CNOT_latt_surg(final_state, corr_circ, 'Steane', chp_loc, bare_anc)
    supra_circ.run_all_gates()
    corr_stabs = supra_circ.state[0]

    # Determine if failure has occured
    failX, failZ = False, False
    for stab in corr_stabs:
        if stab[0] != '+':
            if 'Z' in stab:
                failX = True
            elif 'X' in stab:
                failZ = True

    return final_errorX, final_errorZ, failX, failZ, latt_object.total_subcircs_run
Exemplo n.º 4
0
def run_CNOT(init_state, CNOT_circ, chp_loc):
    '''
    First version
    '''

    # Temporary fix:  CNOT_circ is really a 1-element list
    CNOT_circ = c.Encoded_Gate('Transversal_CNOT', CNOT_circ).circuit_wrap()

    CNOT_object = qcirc.Supra_Circuit(init_state, CNOT_circ, code, chp_loc)
    CNOT_gate = CNOT_circ.gates[0]

    out_dict = CNOT_object.run_one_oper(CNOT_gate)
    final_stabs, final_destabs = CNOT_object.state[0][:], CNOT_object.state[1][:]

    # Determine if there is an error (both failures and correctable errors)
    final_errorX, final_errorZ = False, False
    for stab in final_stabs:
        if stab[0] == '-':
            if 'Z' in stab:
                final_errorX = True
            elif 'X' in stab:
                final_errorZ = True
            #break

    # Do perfect EC on the final state
    corr_circ = qfun.create_EC_subcircs(code, False, False, False, True)
    corr_circ2 = qfun.create_EC_subcircs(code, False, False, False, True)
    corr_circ.join_circuit_at(range(n_code,2*n_code), corr_circ2)

    final_state = (final_stabs, final_destabs)
    bare_anc = True
    supra_circ = qcirc.CNOT_latt_surg(final_state, corr_circ, code, chp_loc, bare_anc)
    supra_circ.run_all_gates()
    corr_stabs = supra_circ.state[0]

    # Determine if a failure has occurred
    failX, failZ = False, False
    for stab in corr_stabs:
        if stab[0] == '-':
            if 'Z' in stab:
                failX = True
            elif 'X' in stab:
                failZ = True
            #break

    return final_errorX, final_errorZ, failX, failZ
Exemplo n.º 5
0
#anc_stabs, anc_destabs = [], []
#for i in range(n_code):
#    anc_stab = ['Z' if i==j else 'I' for j in range(n_code)]
#    anc_stab.insert(0, '+')
#    anc_destab = ['X' if i==j else 'I' for j in range(n_code)]
#    anc_destab.insert(0, '+')
#    anc_stabs += [''.join(anc_stab)]
#    anc_destabs += [''.join(anc_destab)]
#init_state_anc = anc_stabs, anc_destabs

all_stabs = [init_state_ctrl[0]] + [init_state_targ[0]] + [init_state_anc[0]]
all_destabs = [init_state_ctrl[1]] + [init_state_targ[1]] + [init_state_anc[1]]
init_state = qfun.combine_stabs(all_stabs, all_destabs)

# run the CNOT lattice surgery (with no EC on ctrl or targ)
supra_circ = qcirc.CNOT_latt_surg(init_state, circuits, code, chp_loc)
supra_circ.run_all_gates()

final_stabs = supra_circ.state[0][:]
final_destabs = supra_circ.state[1][:]

# do perfect EC on ctrl and target logical qubits
corr_circ = qfun.create_EC_subcircs(code, False, False, False, True)
corr_circ2 = qfun.create_EC_subcircs(code, False, False, False, True)
corr_circ.join_circuit_at(range(n_code, 2 * n_code), corr_circ2)

#init_state_ctrl = wrapper.prepare_stabs_Steane('+X')
#init_state_targ = wrapper.prepare_stabs_Steane('+Z')
#all_stabs = [init_state_ctrl[0]]+[init_state_targ[0]]
#all_destabs = [init_state_ctrl[1]]+[init_state_targ[1]]
#init_state = qfun.combine_stabs(all_stabs, all_destabs)
Exemplo n.º 6
0
def run_QEC_d3(init_state, QEC_circ_list, kind='flag'):
    '''
    kind: 'flag' or 'diVin'
    '''
    if kind == 'surface17':
        QEC_object = qwrap.QEC_d3(init_state, QEC_circ_list[:], chp_loc)
        n_X, n_Z = QEC_object.run_fullQEC_CSS_d3('surface17', True, False)
        n_supra_gates = n_X + n_Z

    elif kind == 'all_flags':
        QEC_object = qwrap.QEC_with_flags(init_state, QEC_circ_list[:],
                                          chp_loc)
        # In this case, n_supra_gates is not an integer.  It's a list of run subcircs.
        n_supra_gates = QEC_object.run_Reichardt_d3_one_flag_stab(
            'cheap', 'any')

    elif kind == 'flag':
        QEC_object = qwrap.QEC_with_flags(init_state, QEC_circ_list[:],
                                          chp_loc)
        QEC_object.run_all_Reichardt_d3(init_state)

    elif kind == 'diVin':
        QEC_object = qwrap.QEC_d3(init_state, QEC_circ_list[:], chp_loc)
        n_X, n_Z = QEC_object.run_fullQEC_CSS('Steane', False)
        n_supra_gates = n_X + n_Z

    elif kind == 'diVin_new':
        QEC_object = qwrap.QEC_d3(init_state, QEC_circ_list[:], chp_loc)
        n_X, n_Z = QEC_object.run_fullQEC_CSS('Steane', False, False)
        n_supra_gates = n_X + n_Z

    final_stabs, final_destabs = QEC_object.stabs[:], QEC_object.destabs[:]

    # Determine if there is an error (both failures and correctable errors)
    final_error = False
    for stab in final_stabs:
        if stab[0] != '+':
            final_error = True
            break

    # do perfect EC
    if kind == 'surface17':
        surface17_stabs = surf17.Code.stabilizers[:]
        corr_circ = cor.Bare_Correct.generate_rep_bare_meas(
            9, surface17_stabs, 2, False, True, False, False, False, True)
        corr_circ_list = []
        for supra_gate in corr_circ.gates:
            corr_circ_list += [supra_gate.circuit_list[0]]
        corr_object = qwrap.QEC_d3([final_stabs[:], final_destabs[:]],
                                   corr_circ_list[:], chp_loc)
        # don't matter 1 and don't matter 2
        dm1, dm2 = corr_object.run_fullQEC_CSS('surface17', True, False)
        corr_stabs = corr_object.stabs[:]

    else:
        corr_circ = qfun.create_EC_subcircs('Steane', False, False, False,
                                            True)
        final_state = (final_stabs, final_destabs)
        bare_anc = True
        supra_circ = qwrap.CNOT_latt_surg(final_state, corr_circ, 'Steane',
                                          chp_loc, bare_anc)
        supra_circ.run_all_gates()
        corr_stabs = supra_circ.state[0]

    # Determine if a failure has occured.
    fail = False
    for stab in corr_stabs:
        if stab[0] != '+':
            fail = True
            break

    return final_error, fail, n_supra_gates
Exemplo n.º 7
0
#sys.exit(0)
#first_error_config = 1215
#first_error_config = 1293    # flag jointQECZ
#first_error_config = 2070    # weird error on old method.  WEIRD!
first_error_config = 2
for i in range(first_error_config, len(total_indexes)):
    print i
    print total_errors[i], total_indexes[i]
    CNOT_circ_copy = qfun.create_latt_surg_CNOT(False, True, True, False, True,
                                                True)
    qfun.add_specific_error_config_CNOT(CNOT_circ_copy, total_errors[i],
                                        total_indexes[i])
    brow.from_circuit(CNOT_circ_copy, True)
    sys.exit(0)

    QEC_object = qcirc.CNOT_latt_surg(initial_state, CNOT_circ_copy, 'Steane',
                                      chp_loc)
    QEC_object.run_all_gates()
    final_stabs, final_destabs = QEC_object.state[0][:], QEC_object.state[1][:]

    # Determine if there is an error (both failures and correctable errors)
    for stab in final_stabs:
        if stab[0] != '+':
            #print 'ERROR'
            final_error_count += 1
            break

    # do perfect EC on ctrl and target logical qubits
    corr_circ = qfun.create_EC_subcircs('Steane', False, False, False, True)
    corr_circ2 = qfun.create_EC_subcircs('Steane', False, False, False, True)
    corr_circ.join_circuit_at(range(n_code, 2 * n_code), corr_circ2)