code: def coerce(self, value):
          
          if hasattr(value, 'values') and hasattr(value, 'domain'):
              return value
          elif hasattr(value, '__iter__'):
              # if the values are consistent with the comparison's domains, then
              # copy them, otherwise, make a new domain with the values.
              if all(map(lambda x: x in self.domain, value)):
                  return self._stem(self.domain, value)
              else:
                  raise CellConstructionFailure("Cannot turn %s into a cell" % (value))
          elif value in self.domain:
              return self._stem(self.domain, [value])
          else:
              raise CellConstructionFailure("Cannot turn %s into a cell" % (value))
docs: Ensures that a value is a SetCell