'@param name: The name of the object to be resolved.
@type name: basestring
@param object: The name\'s value.
@type object: (any|L{Object})
@param resolved: A flag indicating that the fully resolved type
should be returned.
@type resolved: boolean
@param push: Indicates that the resolved type should be
pushed onto the stack.
@type push: boolean
@return: The found schema I{type}
@rtype: L{xsd.sxbase.SchemaObject}'

def find(self, name, object, resolved=False, push=True):

    known = None
    parent = self.top().resolved
    if (parent is None):
        (result, ancestry) = self.query(name)
    else:
        (result, ancestry) = self.getchild(name, parent)
    if (result is None):
        return None
    if isinstance(object, Object):
        known = self.known(object)
    if push:
        frame = Frame(result, resolved=known, ancestry=ancestry)
        pushed = self.push(frame)
    if resolved:
        if (known is None):
            result = result.resolve()
        else:
            result = known
    return result
