Example #1
0
def mcx(relative_numbers):
    from unqomp.ancillaallocation import AncillaCircuit
    from qiskit import QuantumRegister, QuantumCircuit

    n = 12

    print('MCX  ; ', end = '')
    #for qiskit 
    ctrls2 = QuantumRegister(n, 'ctrls')
    target2 = QuantumRegister(1, 'target')
    anc = QuantumRegister(n - 2, 'anc')
    circuit2 = QuantumCircuit(ctrls2, target2, anc)
    circuit2.mcx(ctrls2, target2, anc, mode = 'v-chain')
    nb_qb_qi = circuit2.num_qubits
    nb_gates_qi = circuit2.decompose().decompose().decompose().decompose().decompose().count_ops()
    if not relative_numbers:
        print(str(nb_qb_qi) + ' ; ' + str(nb_gates_qi['cx'] + nb_gates_qi['u3']) + ' ; ' + str(nb_gates_qi['cx']) + ' ; ', end = '')
    
    
    ctrls = QuantumRegister(n, 'ctrls')
    target = QuantumRegister(1, 'target')
    circuit1 = AncillaCircuit(ctrls, target)
    circuit1.mcx(ctrls, target)
    circuit1 = circuit1.circuitWithUncomputation()
    nb_qb_mi = circuit1.num_qubits
    nb_gates_mi = circuit1.decompose().decompose().decompose().decompose().decompose().count_ops()
    if not relative_numbers:
        print(str(nb_qb_mi) + ' ; ' + str(nb_gates_mi['cx'] + nb_gates_mi['u3']) + ' ; ' + str(nb_gates_mi['cx']))

    if relative_numbers:
        print_relative_vals(nb_qb_qi, nb_gates_qi['cx'], nb_gates_qi['u3'], nb_qb_mi, nb_gates_mi['cx'], nb_gates_mi['u3'])
Example #2
0
def mcx():
    x = QuantumRegister(10)
    r = QuantumRegister(1)
    circuit = AncillaCircuit(x, r)
    circuit.mcx(x[:], r)
    circuit = circuit.circuitWithUncomputation()
    nb_qb_mi = circuit.num_qubits
    nb_gates_mi = circuit.decompose().decompose().decompose().decompose(
    ).decompose().count_ops()
    print("MCX " + str(nb_qb_mi) + ';' +
          str(nb_gates_mi['cx'] + nb_gates_mi['u3']) + ';' +
          str(nb_gates_mi['cx']))
Example #3
0
def mcry(relative_numbers):
    from unqomp.ancillaallocation import AncillaCircuit
    from qiskit import QuantumRegister, QuantumCircuit
    from unqomp.examples.mcx import makeQiskitMCRY

    n = 12
    ctrls = QuantumRegister(n, 'ctrls')
    target = QuantumRegister(1, 'target')
    circuit1 = AncillaCircuit(ctrls, target)
    circuit1.mcry(2.0, ctrls, target)
    circuit1 = circuit1.circuitWithUncomputation()

    qiskitMCRY = makeQiskitMCRY(2.0, n)
    
    print('MCRY with regression bug  ; ', end = '')
   
    #qiskit buggy
    ctrls2 = QuantumRegister(n, 'ctrls')
    target2 = QuantumRegister(1, 'target')
    anc = QuantumRegister(n - 2, 'anc')
    circuit2 = QuantumCircuit(ctrls2, target2, anc)
    circuit2.mcry(2.0, ctrls2,target2[0], anc, mode = 'basic')
    nb_qb_qi = circuit2.num_qubits
    nb_gates_qi = circuit2.decompose().decompose().decompose().decompose().decompose().count_ops()
    if not relative_numbers:
        print(str(nb_qb_qi) + ' ; ' + str(nb_gates_qi['cx'] + nb_gates_qi['u3']) + ' ; ' + str(nb_gates_qi['cx']) + str(' ; '), end = '')

    nb_qb_mi = circuit1.num_qubits
    nb_gates_mi = circuit1.decompose().decompose().decompose().decompose().decompose().count_ops()
    if not relative_numbers:
        print(str(nb_qb_mi) + ' ; ' + str(nb_gates_mi['cx'] + nb_gates_mi['u3']) + ' ; ' + str(nb_gates_mi['cx']))

    if relative_numbers:
        print_relative_vals(nb_qb_qi, nb_gates_qi['cx'], nb_gates_qi['u3'], nb_qb_mi, nb_gates_mi['cx'], nb_gates_mi['u3'])

    #qiskit with bug fixed
    nb_qb_qi = qiskitMCRY.num_qubits
    nb_gates_qi = qiskitMCRY.decompose().decompose().decompose().decompose().decompose().count_ops()
    print('MCRY *, regression bug fixed  ; ', end = '')
    if not relative_numbers:
        print(str(nb_qb_qi) + ' ; ' + str(nb_gates_qi['cx'] + nb_gates_qi['u3']) + ' ; '+ str(nb_gates_qi['cx']) + str(' ; '), end = '')
        print(str(nb_qb_mi) + ' ; ' + str(nb_gates_mi['cx'] + nb_gates_mi['u3']) + ' ; ' + str(nb_gates_mi['cx']))
    else:
        print_relative_vals(nb_qb_qi, nb_gates_qi['cx'], nb_gates_qi['u3'], nb_qb_mi, nb_gates_mi['cx'], nb_gates_mi['u3'])
