def test_deserialise_likelihood_function(self): """correctly deserialise data into likelihood function""" # tests multiple alignments data = load_aligned_seqs( filename=os.path.join(os.getcwd(), "data", "brca1_5.paml") ) half = len(data) // 2 aln1 = data[:half] aln2 = data[half:] loci_names = ["1st-half", "2nd-half"] loci = [aln1, aln2] tree = make_tree(tip_names=data.names) model = get_model("HKY85") lf = model.make_likelihood_function(tree, loci=loci_names) lf.set_alignment(loci) lf_rich_dict = lf.to_rich_dict() got = deserialise_likelihood_function(lf_rich_dict) self.assertEqual(str(lf.defn_for["mprobs"]), str(got.defn_for["mprobs"])) self.assertEqual( str(lf.defn_for["alignment"].assignments), str(got.defn_for["alignment"].assignments), ) # tests single alignment model = get_model("HKY85") lf = model.make_likelihood_function(tree) lf.set_alignment(aln1) lf_rich_dict = lf.to_rich_dict() got = deserialise_likelihood_function(lf_rich_dict) self.assertEqual(str(lf.defn_for["mprobs"]), str(got.defn_for["mprobs"])) self.assertEqual( str(lf.defn_for["alignment"].assignments), str(got.defn_for["alignment"].assignments), )
def lf(self): result = list(self.values()) if type(result[0]) == dict: from cogent3.util import deserialise # we reset the stat attributes to None for attr in self._stat_attrs: setattr(self, attr, None) for k, v in self.items(): v = deserialise.deserialise_likelihood_function(v) self[k] = v if len(self) == 1: result = list(self.values())[0] else: result = OrderedDict() for k in sorted(self): v = self[k] if type(k) == str and k.isdigit(): k = int(k) result[k] = v return result