예제 #1
0
 def test_cswap_gate_nondeterministic_minimal_basis_gates(self):
     """Test cswap-gate gate circuits compiling to u3,cx"""
     circuits = ref_non_clifford.cswap_gate_circuits_nondeterministic(
         final_measure=False)
     targets = ref_non_clifford.cswap_gate_statevector_nondeterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1, basis_gates=['u3', 'cx'])
     result = job.result()
     self.assertTrue(getattr(result, 'success', False))
     self.compare_statevector(result, circuits, targets)
예제 #2
0
 def test_initialize_2(self):
     """Test StatevectorSimulator initialize"""
     circuits = ref_initialize.initialize_circuits_2(final_measure=False)
     targets = ref_initialize.initialize_statevector_2()
     qobj = assemble(circuits, shots=1)
     sim_job = StatevectorSimulator().run(qobj)
     result = sim_job.result()
     self.assertTrue(getattr(result, 'success', False))
     self.compare_statevector(result, circuits, targets)
예제 #3
0
 def test_cz_gate_deterministic_waltz_basis_gates(self):
     """Test cz-gate gate circuits compiling to u1,u2,u3,cx"""
     circuits = ref_2q_clifford.cz_gate_circuits_deterministic(final_measure=False)
     targets = ref_2q_clifford.cz_gate_statevector_deterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1,
                   basis_gates=['u1', 'u2', 'u3', 'cx'])
     result = job.result()
     self.assertTrue(getattr(result, 'success', False))
     self.compare_statevector(result, circuits, targets)
 def test_conditional_2bit(self):
     """Test conditional operations on 2-bit conditional register."""
     circuits = ref_conditionals.conditional_circuits_2bit(
         final_measure=False)
     targets = ref_conditionals.conditional_statevector_2bit()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
예제 #5
0
 def test_conditional_unitary_2bit(self):
     """Test conditional unitary on 2-bit conditional register."""
     circuits = ref_conditionals.conditional_circuits_2bit(final_measure=False,
                                                           conditional_type='unitary')
     targets = ref_conditionals.conditional_statevector_2bit()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.assertTrue(getattr(result, 'success', False))
     self.compare_statevector(result, circuits, targets)
 def test_measure(self):
     """Test StatevectorSimulator measure with deterministic counts"""
     circuits = ref_measure.measure_circuits_deterministic(
         allow_sampling=True)
     targets = ref_measure.measure_statevector_deterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_ccx_gate_nondeterministic_default_basis_gates(self):
     """Test ccx-gate circuits compiling to backend default basis_gates."""
     circuits = ref_non_clifford.ccx_gate_circuits_nondeterministic(
         final_measure=False)
     targets = ref_non_clifford.ccx_gate_statevector_nondeterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_initialize_1(self):
     """Test StatevectorSimulator initialize"""
     circuits = ref_initialize.initialize_circuits_1(final_measure=False)
     targets = ref_initialize.initialize_statevector_1()
     qobj = assemble(circuits, shots=1)
     sim_job = StatevectorSimulator().run(qobj)
     result = sim_job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_conditional_unitary_1bit(self):
     """Test conditional unitaries on 1-bit conditional register."""
     circuits = ref_conditionals.conditional_circuits_1bit(
         final_measure=False, conditional_type='unitary')
     targets = ref_conditionals.conditional_statevector_1bit()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_measure_multi_qubit(self):
     """Test StatevectorSimulator multi-qubit measure with deterministic counts"""
     qobj = ref_measure.measure_circuits_qobj_deterministic(
         allow_sampling=True)
     circuits = [experiment.header.name for experiment in qobj.experiments]
     targets = ref_measure.measure_statevector_qobj_deterministic()
     job = StatevectorSimulator().run(qobj)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_reset_deterministic(self):
     """Test StatevectorSimulator reset with for circuits with deterministic counts"""
     # For statevector output we can combine deterministic and non-deterministic
     # count output circuits
     circuits = ref_reset.reset_circuits_deterministic(final_measure=False)
     targets = ref_reset.reset_statevector_deterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
