UNPKG

ibm-quantum-js

Version:

A node.js module to interact with the IBM Quantum API.

180 lines (108 loc) 4.3 kB
# IBM Quantum JS <img alt="David" src="https://img.shields.io/david/rod4n4m1/ibm-quantum-js"> <img alt="GitHub code size in bytes" src="https://img.shields.io/github/languages/code-size/rod4n4m1/ibm-quantum-js"> <img alt="npm" src="https://img.shields.io/npm/dm/ibm-quantum-js"> <img alt="NPM" src="https://img.shields.io/npm/l/ibm-quantum-js"> <img alt="GitHub contributors" src="https://img.shields.io/github/contributors/rod4n4m1/ibm-quantum-js"> This module provides a set of functions to help **JavaScript** Developers working on IBM Quantum Experience projects to authenticate and access API endpoints using Javascript promises. ## Requirements (MacOS/Windows) * Node v12.x * npm v6.x * Standard account on IBM Quantum Experience portal **Note:** Depending on your Windows setup [windows-build-tools](https://www.npmjs.com/package/windows-build-tools) may need to be installed first. Also, for MacOS users, you should have **xcode-select** or entire Xcode App installed. ### Install ```shell $ npm install ibm-quantum-js ``` ### Uninstall ```shell $ npm uninstall ibm-quantum-js ``` ### Change Log * `0.1.7` * Fixed security vulnerabilities * `0.1.6` * Fixed security vulnerability on `ws` * `0.1.5` * Fixed security vulnerability on `host-git-info`, `underscode`, and `lodash` * `0.1.4` * Fixed security vulnerability on `lodash` dependency * `0.1.3` * First working module ### Usage Perform a login on IBM Q Experience API with API_TOKEN and get a valid auth token: ```javascript const quantum = require('ibm-quantum-js'); const token = await quantum.loginWithToken(API_TOKEN); ``` **Note:** API_TOKEN is created after you validate your IBM Q Experience user ID. You can find it under "My Account" in the IBM Q Experience web [site](https://quantum-computing.ibm.com/account). Define a function to return user information from IBM Q: ```javascript const quantum = require('ibm-quantum-js'); const userInformation = function(token) { return quantum.getUserInfo(token).then(function(result){ return result; }).catch(function(error){ return error; }); }; ``` Get IBM Q backends (processors): ```javascript const backends = await quantum.getIBMBackends(token); ``` Get IBM Q backend queue status: ```javascript const processor = backends[0].name || 'ibmq_qasm_simulator'; const queueStatus = await quantum.getIBMBackendQueue(processor); ``` Get user experiments from IBM Q: ```javascript const userExperiments = await quantum.getUserExperiments(token); ``` List user jobs in the IBM Q: ```javascript const userExperiments = await quantum.listUserJobs(token); ``` Cancel an user job in the IBM Q: ```javascript const userExperiments = await quantum.cancelUserJob(token, jobId); ``` Execute a new user job in the IBM Q: ```javascript const token = await quantum.loginWithToken(API_TOKEN); const userExperiments = await quantum.postUserJob(token, jobInfo, jobQObject); ``` **Note:** `jobQObject` is JSON object resulted from a compiled QASM (Quantum Assembly) code. `jobInfo` indicates which backend/processor to use.</p> ```javascript const JOB_INFO = { allowObjectStorage: true, backend: { name: 'ibmq_qasm_simulator' } }; ``` Show the results of a COMPLETED user job in the IBM Q: ```javascript const token = await quantum.loginWithToken(API_TOKEN); const userExperiments = await quantum.showUserJobResults(token, jobId); ``` ### List of functions available * `loginWithToken(API_TOKEN)` * `getIBMBackends(token)` * `getIBMBackendQueue(processor)` * `getUserInfo(token)` * `getUserExperiments(token)` * `cancelUserJob(token, jobId)` * `listUserJobs(token)` * `postUserJob(token, jobInfo, jobQObject)` * `showUserJobResults(token, jobId)` ### QObject versus QASM * Unfortunately there's no available API to compile a QASM into a QOBJ, however its JSON schema is published [here](https://github.com/Qiskit/qiskit-terra/blob/master/qiskit/schemas/qobj_schema.json). ### Contributing If you want to contribute to the module and make it better, your help is very welcome. You can do so submitting a **Pull Request**. ### Authors Written by Rod Anami <rod.anami@kyndryl.com>, May 2020. Contributor(s): Paco Martin <paco@ibm.com> ### License This project is licensed under the IBM Public License.