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