def test_save_and_load_returns_same_network(tmp_path, backend):
    saved_net = tensornetwork.TensorNetwork(backend=backend)
    a = saved_net.add_node(np.ones((2, 2, 2)),
                           name="node_a",
                           axis_names=["e1", "e2", "e3"])
    b = saved_net.add_node(2 * np.ones((2, 2, 2)),
                           name="node_b",
                           axis_names=["f1", "f2", "f3"])
    e1 = saved_net.connect(a[0], b[0])
    e1.name = "edge_ab"

    p = tmp_path / "network"
    saved_net.save(p)

    loaded_net = tensornetwork.load(p)
    saved_nodes = list(saved_net.nodes_set)
    loaded_nodes = list(loaded_net.nodes_set)
    assert len(loaded_nodes) == len(saved_nodes)
    assert set(node.name
               for node in saved_nodes) == set(node.name
                                               for node in loaded_nodes)

    saved_edges = saved_net.get_all_edges()
    loaded_edges = loaded_net.get_all_edges()
    assert len(loaded_edges) == len(saved_edges)
    assert set(edge.name
               for edge in saved_edges) == set(edge.name
                                               for edge in loaded_edges)

    saved_node_a = [node for node in saved_nodes if node.name == "node_a"][0]
    loaded_node_a = [node for node in saved_nodes if node.name == "node_a"][0]
    np.testing.assert_allclose(saved_node_a.tensor, loaded_node_a.tensor)
    assert saved_node_a.axis_names == loaded_node_a.axis_names
    assert saved_node_a.signature == loaded_node_a.signature
    assert saved_node_a.backend.name == loaded_node_a.backend.name

    saved_node_b = [node for node in saved_nodes if node.name == "node_b"][0]
    loaded_node_b = [node for node in saved_nodes if node.name == "node_b"][0]
    np.testing.assert_allclose(saved_node_b.tensor, loaded_node_b.tensor)
    assert saved_node_b.axis_names == loaded_node_b.axis_names
    assert saved_node_b.signature == loaded_node_b.signature
    assert saved_node_b.backend.name == loaded_node_b.backend.name

    saved_edge_ab = [edge for edge in saved_edges if edge.name == "edge_ab"][0]
    loaded_edge_ab = [edge for edge in loaded_edges
                      if edge.name == "edge_ab"][0]
    assert saved_edge_ab.node1.name == loaded_edge_ab.node1.name
    assert saved_edge_ab.node2.name == loaded_edge_ab.node2.name
    assert saved_edge_ab.signature == loaded_edge_ab.signature

    saved_edge_e2 = [edge for edge in saved_edges if edge.name == "e2"][0]
    loaded_edge_e2 = [edge for edge in loaded_edges if edge.name == "e2"][0]
    assert saved_edge_e2.node1.name == loaded_edge_e2.node1.name
    assert saved_edge_e2.node2 == loaded_edge_e2.node2
    assert saved_edge_e2.signature == loaded_edge_e2.signature
Beispiel #2
0
def test_save_and_load_contract_to_same_number(tmp_path, backend):
    saved_net = tensornetwork.TensorNetwork(backend=backend)
    a = saved_net.add_node(np.ones((2, 2, 2)))
    b = saved_net.add_node(2 * np.ones((2, 2, 2)))
    saved_net.connect(a[0], b[0])
    saved_net.connect(b[1], a[1])
    saved_net.connect(a[2], b[2])
    p = tmp_path / "network"
    saved_net.save(p)
    loaded_net = tensornetwork.load(p)

    saved_net.contract_between(a, b)

    loaded_nodes = list(loaded_net.nodes_set)
    loaded_net.contract_between(loaded_nodes[0], loaded_nodes[1])
    np.testing.assert_allclose(saved_net.get_final_node().tensor,
                               loaded_net.get_final_node().tensor)