def test_create_circuits_from_qubit_operator(self): # Initialize target qubits = [Qubit(i) for i in range(0, 2)] gate_Z0 = Gate("Z", [qubits[0]]) gate_X1 = Gate("X", [qubits[1]]) gate_Y0 = Gate("Y", [qubits[0]]) gate_Z1 = Gate("Z", [qubits[1]]) circuit1 = Circuit() circuit1.qubits = qubits circuit1.gates = [gate_Z0, gate_X1] circuit2 = Circuit() circuit2.qubits = qubits circuit2.gates = [gate_Y0, gate_Z1] target_circuits_list = [circuit1, circuit2] # Given qubit_op = QubitOperator("Z0 X1") + QubitOperator("Y0 Z1") # When pauli_circuits = create_circuits_from_qubit_operator(qubit_op) # Then self.assertEqual(pauli_circuits[0].gates, target_circuits_list[0].gates) self.assertEqual(pauli_circuits[1].gates, target_circuits_list[1].gates) self.assertEqual( str(pauli_circuits[0].qubits), str(target_circuits_list[0].qubits) ) self.assertEqual( str(pauli_circuits[1].qubits), str(target_circuits_list[1].qubits) )
def target_unitary(self, beta, gamma, symbols_map): target_circuit = Circuit() target_circuit.gates = [] target_circuit.gates.append(Gate("H", [Qubit(0)])) target_circuit.gates.append(Gate("H", [Qubit(1)])) target_circuit.gates.append(Gate("Rz", [Qubit(0)], [2.0 * gamma])) target_circuit.gates.append(Gate("Rz", [Qubit(1)], [2.0 * gamma])) target_circuit.gates.append(Gate("Rx", [Qubit(0)], [2.0 * beta])) target_circuit.gates.append(Gate("Rx", [Qubit(1)], [2.0 * beta])) return target_circuit.evaluate(symbols_map).to_unitary()
def test_create_layer_of_gates_not_parametrized(self): # Given number_of_qubits = 4 gate_name = "X" qubits = [Qubit(i) for i in range(0, number_of_qubits)] gate_0 = Gate(gate_name, qubits=[qubits[0]]) gate_1 = Gate(gate_name, qubits=[qubits[1]]) gate_2 = Gate(gate_name, qubits=[qubits[2]]) gate_3 = Gate(gate_name, qubits=[qubits[3]]) target_circuit = Circuit() target_circuit.qubits = qubits target_circuit.gates = [gate_0, gate_1, gate_2, gate_3] # When layer_of_x = create_layer_of_gates(number_of_qubits, gate_name) # Then self.assertEqual(layer_of_x, target_circuit)
def create_target_unitary(thetas, number_of_layers): target_circuit = Circuit() target_circuit.gates = [] target_circuit.gates.append(Gate("Ry", [Qubit(0)], [thetas[0]])) target_circuit.gates.append(Gate("Ry", [Qubit(1)], [thetas[1]])) betas = create_betas(number_of_layers) gammas = create_gammas(number_of_layers) symbols_map = create_symbols_map(number_of_layers) for layer_id in range(number_of_layers): beta = betas[layer_id] gamma = gammas[layer_id] target_circuit.gates.append(Gate("Rz", [Qubit(0)], [2.0 * gamma])) target_circuit.gates.append(Gate("Rz", [Qubit(1)], [2.0 * gamma])) target_circuit.gates.append(Gate("Ry", [Qubit(0)], [-thetas[0]])) target_circuit.gates.append(Gate("Ry", [Qubit(1)], [-thetas[1]])) target_circuit.gates.append(Gate("Rz", [Qubit(0)], [-2.0 * beta])) target_circuit.gates.append(Gate("Rz", [Qubit(1)], [-2.0 * beta])) target_circuit.gates.append(Gate("Ry", [Qubit(0)], [thetas[0]])) target_circuit.gates.append(Gate("Ry", [Qubit(1)], [thetas[1]])) return target_circuit.evaluate(symbols_map).to_unitary()