def list_prediction(self, species, to_this_composition=True): """ Args: species: list of species to_this_composition: If true, substitutions with this as a final composition will be found. If false, substitutions with this as a starting composition will be found (these are slightly different) Returns: List of predictions in the form of dictionaries. If to_this_composition is true, the values of the dictionary will be from the list species. If false, the keys will be from that list. """ for sp in species: if smart_element_or_specie(sp) not in self.p.species: raise ValueError("the species {} is not allowed for the" "probability model you are using".format(sp)) max_probabilities = [] for s1 in species: if to_this_composition: max_p = max( [self.p.cond_prob(s2, s1) for s2 in self.p.species]) else: max_p = max( [self.p.cond_prob(s1, s2) for s2 in self.p.species]) max_probabilities.append(max_p) output = [] def _recurse(output_prob, output_species): best_case_prob = list(max_probabilities) best_case_prob[:len(output_prob)] = output_prob if reduce(mul, best_case_prob) > self.threshold: if len(output_species) == len(species): odict = {'probability': reduce(mul, best_case_prob)} if to_this_composition: odict['substitutions'] = dict( zip(output_species, species)) else: odict['substitutions'] = dict( zip(species, output_species)) if len(output_species) == len(set(output_species)): output.append(odict) return for sp in self.p.species: i = len(output_prob) if to_this_composition: prob = self.p.cond_prob(sp, species[i]) else: prob = self.p.cond_prob(species[i], sp) _recurse(output_prob + [prob], output_species + [sp]) _recurse([], []) logging.info('{} substitutions found'.format(len(output))) return output
def list_prediction(self, species, to_this_composition = True): """ Args: species: list of species to_this_composition: If true, substitutions with this as a final composition will be found. If false, substitutions with this as a starting composition will be found (these are slightly different) Returns: List of predictions in the form of dictionaries. If to_this_composition is true, the values of the dictionary will be from the list species. If false, the keys will be from that list. """ for sp in species: if smart_element_or_specie(sp) not in self.p.species: raise ValueError("the species {} is not allowed for the" "probability model you are using".format(sp)) max_probabilities = [] for s1 in species: if to_this_composition: max_p = max([self.p.cond_prob(s2, s1) for s2 in self.p.species]) else: max_p = max([self.p.cond_prob(s1, s2) for s2 in self.p.species]) max_probabilities.append(max_p) output = [] def _recurse(output_prob, output_species): best_case_prob = list(max_probabilities) best_case_prob[:len(output_prob)] = output_prob if reduce(mul, best_case_prob) > self.threshold: if len(output_species) == len(species): odict = {'probability': reduce(mul, best_case_prob)} if to_this_composition: odict['substitutions'] = dict(zip(output_species, species)) else: odict['substitutions'] = dict(zip(species, output_species)) if len(output_species) == len(set(output_species)): output.append(odict) return for sp in self.p.species: i = len(output_prob) if to_this_composition: prob = self.p.cond_prob(sp, species[i]) else: prob = self.p.cond_prob(species[i], sp) _recurse(output_prob + [prob], output_species + [sp]) _recurse([], []) logging.info('{} substitutions found'.format(len(output))) return output
def get_px(self, sp): return self._px[smart_element_or_specie(sp)]
def get_lambda(self, s1, s2): k = frozenset([smart_element_or_specie(s1), smart_element_or_specie(s2)]) return self._l.get(k, self.alpha)
def get_lambda(self, s1, s2): k = frozenset( [smart_element_or_specie(s1), smart_element_or_specie(s2)]) return self._l.get(k, self.alpha)