Enviando trabalhos para dispositivos IBM sem Python

9

O Qiskit pode ser usado para enviar tarefas para dispositivos IBM usando Python (ou Swift e JavaScript). Mas e se eu quiser usar um idioma diferente?

Por exemplo, suponha que eu tenha um circuito específico que eu queira executar. Suponha que eu já o criei no Python Qiskit e gere a string qasm correspondente ou (idealmente) o objeto qobj completo.

Quero poder executar isso e obter os resultados de volta em qualquer idioma de minha escolha.

Tanto quanto eu entendo, esta é uma maneira de fazer isso via HTML. As informações geradas no Qiskit podem ser transformadas em JSON e enviadas pela Web. É assim que o ProjectQ envia tarefas para dispositivos IBM (embora eles façam isso em Python).

Como a engenharia reversa do código do ProjectQ é um pouco assustadora, eu gostaria de um guia simples para usar esse recurso. Especialmente em uma linguagem que não seja Python.

James Wootton
fonte
1
Costumo responder minhas próprias perguntas qiskit, mas desta vez não tenho respostas fáceis!
James Wootton

Respostas:

7

Vou tentar responder dessa maneira, mas eu mesmo não tentei. Apenas faça a engenharia reversa lendo o código com algumas noções de solicitação de HTML.

Vamos supor que, no idioma de sua escolha, você tenha a capacidade de enviar solicitações HTTP via métodos GET e POST. O api_urlé https://quantumexperience.ng.bluemix.net/api/ .

Para enviar um trabalho, você enviará uma solicitação POST com algumas informações (como você preencheu um formulário na Web e deseja conversar com um servidor). É como endereçar um servidor com um dicionário de informações. Será no link https://quantumexperience.ng.bluemix.net/api/Jobs com o cabeçalho de solicitação POST definido como application/json(mostrando como você envia as informações). As informações aqui são enviadas em uma formatação JSON no corpo da solicitação:

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

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

}

Acho que podemos adicionar parâmetros maxCreditse outros parâmetros para envio. dispositivo refere-se ao nome do backend se eu seguir os seus comentários: simulator, ibmqx4ou ibmqx5. Você recebe uma resposta novamente como JSON novamente com um argumento de id referente a execution_id.

Depois de enviado, seu trabalho estará na fila. Você precisará solicitar por GET esse ID do trabalho para obter a resposta do back-end. O URL GET é: https://quantumexperience.ng.bluemix.net/api/Jobs/execution_id . Você receberá outra resposta JSON (coloque-a em uma r_jsonvariável). Se ele tiver o qasmsitem, veja se ele r_json['qasms'][0]possui um resultitem e você obterá o resultado do envio.

Isso deve resumir o procedimento.

cnada
fonte