def is_abstract(self, pass_is_abstract=True):
if self.decorators:<EOL><INDENT>for node in self.decorators.nodes:<EOL><INDENT>try:<EOL><INDENT>inferred = next(node.infer())<EOL><DEDENT>except exceptions.InferenceError:<EOL><INDENT>continue<EOL><DEDENT>if inferred and inferred.qname() in (<EOL>"<STR_LIT>",<EOL>"<STR_LIT>",<EOL>):<EOL><INDENT>return True<EOL><DEDENT><DEDENT><DEDENT>for child_node in self.body:<EOL><INDENT>if isinstance(child_node, node_classes.Raise):<EOL><INDENT>if child_node.raises_not_implemented():<EOL><INDENT>return True<EOL><DEDENT><DEDENT>return pass_is_abstract and isinstance(child_node, node_classes.Pass)<EOL><DEDENT>if pass_is_abstract:<EOL><INDENT>return True<EOL><DEDENT>
Check if the method is abstract.

        A method is considered abstract if any of the following is true:
        * The only statement is 'raise NotImplementedError'
        * The only statement is 'pass' and pass_is_abstract is True
        * The method is annotated with abc.astractproperty/abc.abstractmethod

        :returns: True if the method is abstract, False otherwise.
        :rtype: bool