def unimplemented_abstract_methods(node, is_abstract_cb=decorated_with_abc):
 visited = {}
 try:
  mro = reversed(node.mro())
 except NotImplementedError:
  return {}
 except astroid.ResolveError:
  return {}
 for ancestor in mro:
  for obj in ancestor.values():
   infered = obj
   if isinstance(obj, astroid.AssName):
    infered = safe_infer(obj)
    if (not infered):
     continue
    if (not isinstance(infered, astroid.Function)):
     if (obj.name in visited):
      del visited[obj.name]
   if isinstance(infered, astroid.Function):
    abstract = is_abstract_cb(infered)
    if abstract:
     visited[obj.name] = infered
    elif ((not abstract) and (obj.name in visited)):
     del visited[obj.name]
 return visited

def unimplemented_abstract_methods ( node , is_abstract_cb = decorated_with_abc ) : visited = { } try : mro = reversed ( node . mro ( ) ) except NotImplementedError : return { } except astroid . ResolveError : return { } for ancestor in mro : for obj in ancestor . values ( ) : infered = obj if isinstance ( obj , astroid . AssName ) : infered = safe_infer ( obj ) if ( not infered ) : continue if ( not isinstance ( infered , astroid . Function ) ) : if ( obj . name in visited ) : del visited [ obj . name ] if isinstance ( infered , astroid . Function ) : abstract = is_abstract_cb ( infered ) if abstract : visited [ obj . name ] = infered elif ( ( not abstract ) and ( obj . name in visited ) ) : del visited [ obj . name ] return visited
get the unimplemented abstract methods for the given *node* .