예제 #12
0
 def test_reset_nondeterministic(self):
     """Test StatevectorSimulator reset with for circuits with non-deterministic counts"""
     # For statevector output we can combine deterministic and non-deterministic
     # count output circuits
     circuits = ref_reset.reset_circuits_nondeterministic(final_measure=False)
     targets = ref_reset.reset_statevector_nondeterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1)
     result = job.result()
     self.assertTrue(getattr(result, 'success', False))
     self.compare_statevector(result, circuits, targets)
 def test_y_gate_deterministic_minimal_basis_gates(self):
     """Test y-gate gate circuits compiling to U,CX
     DISABLED until transpiler bug is fixed.
     """
     circuits = ref_1q_clifford.y_gate_circuits_deterministic(final_measure=False)
     targets = ref_1q_clifford.y_gate_statevector_deterministic()
     job = execute(circuits, StatevectorSimulator(), shots=1, basis_gates=['u3', 'cx'])
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
예제 #14
0
def set_sv(sim_opts):
    
    sim_method = [opt for opt in sim_opts if opt.startswith('method')]

    if len(sim_method) == 0:
        backend = StatevectorSimulator(max_memory_mb = 2048,
                                       statevector_parallel_threshold=8)
        sim_method = 'statevector'
    else:
        sim_method = sim_method[0].split('=')[1].strip('\n')
        
        if sim_method not in sv_methods:
            print('SimulationError: simulation method not available. Available options: "statevector"')
            sys.exit()
        else:
            backend = StatevectorSimulator(max_memory_mb = 2048,
                                       statevector_parallel_threshold=8)
        
    return backend, sim_method
class TestStatevectorSimulatorThrustCPU(common.QiskitAerTestCase,
                                        StatevectorGateTests,
                                        StatevectorSimulatorTests,
                                        StatevectorFusionTests):
    """StatevectorSimulator automatic method tests."""

    BACKEND_OPTS = {"seed_simulator": 10598, "method": "statevector_thrust"}
    try:
        SIMULATOR = StatevectorSimulator(**BACKEND_OPTS)
    except AerError:
        SIMULATOR = None
 def DISABLED_test_unitary_gate_complex(self):
     """Test unitary qobj instruction with complex matrices."""
     qobj = ref_unitary_gate.unitary_gate_circuits_complex_deterministic(
         final_measure=False)
     circuits = [experiment.header.name for experiment in qobj.experiments]
     targets = ref_unitary_gate.unitary_gate_statevector_complex_deterministic(
     )
     job = StatevectorSimulator().run(qobj)
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
예제 #17
0
def execute_circuit(G, gamma, beta, p=1):  #Returns same as earlier, the counts
    n = len(G.nodes())
    QAOA = circuit_ansatz(G, gamma, beta, p=p)
    result = execute(QAOA, backend=StatevectorSimulator()).result()
    statevector = result.get_statevector(QAOA)
    probabilities = ([abs(i)**2 for i in statevector])
    state_dictionary = {
        bin(i)[2:].zfill(n): probabilities[i]
        for i in range(len(probabilities))
    }
    return state_dictionary
 def test_swap_gate_nondeterministic_waltz_basis_gates(self):
     """Test swap-gate gate circuits compiling to u1,u2,u3,cx"""
     circuits = ref_2q_clifford.swap_gate_circuits_nondeterministic(
         final_measure=False)
     targets = ref_2q_clifford.swap_gate_statevector_nondeterministic()
     job = execute(circuits,
                   StatevectorSimulator(),
                   shots=1,
                   basis_gates='u1,u2,u3,cx')
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_ccx_gate_nondeterministic_minimal_basis_gates(self):
     """Test ccx-gate gate circuits compiling to u3,cx"""
     circuits = ref_non_clifford.ccx_gate_circuits_nondeterministic(
         final_measure=False)
     targets = ref_non_clifford.ccx_gate_statevector_nondeterministic()
     job = execute(circuits,
                   StatevectorSimulator(),
                   shots=1,
                   basis_gates=['u3', 'cx'])
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_tdg_gate_deterministic_waltz_basis_gates(self):
     """Test tdg-gate gate circuits compiling to u1,u2,u3,cx"""
     circuits = ref_non_clifford.tdg_gate_circuits_deterministic(
         final_measure=False)
     targets = ref_non_clifford.tdg_gate_statevector_deterministic()
     job = execute(circuits,
                   StatevectorSimulator(),
                   shots=1,
                   basis_gates=['u1', 'u2', 'u3', 'cx'])
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
 def test_tdg_gate_deterministic_minimal_basis_gates(self):
     """Test tdg-gate gate circuits compiling to U,CX"""
     circuits = ref_non_clifford.tdg_gate_circuits_deterministic(
         final_measure=False)
     targets = ref_non_clifford.tdg_gate_statevector_deterministic()
     job = execute(circuits,
                   StatevectorSimulator(),
                   shots=1,
                   basis_gates='U,CX')
     result = job.result()
     self.is_completed(result)
     self.compare_statevector(result, circuits, targets)
    def setUp(self):
        super().setUp()

        # specify "run configuration"
        quantum_instance = QuantumInstance(StatevectorSimulator())

        # define QNN
        num_qubits = 2
        feature_map = ZZFeatureMap(num_qubits)
        ansatz = RealAmplitudes(num_qubits, reps=1)
        self.qnn = TwoLayerQNN(num_qubits, feature_map=feature_map,
                               ansatz=ansatz, quantum_instance=quantum_instance)

        self.qnn_no_qi = TwoLayerQNN(num_qubits, feature_map=feature_map,
                                     ansatz=ansatz)
