code: def break_edge(self, from_index, to_index, to_jimage=None, allow_reverse=False):
          
  
          # ensure that edge exists before attempting to remove it
          existing_edges = self.graph.get_edge_data(from_index, to_index)
          existing_reverse = None
  
          if to_jimage is None:
              raise ValueError("Image must be supplied, to avoid ambiguity.")
  
          if existing_edges:
              for i, properties in existing_edges.items():
                  if properties["to_jimage"] == to_jimage:
                      edge_index = i
  
              self.graph.remove_edge(from_index, to_index, edge_index)
  
          else:
              if allow_reverse:
                  existing_reverse = self.graph.get_edge_data(to_index, from_index)
  
              if existing_reverse:
                  for i, properties in existing_reverse.items():
                      if properties["to_jimage"] == to_jimage:
                          edge_index = i
  
                  self.graph.remove_edge(to_index, from_index, edge_index)
              else:
                  raise ValueError("Edge cannot be broken between {} and {};\
                                  no edge exists between those sites.".format(
                                  from_index, to_index
                                  ))
docs: Remove an edge from the StructureGraph. If no image is given, this method will fail.
  
          :param from_index: int
          :param to_index: int
          :param to_jimage: tuple
          :param allow_reverse: If allow_reverse is True, then break_edge will
          attempt to break both (from_index, to_index) and, failing that,
          will attempt to break (to_index, from_index).
          :return: