There are some features that are expected by users of quantum simulators that we should try to implement if we intend to release this to the public. QCGPU is the fastest simulator available, but it is still heavily underused when compared to cirq or even Qiskit (which is remarkably slow) as it lacks basic QoL features.
Basic:
[x] Measure gates: you should be able to measure only a set of qubits and get their input in. binary form. Ideally you are able to keep measures of different registers as separate even in the same experiment.
[x] Shot simulation: An easy way to simulate running an experiment with a set of measurements and to extract the numbers each qubit string has been repeated. Useful to plot histograms and extract data without having to deal with the full state.
[x] Multi-controlled Toffoli: Implementation of a CNOT gate controlled by as many qubits as necessary.
[x] Controlled-by gates: An easy way to implement any gate controlled by a set of other qubits. This simplifies a lot simulations, and circuit creation.
[x] Simple error map: Error map where probabilities can be set for bitflip and phaseflip errors, as well as measurement errors.
Advanced:
[x] Circuit visualization: A way to print the circuit on screen
[ ] Gate decomposer: Method to decompose a circuit to a basic set of gates in order to gauge its real depth on a quantum device.
[x] Gate compiler: Simplification of the circuit if redundant gates are detected.
[ ] Circuit architecture: Implementation of a particular device architecture in which to run the circuit.
[ ] Advanced error map: Control over T1 and T2 as a device-like enviroment. Map to a similar error model as found in an actual device.
These are some of the most relevant things that I can come up with both as short and long term implementations. But this is open for anyone to comment on other issues that we may find interesting to add to qibo on an end user perspective.
There are some features that are expected by users of quantum simulators that we should try to implement if we intend to release this to the public. QCGPU is the fastest simulator available, but it is still heavily underused when compared to cirq or even Qiskit (which is remarkably slow) as it lacks basic QoL features.
Basic:
[x] Measure gates: you should be able to measure only a set of qubits and get their input in. binary form. Ideally you are able to keep measures of different registers as separate even in the same experiment.
[x] Shot simulation: An easy way to simulate running an experiment with a set of measurements and to extract the numbers each qubit string has been repeated. Useful to plot histograms and extract data without having to deal with the full state.
[x] Multi-controlled Toffoli: Implementation of a CNOT gate controlled by as many qubits as necessary.
[x] Controlled-by gates: An easy way to implement any gate controlled by a set of other qubits. This simplifies a lot simulations, and circuit creation.
[x] Simple error map: Error map where probabilities can be set for bitflip and phaseflip errors, as well as measurement errors.
Advanced:
[x] Circuit visualization: A way to print the circuit on screen
[ ] Gate decomposer: Method to decompose a circuit to a basic set of gates in order to gauge its real depth on a quantum device.
[x] Gate compiler: Simplification of the circuit if redundant gates are detected.
[ ] Circuit architecture: Implementation of a particular device architecture in which to run the circuit.
[ ] Advanced error map: Control over T1 and T2 as a device-like enviroment. Map to a similar error model as found in an actual device.
These are some of the most relevant things that I can come up with both as short and long term implementations. But this is open for anyone to comment on other issues that we may find interesting to add to qibo on an end user perspective.