code: def _empty_except_predicates(xast, node, context):
      '''Check if a node is empty (no child nodes or attributes) except
      for any predicates defined in the specified xpath.
  
      :param xast: parsed xpath (xpath abstract syntax tree) from
  	:mod:`eulxml.xpath`
      :param node: lxml element to check
      :param context: any context required for the xpath (e.g.,
      	namespace definitions)
  
      :returns: boolean indicating if the element is empty or not
      '''
      # copy the node, remove predicates, and check for any remaining
      # child nodes or attributes
      node_c = deepcopy(node)
      _remove_predicates(xast, node_c, context)
      return bool(len(node_c) == 0 and len(node_c.attrib) == 0f _empty_except_predicates(xast, node, context):
      '''Check if a node is empty (no child nodes or attributes) except
      for any predicates defined in the specified xpath.
  
      :param xast: parsed xpath (xpath abstract syntax tree) from
  	:mod:`eulxml.xpath`
      :param node: lxml element to check
      :param context: any context required for the xpath (e.g.,
      	namespace definitions)
  
      :returns: boolean indicating if the element is empty or not
      '''
      # copy the node, remove predicates, and check for any remaining
      # child nodes or attributes
      node_c = deepcopy(node)
      _remove_predicates(xast, node_c, context)
      return bool(len(node_c) == 0 and len(node_c.attrib) == 0)
docs: Check if a node is empty (no child nodes or attributes) except
      for any predicates defined in the specified xpath.
  
      :param xast: parsed xpath (xpath abstract syntax tree) from
  	:mod:`eulxml.xpath`
      :param node: lxml element to check
      :param context: any context required for the xpath (e.g.,
      	namespace definitions)
  
      :returns: boolean indicating if the element is empty or not