docs: def neighborhood(self, elements: List[ELEMENT_NAME]) \
              -> References:
          """ Return a list of all slots, classes and types that touch any element in elements, including the element
          itself
  
          @param elements: Elements to do proximity with
          @return: All slots and classes that touch element
          """
          touches = References()
          for element in elements:
              if element in self.schema.classes:
                  touches.classrefs.add(element)
                  if None in touches.classrefs:
                      raise ValueError("1")
                  cls = self.schema.classes[element]
                  if cls.is_a:
                      touches.classrefs.add(cls.is_a)
                  if None in touches.classrefs:
                      raise ValueError("1")
                  # Mixins include apply_to's
                  touches.classrefs.update(set(cls.mixins))
                  for slotname in cls.slots:
                      slot = self.schema.slots[slotname]
                      if slot.range in self.schema.classes:
                          touches.classrefs.add(slot.range)
                      elif slot.range in self.schema.types:
                          touches.typerefs.add(slot.range)
                      if None in touches.classrefs:
                          raise ValueError("1")
                  if element in self.synopsis.rangerefs:
                      for slotname in self.synopsis.rangerefs[element]:
                          touches.slotrefs.add(slotname)
                          if self.schema.slots[slotname].domain:
                              touches.classrefs.add(self.schema.slots[slotname].domain)
              elif element in self.schema.slots:
                  touches.slotrefs.add(element)
                  slot = self.schema.slots[element]
                  touches.slotrefs.update(set(slot.mixins))
                  if slot.is_a:
                      touches.slotrefs.add(slot.is_a)
                  if element in self.synopsis.inverses:
                      touches.slotrefs.update(self.synopsis.inverses[element])
                  if slot.domain:
                      touches.classrefs.add(slot.domain)
                  if slot.range in self.schema.classes:
                      touches.classrefs.add(slot.range)
                  elif slot.range in self.schema.types:
                      touches.typerefs.add(slot.range)
              elif element in self.schema.types:
                  if element in self.synopsis.rangerefs:
                      touches.slotrefs.update(self.synopsis.rangerefs[element])
  
          return touches