def build_two_qubit_matrix_target(gate, gate_args, control=None) -> np.ndarray: """Build two qubit matrix with target for tests""" matrix = np.zeros((4, 4), dtype=complex) for co, state in enumerate([ np.array([1, 0, 0, 0]), np.array([0, 1, 0, 0]), np.array([0, 0, 1, 0]), np.array([0, 0, 0, 1]), ]): env = utils.createQuestEnv()() if control is None: qubits = utils.createQureg()(2, env) cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state)) gate()(qureg=qubits, target_qubit_1=0, target_qubit_2=1, **gate_args) elif control is True: qubits = utils.createQureg()(3, env) control_array = np.array([0, 1]) cheat.initStateFromAmps()(qubits, np.real(np.kron(control_array, state)), np.imag(np.kron(control_array, state))) gate()(qureg=qubits, target_qubit_1=0, target_qubit_2=1, control=2, **gate_args) else: qubits = utils.createQureg()(3, env) control_array = np.array([1, 0]) cheat.initStateFromAmps()(qubits, np.real(np.kron(control_array, state)), np.imag(np.kron(control_array, state))) gate()(qureg=qubits, target_qubit_1=0, target_qubit_2=1, control=2, **gate_args) for i in range(0, 4): if control is None: cComplex = cheat.getAmp()(qureg=qubits, index=i) matrix[i, co] = cComplex.real + 1j * cComplex.imag elif control is True: cComplex = cheat.getAmp()(qureg=qubits, index=i + 4) matrix[i, co] = cComplex.real + 1j * cComplex.imag else: cComplex = cheat.getAmp()(qureg=qubits, index=i) matrix[i, co] = cComplex.real + 1j * cComplex.imag return matrix
def test_get_simple() -> None: """Testing simple get functions. getStateVectoratIndex/getAmp, getDensityMatrixatRowColumn/getDensityAmp, getAbsoluteValSquaredatIndex/getProbAmp, getRealAmp, getImagAmp """ env = utils.createQuestEnv()() qureg = utils.createQureg()(2, env) cheat.initZeroState()(qureg) index = 1 operator_matrix = np.array([[1, 0, 2, 0], [0, 1, 0, 2], [0, 2, 0, 1], [2, 0, 1, 0]]) with npt.assert_raises(RuntimeError): density_matrix = cheat.getDensityAmp()(qureg=qureg, row=1, column=1) state_vec = cheat.getAmp()(qureg=qureg, index=index) abs_val_state_vec = cheat.getProbAmp()(qureg=qureg, index=1) real_val_sate_vec = cheat.getRealAmp()(qureg=qureg, index=1) imag_val_sate_vec = cheat.getImagAmp()(qureg=qureg, index=1) num_amps = cheat.getNumAmps()(qureg=qureg) num_qubits = cheat.getNumQubits()(qureg=qureg) expec_val = cheat.getExpectationValue()(qureg=qureg, operator_matrix=operator_matrix) assert state_vec == 0 assert abs_val_state_vec == 0 assert real_val_sate_vec == 0 assert imag_val_sate_vec == 0 assert num_amps == 4 assert num_qubits == 2 assert expec_val == 1 qureg = utils.createDensityQureg()(2, env) cheat.initZeroState()(qureg) with npt.assert_raises(RuntimeError): state_vec = cheat.getAmp()(qureg=qureg, index=index) abs_val_state_vec = cheat.getProbAmp()(qureg=qureg, index=1) real_val_sate_vec = cheat.getRealAmp()(qureg=qureg, index=1) imag_val_sate_vec = cheat.getImagAmp()(qureg=qureg, index=1) density_matrix = cheat.getDensityAmp()(qureg=qureg, row=1, column=1) num_amps = cheat.getNumAmps()(qureg=qureg) num_qubits = cheat.getNumQubits()(qureg=qureg) expec_val = cheat.getExpectationValue()(qureg=qureg, operator_matrix=operator_matrix) assert density_matrix == 0 assert num_amps == 4 assert num_qubits == 2 assert expec_val == 1
def build_two_qubit_matrix(operation) -> np.ndarray: """Return full process tomography on two qubit operation with PyQuEST interface""" matrix = np.zeros((4, 4), dtype=complex) for co, state in enumerate([np.array([1, 0, 0, 0]), np.array([0, 1, 0, 0]), np.array([0, 0, 1, 0]), np.array([0, 0, 0, 1]), ]): env = utils.createQuestEnv()() qubits = utils.createQureg()(2, env) cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state)) circuit = Circuit() circuit += operation pyquest_call_circuit(circuit=circuit, qureg=qubits, classical_bit_registers=dict(), classical_float_registers=dict(), classical_complex_registers=dict(), output_bit_register_dict=dict(),) for i in range(0, 4): out = cheat.getAmp()(qureg=qubits, index=i) matrix[i, co] = out utils.destroyQureg()(qubits, env=env) utils.destroyQuestEnv()(env) return matrix
def build_one_qubit_matrix(gate, gate_args) -> np.ndarray: """Build one qubit matrix for tests""" matrix = np.zeros((2, 2), dtype=complex) for co, state in enumerate([np.array([1, 0]), np.array([0, 1])]): env = utils.createQuestEnv()() qubits = utils.createQureg()(1, env) cheat.initStateFromAmps()(qubits, np.real(state), np.imag(state)) gate()(qureg=qubits, qubit=0, **gate_args) for i in range(0, 2): cComplex = cheat.getAmp()(qureg=qubits, index=i) matrix[i, co] = cComplex.real + 1j * cComplex.imag return matrix