code: def is_abstract(self, pass_is_abstract=True):
          
          if self.decorators:
              for node in self.decorators.nodes:
                  try:
                      inferred = next(node.infer())
                  except exceptions.InferenceError:
                      continue
                  if inferred and inferred.qname() in (
                      "abc.abstractproperty",
                      "abc.abstractmethod",
                  ):
                      return True
  
          for child_node in self.body:
              if isinstance(child_node, node_classes.Raise):
                  if child_node.raises_not_implemented():
                      return True
              return pass_is_abstract and isinstance(child_node, node_classes.Pass)
          # empty function is the same as function with a single "pass" statement
          if pass_is_abstract:
              return True
docs: 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