def test_roundtrip_model_result(self): """mode_result.to_json enables roundtrip and lazy evaluation""" _data = { "Human": "ATGCGGCTCGCGGAGGCCGCGCTCGCGGAG", "Mouse": "ATGCCCGGCGCCAAGGCAGCGCTGGCGGAG", "Opossum": "ATGCCAGTGAAAGTGGCGGCGGTGGCTGAG", } aln = make_aligned_seqs(data=_data, moltype="dna") tree = make_tree(tip_names=aln.names) sm = get_model("HKY85") lf = sm.make_likelihood_function(tree) lf.set_alignment(aln) edge_vals = zip(aln.names, (2, 3, 4)) for edge, val in edge_vals: lf.set_param_rule("kappa", edge=edge, init=val) result = model_result(name="test") result[1] = lf self.assertIs(result[1], lf) self.assertEqual(result.nfp, lf.nfp) self.assertEqual(result.lnL, lf.lnL) data = result.to_json() got_obj = deserialise_object(data) # lazy evaluation means initially, the value is a dict self.assertIsInstance(got_obj[1], dict) # and properties match original self.assertEqual(got_obj.lnL, result.lnL) self.assertEqual(got_obj.nfp, result.nfp) self.assertEqual(got_obj.DLC, result.DLC) # when we ask for the lf attribute, it's no longer a dict self.assertNotIsInstance(got_obj.lf, dict) self.assertEqual(got_obj.lf.nfp, got_obj.nfp)
def test_repr(self): """does not fail""" _data = { "Human": "ATGCGGCTCGCGGAGGCCGCGCTCGCGGAG", "Mouse": "ATGCCCGGCGCCAAGGCAGCGCTGGCGGAG", "Opossum": "ATGCCAGTGAAAGTGGCGGCGGTGGCTGAG", } aln = make_aligned_seqs(data=_data, moltype="dna") mod = evo_app.model( "F81", show_progress=False, opt_args=dict(max_evaluations=1, limit_action="ignore"), ) result = mod(aln) self.assertIsInstance(repr(result), str) # no values set self.assertIsInstance(repr(model_result(source="blah")), str)
def test_model_result_setitem(self): """TypeError if value a likelihood function, or a dict with correct type""" v = dict(type="arbitrary") r = model_result(name="one", source="two") with self.assertRaises(TypeError): r["name"] = v with self.assertRaises(TypeError): r["name"] = 4 _data = { "Human": "ATGCGGCTCGCGGAGGCCGCGCTCGCGGAG", "Mouse": "ATGCCCGGCGCCAAGGCAGCGCTGGCGGAG", "Opossum": "ATGCCAGTGAAAGTGGCGGCGGTGGCTGAG", } aln = make_aligned_seqs(data=_data, moltype="dna") with self.assertRaises(TypeError): r["name"] = aln
def test_model_result_invalid_setitem(self): """model_result raise TypeError if trying to set incorrect item type""" mr = model_result() with self.assertRaises(TypeError): mr["null"] = 23
def test_repr_str(self): """it works even when no values""" mr = model_result(source="blah") self.assertIsInstance(repr(mr), str)