def test_measure_bitstrings(client_configuration: QCSClientConfiguration): quantum_processor = NxQuantumProcessor(nx.complete_graph(2)) dummy_compiler = DummyCompiler(quantum_processor=quantum_processor, client_configuration=client_configuration) qc_pyqvm = QuantumComputer(name="testy!", qam=PyQVM(n_qubits=2), compiler=dummy_compiler) qc_forest = QuantumComputer( name="testy!", qam=QVM(client_configuration=client_configuration, gate_noise=(0.00, 0.00, 0.00)), compiler=dummy_compiler, ) prog = Program(I(0), I(1)) meas_qubits = [0, 1] sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=-1) results = _measure_bitstrings(qc_pyqvm, sym_progs, meas_qubits, num_shots=1) # test with pyQVM answer = [ np.array([[0, 0]]), np.array([[0, 1]]), np.array([[1, 0]]), np.array([[1, 1]]) ] assert all([np.allclose(x, y) for x, y in zip(results, answer)]) # test with regular QVM results = _measure_bitstrings(qc_forest, sym_progs, meas_qubits, num_shots=1) assert all([np.allclose(x, y) for x, y in zip(results, answer)])
def test_measure_bitstrings(forest): device = NxDevice(nx.complete_graph(2)) qc_pyqvm = QuantumComputer(name='testy!', qam=PyQVM(n_qubits=2), device=device, compiler=DummyCompiler()) qc_forest = QuantumComputer(name='testy!', qam=QVM(connection=forest, gate_noise=[0.00] * 3), device=device, compiler=DummyCompiler()) prog = Program(I(0), I(1)) meas_qubits = [0, 1] sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=-1) results = _measure_bitstrings(qc_pyqvm, sym_progs, meas_qubits, num_shots=1) # test with pyQVM answer = [ np.array([[0, 0]]), np.array([[0, 1]]), np.array([[1, 0]]), np.array([[1, 1]]) ] assert all([np.allclose(x, y) for x, y in zip(results, answer)]) # test with regular QVM results = _measure_bitstrings(qc_forest, sym_progs, meas_qubits, num_shots=1) assert all([np.allclose(x, y) for x, y in zip(results, answer)])
def test_symmetrization(): prog = Program(I(0), I(1)) meas_qubits = [0, 1] # invalid input if symm_type < -1 or > 3 with pytest.raises(ValueError): _, _ = _symmetrization(prog, meas_qubits, symm_type=-2) with pytest.raises(ValueError): _, _ = _symmetrization(prog, meas_qubits, symm_type=4) # exhaustive symm sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=-1) assert sym_progs[0].out().splitlines() == ["I 0", "I 1"] assert sym_progs[1].out().splitlines() == ["I 0", "I 1", "RX(pi) 1"] assert sym_progs[2].out().splitlines() == ["I 0", "I 1", "RX(pi) 0"] assert sym_progs[3].out().splitlines() == ["I 0", "I 1", "RX(pi) 0", "RX(pi) 1"] right = [np.array([0, 0]), np.array([0, 1]), np.array([1, 0]), np.array([1, 1])] assert all([np.allclose(x, y) for x, y in zip(flip_array, right)]) # strength 0 i.e. no symm sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=-1) assert sym_progs[0].out().splitlines() == ["I 0", "I 1"] right = [np.array([0, 0])] assert all([np.allclose(x, y) for x, y in zip(flip_array, right)]) # strength 1 sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=1) assert sym_progs[0].out().splitlines() == ["I 0", "I 1"] assert sym_progs[1].out().splitlines() == ["I 0", "I 1", "RX(pi) 0", "RX(pi) 1"] right = [np.array([0, 0]), np.array([1, 1])] assert all([np.allclose(x, y) for x, y in zip(flip_array, right)]) # strength 2 sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=2) assert sym_progs[0].out().splitlines() == ["I 0", "I 1"] assert sym_progs[1].out().splitlines() == ["I 0", "I 1", "RX(pi) 0"] assert sym_progs[2].out().splitlines() == ["I 0", "I 1", "RX(pi) 1"] assert sym_progs[3].out().splitlines() == ["I 0", "I 1", "RX(pi) 0", "RX(pi) 1"] right = [np.array([0, 0]), np.array([1, 0]), np.array([0, 1]), np.array([1, 1])] assert all([np.allclose(x, y) for x, y in zip(flip_array, right)]) # strength 3 sym_progs, flip_array = _symmetrization(prog, meas_qubits, symm_type=3) assert sym_progs[0].out().splitlines() == ["I 0", "I 1", "RX(pi) 0", "RX(pi) 1"] assert sym_progs[1].out().splitlines() == ["I 0", "I 1", "RX(pi) 0"] assert sym_progs[2].out().splitlines() == ["I 0", "I 1"] assert sym_progs[3].out().splitlines() == ["I 0", "I 1", "RX(pi) 1"] right = [np.array([1, 1]), np.array([1, 0]), np.array([0, 0]), np.array([0, 1])] assert all([np.allclose(x, y) for x, y in zip(flip_array, right)])