Exemplo n.º 1
0
def applyHToM(HL, HR, H, M, k):
    k1 = k
    k2 = k + 1

    # Add HL.opSum x h.identity(k1) x h.identity(k2) x I(Right)
    # and I(Left) x h.identity(k1) x h.identity(k2) x HR.opSum
    Hv = bops.multiContraction(HL.opSum, M, '0', '0')
    Hv = bops.addNodes(Hv, bops.multiContraction(M, HR.opSum, '3', '0'))

    # Add I(Left) x h.single(k1) x h.identity(k2) x I(Right)
    # And I(Left) x h.identity(k1) x h.single(k2) x I(Right)
    Hv = bops.addNodes(Hv, \
                       tn.transpose(bops.multiContraction(M, H.singles[k1], '1', '0'), [0, 3, 1, 2]))
    Hv = bops.addNodes(Hv, \
                       tn.transpose(bops.multiContraction(M, H.singles[k2], '2', '0'), [0, 1, 3, 2]))

    # Add HL.openOp x h.r2l(k1) x h.identity(k2) x I(Right)
    # And I(Left) x h.identity(k1) x h.l2r(k2) x HR.openOp
    HK1R2L = bops.permute(bops.multiContraction(M, H.r2l[k1], '1', '0'),
                          [0, 4, 3, 1, 2])
    Hv = bops.addNodes(Hv, \
                      bops.multiContraction(HL.openOp, HK1R2L, '02', '01'))
    HK2L2R = bops.permute(bops.multiContraction(M, H.l2r[k2], '2', '0'),
                          [0, 1, 3, 4, 2])
    Hv = bops.addNodes(Hv, \
                       bops.multiContraction(HK2L2R, HR.openOp, '43', '02'))

    # Add I(Left) x h.l2r(k1) x h.r2l(k2) x I(Right)
    HK1K2 = bops.multiContraction(M, H.l2r[k1], '1', '0')
    HK1K2 = bops.multiContraction(HK1K2, H.r2l[k2], '14', '02')
    HK1K2 = bops.permute(HK1K2, [0, 2, 3, 1])
    Hv = bops.addNodes(Hv, HK1K2)

    return Hv
Exemplo n.º 2
0
def test_transpose(dtype, num_charges):
    np.random.seed(10)
    a = tn.Node(get_random((6, 7, 8, 9, 10),
                           num_charges=num_charges,
                           dtype=dtype),
                backend='symmetric')
    order = [a[n] for n in reversed(range(5))]
    transpa = tn.transpose(a, [4, 3, 2, 1, 0])
    a.reorder_edges(order)
    np.testing.assert_allclose(a.tensor.data, transpa.tensor.data)
Exemplo n.º 3
0
def permute(node: tn.Node, permutation):
    if node is None:
        return None
    axisNames = []
    for i in range(len(permutation)):
        axisNames.append(node.edges[permutation[i]].name)
    result = tn.transpose(node, permutation, axis_names=axisNames)
    result.add_axis_names(axisNames)
    for i in range(len(axisNames)):
        result.get_edge(i).set_name(axisNames[i])
    result.set_name(node.name)
    return result
Exemplo n.º 4
0
def test_transpose_vs_backend(backend, dtype):
    """
  Tests that transpose yields the same result as the backend equivalent.
  """
    shape = (3, 2, 4)
    permutation = (1, 2, 0)
    tensor, array = testing_utils.safe_randn(shape, backend, dtype)

    if tensor is not None:
        backend_obj = backends.backend_factory.get_backend(backend)
        test = backend_obj.convert_to_tensor(array)
        test = backend_obj.transpose(test, perm=permutation)
        tensor_test = tensornetwork.transpose(tensor, perm=permutation)
        np.testing.assert_allclose(test, tensor_test.array)
Exemplo n.º 5
0
def test_transpose_of_node_without_backend_raises_error():
    node = np.random.rand(3, 3, 3)
    with pytest.raises(AttributeError):
        tn.transpose(node, permutation=[])
Exemplo n.º 6
0
def test_transpose(backend):
    a = tn.Node(np.random.rand(1, 2, 3, 4, 5), backend=backend)
    order = [a[n] for n in reversed(range(5))]
    transpa = tn.transpose(a, [4, 3, 2, 1, 0])
    a.reorder_edges(order)
    np.testing.assert_allclose(a.tensor, transpa.tensor)