QuantumClifford.jl
QuantumClifford.jl copied to clipboard
When passing a circuit to `mctrajectory`, `pftrajectory` and others, verify that it does not perform any unsafe operations
using QuantumClifford
using QuantumClifford.ECC
circ = [
sHadamard(1),
sCNOT(1, 2),
sMZ(1),
sMZ(2),
]
frames = PauliFrame(10, 2, 2)
pftrajectories(frames, circ)
sMZ(1)
and sMZ(2)
will cause an out-of-bounds behavior that could crash the program without throwing an error. This is because they are equivalent to sMZ(1, 0)
and sMZ(2, 0)
and will try to access index 0
. I recommend changing the default parameter of bit
to 1
instead of 0
. Ideally, it would be better to check the indices in pftrajectories
for the circuit we are going to simulate before calling apply!
.
@ChenZhao44 , this is now fixed -- if the index is 0, it is simply not saved anywhere. The default of 1 would also be unsafe, because there is not guarantee that a frame would have allocated even one bit of space for classical memory. I will leave this open as a general issue for "preprocess circuits to verify they do not have unsafe or undefined operations". It should probably be a part of the compactifation pass.