code: def break_bond(self, ind1, ind2, tol=0.2):
          
          sites = self._sites
          clusters = [[sites[ind1]], [sites[ind2]]]
  
          sites = [site for i, site in enumerate(sites) if i not in (ind1, ind2)]
  
          def belongs_to_cluster(site, cluster):
              for test_site in cluster:
                  if CovalentBond.is_bonded(site, test_site, tol=tol):
                      return True
              return False
  
          while len(sites) > 0:
              unmatched = []
              for site in sites:
                  for cluster in clusters:
                      if belongs_to_cluster(site, cluster):
                          cluster.append(site)
                          break
                  else:
                      unmatched.append(site)
  
              if len(unmatched) == len(sites):
                  raise ValueError("Not all sites are matched!")
              sites = unmatched
  
          return (self.__class__.from_sites(cluster)
                  for cluster in clusters)
docs: Returns two molecules based on breaking the bond between atoms at index
          ind1 and ind2.
  
          Args:
              ind1 (int): Index of first site.
              ind2 (int): Index of second site.
              tol (float): Relative tolerance to test. Basically, the code
                  checks if the distance between the sites is less than (1 +
                  tol) * typical bond distances. Defaults to 0.2, i.e.,
                  20% longer.
  
          Returns:
              Two Molecule objects representing the two clusters formed from
              breaking the bond.