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.
>>> from dwave.embedding import diagnose_embedding >>> 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: ... print(problem) (<class 'dwave.embedding.exceptions.InvalidNodeError'>, 1, 'a') (<class 'dwave.embedding.exceptions.ChainOverlapError'>, 2, 2, 0)