The Quantum Information Science Kit (Qiskit for short) is a software development kit (SDK) for developing quantum computing applications and working with NISQ (Noisy-Intermidate Scale Quantum) computers such as IBM Q.
Qiskit is made up elements that each work together to enable quantum computing. This element is Terra and is the foundation on which the rest of Qiskit is built (see this post for an overview).
We use GitHub issues for tracking requests and bugs. Please use our slack for questions and discussion.
If you'd like to contribute to Qiskit, please take a look at our contribution guidelines.
Links to Sections:
At least Python 3.5 or later is needed for using Qiskit. In addition, Jupyter Notebook is recommended for interacting with the tutorials. For this reason we recommend installing the Anaconda 3 python distribution, as it comes with all of these dependencies pre-installed.
In addition, a basic understanding of quantum information is very helpful when interacting with Qiskit. If you're new to quantum, start with the IBM Q Experience!
We encourage installing Qiskit via the PIP tool (a python package manager):
pip install qiskit
PIP will handle all dependencies automatically for us and you will always install the latest (and well-tested) version.
PIP package comes with prebuilt binaries for these platforms:
- Linux x86_64
- Darwin
- Win64
If your platform is not in the list, PIP will try to build from the sources at installation time. It will require to have CMake 3.5 or higher pre-installed and at least one of the build environments supported by CMake.
If during the installation PIP doesn't succeed to build, don't worry, you will have Qiskit installed at the end but you probably couldn't take advantage of some of the high-performance components. Anyway, we always provide a python, not-so-fast alternative as a fallback.
We recommend using python virtual environments to improve your experience. Refer to our Environment Setup documentation for more information.
Now that Qiskit is installed, it's time to begin working with Terra.
We are ready to try out a quantum circuit example, which is simulated locally using the Qiskt Aer element.
This is a simple example that makes an entangled state.
# Import the Qiskit SDK
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute, Aer
# Create a Quantum Register with 2 qubits.
q = QuantumRegister(2)
# Create a Classical Register with 2 bits.
c = ClassicalRegister(2)
# Create a Quantum Circuit
qc = QuantumCircuit(q, c)
# Add a H gate on qubit 0, putting this qubit in superposition.
qc.h(q[0])
# Add a CX (CNOT) gate on control qubit 0 and target qubit 1, putting
# the qubits in a Bell state.
qc.cx(q[0], q[1])
# Add a Measure gate to see the state.
qc.measure(q, c)
# See a list of available local simulators
print("Aer backends: ", Aer.backends())
# Compile and run the Quantum circuit on a simulator backend
backend_sim = Aer.get_backend('qasm_simulator')
job_sim = execute(qc, backend_sim)
result_sim = job_sim.result()
# Show the results
print("simulation: ", result_sim )
print(result_sim.get_counts(qc))
In this case, the output will be:
COMPLETED
{'counts': {'00': 512, '11': 512}}
This script is available here, where we also show how to run the same program on a real quantum computer via IBMQ.
You can also use Qiskit to execute your code on a real quantum chip. In order to do so, you need to configure Qiskit for using the credentials in your IBM Q account:
-
Create an IBM Q > Account if you haven't already done so.
-
Get an API token from the IBM Q website under My Account > Advanced > API Token. This API token allows you to execute your programs with the IBM Q backends.
-
We are now going to add the necessary credentials to Qiskit. Take your token from step 2, here called
MY_API_TOKEN
, and pass it to theIBMQ.save_account()
function:from qiskit import IBMQ IBMQ.save_account('MY_API_TOKEN')
-
If you have access to the IBM Q Network features, you also need to pass the url listed on your IBM Q account page to
save_account
.
After calling IBMQ.save_account()
, your credentials will be stored on disk.
Once they are stored, at any point in the future you can load and use them
in your program simply via:
from qiskit import IBMQ
IBMQ.load_accounts()
For those who do not want to save there credentials to disk please use
from qiskit import IBMQ
IBMQ.enable_account('MY_API_TOKEN')
and the token will only be active for the session. For examples using Terra with real devices we have provided a set of examples in examples/python and we suggest starting with using_qiskit_terra_level_0.py and working up in the levels.
For more details on installing Qiskit and for alternative methods for passing
the IBM Q credentials, such as using environment variables, sending them
explicitly and support for the Qconfig.py
method available in previous
versions, please check
our Qiskit documentation.
Now you're set up and ready to check out some of the other examples from our Tutorial repository. Start with the index tutorial and then go to the ‘Getting Started’ example. If you already have Jupyter Notebooks installed, you can copy and modify the notebooks to create your own experiments.
To install the tutorials as part of the Qiskit, see the following installation details. Complete Terra documentation can be found in the doc directory and in the official Qiskit site.
For more information on how to use Qiskit, tutorial examples, and other helpful links, take a look at these resources:
- Qiskit Aqua, is the element where algorithms for quantum computing are built
- Tutorials, for example notebooks, start with the index and ‘Getting Started’ Jupyter notebook
- OpenQASM, for additional information and examples of QASM code
- IBM Q Experience, contains a GUI editor for interacting with real and simulated quantum computers
- Korean Translation - basic guide line written in Korean.
- Chinese Translation - basic guide line written in Chinese.
Qiskit was originally authored by Luciano Bello, Jim Challenger, Andrew Cross, Ismael Faro, Jay Gambetta, Juan Gomez, Ali Javadi-Abhari, Paco Martin, Diego Moreda, Jesus Perez, Erick Winston and Chris Wood.
And continues to grow with the help and work of many people who contribute to the project at different levels.