code: def types_of_coordination_environments(self, anonymous=False):
          
  
          motifs = set()
          for idx, site in enumerate(self.structure):
  
              centre_sp = site.species_string
  
              connected_sites = self.get_connected_sites(idx)
              connected_species = [connected_site.site.species_string
                                   for connected_site in connected_sites]
  
              labels = []
              for sp in set(connected_species):
                  count = connected_species.count(sp)
                  labels.append((count, sp))
  
              labels = sorted(labels, reverse=True)
  
              if anonymous:
                  mapping = {centre_sp: 'A'}
                  available_letters = [chr(66+i) for i in range(25)]
                  for label in labels:
                      sp = label[1]
                      if sp not in mapping:
                          mapping[sp] = available_letters.pop(0)
                  centre_sp = 'A'
                  labels = [(label[0], mapping[label[1]]) for label in labels]
  
              labels = ["{}({})".format(label[1], label[0]) for label in labels]
              motif = '{}-{}'.format(centre_sp, ','.join(labels))
              motifs.add(motif)
  
          return sorted(list(motifs))
docs: Extract information on the different co-ordination environments
          present in the graph.
  
          :param anonymous: if anonymous, will replace specie names
          with A, B, C, etc.
          :return: a list of co-ordination environments,
          e.g. ['Mo-S(6)', 'S-Mo(3)']