# Define parameters
dim_qubit = 2
dim_motional = 2
n_max = dim_motional - 1 # Maximum environment state index
nbar = 0.5 # Average occupation number for thermal distribution
# Function to compute the thermal occupation probability mu_n
def mu_n(n, nbar):
return np.sqrt((nbar**n) / ((1 + nbar)**(n + 1)))
def compute_kraus_operators_for_all_times(U_t_kraus, tlist_kraus, n_max, nbar):
kraus_operators_all_times = []
for idx, t in enumerate(tlist_kraus):
U_sm = U_t_kraus[idx] # Unitary operator at this time
kraus_operators = []
for n_dash in range(n_max + 1): # Iterate over final motional states
# Define the initial and final motional states
n = 0
initial_motional_state = basis(dim_motional, n)
final_motional_state = basis(dim_motional, n_dash)
# Construct the outer product of the initial and final motional states
vector = initial_motional_state * final_motional_state.dag()
# Construct the tensor product with the identity operator for the qubit subsystem
vector2 = tensor(qeye(2), qeye(2), vector)
kraus_operator = vector2 * U_sm * mu_n(n, nbar)
# Perform the partial trace over the motional subsystem
kraus_operator = kraus_operator.ptrace([0, 1])
kraus_operators.append(Qobj(kraus_operator))
K_multiplied_summed = 0
for i in range(2):
K_multiplied = kraus_operators[i].dag()*kraus_operators[i]
K_multiplied_summed += K_multiplied
#print(K_multiplied_summed)
kraus_operators_all_times.append(kraus_operators)
return kraus_operators_all_times
def get_kraus_operators_at_time_t(kraus_operators_all_times, tlist_kraus, t):
idx = (np.abs(tlist_kraus - t)).argmin()
print("idx:", idx, "t =", t)
return kraus_operators_all_times[idx]
kraus_operators_all_times = compute_kraus_operators_for_all_times(U_t_ideal, tlist_ideal, n_max, nbar)
t = 2 * np.pi #/ delta
kraus_operators_at_t = get_kraus_operators_at_time_t(kraus_operators_all_times, tlist_ideal, t)
#print(kraus_operators_at_t)
super_kraus_at_t = kraus_to_super(kraus_operators_at_t)
avg_fidelity_at_t = average_gate_fidelity(super_kraus_at_t, spin_unitary)
print("Average Gate Fidelity at t:", avg_fidelity_at_t)