예제 #23
0
    def test_parameterized_qobj_statevector(self):
        """Test parameterized qobj with Expectation Value snapshot and qasm simulator."""
        statevec_targets = snapshot_expval_final_statevecs() * 3

        backend = StatevectorSimulator()
        qobj = self.parameterized_qobj(backend=backend,
                                       measure=False,
                                       snapshot=False)
        self.assertIn('parameterizations', qobj.to_dict()['config'])
        job = backend.run(qobj, self.BACKEND_OPTS)
        result = job.result()
        success = getattr(result, 'success', False)
        num_circs = len(result.to_dict()['results'])
        self.assertTrue(success)

        for j in range(num_circs):
            statevector = result.get_statevector(j)
            np.testing.assert_array_almost_equal(statevector,
                                                 statevec_targets[j].data,
                                                 decimal=7)
예제 #24
0
        '0x0': 5 * shots / 8,
        '0x1': shots / 8,
        '0x2': shots / 8,
        '0x3': shots / 8
    }]
    simulator = QasmSimulator()
    qobj = assemble(transpile(circuits, simulator), simulator, shots=shots)
    result = simulator.run(qobj).result()
    assert result.status == 'COMPLETED'
    compare_counts(result, circuits, targets, delta=0.05 * shots)
    assert result.success is True

    # Run statevector simulator
    circuits = cx_gate_circuits_deterministic(final_measure=False)
    targets = cx_gate_statevector_deterministic()
    job = execute(circuits, StatevectorSimulator(), shots=1)
    result = job.result()
    assert result.status == 'COMPLETED'
    assert result.success is True
    compare_statevector(result, circuits, targets)

    # Run unitary simulator
    circuits = cx_gate_circuits_deterministic(final_measure=False)
    targets = cx_gate_unitary_deterministic()
    job = execute(circuits,
                  UnitarySimulator(),
                  shots=1,
                  basis_gates=['u1', 'u2', 'u3', 'cx'])
    result = job.result()
    assert result.status == 'COMPLETED'
    assert result.success is True
예제 #25
0
def show_matrix(G, gamma, beta, p=1, state=0):

    n = len(G.nodes())
    E = G.edges()

    QAOA = QuantumCircuit(n, n)
    if state == 1:
        QAOA.x(0)
    elif state == 2:
        QAOA.x(1)
    elif state == 3:
        QAOA.x(0)
        QAOA.x(1)
    #QAOA.h(range(n))
    #QAOA.barrier()

    #plt.savefig(f'Initial State bad')
    np.set_printoptions(precision=3, suppress=True)
    for i in range(p):
        for edge in E:
            k = edge[0]
            l = edge[1]
            QAOA.cu1(-2 * gamma[i], k,
                     l)  #Controlled-Z gate with a -2*gamma phase
            QAOA.u1(gamma[i], k)  #Rotation of gamma around the z axis
            QAOA.u1(gamma[i], l)

        b = []
        c = []
        c_p = []
        b_p = []
        statevector = execute(
            QAOA,
            backend=StatevectorSimulator()).result().get_statevector(QAOA)
        c = np.array(statevector[:])
        #print(f'The amplitudes after applying U_C are :\n {statevector}')
        probabilities = np.array(([abs(i)**2 for i in statevector]))
        c_p = np.array(probabilities[:])
        #print(f'The probabilities after applying U_C are :\n {probabilities}')
        state_dict = {
            bin(i)[2:].zfill(n): probabilities[i]
            for i in range(len(probabilities))
        }

        QAOA.barrier()
        QAOA.rx(2 * beta[i], range(n))  #X rotation
        statevector = execute(
            QAOA,
            backend=StatevectorSimulator()).result().get_statevector(QAOA)
        b = np.array(statevector[:])
        #print(f'The amplitudes after applying U_b are :\n {statevector}')
        probabilities = np.array(([abs(i)**2 for i in statevector]))
        b_p = np.array(probabilities[:])
        #print(f'The probabilities after applying U_B are :\n {probabilities}')
        state_dict = {
            bin(i)[2:].zfill(n): probabilities[i]
            for i in range(len(probabilities))
        }

        QAOA.barrier()
    return c, b, c_p, b_p
