def _execute_MeasureQubit(
        operation: ops.MeasureQubit,
        qureg: tqureg,
        classical_bit_registers: Dict[str, List[bool]],
) -> None:
    res = qops.measure().call_interactive(qureg=qureg, qubit=operation.qubit())
    classical_bit_registers[operation.readout()][operation.readout_index()] = bool(res)
def _execute_PragmaActiveReset(
        operation: ops.PragmaActiveReset,
        qureg: tqureg,
) -> None:
    qubit = operation.qubit()
    res = qops.measure().call_interactive(qureg=qureg, qubit=qubit)
    if res == 1:
        qops.pauliX().call_interactive(qureg=qureg, qubit=qubit)
Ejemplo n.º 3
0
def test_measure() -> None:
    """Test measuring functions: measure, measureWithStats and collapseToOutcome"""
    env = utils.createQuestEnv()()
    qureg = utils.createQureg()(3, env)
    cheat.initZeroState()(qureg=qureg)

    qubit_0 = ops.measure()(qureg=qureg, qubit=0)
    qubit_1 = ops.measureWithStats()(qureg=qureg, qubit=1, outcome_proba=0.5)
    proba_qubit_2 = ops.collapseToOutcome()(qureg=qureg, qubit=2, outcome=0)

    assert qubit_0 == 0
    assert qubit_1 == 0
    assert proba_qubit_2 == 1
Ejemplo n.º 4
0
def run_example_interactive():
    """Example function

    Running the exact same Example QuEST provides in the QuEST git repository
    with the interactive python interface of PyQuEST-cffi
    """
    print('PyQuEST-cffi tutorial based on QuEST tutorial')
    print('     Basic 3 qubit circuit')

    # creating environment
    env = utils.createQuestEnv()()
    # allocating qubit register
    qureg = utils.createQureg()(3, env=env)
    cheat.initZeroState()(qureg=qureg)

    # Using the report function to print system status
    print('This is the environment:')
    reporting.reportQuESTEnv()(env=env)
    print('This is the qubit register:')
    reporting.reportQuregParams()(qureg=qureg)
    print('This we can easily do in interactive python:')
    print('Result of qureg.isDensityMatrix: ', qureg.isDensityMatrix)

    # Apply circuit

    ops.hadamard()(qureg=qureg, qubit=0)
    ops.controlledNot()(qureg=qureg, control=0, qubit=1)
    ops.rotateY()(qureg=qureg, qubit=2, theta=0.1)

    ops.multiControlledPhaseFlip()(qureg=qureg,
                                   controls=[0, 1, 2],
                                   number_controls=3)

    u = np.zeros((2, 2), dtype=complex)
    u[0, 0] = 0.5 * (1 + 1j)
    u[0, 1] = 0.5 * (1 - 1j)
    u[1, 0] = 0.5 * (1 - 1j)
    u[1, 1] = 0.5 * (1 + 1j)
    ops.unitary()(qureg=qureg, qubit=0, matrix=u)

    a = 0.5 + 0.5 * 1j
    b = 0.5 - 0.5 * 1j
    ops.compactUnitary()(qureg=qureg, qubit=1, alpha=a, beta=b)

    v = np.array([1, 0, 0])
    ops.rotateAroundAxis()(qureg=qureg, qubit=2, theta=np.pi / 2, vector=v)

    ops.controlledCompactUnitary()(qureg=qureg,
                                   control=0,
                                   qubit=1,
                                   alpha=a,
                                   beta=b)

    ops.multiControlledUnitary()(qureg=qureg,
                                 controls=[0, 1],
                                 number_controls=2,
                                 qubit=2,
                                 matrix=u)

    # cheated results

    print('Circuit output')

    print('Probability amplitude of |111> by knowing the index: ',
          cheat.getProbAmp()(qureg=qureg, index=7))
    print('Probability amplitude of |111> by referencing basis state: ',
          cheat.getProbAmp()(qureg=qureg, index=[1, 1, 1]))

    # measuring:
    measurement = ops.measure()(qureg=qureg, qubit=0)
    print('Qubit 0 was measured as: ', measurement)