# Source code for landlab.graph.voronoi.dual_voronoi

```import numpy as np

from ..dual import DualGraph
from ..graph import Graph
from .voronoi import DelaunayGraph
from .voronoi_to_graph import VoronoiDelaunayToGraph

[docs]
class DualVoronoiGraph(DualGraph, DelaunayGraph):

[docs]
def __init__(
):
"""Create a voronoi grid.

Parameters
----------
nodes : tuple of array_like
Coordinates of every node. First *y*, then *x*.

Examples
--------
>>> from landlab.graph import DualVoronoiGraph
>>> node_x = [0, 1, 2, 3,
...           0.2, 1.2, 2.2, 3.2,
...           0.4, 1.4, 2.4, 3.4]
>>> node_y = [0, 0, 0, 0,
...           1, 1, 1, 1,
...           2, 2, 2, 2]
>>> graph = DualVoronoiGraph((node_y, node_x), sort=True)
>>> graph.x_of_corner
array([ 0.5,  1.5,  2.5,  0.7,  1.7,  2.7,  0.7,  1.7,  2.7,  0.9,  1.9,
2.9])
>>> graph.y_of_corner # doctest: +NORMALIZE_WHITESPACE
array([ 0.42,  0.42,  0.42,  0.58,  0.58,  0.58,  1.42,  1.42,  1.42,
1.58,  1.58,  1.58])
>>> graph.corners_at_face # doctest: +NORMALIZE_WHITESPACE
array([[ 0,  3], [ 3,  1], [ 1,  4], [ 4,  2], [ 2,  5],
[ 3,  6], [ 4,  7], [ 5,  8],
[ 6,  9], [ 9,  7], [ 7, 10], [10,  8], [ 8, 11]])
>>> graph.faces_at_corner # doctest: +NORMALIZE_WHITESPACE
array([[ 0, -1, -1], [ 2,  1, -1], [ 4,  3, -1],
[ 5,  0,  1], [ 6,  2,  3], [ 7,  4, -1],
[ 8,  5, -1], [10,  9,  6], [12, 11,  7],
[ 8,  9, -1], [10, 11, -1], [12, -1, -1]])
>>> graph.node_at_cell
array([5, 6])
"""
mesh = VoronoiDelaunayToGraph(
np.vstack((node_y_and_x[1], node_y_and_x[0])).T,
)

Graph.__init__(
self,
node_y_and_x,
sort=False,
)
dual_graph = Graph(
(mesh.y_of_corner, mesh.x_of_corner),