Enviar trabajos a dispositivos IBM sin Python

9

Qiskit se puede utilizar para enviar trabajos a dispositivos IBM utilizando Python (o Swift y JavaScript). Pero, ¿qué pasa si quiero usar un idioma diferente?

Por ejemplo, supongamos que tengo un circuito específico que quiero ejecutar. Suponga que ya lo creé en Python Qiskit y generé la cadena qasm correspondiente o (idealmente) el objeto qobj completo.

Quiero poder ejecutar esto y recuperar los resultados en cualquier idioma de mi elección.

Por lo que yo entiendo, esta es una forma de hacerlo a través de HTML. La información generada en Qiskit puede convertirse en un JSON y luego enviarse a través de la web. Esta es la forma en que ProjectQ envía trabajos a dispositivos IBM (aunque lo hacen en Python).

Dado que la ingeniería inversa del código ProjectQ es un poco desalentador, me gustaría una guía simple para usar esta función. Especialmente en un lenguaje que no sea Python.

James Wootton
fuente
1
A menudo respondo mis propias preguntas sobre qiskit, ¡pero esta vez no tengo respuestas fáciles!
James Wootton el

Respuestas:

7

Intentaré responder de esta manera, pero no lo he intentado yo mismo. Simplemente realice ingeniería inversa leyendo el código con algunas nociones de solicitud HTML.

Supongamos que en el idioma que elija, tiene la capacidad de enviar solicitudes HTTP a través de los métodos GET y POST. El api_urles https://quantumexperience.ng.bluemix.net/api/ .

Para enviar un trabajo, enviará una solicitud POST con cierta información (como si hubiera llenado un formulario en la web y desea hablar con un servidor). Es como dirigirse a un servidor con un diccionario de información. Será en el enlace https://quantumexperience.ng.bluemix.net/api/Jobs con el encabezado de solicitud POST establecido como application/json(que muestra cómo enviar la información). La información aquí se presenta en formato JSON en el cuerpo de la solicitud:

{
   "data": QASM as string or JSON string,

   "params": {"access_token": access_token,
                              "deviceRunType": device,
                              "fromCache": "false",
                              "shots": shots}

}

Supongo que podemos agregar parámetros maxCreditsy otros parámetros para su envío. dispositivo se refiere al nombre del back-end si sigo sus comentarios: simulator, ibmqx4, o ibmqx5. Obtiene una respuesta como JSON nuevamente con un argumento de id que se refiere a execution_id.

Una vez que se envíe, su trabajo estará en la cola. Deberá solicitar GET este ID de trabajo para obtener la respuesta del backend. La URL GET es: https://quantumexperience.ng.bluemix.net/api/Jobs/execution_id . Obtendrá otra respuesta JSON (póngala en una r_jsonvariable). Si tiene el qasmsartículo, vea si r_json['qasms'][0]tiene un resultartículo y obtendrá el resultado del envío.

Esto debería resumir el procedimiento.

canadá
fuente