From 908efa9b76ecd6209b075627435962432e793432 Mon Sep 17 00:00:00 2001 From: Daniel Tsvetkov Date: Sun, 29 Mar 2020 20:38:08 +0200 Subject: [PATCH] some fixes to krisi's project --- 10_krisi_3qubits_game.py | 28 +++++++++++++++------------- lib.py | 6 ++++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/10_krisi_3qubits_game.py b/10_krisi_3qubits_game.py index 89bc73b..c860d45 100644 --- a/10_krisi_3qubits_game.py +++ b/10_krisi_3qubits_game.py @@ -58,7 +58,7 @@ def test_krisi_measurement_2(): def test_krisi_measurement_3(): iterations = 400 - beta = np.pi * 0.62 + beta = np.pi + 0.62 CASE_ID_ID = "id_id" CASE_ID_ORT = "id_ort" @@ -67,14 +67,14 @@ def test_krisi_measurement_3(): case_choices = [CASE_ID_ID, CASE_ID_ORT, CASE_ORT_ID, CASE_ORT_ORT] - b_0 = State(1 / np.sqrt(2) * (s("|100>") - s("|010>"))) - b_1 = State(1 / np.sqrt(2) * (s("|011>") - s("|101>"))) + b_0 = State((1 / np.sqrt(2)) * (s("|100>") + s("|010>"))) + b_1 = State((1 / np.sqrt(2)) * (s("|011>") + s("|101>"))) basis = [ s("|000>"), State(np.cos(beta) * b_0 + np.sin(beta) * s("|001>")), State(-np.sin(beta) * b_0 + np.cos(beta) * s("|001>")), - b_0, - b_1, + State((1 / np.sqrt(2)) * (s("|100>") - s("|010>"))), + State((1 / np.sqrt(2)) * (s("|011>") - s("|101>"))), State(np.cos(beta) * b_1 + np.sin(beta) * s("|001>")), State(-np.sin(beta) * b_1 + np.cos(beta) * s("|001>")), s("|111>"), @@ -107,16 +107,18 @@ def test_krisi_measurement_3(): q2 = State.from_bloch_angles(theta1, phi1) q1q2_st = State(q1*q2) - meas1 = q1q2_st.measure(basis=bell_basis) - if meas1 == '11': - return 'discarded' + # meas1 = q1q2_st.measure(basis=bell_basis) + # if meas1 == '11': + # return 'discarded' - # TODO: - # P_minus = b_psi_m.x(b_psi_m) + P_minus = b_psi_m.x(b_psi_m) P_s = b_psi_p.x(b_psi_p) + b_phi_m.x(b_phi_m) + b_phi_p.x(b_phi_p) - meas = MeasurementOperator(P_s.m).on(q1q2_st) - post_state = State(State.normalize(meas)) + # vec = MeasurementOperator(P_minus.m).on(q1q2_st) + # if np.all(vec.m.transpose() == np.zeros(4)): + # return 'identical' + vec2 = MeasurementOperator(P_s.m).on(q1q2_st) + post_state = State(State.normalize(vec2)) if case == CASE_ID_ID: assert post_state == q1q2_st @@ -124,7 +126,7 @@ def test_krisi_measurement_3(): assert post_state != q1q2_st q3 = State.from_bloch_angles(theta2, phi2) - meas = State(State.normalize(post_state * q3)).measure(basis=basis) + meas = State(post_state * q3).measure(basis=basis) # # TODO: This part measures the first two qubits in Bell basis, then: # # 1. constructs a new pure state diff --git a/lib.py b/lib.py index 6f9de2c..fc7ca02 100644 --- a/lib.py +++ b/lib.py @@ -353,8 +353,10 @@ class State(Vector): else: # TODO: This may be wrong # normalize the weights - weights = list(np.array(weights) / sum(weights)) - assert np.isclose(sum(weights), 1.0) + weights_sum = np.sum(weights) + if not np.isclose(weights_sum, 1.0): + weights = list(np.array(weights) / weights_sum) + assert np.isclose(np.sum(weights), 1.0) format_str = self.get_fmt_of_element() choices = empty_choices + [format_str.format(i) for i in