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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
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+"))
     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
Ejemplo n.º 5
0
 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+'))
Ejemplo n.º 6
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+'))