A REST service for running QMASM using HTTP POST.
871
This repo hosts a dockerised version of the excellent QMASM Quantum Macro Assembler from Scott Pakin.
Given that docker is installed and that you are at the root of the cloned repo:
# build the image
docker build -t qmasm-rest --rm .
# run the image, listening to port 80 on the host
docker run -d -p 80:80 --name qmasm-rest qmasm-rest
Or using the scripts:
./build_image.sh
./run_image.sh
The server has a unique endpoint. It accepts POST requests with a .qmasm file content in the body. By default, the server will run qmasm with the following arguments:
qmasm --format="qbsolv" --values="ints" "<QMASM BODY>"
To pass other arguments to QMASM, simply specify them as query parameters.
Important:
--run) should have a trailing = (for example run=);# run "qmasm --help"
curl "http://localhost?help"
# run "qmasm -q --run somefile.qmasm"
curl -H 'Content-Type: text/plain' \
--data-binary "@somefile.qmasm" \
"http://localhost/?run=&q=" > somefile.qmasm.out
# run "qmasm --format=qubist --run somefile.qmasm"
curl -H 'Content-Type: text/plain' \
--data-binary "@somefile.qmasm" \
"http://localhost/?format=qubist&run=" > somefile.qmasm.out
# translate the qmasm file into a qbsolv (.qubo) format "qmasm --format=qbsolv"
curl -H 'Content-Type: text/plain' \
--data-binary "@somefile.qmasm" \
"http://localhost/?format=qbsolv" > somefile.qubo
Here, we use the requests library to make HTTP calls.
def call_qmasm(qmasm_input: str, host='http://localhost', **params) -> str:
"""
run qmasm in "qbsolv" mode.
:param qmasm_input: the input for qmasm
:param params: options to pass to qmasm
:return: the output of qmasm
"""
default_params = dict(run='')
default_params.update(params)
resp = requests.post(host, qmasm_input, params=default_params)
output = resp.text
if resp.status_code != 200:
raise Exception("qmasm failed: %s" % output)
return output
with open('somefile.qmasm') as f:
qmasm_input = f.read()
# run qmasm --format=qbsolv --values=int --run "somefile.qmasm"
output = call_qmasm(qmasm_input)
# run qmasm --format=qubist --values=int -q --run "somefile.qmasm"
# note the q='', this is how you encode options with no values
output = call_qmasm(qmasm_input, format=qubist, q='')
Content type
Image
Digest
Size
458.8 MB
Last updated
almost 8 years ago
docker pull derlin/qmasm-rest