'Generate the entities from the model\'s domain that satisfy an open formula.
:param parsed: an open formula
:type parsed: Expression
:param varex: the relevant free individual variable in ``parsed``.
:type varex: VariableExpression or str
:param g: a variable assignment
:type g:  Assignment
:return: a set of the entities that satisfy ``parsed``.'

def satisfiers(self, parsed, varex, g, trace=None, nesting=0):

    spacer = u'            '
    indent = (spacer + (spacer * nesting))
    candidates = []
    if isinstance(varex, string_types):
        var = Variable(varex)
    else:
        var = varex
    if (var in parsed.free()):
        if trace:
            print()
            print(((spacer * nesting) + (u"Open    formula    is    '%s'    with    assignment    %s" % (parsed, g))))
        for u in self.domain:
            new_g = g.copy()
            new_g.add(var.name, u)
            if (trace and (trace > 1)):
                lowtrace = (trace - 1)
            else:
                lowtrace = 0
            value = self.satisfy(parsed, new_g, lowtrace)
            if trace:
                print((indent + (u'(trying    assignment    %s)' % new_g)))
            if (value == False):
                if trace:
                    print((indent + (u"value    of    '%s'    under    %s    is    False" % (parsed, new_g))))
            else:
                candidates.append(u)
                if trace:
                    print((indent + (u"value    of    '%s'    under    %s    is    %s" % (parsed, new_g, value))))
        result = set((c for c in candidates))
    else:
        raise Undefined((u'%s    is    not    free    in    %s' % (var.name, parsed)))
    return result
