Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,12 @@ build:

clean:
rm -rf ./bin

qasm3:
$(MAKE) -C ./internal $@

qasm3-go:
go build -o ./bin/qasm3 -v ./cmd/qasm3/.

.PHONY: cmd-qasm
gen-qasm: qasm3 qasm3-go
38 changes: 38 additions & 0 deletions cmd/qasm3/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package main

import (
"flag"
"fmt"
"os"
stdpath "path"

"github.com/Quant-Team/qvm/pkg/machine"
)

var (
path string
debug bool
)

func init() {
flag.StringVar(&path, "file", "", "file of qasm")
flag.BoolVar(&debug, "debug", false, "print debug token")
flag.Parse()
}

func main() {

dir := stdpath.Dir(path)
register := machine.NewRegisterQasm(debug, dir)

register.ParseProgram(path)
w := os.Stdout
pp := register.Probability()
fmt.Fprintf(w, "q.Probability: %v\n", pp)
fmt.Fprintln(w, "Measure me ^^")
m := register.Measure()
fmt.Fprintln(w, "q.Measure:")
for _, q := range m {
fmt.Fprintf(w, "%v\n", q)
}
}
42 changes: 42 additions & 0 deletions example/adder.qasm
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* quantum ripple-carry adder
* Cuccaro et al, quant-ph/0410184
*/
OPENQASM 3;
include "stdgates.inc";

gate majority a, b, c {
cx c, b;
cx c, a;
ccx a, b, c;
}

gate unmaj a, b, c {
ccx a, b, c;
cx c, a;
cx a, b;
}

qubit cin[1], a[4], b[4], cout[1];
bit ans[5];
uint[4] a_in = 1; // a = 0001
uint[4] b_in = 15; // b = 1111
// initialize qubits
reset cin;
reset a;
reset b;
reset cout;

// set input states
for i in [0: 3] {
if(bool(ain[i])) x a[i];
if(bool(bin[i])) x b[i];
}
// add a to b, storing result in b
majority cin[0], b[0], a[0];
for i in [0: 2] { majority a[i], b[i + 1], a[i + 1]; }
cx a[3], cout[0];
for i in [2: -1: 0] { unmaj a[i],b[i+1],a[i+1]; }
unmaj cin[0], b[0], a[0];
measure b[0:3] -> ans[0:3];
measure cout[0] -> ans[4];
2 changes: 0 additions & 2 deletions example/config.yaml

This file was deleted.

97 changes: 97 additions & 0 deletions example/stdgates.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// Standard gate library

// phase gate (Z-rotation by lambda)
gate phase(angle[32]:lambda) q { U(0, 0, lambda) q; }
// controlled-NOT
gate cx c, t { CX c, t; }
// idle gate (identity)
gate id a { U(0, 0, 0) a; }
// Pauli gate: bit-flip
gate x a { U(pi, 0, pi) a; }
// Pauli gate: bit and phase flip
gate y a { U(pi, pi / 2, pi / 2) a; }
// Pauli gate: phase flip
gate z a { phase(pi) a; }
// Clifford gate: Hadamard
gate h a { U(pi / 2, 0, pi) a; }
// Clifford gate: sqrt(Z) phase gate
// gate s a { phase(pi / 2) a; }
// Clifford gate: conjugate of sqrt(Z)
// gate sdg a { phase(-pi / 2) a; }
// C3 gate: sqrt(S) phase gate
gate t a { phase(pi/4) a; }
// C3 gate: conjugate of sqrt(S)
// gate tdg a { phase(-pi/4) a; }
// Rotation around X-axis
// gate rx(angle[32]:theta) a { U(theta, -pi / 2, pi / 2) a; }
// rotation around Y-axis
// gate ry(angle[32]:theta) a { U(theta, 0, 0) a; }
// rotation around Z axis
// gate rz(angle[32]:phi) a { phase(phi) a; }
// controlled-Phase
// gate cz a, b { h b; cx a, b; h b; }
// controlled-Y
// gate cy a, b { sdg b; cx a, b; s b; }
// controlled-H
// gate ch a, b {
// h b;
// sdg b;
// cx a, b;
// h b;
// t b;
// cx a, b;
// t b; s a;
// h b;
// s b;
// x b;
// }
// Toffoli
// gate ccx a, b, c
// {
// h c;
// cx b, c;
// tdg c;
// cx a, c;
// t c;
// cx b, c;
// tdg c;
// cx a, c;
// t b; t c; h c;
// cx a, b;
// t a; tdg b;
// cx a, b;
// }
// controlled-swap
// gate cswap a, b, c
// {
// cx c, b;
// ccx a, b, c;
// cx c, b;
// }
// controlled-rz
// gate crz(angle[32]:lambda) a, b
// {
// phase(lambda / 2) b;
// cx a, b;
// phase(-lambda / 2) b;
// cx a, b;
// }
// controlled-phase
// gate cphase(angle[32]:lambda) a, b
// {
// phase(lambda / 2) a;
// cx a, b;
// phase(-lambda / 2) b;
// cx a, b;
// phase(lambda / 2) b;
// }
// controlled-U
// gate cu(angle[32]:theta,angle[32]:phi,angle[32]:lambda) c, t
// {
// implements controlled-U(theta,phi,lambda) with target t and control c
// phase((lambda - phi)/2) t;
// cx c,t;
// U(-theta / 2, 0, -(phi + lambda) / 2) t;
// cx c, t;
// U(theta / 2, phi, 0) t;
// }
31 changes: 31 additions & 0 deletions example/teleport.qasm
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
OPENQASM 3;