예제 #26
0
import pylab as pl

# Qiskit
from qiskit.providers.aer import StatevectorSimulator
from qiskit import QuantumCircuit, execute

# Optimizers
from scipy.optimize import minimize, differential_evolution

# Choose your fighter
G = graphs.two_nodes_graph()
n = len(G.nodes())
E = G.edges()

# Choose the arena
backend = StatevectorSimulator()

# Choose number of rounds
p = 1
#colors = ['g' for node in G.nodes()]
#nx.draw_networkx(G, node_color=colors)


def give_cost(G, gamma, beta, p=1):

    n = len(G.nodes())
    E = G.edges()

    QAOA = QuantumCircuit(n, n)
    QAOA.h(range(n))
    QAOA.barrier()
예제 #27
0
class StatevectorFusionTests:
    """StatevectorSimulator fusion tests."""

    SIMULATOR = StatevectorSimulator()

    def fusion_options(self, enabled=None, threshold=None, verbose=None):
        """Return default backend_options dict."""
        backend_options = self.BACKEND_OPTS.copy()
        if enabled is not None:
            backend_options['fusion_enable'] = enabled
        if verbose is not None:
            backend_options['fusion_verbose'] = verbose
        if threshold is not None:
            backend_options['fusion_threshold'] = threshold
        return backend_options

    def fusion_metadata(self, result):
        """Return fusion metadata dict"""
        metadata = result.results[0].metadata
        return metadata.get('fusion', {})

    def test_fusion_theshold(self):
        """Test fusion threhsold settings work."""
        seed = 12345
        threshold = 4
        backend_options = self.fusion_options(enabled=True,
                                              threshold=threshold)

        with self.subTest(msg='below fusion threshold'):
            circuit = QuantumVolume(threshold - 1, seed=seed)
            circuit = transpile(circuit, self.SIMULATOR)
            qobj = assemble([circuit], shots=1)
            result = self.SIMULATOR.run(
                qobj, backend_options=backend_options).result()
            meta = self.fusion_metadata(result)

            self.assertSuccess(result)
            self.assertFalse(meta.get('applied'))

        with self.subTest(msg='at fusion threshold'):
            circuit = QuantumVolume(threshold, seed=seed)
            circuit = transpile(circuit, self.SIMULATOR)
            qobj = assemble([circuit], shots=1)
            result = self.SIMULATOR.run(
                qobj, backend_options=backend_options).result()
            meta = self.fusion_metadata(result)

            self.assertSuccess(result)
            self.assertTrue(meta.get('applied'))

        with self.subTest(msg='above fusion threshold'):
            circuit = QuantumVolume(threshold + 1, seed=seed)
            circuit = transpile(circuit, self.SIMULATOR)
            qobj = assemble([circuit], shots=1)
            result = self.SIMULATOR.run(
                qobj, backend_options=backend_options).result()
            meta = self.fusion_metadata(result)

            self.assertSuccess(result)
            self.assertTrue(meta.get('applied'))

    def test_fusion_disable(self):
        """Test Fusion enable/disable option"""
        seed = 2233
        circuit = QuantumVolume(4, seed=seed)
        circuit = transpile(circuit, self.SIMULATOR)
        qobj = assemble([circuit], shots=1)

        with self.subTest(msg='test fusion enable'):
            backend_options = self.fusion_options(enabled=True, threshold=1)
            result = self.SIMULATOR.run(
                qobj, backend_options=backend_options).result()
            meta = self.fusion_metadata(result)

            self.assertSuccess(result)
            self.assertTrue(meta.get('applied'))

        with self.subTest(msg='test fusion disable'):
            backend_options = self.fusion_options(enabled=False, threshold=1)
            result = self.SIMULATOR.run(
                qobj, backend_options=backend_options).result()
            meta = self.fusion_metadata(result)

            self.assertSuccess(result)
            self.assertFalse(meta.get('applied'))

    def test_fusion_output(self):
        """Test Fusion returns same final unitary"""
        seed = 54321
        circuit = QuantumVolume(4, seed=seed)
        circuit = transpile(circuit, self.SIMULATOR)
        qobj = assemble([circuit], shots=1)

        options_disabled = self.fusion_options(enabled=False, threshold=1)
        result_disabled = self.SIMULATOR.run(
            qobj, backend_options=options_disabled).result()
        self.assertSuccess(result_disabled)

        options_enabled = self.fusion_options(enabled=True, threshold=1)
        result_enabled = self.SIMULATOR.run(
            qobj, backend_options=options_enabled).result()
        self.assertSuccess(result_enabled)

        sv_no_fusion = Statevector(result_disabled.get_statevector(0))
        sv_fusion = Statevector(result_enabled.get_statevector(0))
        self.assertEqual(sv_no_fusion, sv_fusion)
