dwave.embedding.diagnose_embedding¶

diagnose_embedding
(emb, source, target)[source]¶ Diagnose a minor embedding.
Produces a generator that lists all issues with the embedding. Userfriendly variants of this function are
is_valid_embedding()
, which returns a bool, andverify_embedding()
, which raises the first observed error.Parameters:  emb (dict) – A mapping of source nodes to arrays of target nodes as a dict of form {s: [t, …], …}, where s is a sourcegraph variable and t is a targetgraph variable.
 source (list/
networkx.Graph
) – Graph to be embedded as a NetworkX graph or a list of edges.  target (list/
networkx.Graph
) – Graph being embedded into as a NetworkX graph or a list of edges.
Yields: Errors yielded in the form ExceptionClass, arg1, arg2,…, where the arguments following the class are used to construct the exception object, which are subclasses of
EmbeddingError
.MissingChainError
, snode: a source node label that does not occur as a key of emb, or for which emb[snode] is empty.ChainOverlapError
, tnode, snode0, snode1: a target node which occurs in both emb[snode0] and emb[snode1].DisconnectedChainError
, snode: a source node label whose chain is not a connected subgraph of target.InvalidNodeError
, tnode, snode: a source node label and putative target node label that is not a node of target.MissingEdgeError
, snode0, snode1: a pair of source node labels defining an edge that is not present between their chains.Examples
This example diagnoses an invalid embedding from a triangular source graph to a square target graph. A valid embedding, such as emb = {0: [1], 1: [0], 2: [2, 3]}, yields no errors.
>>> import networkx as nx >>> source = nx.complete_graph(3) >>> target = nx.cycle_graph(4) >>> embedding = {0: [2], 1: [1, 'a'], 2: [2, 3]} >>> diagnosis = diagnose_embedding(embedding, source, target) >>> for problem in diagnosis: # doctest: +SKIP ... print(problem) (<class 'dwave.embedding.exceptions.InvalidNodeError'>, 1, 'a') (<class 'dwave.embedding.exceptions.ChainOverlapError'>, 2, 2, 0)