aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMuriithi Frederick Muriuki2021-07-22 12:34:51 +0300
committerMuriithi Frederick Muriuki2021-07-22 12:34:51 +0300
commita826daa77fa56afddb4920ae7ff9dec334f6e646 (patch)
tree1578f7c07787a3299ad012184450d82f71a9e8af
parent47eefa0ccedffcaf6f93d3f55add41b4bdcc60c9 (diff)
downloadgenenetwork3-a826daa77fa56afddb4920ae7ff9dec334f6e646.tar.gz
Check that child distance from itself is zero
Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/clustering.gmi * gn3/computations/slink.py: Check that a child's distance from itself is zero. If not, throw an exception. The children lists are a list of distances of "something" from other "somethings". There is still some need to establish what those "somethings" are, so that the test names can reflect the ideas that are actually being tested for. * tests/unit/computations/test_slink.py: Change the name of the test so that it more closely corresponds to the business logic it is actually testing, and not the mechanics of testing the idea.
-rw-r--r--gn3/computations/slink.py11
-rw-r--r--tests/unit/computations/test_slink.py3
2 files changed, 12 insertions, 2 deletions
diff --git a/gn3/computations/slink.py b/gn3/computations/slink.py
index 5288908..f3a6951 100644
--- a/gn3/computations/slink.py
+++ b/gn3/computations/slink.py
@@ -25,6 +25,16 @@ def raise_lengtherror_if_child_lists_are_not_same_as_parent(lists):
if not all(map(len_is_same_as_parent, lists)):
raise LengthError("All children lists should be same length as the parent.")
+def raise_valueerror_if_child_list_distance_from_itself_is_not_zero(lists):
+ def get_child_distance(child):
+ idx = lists.index(child)
+ return lists[idx][idx]
+ def distance_is_zero(dist):
+ return dist == 0
+ children_distances = map(get_child_distance, lists)
+ if not all(map(distance_is_zero, children_distances)):
+ raise ValueError("Distance of each child list/tuple from itself should be zero!")
+
def nearest(lists, i, j):
"""Computes some form of distance.
This is 'copied' over from genenetwork1, from https://github.com/genenetwork/genenetwork1/blob/master/web/webqtl/heatmap/slink.py#L42-L64.
@@ -35,5 +45,6 @@ This description should be updated once the form/type of 'distance' identified."
raise_valueerror_if_data_is_not_lists_or_tuples(lists)
raise_valueerror_if_lists_empty(lists)
raise_lengtherror_if_child_lists_are_not_same_as_parent(lists)
+ raise_valueerror_if_child_list_distance_from_itself_is_not_zero(lists)
#### END: Guard Functions ####
return None
diff --git a/tests/unit/computations/test_slink.py b/tests/unit/computations/test_slink.py
index 816cd2f..1fb7bbb 100644
--- a/tests/unit/computations/test_slink.py
+++ b/tests/unit/computations/test_slink.py
@@ -35,8 +35,7 @@ class TestSlink(TestCase):
with self.assertRaises(LengthError):
nearest(lst, 1, 1)
- def test_nearest_expects_exception_if_there_is_no_zero_at_childs_list_index_corresponding_to_its_index_in_parent(self):
- # I don't like the name of this test. Make the name clearer
+ def test_nearest_expects_exception_if_distance_of_child_from_itself_is_not_zero(self):
for lst in [[[1]],
[[1,2],[3,4]],
[1,0,0],[0,0,5],[0,3,4],