draw_chimera_embedding does not plot the desired embedded graph

Open
#188 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
1/5
Estimated time
Under an hour
Newbie friendliness
45/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
python

Research direction

Start in dwave_networkx/drawing/qubit_layout.py around line 292 and inspect how draw_chimera_embedding filters interaction edges. Run the provided five-node reproduction with minorminer and verify that the drawing reflects only the requested logical edges, without extra connections or cycles.

Written by the indexing model from the issue text.

Description

bug/fix

I want to plot an embedded graph on a chimera lattice with the command dnx.draw_chimera_embedding() of a simple system of 5 or more nodes consecutively connected (but with no loop between the first and last node):
J={(0, 1): 1, (0, 2): 1, (1, 3): 1, (2, 3): 1}

But when I use the drawing command it eventually plots some graphs where some units have more connections than expected and even some graphs are cycle despite the first and last unit should not be connected.

The embedded graph generated by minorminer.find_embedding() if fine so the issue is about the drawing function.

Here is the code to reproduce the issue:

layersList = [1,1,1,1,1]
h, J = {}, {}

comp0, comp1 = 0, layersList[0]

for i in range(len(layersList)-1):
    for k in range(layersList[i]):
        h.update({k + comp0:-1})
        for j in range(layersList[i+1]):
            J.update({(k + comp0, j + comp1):1})
            
    comp0 += layersList[i]
    comp1 += layersList[i+1]
    
for k in range(layersList[-1]):
    h.update({k + comp0:-1})
   
import dwave_networkx as dnx
# select basic graph on which move our computational graph
connectivity_structure = dnx.chimera_graph(2, 2)
    
from minorminer import find_embedding

import matplotlib.pyplot as plt

for k in range(10):
    plt.figure()
    emb = find_embedding(J, connectivity_structure)
    inter = [edge for edge in J]
    dnx.draw_chimera_embedding(connectivity_structure, emb, show_labels = True, interaction_edges = inter, overlapped_embedding = False)
plt.show()

I eventually found a way to overcome this issue on the file /dwave-networkx/dwave_networkx/drawing/qubit_layout.py line 292 where def show(p, q, u, v): return interactions.has_edge(p, q) should be changed to def show(p, q, u, v): return interactions.has_edge(u, v). Then with this changement the code works very fine.

Dominant language
Python
Stars
94
Forks
62
Avg merge
1d 2h
Merged PRs (30d)
1

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dwavesystems/dwave-graphs

All issues in dwavesystems/dwave-graphs

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.