# cartesian_product¶

cartesian_product(G, H)[source]

Returns the Cartesian product of G and H.

The Cartesian product $$P$$ of the graphs $$G$$ and $$H$$ has a node set that is the Cartesian product of the node sets, $$V(P)=V(G) \times V(H)$$. $$P$$ has an edge $$((u,v),(x,y))$$ if and only if either $$u$$ is equal to $$x$$ and both $$v$$ and $$y$$ are adjacent in $$H$$ or if $$v$$ is equal to $$y$$ and both $$u$$ and $$x$$ are adjacent in $$G$$.

Parameters
G, H: graphs

Networkx graphs.

Returns
P: NetworkX graph

The Cartesian product of G and H. P will be a multi-graph if either G or H is a multi-graph. Will be a directed if G and H are directed, and undirected if G and H are undirected.

Raises
NetworkXError

If G and H are not both directed or both undirected.

Notes

Node attributes in P are two-tuple of the G and H node attributes. Missing attributes are assigned None.

Examples

>>> G = nx.Graph()
>>> H = nx.Graph()
>>> P = nx.cartesian_product(G, H)
>>> list(P)
[(0, 'a')]


Edge attributes and edge keys (for multigraphs) are also copied to the new product graph