예제 #28
0
    def setUp(self):
        super().setUp()

        # specify quantum instances
        self.sv_quantum_instance = QuantumInstance(StatevectorSimulator())
        self.qasm_quantum_instance = QuantumInstance(AerSimulator(), shots=100)
예제 #29
0
def show_amplitudes(G, gamma, beta, p=1):

    n = len(G.nodes())
    E = G.edges()

    QAOA = QuantumCircuit(n, n)
    QAOA.h(range(n))
    QAOA.barrier()

    fig = plt.figure()
    bar_graph = plt.bar(range(2**n), [1 / (2**n) for i in range(2**n)],
                        align='center')
    x_ticks = [bin(i)[2:].zfill(n) for i in range(2**n)]
    plt.xticks(ticks=range(2**n), labels=x_ticks, rotation=60)
    plt.ylim(0, 0.75)
    plt.title(f'Initial State')
    fig.canvas.draw()
    plt.pause(1)
    #plt.savefig(f'Initial State bad')

    for i in range(p):
        for edge in E:
            k = edge[0]
            l = edge[1]
            QAOA.cu1(-2 * gamma[i], k,
                     l)  #Controlled-Z gate with a -2*gamma phase
            QAOA.u1(gamma[i], k)  #Rotation of gamma around the z axis
            QAOA.u1(gamma[i], l)

        statevector = execute(
            QAOA,
            backend=StatevectorSimulator()).result().get_statevector(QAOA)
        probabilities = ([abs(i)**2 for i in statevector])
        state_dict = {
            bin(i)[2:].zfill(n): probabilities[i]
            for i in range(len(probabilities))
        }

        for rectangle, probs in zip(bar_graph, probabilities):
            rectangle.set_height(probs)
        plt.title(
            f'Cost: {get_expectval(state_dict, G)}\n Iteration {i + 1}, after applying $U_C$\n $\gamma$ = {gamma[i]}'
        )
        fig.canvas.draw()
        #plt.savefig(f'{i} gamma bad')
        plt.pause(0.5)

        QAOA.barrier()
        QAOA.rx(2 * beta[i], range(n))  #X rotation
        statevector = execute(
            QAOA,
            backend=StatevectorSimulator()).result().get_statevector(QAOA)
        probabilities = ([abs(i)**2 for i in statevector])
        state_dict = {
            bin(i)[2:].zfill(n): probabilities[i]
            for i in range(len(probabilities))
        }

        for rectangle, probs in zip(bar_graph, probabilities):
            rectangle.set_height(probs)
        plt.title(
            f'Cost: {get_expectval(state_dict, G)}\n Iteration {i + 1}, after applying $U_B$\n $\\beta$ = {beta[i]}'
        )
        fig.canvas.draw()
        #plt.savefig(f'{i} beta bad')
        plt.pause(0.5)

        QAOA.barrier()
    plt.show()
coupling_map = backend.configuration().coupling_map
noise_model = NoiseModel.from_backend(backend)

sim_backend = QasmSimulator(method='statevector',
                            max_parallel_shots=0,
                            max_parallel_threads=0,
                            noise_model=noise_model)

pass_manager = noise_pass_manager(coupling_map=coupling_map,
                                  layout_method='noise_adaptive',
                                  seed_transpiler=1000,
                                  routing_method='noise_adaptive',
                                  backend_properties=properties,
                                  alpha=0.5)

ideal_result = execute(qc, backend=StatevectorSimulator()).result()
ideal_counts = Statevector(
    ideal_result.get_statevector(qc)).sample_counts(8192)
ideal_probs = Statevector(ideal_result.get_statevector()).probabilities_dict()

qiskit_na_t_result = execute(qc,
                             backend=sim_backend,
                             shots=8192,
                             pass_manager=pass_manager,
                             noise_model=noise_model).result()

sampled_counts = qiskit_na_t_result.get_counts(qc)

hellinger_fidelity = hellinger_fidelity(ideal_counts, sampled_counts)
hog = hog(sampled_counts, ideal_probs)
l1_norm = l1_norm(sampled_counts, ideal_probs)