tqsd / QuNetSim

A quantum network simulation framework.
https://tqsd.github.io/QuNetSim/
MIT License
118 stars 52 forks source link

Stack Overflow when non-destructively Measuring GHZ Qubit on Node that Distributes and Keeps Part for Itself #144

Open nskjellum opened 2 years ago

nskjellum commented 2 years ago

Describe the bug When measuring a qubit non-destructively that is part of a GHZ that the thread process has distributed, it causes the thread in question to behave erratically on shutdown from network(stop) and causes it to hang and fail to end the execution.

To Reproduce Steps to reproduce the behavior:

  1. Create a process that distributes a ghz with distribute=False. Acks may not be required, but program behaved erratically when it did not await acks. host.send_ghz(receivers, qubit_id, await_ack=True, distribute=False)
  2. Acquire host's ghz qubit using its q_id q_ghz = host.get_qubit_by_id(q_id)
  3. Measure it, in any capacity. Storing it is not required. Default behavior is non_destructive=False q_ghz.measure()
  4. Allow the process to end, then let the program continue to network(stop). Based on my experience, the node in question will stop, but other nodes will always fail to. Expected behavior Network and all nodes should stop, as they do when measuring other qubits non-destructively.

Screenshots image

System:

Additional context Program uses a network of 6 nodes, with two nodes called R1 and R2 both running a process that measures the GHZ (for testing purposes) non-destructively.

stephendiadamo commented 2 years ago

Thanks for reporting. I'll check into it.

Which backend are you using for qubits? EQSN? Might want to try QuTiP backend and see if the same issues are there.

nskjellum commented 2 years ago

The backend is EQSN. I attempted to try other backends but none were downloaded when I originally used "pip qunetsim" on my venv. I assume there is a way to grab them directly, I just didn't see a reason to try at the moment.