def test_contract_copy_node_dangling_edge_value_error(backend): a = tn.Node(np.array([1, 2, 3]), backend=backend) b = tn.Node(np.array([10, 20, 30]), backend=backend) c = tn.Node(np.array([5, 6, 7]), backend=backend) cn = tn.CopyNode(rank=4, dimension=3, backend=backend) tn.connect(a[0], cn[0]) tn.connect(b[0], cn[1]) tn.connect(c[0], cn[2]) with pytest.raises(ValueError): tn.contract_copy_node(cn)
def test_contract_copy_node(backend): a = tn.Node(np.array([1, 2, 3]), backend=backend) b = tn.Node(np.array([10, 20, 30]), backend=backend) c = tn.Node(np.array([5, 6, 7]), backend=backend) d = tn.Node(np.array([1, -1, 1]), backend=backend) cn = tn.CopyNode(rank=4, dimension=3, backend=backend) tn.connect(a[0], cn[0]) tn.connect(b[0], cn[1]) tn.connect(c[0], cn[2]) tn.connect(d[0], cn[3]) val = tn.contract_copy_node(cn) result = val.tensor assert list(result.shape) == [] np.testing.assert_allclose(result, 50 - 240 + 630)
def test_contract_copy_node_connected_neighbors(backend): a = tn.Node(np.array([[1, 2, 3], [10, 20, 30]]), backend=backend) b = tn.Node(np.array([[2, 1, 1], [2, 2, 2]]), backend=backend) c = tn.Node(np.array([3, 4, 4]), backend=backend) cn = tn.CopyNode(rank=3, dimension=3, backend=backend) tn.connect(a[0], b[0]) tn.connect(a[1], cn[0]) tn.connect(b[1], cn[1]) tn.connect(c[0], cn[2]) n = tn.contract_copy_node(cn) assert len(n.edges) == 2 assert n.edges[0] == n.edges[1] val = tn.contract_parallel(n.edges[0]) result = val.tensor assert list(result.shape) == [] np.testing.assert_allclose(result, 26 + 460)