def test_geometric(self):
        x = torch.tensor([[1, 3, 5], [2, 4, 6]],
                         dtype=torch.float).t().to(device)
        edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2,
                                                     1]]).to(device)
        data = Data(x=x, edge_index=edge_index).to(torch.device('cpu'))

        N = data.num_nodes

        self.assertCountEqual(data.x.tolist(), x.tolist())
        self.assertCountEqual(data['x'].tolist(), x.tolist())

        self.assertEqual(['edge_index', 'x'], sorted(data.keys))
        self.assertEqual(2, len(data))
        self.assertIn('x', data)
        self.assertIn('edge_index', data)
        self.assertNotIn('pos', data)
        self.assertEqual(0, data.__cat_dim__('x', data.x))
        self.assertEqual(-1, data.__cat_dim__('edge_index', data.edge_index))
        self.assertEqual(0, data.__inc__('x', data.x))
        self.assertEqual(data.num_nodes,
                         data.__inc__('edge_index', data.edge_index))
        data.contiguous()
        self.assertTrue(data.x.is_contiguous())

        data.edge_index, _ = coalesce(data.edge_index, None, N, N)
        data = data.coalesce()
        self.assertTrue(data.is_coalesced())

        clone = data.clone()
        self.assertNotEqual(clone, data)
        self.assertEqual(len(clone), len(data))
        self.assertCountEqual(clone.x.tolist(), data.x.tolist())
        self.assertCountEqual(clone.edge_index.tolist(),
                              data.edge_index.tolist())

        data['x'] = x + 1
        self.assertCountEqual(data.x.tolist(), (x + 1).tolist())

        self.assertEqual('Data(edge_index=[2, 4], x=[3, 2])', data.__repr__())

        dictionary = {'x': data.x, 'edge_index': data.edge_index}
        data = Data.from_dict(dictionary)
        self.assertEqual(['edge_index', 'x'], sorted(data.keys))

        self.assertTrue(data.is_undirected())

        self.assertEqual(3, data.num_nodes)
        self.assertEqual(4, data.num_edges)
        self.assertIsNone(data.num_faces)
        self.assertEqual(2, data.num_node_features)
        self.assertEqual(2, data.num_features)
    def test_geometric(self):
        x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t()
        edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]])
        data = Data(x=x, edge_index=edge_index).to(torch.device('cpu'))

        N = data.num_nodes

        self.assertTrue(data.x.tolist() == x.tolist())
        self.assertTrue(data['x'].tolist() == x.tolist())

        self.assertTrue(sorted(data.keys) == ['edge_index', 'x'])
        self.assertTrue(len(data) == 2)
        self.assertTrue('x' in data and 'edge_index' in data and 'pos' not in data)
        self.assertTrue(data.__cat_dim__('x', data.x) == 0)
        self.assertTrue(data.__cat_dim__('edge_index', data.edge_index) == -1)
        self.assertTrue(data.__inc__('x', data.x) == 0)
        self.assertTrue(data.__inc__('edge_index', data.edge_index) == data.num_nodes)
        data.contiguous()
        self.assertTrue(data.x.is_contiguous())

        data.edge_index, _ = coalesce(data.edge_index, None, N, N)
        data = data.coalesce()
        self.assertTrue(data.is_coalesced())

        clone = data.clone()
        self.assertTrue(clone != data)
        self.assertTrue(len(clone) == len(data))
        self.assertTrue(clone.x.tolist() == data.x.tolist())
        self.assertTrue(clone.edge_index.tolist() == data.edge_index.tolist())

        data['x'] = x + 1
        self.assertTrue(data.x.tolist() == (x + 1).tolist())

        self.assertTrue(data.__repr__() == 'Data(edge_index=[2, 4], x=[3, 2])')

        dictionary = {'x': data.x, 'edge_index': data.edge_index}
        data = Data.from_dict(dictionary)
        self.assertTrue(sorted(data.keys) == ['edge_index', 'x'])

        self.assertTrue(data.is_undirected())

        self.assertTrue(data.num_nodes == 3)
        self.assertTrue(data.num_edges == 4)
        self.assertTrue(data.num_faces is None)
        self.assertTrue(data.num_node_features == 2)
        self.assertTrue(data.num_features == 2)
