def evaluate_4TTN(params, training_data, ancilla, total, rounding): answers = np.zeros(training_data.shape[0]) L = training_data.shape[1] - 1 for i in range(training_data.shape[0]): """FOR EACH DATA POINT""" """Lets Encode the data elements first""" psi = initial_encode(training_data[i, :L], ancilla) """Stage 1: Unitaries on all of the qubits, ancilla or not""" for j in range(total): psi = np.matmul(ry(params[j], j, total), psi) """Stage 2: CNOT plus unitary for N-1 times (cascading)""" j = 0 psi = np.matmul(cnot(j, j + 1, total), psi) psi = np.matmul(ry(params[total], j + 1, total), psi) j = 3 psi = np.matmul(cnot(j, j - 1, total), psi) psi = np.matmul(ry(params[total + 1], j - 1, total), psi) j = 1 psi = np.matmul(cnot(j, j + 1, total), psi) psi = np.matmul(ry(params[total + 2], j + 1, total), psi) """Stage 3: Trace and Measure""" zero_prob = prob_zero(keep_n(psi, total, 2)) """Stage 4: Calculate Cost""" answers[i] = eval_cost(zero_prob, training_data[i, L], rounding) total_cost = np.sum(answers) / training_data.shape[0] return total_cost
def evaluate_MPS(params, training_data, ancilla, total, rounding): """ UNITARIES ON ALL FOLLOWED BY CASCADE OF CNOT(a,b) and unitary on b """ answers = np.zeros(training_data.shape[0]) L = training_data.shape[1] - 1 for i in range(training_data.shape[0]): """FOR EACH DATA POINT""" """Lets Encode the data elements first""" psi = np.real(initial_encode2(training_data[i, :L], ancilla)) psi = np.reshape(psi, (2**total, 1)) """Stage 1: Unitaries on all of the qubits, ancilla or not""" for j in range(total): psi = np.matmul(ry(params[j], j, total), psi) """Stage 2: CNOT plus unitary for N-1 times (cascading)""" for j in range(total - 1): psi = np.matmul(cnot(j, j + 1, total), psi) psi = np.matmul(ry(params[total + j], j + 1, total), psi) """Stage 3: Trace and Measure""" zero_prob = prob_zero(keep_last(psi, total)) """Stage 4: Calculate Cost""" answers[i] = eval_cost(zero_prob, training_data[i, L], rounding) total_cost = np.sum(answers) / training_data.shape[0] return total_cost
def evaluate_MPS_yz(params, training_data, ancilla, total, rounding): """ AS MPS BUT INITIAL UNITARIES ARE ALL RZ,RY,RZ FORM """ answers = np.zeros(training_data.shape[0]) L = training_data.shape[1] - 1 lst = list(range(total - 1)) for i in range(training_data.shape[0]): """FOR EACH DATA POINT""" """Lets Encode the data elements first""" psi = np.real(initial_encode2(training_data[i, :L], ancilla)) psi = np.reshape(psi, (2**total, 1)) """Stage 1: Unitaries on all of the qubits, ancilla or not""" for j in range(total): psi = np.matmul(rz(params[j], j, total), psi) for j in range(total): psi = np.matmul(ry(params[j + total], j, total), psi) for j in range(total): psi = np.matmul(rz(params[j + (total * 2)], j, total), psi) """Stage 2: CNOT plus unitary for N-1 times (cascading)""" for j in range(total - 1): psi = np.matmul(cnot(j, j + 1, total), psi) psi = np.matmul(ry(params[total * 3 + j], j + 1, total), psi) """Stage 3: Trace and Measure""" dm = np.kron(np.transpose(np.conjugate(psi)), psi) dm = np.reshape(dm, (2**total, 2**total)) dm = partial_trace(dm, lst) # print(dm) """Stage 3: Trace and Measure""" zero_prob = prob_zero(dm) """Stage 4: Calculate Cost""" answers[i] = eval_cost(zero_prob, training_data[i, L], rounding) total_cost = np.sum(answers) / training_data.shape[0] return total_cost
def evaluate_MPS_plotter(params, training_data, ancilla, total, rounding): guesses = np.zeros(training_data.shape[0]) L = training_data.shape[1] - 1 for i in range(training_data.shape[0]): """FOR EACH DATA POINT""" """Lets Encode the data elements first""" psi = initial_encode(training_data[i, :L], ancilla) """Stage 1: Unitaries on all of the qubits, ancilla or not""" for j in range(total): psi = np.matmul(ry(params[j], j, total), psi) """Stage 2: CNOT plus unitary for N-1 times (cascading)""" for j in range(total - 1): psi = np.matmul(cnot(j, j + 1, total), psi) psi = np.matmul(ry(params[total + j], j + 1, total), psi) """Stage 3: Trace and Measure""" zero_prob = prob_zero(keep_last(psi, total)) """Stage 4: Calculate Cost""" guesses[i] = 1 - round(zero_prob) return guesses
def evaluate_MPS_xyz(params, training_data, ancilla, total, rounding): """ LIKE MPS BUT EACH SINGLE UNITARY IS A DIFFERENT TYPE""" answers = np.zeros(training_data.shape[0]) L = training_data.shape[1] - 1 for i in range(training_data.shape[0]): """FOR EACH DATA POINT""" """Lets Encode the data elements first""" psi = np.real(initial_encode2(training_data[i, :L], ancilla)) psi = np.reshape(psi, (2**total, 1)) for j in range(total - 1): psi = np.matmul(ry(params[3 * j], j, total), psi) psi = np.matmul(ry(params[3 * j + 1], j + 1, total), psi) psi = np.matmul(cnot(j, j + 1, total), psi) psi = np.matmul(rz(params[3 * j + 2], j + 1, total), psi) """Stage 3: Trace and Measure""" zero_prob = prob_zero(keep_last(psi, total)) """Stage 4: Calculate Cost""" answers[i] = eval_cost(zero_prob, training_data[i, L], rounding) total_cost = np.sum(answers) / training_data.shape[0] return total_cost