def test_set_feature_float(self): """can set and retrieve values""" rr = Representation() rr.set("abc", 1) self.assertEqual(rr.get("abc"), 1.0) self.assertTrue(type(rr.get("abc")) is float)
def test_impute_fromseeds_highfirst(self): """imputing values from manually-specified seeds.""" rr = Representation(dict()) # specify data for two children, DOID:4 is higher in tree, so should gain rr.set("DOID:0014667", 0.4) rr.set("DOID:0080015", 0.3) rr.impute(self.obo, self.obodef, seeds=["DOID:0014667", "DOID:0080015"]) self.assertAlmostEqual(rr.get("DOID:0014667"), 0.4, msg="should remain") self.assertAlmostEqual(rr.get("DOID:0080015"), 0.3, msg="should remain") self.assertAlmostEqual( rr.get("DOID:4"), 1 - ((1 - 0.4) * (1 - 0.3) * (1 - 0.2)), msg="ancestor gains from two children (and prior)") self.assertAlmostEqual(rr.get("DOID:655"), 0.2, msg="remain; new DOID:4")
def test_impute_fromseeds_lowfirst(self): """imputing values from manually-specified seeds.""" rr = Representation(dict()) ## specify an inconsistent set of values, DOID:4 is higher in tree, so cannot ## have a lower value than DOID:0014667 rr.set("DOID:0014667", 0.4).set("DOID:4", 0.1) rr.impute(self.obo, self.obodef, seeds=["DOID:4", "DOID:0014667"]) self.assertEqual(rr.get("DOID:0080015"), 0.1, "child of DOID:4") self.assertEqual(rr.get("DOID:655"), 0.1, "child of DOID:4")
def test_copy(self): """can copy a representation into a new object.""" r1 = Representation(self.defaults, name="hello") r1.set("abc", 0.5) result = r1.copy() self.assertEqual(r1.name, result.name) self.assertEqual(r1.get("abc"), result.get("abc")) result.set("abc", 0.75) self.assertEqual(r1.get("abc"), 0.5) self.assertEqual(result.get("abc"), 0.75)
def test_general_representation_get(self): """setting and getting from a generic representation.""" rr = Representation(dict(xyz=0.2)) rr.set("bob", 0.4) rr.set("xyz", 0.3) rr.defaults(self.defaults) self.assertEqual(rr.get("bob"), 0.4, "value should come from manual input") self.assertEqual(rr.get("abc"), 0.1, "value should come from defaults dict") self.assertEqual(rr.get("xyz"), 0.3, "value should come from manual override")
def test_general_representation_get2(self): """setting and getting from a generic representation.""" # Similar to previous, but setting defaults before the specifics rr = Representation(dict(abc=0.1, xyz=0.2)) rr.defaults(self.defaults) rr.set("bob", 0.4) rr.set("xyz", 0.3) self.assertEqual(rr.get("bob"), 0.4, "value should come from manual input") self.assertEqual(rr.get("abc"), 0.1, "value should come from defaults dict") self.assertEqual(rr.get("xyz"), 0.3, "value should come from manual override")
def test_impute_up_avoid_doubles(self): """updating values in representation via positive evidence in DAG""" rr = Representation(dict()) # DOID:11044 in test ontology has two paths to root (DOID:4) # one is direct (a shortcut) # another path is through 0080015 rr.set("DOID:11044", 0.4) rr.impute(self.obo, self.obodef) self.assertGreater(rr.get("DOID:0080015"), 0.2, "ancestor should increase") self.assertAlmostEqual( rr.get("DOID:0080015"), rr.get("DOID:4"), msg="4 should get bumped once, despite two paths from 11044")
def test_impute_down(self): """updating values in representation via negative evidence.""" rr = Representation(dict()) rr.set("unrelated", 0.8) rr.set("DOID:0014667", 0.05) rr.impute(self.obo, self.obodef) self.assertAlmostEqual(rr.get("unrelated"), 0.8, "out-of-ontology terms remain") self.assertAlmostEqual(rr.get("DOID:0014667"), 0.05, "set value should remain") self.assertAlmostEqual(rr.get("DOID:4"), 0.2, "ancestors should remain") self.assertAlmostEqual(rr.get("DOID:0080015"), 0.2, "unrelated terms get default") self.assertAlmostEqual(rr.get("DOID:655"), 0.05, "children are unaffected")
def test_impute_up_always_increases(self): """updating values in representation via positive evidence.""" rr = Representation(dict()) rr.set("DOID:3650", 0.25) defaults = self.obodef.copy() defaults["DOID:0014667"] = 0.5 defaults["DOID:4"] = 1 rr.impute(self.obo, defaults) self.assertEqual(rr.get("DOID:3650"), 0.25, "set value should remain") self.assertGreater(rr.get("DOID:0060158"), 0.25, "ancestors should receive greater score") self.assertEqual(rr.get("DOID:655"), 0.2, "unrelated should stay at default") # ancestor that has already a higher score than what is propagated self.assertGreater( rr.get("DOID:0014667"), 0.5, "ancestor should receive score greater than its prior")
def test_impute_up(self): """updating values in representation via positive evidence.""" rr = Representation(dict()) rr.set("unrelated", 0.8) rr.set("DOID:0014667", 0.4) rr.impute(self.obo, self.obodef) self.assertEqual(rr.get("unrelated"), 0.8, msg="out-of-ontology terms remain") self.assertEqual(rr.get("DOID:0014667"), 0.4, msg="set value should remain") self.assertGreater(rr.get("DOID:4"), 0.4, msg="ancestors should receive greater score") self.assertEqual(rr.get("DOID:0080015"), 0.2, msg="unrelated terms get default") self.assertEqual(rr.get("DOID:655"), 0.2, msg="children are unaffected")
def make_target_reference(reference, oomap, oo_median=None): """convert a single representation from one ontology to another.""" result = Representation(name=reference.name) result.title = reference.title for phenotype, value in reference.data.items(): for oo_phenotype, oo_score in oomap[phenotype]: # perhaps compute a rescaled oo value newvalue = value if oo_median is not None: newvalue = value * tanh(oo_score / oo_median) # always take the larger value if previously set if result.has(oo_phenotype): newvalue = max(newvalue, result.get(oo_phenotype)) result.set(oo_phenotype, newvalue) return result
def test_init_float(self): """initializing with a dict ensure float values""" rr = Representation(dict(abc=1), name="rr") self.assertEqual(rr.get("abc"), 1.0) self.assertTrue(type(rr.get("abc")) is float)
def test_set_feature(self): """can set and retrieve values""" rr = Representation() rr.set("abc", 0.2) self.assertEqual(rr.get("abc"), 0.2)