def replacement(self, template, e): r = dna_type() base_to_string = str.__str__ for t in template: tt = type(t) if tt is Base: r.append(base_to_string(t)) elif tt is Reference: if t.n < len(e): begin, end = e[t.n] else: begin, end = 0, 0 if t.level == 0: r.extend(self.dna[begin:end]) else: p = protect(self.dna[begin:end], t.level) self.cost += len(p) r.extend(p) elif tt is Length: if t < len(e): begin, end = e[t] else: begin, end = 0, 0 r.extend(asnat(end - begin)) return r
def __init__(self, dna): #assert all(c in 'ICFP' for c in dna) self.pattern_freqs = defaultdict(int) self.template_freqs = defaultdict(int) self.codon_len_freqs = defaultdict(int) self.freqs = [self.pattern_freqs, self.template_freqs, self.codon_len_freqs] self.explicit_rna_items = False self.dna = dna_type(dna) self.parser = DNA_parser(self.dna, self.freqs) self.item_starts = [] self.rna = [] self.cost = 0 self.debug = False self.iteration = 0