def test_data():
    torch_geometric.set_debug(True)

    x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t()
    edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]])
    data = Data(x=x, edge_index=edge_index).to(torch.device('cpu'))

    N = data.num_nodes
    assert N == 3

    assert data.x.tolist() == x.tolist()
    assert data['x'].tolist() == x.tolist()

    assert sorted(data.keys) == ['edge_index', 'x']
    assert len(data) == 2
    assert 'x' in data and 'edge_index' in data and 'pos' not in data

    D = data.to_dict()
    assert len(D) == 2
    assert 'x' in D and 'edge_index' in D

    D = data.to_namedtuple()
    assert len(D) == 2
    assert D.x is not None and D.edge_index is not None

    assert data.__cat_dim__('x', data.x) == 0
    assert data.__cat_dim__('edge_index', data.edge_index) == -1
    assert data.__inc__('x', data.x) == 0
    assert data.__inc__('edge_index', data.edge_index) == data.num_nodes

    assert not data.x.is_contiguous()
    data.contiguous()
    assert data.x.is_contiguous()

    assert not data.is_coalesced()
    data = data.coalesce()
    assert data.is_coalesced()

    clone = data.clone()
    assert clone != data
    assert len(clone) == len(data)
    assert clone.x.tolist() == data.x.tolist()
    assert clone.edge_index.tolist() == data.edge_index.tolist()

    # Test `data.to_heterogenous()`:
    out = data.to_heterogeneous()
    assert torch.allclose(data.x, out['0'].x)
    assert torch.allclose(data.edge_index, out['0', '0'].edge_index)

    data.edge_type = torch.tensor([0, 0, 1, 0])
    out = data.to_heterogeneous()
    assert torch.allclose(data.x, out['0'].x)
    assert [store.num_edges for store in out.edge_stores] == [3, 1]
    data.edge_type = None

    data['x'] = x + 1
    assert data.x.tolist() == (x + 1).tolist()

    assert str(data) == 'Data(x=[3, 2], edge_index=[2, 4])'

    dictionary = {'x': data.x, 'edge_index': data.edge_index}
    data = Data.from_dict(dictionary)
    assert sorted(data.keys) == ['edge_index', 'x']

    assert not data.has_isolated_nodes()
    assert not data.has_self_loops()
    assert data.is_undirected()
    assert not data.is_directed()

    assert data.num_nodes == 3
    assert data.num_edges == 4
    assert data.num_faces is None
    assert data.num_node_features == 2
    assert data.num_features == 2

    data.edge_attr = torch.randn(data.num_edges, 2)
    assert data.num_edge_features == 2
    data.edge_attr = None

    data.x = None
    assert data.num_nodes == 3

    data.edge_index = None
    assert data.num_nodes is None
    assert data.num_edges == 0

    data.num_nodes = 4
    assert data.num_nodes == 4

    data = Data(x=x, attribute=x)
    assert len(data) == 2
    assert data.x.tolist() == x.tolist()
    assert data.attribute.tolist() == x.tolist()

    face = torch.tensor([[0, 1], [1, 2], [2, 3]])
    data = Data(num_nodes=4, face=face)
    assert data.num_faces == 2
    assert data.num_nodes == 4

    data = Data(title='test')
    assert str(data) == "Data(title='test')"
    assert data.num_node_features == 0
    assert data.num_edge_features == 0

    key = value = 'test_value'
    data[key] = value
    assert data[key] == value
    del data[value]
    del data[value]  # Deleting unset attributes should work as well.

    assert data.get(key) is None
    assert data.get('title') == 'test'

    torch_geometric.set_debug(False)
