code: def are_equal(self, sp1, sp2):
          
          for s1 in sp1.keys():
              spin1 = getattr(s1, "spin", 0)
              oxi1 = getattr(s1, "oxi_state", 0)
              for s2 in sp2.keys():
                  spin2 = getattr(s2, "spin", 0)
                  oxi2 = getattr(s2, "oxi_state", 0)
                  if (s1.symbol == s2.symbol and oxi1 == oxi2 and
                          spin2 == -spin1):
                      break
              else:
                  return False
          return True
docs: True if species are exactly the same, i.e., Fe2+ == Fe2+ but not
          Fe3+. and the spins are reversed. i.e., spin up maps to spin down,
          and vice versa.
  
          Args:
              sp1: First species. A dict of {specie/element: amt} as per the
                  definition in Site and PeriodicSite.
              sp2: Second species. A dict of {specie/element: amt} as per the
                  definition in Site and PeriodicSite.
  
          Returns:
              Boolean indicating whether species are equal.