include "stdgates.inc";

gate post q { }

qubit qb[3];

bit c0;
bit c1;
bit c2;

reset qb;

h qb[1];
cx qb[1], qb[2];

barrier qb;

cx qb[0], qb[1];
h qb[0];

c0 = measure qb[0];
c1 = measure qb[1];

if(c0==1) { z qb[2]; }
if(c1==1) { x qb[2]; }

post qb[2];

c2 = measure qb[2];
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ module github.com/Quant-Team/qvm
go 1.13

require (
github.com/antlr/antlr4 v0.0.0-20210101015028-491cb7861390
github.com/gorilla/mux v1.7.3
github.com/sah4ez/cqc v0.0.0-20190718151448-d4941c908f85
gorgonia.org/tensor v0.9.1
)
23 changes: 23 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/antlr/antlr4 v0.0.0-20210101015028-491cb7861390 h1:NWBORai/tEFrLdEEgdg7s8JQ9XKRy8B4itZhQC/TlK8=
github.com/antlr/antlr4 v0.0.0-20210101015028-491cb7861390/go.mod h1:T7PbCXFs94rrTttyxjbyT5+/1V8T2TYDejxUfHJjw1Y=
github.com/chewxy/hm v1.0.0 h1:zy/TSv3LV2nD3dwUEQL2VhXeoXbb9QkpmdRAVUFiA6k=
github.com/chewxy/hm v1.0.0/go.mod h1:qg9YI4q6Fkj/whwHR1D+bOGeF7SniIP40VweVepLjg0=
github.com/chewxy/math32 v1.0.0/go.mod h1:Miac6hA1ohdDUTagnvJy/q+aNnEk16qWUdb8ZVhvCN0=
github.com/chewxy/math32 v1.0.4 h1:dfqy3+BbCmet2zCkaDaIQv9fpMxnmYYlAEV2Iqe3DZo=
github.com/chewxy/math32 v1.0.4/go.mod h1:dOB2rcuFrCn6UHrze36WSLVPKtzPMRAQvBvUwkSsLqs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE=
github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/google/flatbuffers v1.11.0 h1:O7CEyB8Cb3/DmtxODGtLHcEvpr81Jm5qLg/hsHnxA2A=
Expand All @@ -19,10 +28,13 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sah4ez/cqc v0.0.0-20190718151448-d4941c908f85 h1:l5nMoz6bstSNKlkbKzlLTBXK3Vnnhvqk8Z5rr073mkw=
github.com/sah4ez/cqc v0.0.0-20190718151448-d4941c908f85/go.mod h1:QmmaMli9W74merDHUSqfLfU+kM9WR2NLPmdjEjD55tQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
Expand All @@ -33,14 +45,24 @@ golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.0.0-20190902003836-43865b531bee h1:4pVWuAEGpaPZ7dPfd6aA8LyDNzMA2RKCxAS/XNCLZUM=
gonum.org/v1/gonum v0.0.0-20190902003836-43865b531bee/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Expand All @@ -50,4 +72,5 @@ gorgonia.org/vecf32 v0.9.0 h1:PClazic1r+JVJ1dEzRXgeiVl4g1/Hf/w+wUSqnco1Xg=
gorgonia.org/vecf32 v0.9.0/go.mod h1:NCc+5D2oxddRL11hd+pCB1PEyXWOyiQxfZ/1wwhOXCA=
gorgonia.org/vecf64 v0.9.0 h1:bgZDP5x0OzBF64PjMGC3EvTdOoMEcmfAh1VCUnZFm1A=
gorgonia.org/vecf64 v0.9.0/go.mod h1:hp7IOWCnRiVQKON73kkC/AUMtEXyf9kGlVrtPQ9ccVA=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
7 changes: 7 additions & 0 deletions internal/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
CLASSPATH=".:/usr/local/lib/antlr-4.9-complete.jar:$${CLASSPATH}"
antlr4=java -jar /usr/local/lib/antlr-4.9-complete.jar
grun=java org.antlr.v4.gui.TestRig

.PHONY: qasm3
qasm3:
$(antlr4) -Dlanguage=Go -package $@ -o $@ ./$@.g4
3 changes: 3 additions & 0 deletions internal/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Grammar OpenQAMS3

Source [there](https://github.com/Qiskit/openqasm/blob/master/source/grammar/qasm3.g4)
Loading