예제 #1
0
 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()