diff options
author | Muriithi Frederick Muriuki | 2021-07-22 12:34:51 +0300 |
---|---|---|
committer | Muriithi Frederick Muriuki | 2021-07-22 12:34:51 +0300 |
commit | a826daa77fa56afddb4920ae7ff9dec334f6e646 (patch) | |
tree | 1578f7c07787a3299ad012184450d82f71a9e8af | |
parent | 47eefa0ccedffcaf6f93d3f55add41b4bdcc60c9 (diff) | |
download | genenetwork3-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.py | 11 | ||||
-rw-r--r-- | tests/unit/computations/test_slink.py | 3 |
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], |