Yao.jl
Yao.jl copied to clipboard
More efficient implementation of `two_qubit_depolarizing_channel()`
The implementation of two_qubit_depolarizing_channel()
from #455 is not the very efficient. QuEST seems to have a more efficient implementation of that channel here.
@Roger-luo, @jlbosse: I'm taking a look at this. I think I know what the QuEST code is doing.
Great! Do you want to explain it here or, if you understand the Yao codebase well enough, open a pull request with a Yao implementation?
QuEST in general has a number of noise functions. Where are we with these types of implementations in Yao?
There are a couple of standard error channels already implemented, see e.g. here. And if the channel you are interested in has unitary Kraus operators, you can use the unitary_channel()
to create your own error channel.
@jlbosse @fieldofnodes: I didn't work out the QuEST implementation. It introduces extra parameters that weren't obvious. I emailed the author a few weeks ago. They haven't yet written back.
@atomgardner I have thought about bringing QuEST in to Julia, then I found
- https://github.com/Hopery/QuEST.jl is forked from this one
- https://github.com/UTartu-QC/QuEST_jl
No Idea if they work still, only found them yesterday.
I am working directly with QuEST here: https://github.com/ediparquantum/MBQC
I am sure you have seen this but I thought I would paste there documentation page on Decoherence here: https://quest-kit.github.io/QuEST/group__decoherence.html#ga65b4c0944090fae78a37ba3b94811ace
There are several custom structures used in QuEST, I think since they aim to make the library hardware agnostic it has to do a lot of behind the scenes stuff.
Most of the noise seems to be some sort of Kraus operator and some direct density matrix algebra, but I have not dived to deep into that layer of code.
If you are wrapping QuEST binary in Julia, I recommend continuing the some of the previous work bringing QuEST binary into BB first. I had an early attempt, and there is a later one as well