code: def sulfide_type(structure):
      
      structure = structure.copy()
      structure.remove_oxidation_states()
      s = Element("S")
      comp = structure.composition
      if comp.is_element or s not in comp:
          return None
  
      finder = SpacegroupAnalyzer(structure, symprec=0.1)
      symm_structure = finder.get_symmetrized_structure()
      s_sites = [sites[0] for sites in symm_structure.equivalent_sites if
                 sites[0].specie == s]
  
      def process_site(site):
  
          # in an exceptionally rare number of structures, the search
          # radius needs to be increased to find a neighbor atom
          search_radius = 4
          neighbors = []
          while len(neighbors) == 0:
              neighbors = structure.get_neighbors(site, search_radius)
              search_radius *= 2
              if search_radius > max(structure.lattice.abc)*2:
                  break
  
          neighbors = sorted(neighbors, key=lambda n: n[1])
          nn, dist = neighbors[0]
          coord_elements = [site.specie for site, d in neighbors
                            if d < dist + 0.4][:4]
          avg_electroneg = np.mean([e.X for e in coord_elements])
          if avg_electroneg > s.X:
              return "sulfate"
          elif avg_electroneg == s.X and s in coord_elements:
              return "polysulfide"
          else:
              return "sulfide"
  
      types = set([process_site(site) for site in s_sites])
      if "sulfate" in types:
          return None
      elif "polysulfide" in types:
          return "polysulfide"
      else:
          return "sulfide"
docs: Determines if a structure is a sulfide/polysulfide
  
      Args:
          structure (Structure): Input structure.
  
      Returns:
          (str) sulfide/polysulfide/sulfate