Archived
1
0
This repository has been archived on 2023-07-24. You can view files and clone it, but cannot push or open issues or pull requests.
qalg/bench-cirq/deutsch_algorithm.py

44 lines
1.3 KiB
Python

from cirq import LineQubit,Circuit,CNOT,X,H,measure
from cirq import Simulator
from qiskit import IBMQ
from quantum_runner import quantum_simulate,setup_IBM,cirq_qasm
from random import randint
q0,q1 = LineQubit.range(2)
ffunction = [randint(0, 1) for _ in range(2)]
# создаем вентиль для генерации функции
def make_oracle(q0,q1,ffunction):
if ffunction[0]:
# используем контролируемый вентиль отрицания и матрицу Паули по координате x, sigma_x
yield [CNOT(q0,q1), X(q1)]
if ffunction[1]:
yield CNOT(q0,q1)
print(f"f(x) = <{', '.join(str(e) for e in ffunction)}>")
circuit = Circuit()
# создаем кубиты используя вентиль Адамара и матрицу Паули
circuit.append([X(q1),H(q1),H(q0)])
# добавляем функцию
circuit.append(make_oracle(q0,q1,ffunction))
# проведем измерение
circuit.append([H(q0),measure(q0)])
print(circuit)
print(Simulator().run(circuit))
# запуск на квантовом компьютере
setup_IBM()
provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')
print(quantum_simulate(cirq_qasm(circuit,(q0,q1,)),provider.get_backend('ibm_lagos'),True))