A small interpreter for the Measurement Calculus (Danos et al. 2009), written in high-performance C.
The master branch version uses libquantum to perform the unitary and measurement operations. The openmp branch does not use libquantum anymore and uses OpenMP to parallelize the quantum operations considerably.
> echo '((E 1 2) (M 1 0) (X 2 (q 1)))' | ./qvmI have read: ((E 1 2) (M 1 0) (X 2 (q 1))) Resulting quantum memory is: qmem has 1 tangles: {[2] , { 1.000000 +0.000000i|0> (1.000000e+00) (|0>) }} signal map: { 1 -> 0, } > ./qvm w3.mc # non-trivial MC program example, creates the W3 entangled statedI have read: ((E 1 2) (E 2 3) (E 3 4) (E 4 5) (E 5 6) (E 6 7) (E 7 8) (E 8 9) (E 9 10) (E 11 12) (E 12 13) (E 13 14) (E 14 15) (E 15 16) (E 16 17) (E 17 18) (E 9 18) (E 8 13) (M 1 0) (M 2 PI/2) (M 3 -1.2309594173407746821 (+ (Q 1) (Q 2))) (M 4 PI/2) (M 5 0) (M 7 0) (M 8 0) (M 9 0) (M 11 -PI/4) (M 12 PI/2) (M 13 0) (M 14 PI/2) (M 15 PI/4 (Q 14)) (M 16 PI/2) (M 17 0) (Z 6 (+ 1 (Q 2) (Q 3) (Q 4))) (X 6 (+ (Q 1) (Q 3) (Q 5))) (Z 10 (+ 1 (Q 8) (Q 11) (Q 12))) (X 10 (+ (Q 9) (Q 11) (Q 13) (Q 15) (Q 17))) (Z 18 (+ 1 (Q 8) (Q 14) (Q 15) (Q 16))) (X 18 (+ 1 (Q 1) (Q 3) (Q 5) (Q 7) (Q 11) (Q 13) (Q 15) (Q 17)))) Resulting quantum memory is: qmem has 1 tangles: {[6, 10, 18] , { 0.569036 +0.097631i|4> (3.333334e-01) (|100>) 0.569036 +0.097631i|2> (3.333334e-01) (|010>) 0.569036 +0.097631i|1> (3.333334e-01) (|001>) }} signal map: { 1 -> 0, 2 -> 1, 3 -> 0, 4 -> 0, 5 -> 0, 7 -> 0, 8 -> 0, 9 -> 1, 11 -> 0, 12 -> 1, 13 -> 1, 14 -> 1, 15 -> 0, 16 -> 0, 17 -> 1, }
https://github.com/yvdriess/qvm