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))