def test_data():
    torch_geometric.set_debug(True)

    x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t()
    edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]])
    data = Data(x=x, edge_index=edge_index).to(torch.device('cpu'))

    N = data.num_nodes
    assert N == 3

    assert data.x.tolist() == x.tolist()
    assert data['x'].tolist() == x.tolist()

    assert sorted(data.keys) == ['edge_index', 'x']
    assert len(data) == 2
    assert 'x' in data and 'edge_index' in data and 'pos' not in data

    D = data.to_dict()
    assert len(D) == 2
    assert 'x' in D and 'edge_index' in D

    D = data.to_namedtuple()
    assert len(D) == 2
    assert D.x is not None and D.edge_index is not None

    assert data.__cat_dim__('x', data.x) == 0
    assert data.__cat_dim__('edge_index', data.edge_index) == -1
    assert data.__inc__('x', data.x) == 0
    assert data.__inc__('edge_index', data.edge_index) == data.num_nodes

    assert not data.x.is_contiguous()
    data.contiguous()
    assert data.x.is_contiguous()

    assert not data.is_coalesced()
    data = data.coalesce()
    assert data.is_coalesced()

    clone = data.clone()
    assert clone != data
    assert len(clone) == len(data)
    assert clone.x.tolist() == data.x.tolist()
    assert clone.edge_index.tolist() == data.edge_index.tolist()

    data['x'] = x + 1
    assert data.x.tolist() == (x + 1).tolist()

    assert str(data) == 'Data(x=[3, 2], edge_index=[2, 4])'

    dictionary = {'x': data.x, 'edge_index': data.edge_index}
    data = Data.from_dict(dictionary)
    assert sorted(data.keys) == ['edge_index', 'x']

    assert not data.has_isolated_nodes()
    assert not data.has_self_loops()
    assert data.is_undirected()
    assert not data.is_directed()

    assert data.num_nodes == 3
    assert data.num_edges == 4
    assert data.num_faces is None
    assert data.num_node_features == 2
    assert data.num_features == 2

    data.edge_attr = torch.randn(data.num_edges, 2)
    assert data.num_edge_features == 2
    data.edge_attr = None

    data.x = None
    assert data.num_nodes == 3

    data.edge_index = None
    assert data.num_nodes is None
    assert data.num_edges == 0

    data.num_nodes = 4
    assert data.num_nodes == 4

    data = Data(x=x, attribute=x)
    assert len(data) == 2
    assert data.x.tolist() == x.tolist()
    assert data.attribute.tolist() == x.tolist()

    face = torch.tensor([[0, 1], [1, 2], [2, 3]])
    data = Data(num_nodes=4, face=face)
    assert data.num_faces == 2
    assert data.num_nodes == 4

    data = Data(title='test')
    assert str(data) == "Data(title='test')"
    assert data.num_node_features == 0
    assert data.num_edge_features == 0

    torch_geometric.set_debug(False)
Example #5
0
def test_data():
    x = torch.tensor([[1, 3, 5], [2, 4, 6]], dtype=torch.float).t()
    edge_index = torch.tensor([[0, 0, 1, 1, 2], [1, 1, 0, 2, 1]])
    data = Data(x=x, edge_index=edge_index).to(torch.device('cpu'))

    N = data.num_nodes

    assert data.x.tolist() == x.tolist()
    assert data['x'].tolist() == x.tolist()

    assert sorted(data.keys) == ['edge_index', 'x']
    assert len(data) == 2
    assert 'x' in data and 'edge_index' in data and 'pos' not in data

    assert data.__cat_dim__('x', data.x) == 0
    assert data.__cat_dim__('edge_index', data.edge_index) == -1
    assert data.__inc__('x', data.x) == 0
    assert data.__inc__('edge_index', data.edge_index) == data.num_nodes

    assert not data.x.is_contiguous()
    data.contiguous()
    assert data.x.is_contiguous()

    assert not data.is_coalesced()
    data.edge_index, _ = coalesce(data.edge_index, None, N, N)
    data = data.coalesce()
    assert data.is_coalesced()

    clone = data.clone()
    assert clone != data
    assert len(clone) == len(data)
    assert clone.x.tolist() == data.x.tolist()
    assert clone.edge_index.tolist() == data.edge_index.tolist()

    data['x'] = x + 1
    assert data.x.tolist() == (x + 1).tolist()

    assert data.__repr__() == 'Data(edge_index=[2, 4], x=[3, 2])'

    dictionary = {'x': data.x, 'edge_index': data.edge_index}
    data = Data.from_dict(dictionary)
    assert sorted(data.keys) == ['edge_index', 'x']

    assert not data.contains_isolated_nodes()
    assert not data.contains_self_loops()
    assert data.is_undirected()
    assert not data.is_directed()

    assert data.num_nodes == 3
    assert data.num_edges == 4
    assert data.num_faces is None
    assert data.num_node_features == 2
    assert data.num_features == 2

    data.edge_attr = torch.randn(data.num_edges, 2)
    assert data.num_edge_features == 2
    data.edge_attr = None

    data.x = None
    assert data.num_nodes == 3

    data.edge_index = None
    assert data.num_nodes is None
    assert data.num_edges is None

    data.num_nodes = 4
    assert data.num_nodes == 4

    data = Data(x=x, attribute=x)
    assert len(data) == 2
    assert data.x.tolist() == x.tolist()
    assert data.attribute.tolist() == x.tolist()

    face = torch.tensor([[0, 1], [1, 2], [2, 3]])
    data = Data(num_nodes=4, face=face)
    assert data.num_faces == 2
    assert data.num_nodes == 4

    data = Data(title="test")
    assert data.__repr__() == 'Data(title=test)'
    assert data.num_node_features == 0
    assert data.num_edge_features == 0