def swap_fragment(self, seed): """Substitutes a random fragment with another with the same symbol""" if seed.has_structure: n_nodes = self.count_nodes(seed.structure) self.to_swap = random.randint(2, n_nodes) new_structure = self.recursive_swap(seed.structure) new_seed = Seed(tree_to_string(new_structure)) new_seed.has_structure = True new_seed.structure = new_structure return new_seed return seed
def delete_fragment(self, seed): """Deletes a random fragment""" if seed.has_structure: n_nodes = self.count_nodes(seed.structure) self.to_delete = random.randint(2, n_nodes) new_structure = self.recursive_delete(seed.structure) new_seed = Seed(tree_to_string(new_structure)) new_seed.has_structure = True new_seed.structure = new_structure # do not return an empty new_seed if not new_seed.data: return seed else: return new_seed return seed
def delete_fragment(self, seed): """Deletes a random region""" if not seed.has_structure and seed.has_regions: regions = [r for r in seed.regions if len(seed.regions[r]) > 0] if len(regions) == 0: return seed key = random.choice(list(regions)) s, e = (0, 0) while (e - s < 2): s, e = random.choice(list(seed.regions[key])) new_seed = Seed(seed.data[:s] + seed.data[e:]) new_seed.has_structure = False new_seed.has_regions = False return new_seed else: return super().delete_fragment(seed)
def swap_fragment(self, seed): """Chooses a random region and swaps it with a fragment that starts with the same symbol""" if not seed.has_structure and seed.has_regions: regions = [ r for r in seed.regions if (len(seed.regions[r]) > 0 and len(self.fragments[r]) > 0) ] if len(regions) == 0: return seed key = random.choice(list(regions)) s, e = random.choice(list(seed.regions[key])) swap_structure = random.choice(self.fragments[key]) swap_string = tree_to_string(swap_structure) new_seed = Seed(seed.data[:s] + swap_string + seed.data[e:]) new_seed.has_structure = False new_seed.has_regions = False return new_seed else: return super().swap_fragment(seed)