human
I wrote the below code

    if B.is_directed():
        pred = B.pred
        G = nx.DiGraph()
    else:
        pred = B.adj
        G = nx.Graph()
    if (weight_function is None):
        def weight_function(G, u, v):
            return len((set(G[u]) & set(pred[v])))
    G.graph.update(B.graph)
    G.add_nodes_from(((n, B.node[n]) for n in nodes))
    for u in nodes:
        nbrs2 = (set((n for nbr in set(B[u]) for n in B[nbr])) - set([u]))
        for v in nbrs2:
            weight = weight_function(B, u, v)
            G.add_edge(u, v, weight=weight)
    return G

What's a good function header?

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

@not_implemented_for('multigraph')
def generic_weighted_projected_graph(B, nodes, weight_function=None):