Skip to content

Commit ae2bd46

Browse files
author
cindeem
committed
Merge pull request #18 from cindeem/add_util
NF+TST: conversion tools for refactor of GraphPartition
2 parents 4557b2c + d719d6c commit ae2bd46

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

brainx/tests/test_util.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,57 @@
1717
# Functions
1818
#-----------------------------------------------------------------------------
1919

20+
def make_testlists():
21+
""" setup some data for the conversion Tests
22+
eg lislist_to_listset"""
23+
listlist = [[0,1,2],[3,4,5],[6,7,8,9]]
24+
dictset = {val:set(item) for val, item in enumerate(listlist)}
25+
listset = [set(item) for item in listlist]
26+
return listlist, listset, dictset
27+
28+
def test_dictset_to_listset():
29+
_, listset, dictset = make_testlists()
30+
new_list_set = util.dictset_to_listset(dictset)
31+
npt.assert_equal(new_list_set, listset)
32+
with npt.assert_raises(ValueError):
33+
# catch bad type
34+
tmp = util.dictset_to_listset(listset)
35+
36+
def test_listset_to_dictset():
37+
_, listset, dictset = make_testlists()
38+
new_dict_set = util.listset_to_dictset(listset)
39+
npt.assert_equal(new_dict_set, dictset)
40+
# capture wrong input type
41+
with npt.assert_raises(ValueError):
42+
tmp = util.listset_to_dictset(dictset)
43+
44+
def test_no_repeats_in_listlist():
45+
jnk = [[0,1,2],[3,4,5]] # all unique
46+
nt.assert_true(util._no_repeats_in_listlist(jnk))
47+
jnk = [[0,1,2], [0,1,2]] # repeats
48+
nt.assert_false(util._no_repeats_in_listlist(jnk))
49+
with npt.assert_raises(ValueError):
50+
util._no_repeats_in_listlist({0:0})
51+
with npt.assert_raises(ValueError):
52+
util._no_repeats_in_listlist([set([0,1,2])])
53+
54+
def test_contains_only():
55+
listlist, listset, dictset = make_testlists()
56+
nt.assert_true(util._contains_only(listlist, list))
57+
nt.assert_true(util._contains_only(listset, set))
58+
nt.assert_true(util._contains_only(dictset, set))
59+
nt.assert_false(util._contains_only([1,2,3], set))
60+
61+
62+
def test_listlist_to_listset():
63+
listlist, listset, _ = make_testlists()
64+
new_listset = util.listlist_to_listset(listlist)
65+
npt.assert_equal(new_listset, listset)
66+
with npt.assert_raises(ValueError):
67+
util.listlist_to_listset([[0,1,2],[0,1,2]])
68+
with npt.assert_raises(ValueError):
69+
util.listlist_to_listset({})
70+
2071
def test_slice_data():
2172
subcond, blocks, subjects, nodes = 5, 10, 20, 4
2273
data_4d = np.ones((blocks, subjects, nodes, nodes))

brainx/util.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,52 @@
1212
#-----------------------------------------------------------------------------
1313
# Functions
1414
#-----------------------------------------------------------------------------
15+
16+
def dictset_to_listset(dict_set):
17+
""" converts a dict of sets to a list of sets
18+
for converting partition.community objects"""
19+
if isinstance(dict_set, dict) \
20+
and _contains_only(dict_set, set):
21+
return dict_set.values()
22+
23+
raise ValueError('{0} is not a dict of sets'.format(dict_set))
24+
25+
def listset_to_dictset(list_set):
26+
""" converts a list of sets to a dict of sets
27+
for converting partition.community objects"""
28+
## check input is dict of sets
29+
if isinstance(list_set, list) and \
30+
_contains_only(list_set, set):
31+
return {val: value for val, value in enumerate(list_set)}
32+
raise ValueError('{0} is not a list of sets'.format(list_set))
33+
34+
def _no_repeats_in_listlist(list_list):
35+
""" checks for duplicates in list of lists
36+
returns True or False"""
37+
if isinstance(list_list, list) and \
38+
_contains_only(list_list, list):
39+
allitems = [item for sublist in list_list for item in sublist]
40+
return len(allitems) == len(set(allitems))
41+
raise ValueError('{0} is not a list of lists'.format(list_list))
42+
43+
def _contains_only(container, type):
44+
"""check that contents of a container are all of the same type"""
45+
try:
46+
container = container.values() # dict
47+
except AttributeError:
48+
pass
49+
50+
return all(isinstance(s, type) for s in container)
51+
52+
def listlist_to_listset(list_list):
53+
""" converts list of lists to a list of sets (with check)
54+
for converting partition.community objects"""
55+
if _no_repeats_in_listlist(list_list):
56+
return [set(x) for x in list_list]
57+
else:
58+
raise ValueError('found duplicate(s) in {0}, cannot validly format to '\
59+
'list of sets'.format(list_list))
60+
1561
def slice_data(data, sub, block, subcond=None):
1662
""" pull symmetric matrix from data block (4D or 5D)
1763

0 commit comments

Comments
 (0)