|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- from triacontagon.split import split_adj_mat, \
- split_edge_type, \
- split_data
- from triacontagon.util import _equal
- from triacontagon.data import EdgeType, \
- Data
- from triacontagon.decode import dedicom_decoder
- import torch
-
-
- def test_split_adj_mat_01():
- adj_mat = torch.tensor([
- [0, 1, 0, 0, 1],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 1, 0],
- [0, 0, 1, 1, 0]
- ]).to_sparse()
-
- (res,) = split_adj_mat(adj_mat, (1.,))
- assert torch.all(_equal(res, adj_mat))
-
-
- def test_split_adj_mat_02():
- adj_mat = torch.tensor([
- [0, 1, 0, 0, 1],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 1, 0],
- [0, 0, 1, 1, 0]
- ]).to_sparse()
-
- a, b = split_adj_mat(adj_mat, ( .5, .5 ))
- assert torch.all(_equal(a+b, adj_mat))
-
-
- def test_split_adj_mat_03():
- adj_mat = torch.tensor([
- [0, 1, 0, 0, 1],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 1, 0],
- [0, 0, 1, 1, 0]
- ]).to_sparse()
-
- a, b, c = split_adj_mat(adj_mat, ( .8, .1, .1 ))
- print('a:', a.to_dense(), 'b:', b.to_dense(), 'c:', c.to_dense())
-
- assert torch.all(_equal(a+b+c, adj_mat))
-
-
- def test_split_edge_type_01():
- et = EdgeType('Dummy', 0, 1, [
- torch.tensor([
- [0, 1, 0, 0, 0],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 0, 1],
- [0, 1, 0, 1, 0]
- ]).to_sparse()
- ], None, None)
-
- res = split_edge_type(et, (1.,))
-
- assert torch.all(_equal(et.adjacency_matrices[0],
- res[0].adjacency_matrices[0]))
-
-
- def test_split_edge_type_02():
- et = EdgeType('Dummy', 0, 1, [
- torch.tensor([
- [0, 1, 0, 0, 0],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 0, 1],
- [0, 1, 0, 1, 0]
- ]).to_sparse()
- ], None, None)
-
- res = split_edge_type(et, (.5, .5))
-
- assert torch.all(_equal(et.adjacency_matrices[0],
- res[0].adjacency_matrices[0] + \
- res[1].adjacency_matrices[0]))
-
-
- def test_split_edge_type_03():
- et = EdgeType('Dummy', 0, 1, [
- torch.tensor([
- [0, 1, 0, 0, 0],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 0, 1],
- [0, 1, 0, 1, 0]
- ]).to_sparse()
- ], None, None)
-
- res = split_edge_type(et, (.4, .4, .2))
-
- assert torch.all(_equal(et.adjacency_matrices[0],
- res[0].adjacency_matrices[0] + \
- res[1].adjacency_matrices[0] + \
- res[2].adjacency_matrices[0]))
-
-
- def test_split_edge_type_04():
- et = EdgeType('Dummy', 0, 1, [
- torch.tensor([
- [0, 1, 0, 0, 0],
- [0, 0, 1, 0, 1],
- [1, 0, 0, 0, 1],
- [0, 1, 0, 1, 0]
- ]).to_sparse(),
-
- torch.tensor([
- [1, 0, 0, 0, 0],
- [0, 1, 0, 1, 0],
- [0, 0, 1, 1, 0],
- [1, 0, 1, 0, 0]
- ]).to_sparse()
- ], None, None)
-
- res = split_edge_type(et, (.4, .4, .2))
-
- assert torch.all(_equal(et.adjacency_matrices[0],
- res[0].adjacency_matrices[0] + \
- res[1].adjacency_matrices[0] + \
- res[2].adjacency_matrices[0]))
-
- assert torch.all(_equal(et.adjacency_matrices[1],
- res[0].adjacency_matrices[1] + \
- res[1].adjacency_matrices[1] + \
- res[2].adjacency_matrices[1]))
-
-
- def test_split_data_01():
- data = Data()
- data.add_vertex_type('Foo', 5)
- data.add_vertex_type('Bar', 4)
-
- foo_foo = torch.tensor([
- [0, 1, 0, 1, 0],
- [0, 0, 0, 1, 0],
- [0, 1, 0, 0, 1],
- [0, 1, 0, 0, 0],
- [1, 0, 0, 1, 0]
- ], dtype=torch.float32)
- foo_foo = (foo_foo + foo_foo.transpose(0, 1)) / 2
-
- foo_bar = torch.tensor([
- [0, 1, 0, 1],
- [0, 0, 0, 1],
- [0, 1, 0, 0],
- [1, 0, 0, 0],
- [0, 0, 1, 1]
- ], dtype=torch.float32)
- bar_foo = foo_bar.transpose(0, 1)
-
- bar_bar = torch.tensor([
- [0, 0, 1, 0],
- [1, 0, 0, 0],
- [0, 1, 0, 1],
- [0, 1, 0, 0],
- ], dtype=torch.float32)
- bar_bar = (bar_bar + bar_bar.transpose(0, 1)) / 2
-
- data.add_edge_type('Foo-Foo', 0, 0, [
- foo_foo.to_sparse().coalesce()
- ], dedicom_decoder)
- data.add_edge_type('Foo-Bar', 0, 1, [
- foo_bar.to_sparse().coalesce()
- ], dedicom_decoder)
- data.add_edge_type('Bar-Foo', 1, 0, [
- bar_foo.to_sparse().coalesce()
- ], dedicom_decoder)
- data.add_edge_type('Bar-Bar', 1, 1, [
- bar_bar.to_sparse().coalesce()
- ], dedicom_decoder)
-
- (res,) = split_data(data, (1.,))
-
- assert torch.all(_equal(res.edge_types[0, 0].adjacency_matrices[0],
- data.edge_types[0, 0].adjacency_matrices[0]))
-
- assert torch.all(_equal(res.edge_types[0, 1].adjacency_matrices[0],
- data.edge_types[0, 1].adjacency_matrices[0]))
-
- assert torch.all(_equal(res.edge_types[1, 0].adjacency_matrices[0],
- data.edge_types[1, 0].adjacency_matrices[0]))
-
- assert torch.all(_equal(res.edge_types[1, 1].adjacency_matrices[0],
- data.edge_types[1, 1].adjacency_matrices[0]))
-
-
- def test_split_data_02():
- data = Data()
- data.add_vertex_type('Foo', 5)
- data.add_vertex_type('Bar', 4)
-
- foo_foo = torch.tensor([
- [0, 1, 0, 1, 0],
- [0, 0, 0, 1, 0],
- [0, 1, 0, 0, 1],
- [0, 1, 0, 0, 0],
- [1, 0, 0, 1, 0]
- ], dtype=torch.float32)
- foo_foo = (foo_foo + foo_foo.transpose(0, 1)) / 2
-
- foo_bar = torch.tensor([
- [0, 1, 0, 1],
- [0, 0, 0, 1],
- [0, 1, 0, 0],
- [1, 0, 0, 0],
- [0, 0, 1, 1]
- ], dtype=torch.float32)
- bar_foo = foo_bar.transpose(0, 1)
-
- bar_bar = torch.tensor([
- [0, 0, 1, 0],
- [1, 0, 0, 0],
- [0, 1, 0, 1],
- [0, 1, 0, 0],
- ], dtype=torch.float32)
- bar_bar = (bar_bar + bar_bar.transpose(0, 1)) / 2
-
- data.add_edge_type('Foo-Foo', 0, 0, [
- foo_foo.to_sparse().coalesce()
- ], dedicom_decoder)
- data.add_edge_type('Foo-Bar', 0, 1, [
- foo_bar.to_sparse().coalesce()
- ], dedicom_decoder)
- data.add_edge_type('Bar-Foo', 1, 0, [
- bar_foo.to_sparse().coalesce()
- ], dedicom_decoder)
- data.add_edge_type('Bar-Bar', 1, 1, [
- bar_bar.to_sparse().coalesce()
- ], dedicom_decoder)
-
- a, b = split_data(data, (.5,.5))
-
- assert torch.all(_equal(a.edge_types[0, 0].adjacency_matrices[0] + \
- b.edge_types[0, 0].adjacency_matrices[0],
- data.edge_types[0, 0].adjacency_matrices[0]))
-
- assert torch.all(_equal(a.edge_types[0, 1].adjacency_matrices[0] + \
- b.edge_types[0, 1].adjacency_matrices[0],
- data.edge_types[0, 1].adjacency_matrices[0]))
-
- assert torch.all(_equal(a.edge_types[1, 0].adjacency_matrices[0] + \
- b.edge_types[1, 0].adjacency_matrices[0],
- data.edge_types[1, 0].adjacency_matrices[0]))
-
- assert torch.all(_equal(a.edge_types[1, 1].adjacency_matrices[0] + \
- b.edge_types[1, 1].adjacency_matrices[0],
- data.edge_types[1, 1].adjacency_matrices[0]))
|