quantastica / quantum-circuit

Quantum Circuit Simulator implemented in JavaScript
MIT License
248 stars 49 forks source link

Cirq Circuit requires `device` parameter in order to use XmonSimulator #20

Closed Kaustuvi closed 5 years ago

Kaustuvi commented 5 years ago

I am creating a simple circuit as follows:


var circ = new QuantumCircuit();

circ.addGate("h", -1, 0);
circ.addGate("cx", -1, [0, 1]);

circ.run();

console.log("");
console.log(circ.exportCirq());

The exported program generated by quantum-circuit.js is this:

import cirq
import numpy as np

q = [cirq.NamedQubit('q' + str(i)) for i in range(2)]

circuit = cirq.Circuit.from_ops(
    cirq.H(q[0]),
    cirq.CNOT(q[0], q[1]),
    cirq.measure(q[0], key='c0')
)

simulator = cirq.google.XmonSimulator()
result = simulator.run(circuit)
print(result)

However, when I run the exported program in Cirq, it gives me the following error:

  File ".\src\pragma_test.py", line 12, in <module>
    result = simulator.run(circuit)
  File "C:\Users\Kaustuvi\Anaconda3\lib\site-packages\cirq\sim\sampler.py", line 42, in run
    repetitions)[0]
  File "C:\Users\Kaustuvi\Anaconda3\lib\site-packages\cirq\sim\simulator.py", line 73, in run_sweep
    repetitions=repetitions)
  File "C:\Users\Kaustuvi\Anaconda3\lib\site-packages\cirq\google\sim\xmon_simulator.py", line 153, in _run
    _verify_xmon_circuit(circuit)
  File "C:\Users\Kaustuvi\Anaconda3\lib\site-packages\cirq\google\sim\xmon_simulator.py", line 97, in _verify_xmon_circuit
    raise ValueError("XmonSimulator only accepts circuits "
ValueError: XmonSimulator only accepts circuits using an XmonDevice. Maybe you forgot to pass a `device=` parameter into `cirq.Circuit`, or intended to set `new_device=` in your call to `cirq.google.optimized_for_xmon`? Alternatively, maybe you intended to use `cirq.Simulator()` instead?

Basically, Circuit requires the device parameter in order to use XmonSimulator. Perhaps, we could use cirq.Simulator() instead of XmonSimulator? Also, if we are using simulator.run(), the user needs to explicitly add measurement operations, otherwise the simulator can return empty measurements. Please let me know if I am missing anything.

perak commented 5 years ago

Hi @Kaustuvi,

Thanks for reporting. Export to cirq is not tested well, but it worked in time when it was implemented. Possibly cirq was changed in meantime (and you are first to report).

What version of cirq framework you are using?

I will test and try fix (if it is a bug) later when I reach my computer.

Kaustuvi commented 5 years ago

I am using cirq 0.5.0.

perak commented 5 years ago

XmonSimulator is replaced with Simulator for now. (Will be added as an option somewhere in the near future).

So this issue is fixed. Closing.