Example #4
0
def mcry(nb_vars_max=40):
    from unqomp.ancillaallocation import AncillaCircuit
    from qiskit import QuantumRegister, QuantumCircuit
    from unqomp.examples.mcx import makeQiskitMCRY

    nb_vars_t = []
    nb_qb_qi = []
    nb_qb_mi = []
    nb_qb_bq = []
    nb_gates_qi = []
    nb_gates_mi = []
    nb_gates_bq = []

    for nb_vars in range(3, nb_vars_max, 1):
        n = nb_vars
        ctrls = QuantumRegister(n, 'ctrls')
        target = QuantumRegister(1, 'target')
        circuit1 = AncillaCircuit(ctrls, target)
        circuit1.mcry(0.2, ctrls, target)
        circuit1 = circuit1.circuitWithUncomputation()

        qiskitMCX = makeQiskitMCRY(0.2, n)

        nb_vars_t.append(nb_vars)
        #qiskit
        nb_qb_qi.append(qiskitMCX.num_qubits)
        nb_gates_qi.append(qiskitMCX.decompose().decompose().decompose().
                           decompose().decompose().count_ops())

        #mine
        nb_qb_mi.append(circuit1.num_qubits)
        nb_gates_mi.append(circuit1.decompose().decompose().decompose().
                           decompose().decompose().count_ops())

        #qiskit buggy
        if n < 15:
            ctrls2 = QuantumRegister(n, 'ctrls')
            target2 = QuantumRegister(1, 'target')
            anc = QuantumRegister(n - 2, 'anc')
            circuit2 = QuantumCircuit(ctrls2, target2, anc)
            circuit2.mcry(0.2, ctrls2, target2[0], anc, mode='basic')
            nb_qb_bq.append(circuit2.num_qubits)
            nb_gates_bq.append(circuit2.decompose().decompose().decompose().
                               decompose().decompose().count_ops())
        else:
            nb_qb_bq.append(0)
            nb_gates_bq.append({'u3': 0, 'cx': 0})

    with open('evaluation/plot_values/mcry.csv', 'w') as f:
        sys.stdout = f
        print(
            "input size; n_qb Qiskit without regression bug; n_gates Qiskit without regression bug; n_cx_gates Qiskitwithout regression bug;  n_qb Unqomp; n_gates Unqomp ; n_cx_gates Uncomp; n_qb Qiskit with regression bug; n_gates Qiskit with regression bug ; n_cx_gates Qiskit with regression bug"
        )
        for i in range(len(nb_vars_t)):
            print(nb_vars_t[i], ";", nb_qb_qi[i], ";",
                  nb_gates_qi[i]['u3'] + nb_gates_qi[i]['cx'], ";",
                  nb_gates_qi[i]['cx'], ";", nb_qb_mi[i], ";",
                  nb_gates_mi[i]['u3'] + nb_gates_mi[i]['cx'], ";",
                  nb_gates_mi[i]['cx'], ";", nb_qb_bq[i], ";",
                  nb_gates_bq[i]['u3'] + nb_gates_bq[i]['cx'], ";",
                  nb_gates_bq[i]['cx'])
        sys.stdout = original_stdout