Example #1
0
def bipartitepurestate_partialtranspose_densitymatrix(bipartite_tensor,
                                                      pt_subsys):
    """ Calculate the partial transpose of a density matrix.

    :param bipartite_tensor: matrix for the bipartite system
    :param pt_subsys: subsystem to transpose (either 0 or 1)
    :return: density matrix after partial transpose
    :type bipartite_tensor: numpy.ndarray
    :type pt_subsys: int
    :rtype: numpy.ndarray
    """
    if not (pt_subsys in [0, 1]):
        raise ValueError('pt_subsys can only be 0 or 1!')

    ketnode = tn.Node(bipartite_tensor)
    branode = tn.Node(np.conj(bipartite_tensor))
    final_node = tn.outer_product(ketnode, branode)

    e0, e1, e2, e3 = final_node[0], final_node[1], final_node[2], final_node[3]
    if pt_subsys == 0:
        final_node.reorder_edges([e2, e1, e0, e3])
    else:
        final_node.reorder_edges([e0, e3, e2, e1])

    return final_node.tensor
Example #2
0
def test_outer_product_without_legs(a, b, expected_val, expected_shape,
                                    expected_name, backend):
    node1 = tn.Node(a, name="A", backend=backend)
    node2 = tn.Node(b, name="B", backend=backend)

    node3 = tn.outer_product(node1, node2, name=expected_name)
    np.testing.assert_allclose(node3.tensor, expected_val)
    assert node3.shape == expected_shape
    assert node3.name == expected_name
Example #3
0
def test_outer_product(backend):
    a = tn.Node(np.ones((2, 4, 5)), name="A", backend=backend)
    b = tn.Node(np.ones((4, 3, 6)), name="B", backend=backend)
    c = tn.Node(np.ones((3, 2)), name="C", backend=backend)
    tn.connect(a[1], b[0])
    tn.connect(a[0], c[1])
    tn.connect(b[1], c[0])
    # Purposely leave b's 3rd axis undefined.
    d = tn.outer_product(a, b, name="D")
    tn.check_correct({c, d})
    assert d.shape == (2, 4, 5, 4, 3, 6)
    np.testing.assert_allclose(d.tensor, np.ones((2, 4, 5, 4, 3, 6)))
    assert d.name == "D"
Example #4
0
def bipartitepurestate_densitymatrix(bipartitepurestate_tensor):
    """Calculate the whole density matrix of the bipartitite system

    Given a discrete normalized quantum system, given in terms of 2-D numpy array ``bipartitepurestate_tensor``,
    each element of ``bipartitepurestate_tensor[i, j]`` is the coefficient of the ket :math:`|ij\\rangle`,
    calculate the whole density matrix.

    :param bipartitepurestate_tensor: tensor describing the bi-partitite states, with each elements the coefficients for :math:`|ij\\rangle`
    :return: density matrix
    :type bipartitepurestate_tensor: numpy.ndarray
    :rtype: numpy.ndarray
    """
    ketnode = tn.Node(bipartitepurestate_tensor)
    branode = tn.Node(np.conj(bipartitepurestate_tensor))
    denmat_node = tn.outer_product(ketnode, branode)
    return denmat_node.tensor