Perform one step of iterative fragmentation on a list of molecule graphs. Loop through the graphs,
        then loop through each graph's edges and attempt to remove that edge in order to obtain two
        disconnected subgraphs, aka two new fragments. If successful, check to see if the new fragments
        are already present in self.unique_fragments, and append them if not. If unsucessful, we know
        that edge belongs to a ring. If we are opening rings, do so with that bond, and then again
        check if the resulting fragment is present in self.unique_fragments and add it if it is not.

def _fragment_one_level(self, mol_graphs):
        """
        Perform one step of iterative fragmentation on a list of molecule graphs. Loop through the graphs,
        then loop through each graph's edges and attempt to remove that edge in order to obtain two
        disconnected subgraphs, aka two new fragments. If successful, check to see if the new fragments
        are already present in self.unique_fragments, and append them if not. If unsucessful, we know
        that edge belongs to a ring. If we are opening rings, do so with that bond, and then again
        check if the resulting fragment is present in self.unique_fragments and add it if it is not.
        """
        unique_fragments_on_this_level = []
        for mol_graph in mol_graphs:
            for edge in mol_graph.graph.edges:
                bond = [(edge[0],edge[1])]
                try:
                    fragments = mol_graph.split_molecule_subgraphs(bond, allow_reverse=True)
                    for fragment in fragments:
                        found = False
                        for unique_fragment in self.unique_fragments:
                            if unique_fragment.isomorphic_to(fragment):
                                found = True
                                break
                        if not found:
                            self.unique_fragments.append(fragment)
                            unique_fragments_on_this_level.append(fragment)
                except MolGraphSplitError:
                    if self.open_rings:
                        fragment = open_ring(mol_graph, bond, self.opt_steps)
                        found = False
                        for unique_fragment in self.unique_fragments:
                            if unique_fragment.isomorphic_to(fragment):
                                found = True
                                break
                        if not found:
                            self.unique_fragments.append(fragment)
                            self.unique_fragments_from_ring_openings.append(fragment)
                            unique_fragments_on_this_level.append(fragment)
        return unique_fragments_on_this_level