def simulate_one_amp(G, gamma, beta): composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() print(composer.circuit) sim = QtreeSimulator() result = sim.simulate(composer.circuit) print('QTensor 1 amp', result.data) print('QTensor 1 prob', np.abs(result.data)**2)
def test_tamaki_trimming_opt(): G, gamma, beta = get_test_problem(34, p=3, d=3) composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() sim = FeynmanSimulator() sim.optimizer = SlicesOptimizer result = sim.simulate(composer.circuit, batch_vars=3, tw_bias=7) print(result) sim.optimizer = TamakiTrimSlicing sim.opt_args = {'wait_time': 5} result_tam = sim.simulate(composer.circuit, batch_vars=3, tw_bias=7) print(result_tam) assert np.allclose(result_tam, result)
def test_profiled(capsys): G, gamma, beta = get_test_problem() composer = QtreeQAOAComposer(graph=G, gamma=[np.pi / 3], beta=[np.pi / 4]) composer.ansatz_state() print(composer.circuit) backend = PerfNumpyBackend() sim = QtreeSimulator(bucket_backend=backend) result = sim.simulate(composer.circuit) print("Profile results") print(backend.gen_report()) qtree_amp = result assert qtree_amp
def test_qtree_smoke(): G, gamma, beta = get_test_problem() composer = QtreeQAOAComposer( graph=G, gamma=[np.pi/3], beta=[np.pi/4]) composer.ansatz_state() print(composer.circuit) assert composer.circuit assert composer.n_qubits == G.number_of_nodes() composer = QtreeQAOAComposer( graph=G, gamma=[np.pi/3], beta=[np.pi/4]) composer.energy_expectation_lightcone(list(G.edges())[0]) print(composer.circuit) assert composer.circuit assert composer.n_qubits == G.number_of_nodes()
def test_parallel_batched(): G, gamma, beta = get_test_problem(14, 3, d=4) batch_vars = 3 composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() sim = QtreeSimulator() amp = sim.simulate(composer.circuit) amps = sim.simulate_batch(composer.circuit, batch_vars=2) print('ordinary qtree amp', amp) print('ordinary qtree 2 amps', amps) assert abs(amp - amps[0]) < 1e-6 sim = FeynmanSimulator() result = sim.simulate(composer.circuit, batch_vars=batch_vars, tw_bias=7) print(result) batch_amps = 2**batch_vars assert len(result) == batch_amps assert abs(amp - result[0]) < 1e-6
def test_qiskit_convert(): G, gamma, beta = get_test_problem() qiskit_com = QiskitQAOAComposer( graph=G, gamma=[np.pi/3], beta=[np.pi/4]) qiskit_com.ansatz_state() # Convert Qiskit circuit to Qtree circuit n, qc = from_qiskit_circuit(qiskit_com.circuit) sim = QtreeSimulator() all_gates = sum(qc, []) # Simulate converted circuit first_amp_from_qiskit = sim.simulate(all_gates) com = QtreeQAOAComposer( graph=G, gamma=[np.pi/3], beta=[np.pi/4]) com.ansatz_state() # Simulate same circuit but created by Qtree composer first_amp_orig = sim.simulate(com.circuit) assert np.allclose(*[np.abs(x) for x in (first_amp_from_qiskit, first_amp_orig)]) assert np.allclose(first_amp_from_qiskit, first_amp_orig)
def test_orderings(): opt = OrderingOptimizer() tam = TamakiOptimizer(wait_time=5) seed = 43 np.random.seed(seed) for n in range(14, 45, 2): p = 3 G, gamma, beta = get_test_problem(n, p=p) composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() tn = QtreeTensorNet.from_qtree_gates(composer.circuit) peo, tn = opt.optimize(tn) treewidth = opt.treewidth print_row(n, p, seed, 'greedy', treewidth) peo, tn = tam.optimize(tn) treewidth = tam.treewidth print_row(n, p, seed, 'tamaki', treewidth)
def test_qtree(): G, gamma, beta = get_test_problem() composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() print(composer.circuit) sim = QtreeSimulator() result = sim.simulate(composer.circuit) print(result) qtree_amp = result composer = CirqQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() print(composer.circuit) sim = CirqSimulator() result = sim.simulate(composer.circuit) print(result) final_cirq = result.final_state assert final_cirq[0] - qtree_amp < 1e-5 assert result
from qtensor.optimisation.Optimizer import OrderingOptimizer from qtensor.optimisation.TensorNet import QtreeTensorNet from qtensor import QtreeQAOAComposer from qtensor import QAOAQtreeSimulator from qtensor import PerfNumpyBackend from qtensor import QAOA_energy import networkx as nx import numpy as np G = nx.random_regular_graph(4, 20) gamma, beta = [np.pi / 3], [np.pi / 2] composer = QtreeQAOAComposer(graph=G, gamma=gamma, beta=beta) composer.ansatz_state() backend = PerfNumpyBackend(print=True) sim = QAOAQtreeSimulator(composer, bucket_backend=backend) sim.simulate(composer.circuit) print(sim.bucket_backend) print(backend._profile_results) print(backend.gen_report())