def METHOD_NAME(self, node):
    # try to get all aliases of the function, if possible
    # else use [] as a fallback
    func_aliases = self.aliases[node.func]
    # expand argument if any
    func_aliases = reduce(
        # all funcs
        lambda x, y: x + (list(self.node_to_functioneffect.keys())
                          if isinstance(y, ast.Name) else [y]),
        func_aliases,
        list())
    for func_alias in func_aliases:
        # special hook for bound functions
        if isinstance(func_alias, ast.Call):
            fake_call = ast.Call(func_alias.args[0],
                                 func_alias.args[1:], [])
            self.visit(fake_call)
            continue
        # conservative choice
        if func_alias not in self.node_to_functioneffect:
            func_alias = intrinsic.UnboundValue
        func_alias = self.node_to_functioneffect[func_alias]
        self.result.add_edge(self.current_function, func_alias)
    self.generic_visit(node)