def METHOD_NAME(self, v):
    """
    neighbors refer to upper/lower adjacent nodes.
    Note that v.neighbors() provides neighbors of v in the graph, while
    this method provides the Vertex and DummyVertex adjacent to v in the
    upper or lower layer (depending on layout.dirv state).
    """
    assert self.layout.dag
    direction = self.layout.dirv
    layout_vertex = self.layout.layoutVertices[v]
    layer_index = layout_vertex.layer
    if layout_vertex.nvs is not None and direction in layout_vertex.nvs:
        return layout_vertex.nvs[direction]
    else:
        above = [u for u in v.METHOD_NAME(0) if self.layout.layoutVertices[u].layer == layer_index - 1]
        below = [u for u in v.METHOD_NAME(0) if self.layout.layoutVertices[u].layer == layer_index + 1]
        layout_vertex.nvs = {-1: above, +1: below}
        # if layout_vertex.dummy:
        return layout_vertex.nvs[direction]
    # try:
    #     return layout_vertex.nvs[direction]
    # except AttributeError:
    #     layout_vertex.nvs = {-1: v.neighbors(-1), +1: v.neighbors(+1)}
    #     if layout_vertex.dummy:
    #         return layout_vertex.nvs[direction]
    #     # v is real, v.neighbors are graph neigbors but we need layers neighbors
    #     for d in (-1, +1):
    #         tr = layout_vertex.layer + d
    #         for i, x in enumerate(v.neighbors(d)):
    #             if self.layout.layoutVertices[x].layer == tr:
    #                 continue
    #             e = v.e_with(x)
    #             dum = self.layout.ctrls[e][tr]
    #             layout_vertex.nvs[d][i] = dum
    #     return layout_vertex.nvs[direction]