def get_subsystem_density_matrix(statevector, trace_systems): """ Compute the reduced density matrix of a quantum subsystem. Args: statevector (list|array): The state vector of the complete system trace_systems (list|range): The indices of the qubits to be traced out. Returns: numpy.ndarray: The reduced density matrix for the desired subsystem """ rho = np.outer(statevector, np.conj(statevector)) rho_sub = partial_trace(rho, trace_systems).data return rho_sub
def test_density_matrix_partial_trace(self): """Test partial_trace function on density matrices""" rho = DensityMatrix.from_label("10+") self.assertEqual(partial_trace(rho, [0, 1]), DensityMatrix.from_label("1")) self.assertEqual(partial_trace(rho, [0, 2]), DensityMatrix.from_label("0")) self.assertEqual(partial_trace(rho, [1, 2]), DensityMatrix.from_label("+")) self.assertEqual(partial_trace(rho, [0]), DensityMatrix.from_label("10")) self.assertEqual(partial_trace(rho, [1]), DensityMatrix.from_label("1+")) self.assertEqual(partial_trace(rho, [2]), DensityMatrix.from_label("0+")) self.assertEqual(partial_trace(rho, []), rho)
def test_statevector_partial_trace(self): """Test partial_trace function on statevectors""" psi = Statevector.from_label("10+") self.assertEqual(partial_trace(psi, [0, 1]), DensityMatrix.from_label("1")) self.assertEqual(partial_trace(psi, [0, 2]), DensityMatrix.from_label("0")) self.assertEqual(partial_trace(psi, [1, 2]), DensityMatrix.from_label("+")) self.assertEqual(partial_trace(psi, [0]), DensityMatrix.from_label("10")) self.assertEqual(partial_trace(psi, [1]), DensityMatrix.from_label("1+")) self.assertEqual(partial_trace(psi, [2]), DensityMatrix.from_label("0+")) self.assertEqual(partial_trace(psi, []), DensityMatrix(psi))
def get_subsystem_fidelity(statevector, trace_systems, subsystem_state): """ Compute the fidelity of the quantum subsystem. Args: statevector (list|array): The state vector of the complete system trace_systems (list|range): The indices of the qubits to be traced. to trace qubits 0 and 4 trace_systems = [0,4] subsystem_state (list|array): The ground-truth state vector of the subsystem Returns: numpy.ndarray: The subsystem fidelity """ rho = np.outer(np.conj(statevector), statevector) rho_sub = partial_trace(rho, trace_systems).data rho_sub_in = np.outer(np.conj(subsystem_state), subsystem_state) fidelity = np.trace( sqrtm(np.dot(np.dot(sqrtm(rho_sub), rho_sub_in), sqrtm(rho_sub))))**2 return fidelity
def test_density_matrix_partial_trace(self): """Test partial_trace function on density matrices""" rho = DensityMatrix.from_label('10+') self.assertEqual(partial_trace(rho, [0, 1]), DensityMatrix.from_label('1')) self.assertEqual(partial_trace(rho, [0, 2]), DensityMatrix.from_label('0')) self.assertEqual(partial_trace(rho, [1, 2]), DensityMatrix.from_label('+')) self.assertEqual(partial_trace(rho, [0]), DensityMatrix.from_label('10')) self.assertEqual(partial_trace(rho, [1]), DensityMatrix.from_label('1+')) self.assertEqual(partial_trace(rho, [2]), DensityMatrix.from_label('0+'))
def test_statevector_partial_trace(self): """Test partial_trace function on statevectors""" psi = Statevector.from_label('10+') self.assertEqual(partial_trace(psi, [0, 1]), DensityMatrix.from_label('1')) self.assertEqual(partial_trace(psi, [0, 2]), DensityMatrix.from_label('0')) self.assertEqual(partial_trace(psi, [1, 2]), DensityMatrix.from_label('+')) self.assertEqual(partial_trace(psi, [0]), DensityMatrix.from_label('10')) self.assertEqual(partial_trace(psi, [1]), DensityMatrix.from_label('1+')) self.assertEqual(partial_trace(psi, [2]), DensityMatrix.from_label('0+'))