human
I wrote the below code

    if ((source not in G) or (target not in G)):
        msg = 'Either    source    {}    or    target    {}    is    not    in    G'
        raise nx.NodeNotFound(msg.format(source, target))
    if (heuristic is None):
        def heuristic(u, v):
            return 0
    push = heappush
    pop = heappop
    c = count()
    queue = [(0, next(c), source, 0, None)]
    enqueued = {}
    explored = {}
    while queue:
        (_, __, curnode, dist, parent) = pop(queue)
        if (curnode == target):
            path = [curnode]
            node = parent
            while (node is not None):
                path.append(node)
                node = explored[node]
            path.reverse()
            return path
        if (curnode in explored):
            continue
        explored[curnode] = parent
        for (neighbor, w) in G[curnode].items():
            if (neighbor in explored):
                continue
            ncost = (dist + w.get(weight, 1))
            if (neighbor in enqueued):
                (qcost, h) = enqueued[neighbor]
                if (qcost <= ncost):
                    continue
            else:
                h = heuristic(neighbor, target)
            enqueued[neighbor] = (ncost, h)
            push(queue, ((ncost + h), next(c), neighbor, ncost, curnode))
    raise nx.NetworkXNoPath(('Node    %s    not    reachable    from    %s' % (source, target)))

What's a good function header?

=====
Here's a good function header?
assistant
#Here's a good function header.

@not_implemented_for('multigraph')
def astar_path(G, source, target, heuristic=None, weight='weight'):