def find(self, name, object, resolved=False, push=True):
known = None<EOL>parent = self.top().resolved<EOL>if parent is None:<EOL><INDENT>result, ancestry = self.query(name)<EOL><DEDENT>else:<EOL><INDENT>result, ancestry = self.getchild(name, parent)<EOL><DEDENT>if result is None:<EOL><INDENT>return None<EOL><DEDENT>if isinstance(object, Object):<EOL><INDENT>known = self.known(object)<EOL><DEDENT>if push:<EOL><INDENT>frame = Frame(result, resolved=known, ancestry=ancestry)<EOL>pushed = self.push(frame)<EOL><DEDENT>if resolved:<EOL><INDENT>if known is None:<EOL><INDENT>result = result.resolve()<EOL><DEDENT>else:<EOL><INDENT>result = known<EOL><DEDENT><DEDENT>return result<EOL>
@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}