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