diff --git a/.gitignore b/.gitignore index 6b2fa42ab..8760b57ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,4 @@ -Qconfig.py -Qconfig_IBMQ_network.py -Qconfig_IBMQ_experience.py - __pycache__/ .cache/ @@ -13,3 +9,6 @@ community/*/.ipynb_checkpoints/* community/*/*/.ipynb_checkpoints/* community/*/*/*/.ipynb_checkpoints/* +Qconfig.py +qiskit/basics/Qconfig_IBMQ_experience.py +qiskit/basics/Qconfig_IBMQ_network.py diff --git a/qiskit/basics/getting_started.ipynb b/qiskit/basics/getting_started.ipynb index 0dc1402bc..4d713cefd 100644 --- a/qiskit/basics/getting_started.ipynb +++ b/qiskit/basics/getting_started.ipynb @@ -16,8 +16,11 @@ "The latest version of this notebook is available on https://github.com/qiskit/qiskit-tutorial.\n", "\n", "***\n", - "### Contributors\n", - "Jay Gambetta, Ismael Faro, Andrew Cross, Ali Javadi" + "#### Contributors\n", + "Jay Gambetta[1], Ismael Faro[1], Andrew Cross[1], Ali Javadi[1]\n", + "\n", + "#### Affiliation\n", + "* [1] IBM Q* " ] }, { @@ -26,63 +29,42 @@ "source": [ "## Qiskit\n", "\n", - "This tutorial aims to explain how to use Qiskit Terra. We assume you have installed Qiskit if not please look at [qiskit.org](http://www.qiskit.org) or the install [documentation](https://github.com/qiskit/qiskit-tutorial/blob/master/INSTALL.md). \n", - "\n", - "Qiskit is a software development kit that you can use to create your quantum computing programs based on circuits and execute them on several backends (real quantum processors online, simulators online, and simulators on local). For the online backends we used [IBM Q](http://quantumexperience.ng.bluemix.net/).\n", + "This tutorial aims to explain how to use Qiskit. We assume you have installed Qiskit if not please look at [qiskit.org](http://www.qiskit.org) or the install [documentation](https://github.com/qiskit/qiskit-tutorial/blob/master/INSTALL.md). \n", "\n", - "In addition to this tutorial, we have other tutorials that introduce you to more complex concepts directly related to quantum computing.\n", + "Qiskit is a software development kit that you can use to create your quantum computing programs based on circuits and execute them on several backends (real quantum processors online, simulators online, and simulators on your local machine). For the online backends we use [IBM Q](http://quantumexperience.ng.bluemix.net/) real quantum computers.\n", "\n", - "More examples:\n", - "- Familiarize yourself with the important concepts of [superposition and entanglement](../terra_advanced/superposition_and_entanglement.ipynb)." + "First let's start by importing some basic features of Qiskit." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:16.313210Z", "start_time": "2018-09-29T00:04:14.460647Z" - } + }, + "collapsed": true }, "outputs": [], "source": [ "from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister\n", - "from qiskit import execute\n", - "from qiskit.tools.visualization import circuit_drawer\n", - "from qiskit.backends.ibmq import least_busy\n", - "from qiskit.wrapper.jupyter import *" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "ExecuteTime": { - "end_time": "2018-09-29T00:04:18.108102Z", - "start_time": "2018-09-29T00:04:18.104498Z" - } - }, - "outputs": [], - "source": [ - "from qiskit import Aer" + "from qiskit import execute" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Basic Concept\n", - "\n", - "The basic concept of our Qiskit Terra is an array of quantum circuits. The workflow consists of three stages: [Build](#sectionB), [Compile](#sectionC), and [Run](#sectionR). Build allows you to make different quantum circuits that represent the problem you are solving; Compile allows you to rewrite them to run on different backends (simulators/real chips of different [quantum volumes](http://ibm.biz/qiskit-quantum-volume), sizes, fidelity, etc); and Run launches the jobs.  After the jobs have been run, the data is collected. There are methods for putting this data together, depending on the program. This either gives you the answer you wanted, or allows you to make a better program for the next instance.\n", - "\n", - "### Building your circuit: Create it " + "The basic concept of Qiskit is an array of quantum circuits. The workflow consists of two stages: [Build](#sectionB), and [Execute](#sectionE). Build allows you to make different quantum circuits that represent the problem you are solving; Execute allows you to run them on different backends.  After the jobs have been run, the data is collected. There are methods for putting this data together, depending on the program. This either gives you the answer you wanted, or allows you to make a better program for the next instance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "## Building your circuit \n", + "\n", "The basic elements needed for your first program are the QuantumCircuit, QuantumRegister, and ClassicalRegister." ] }, @@ -97,13 +79,13 @@ }, "outputs": [], "source": [ - "# Create a Quantum Register called \"q\" with 3 qubits\n", + "# Create a Quantum Register with 3 qubits\n", "qr = QuantumRegister(3)\n", "\n", - "# Create a Classical Register called \"c\" with 3 bits\n", + "# Create a Classical Register with 3 bits\n", "cr = ClassicalRegister(3)\n", "\n", - "# Create a Quantum Circuit called involving \"qr\" and \"cr\"\n", + "# Create a Quantum Circuit acting on the qr and cr register\n", "circuit = QuantumCircuit(qr, cr)" ] }, @@ -127,7 +109,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 4, @@ -142,11 +124,6 @@ "# Not gate on qubit 1\n", "circuit.x(qr[1])\n", "\n", - "# Barrier to seperator the input from the circuit\n", - "circuit.barrier(qr[0])\n", - "circuit.barrier(qr[1])\n", - "circuit.barrier(qr[2])\n", - "\n", "# Toffoli gate from qubit 0,1 to qubit 2\n", "circuit.ccx(qr[0], qr[1], qr[2])\n", "\n", @@ -161,63 +138,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Extract OpenQASM\n", - "\n", - "You can obtain a OpenQASM representation of your code." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "ExecuteTime": { - "end_time": "2018-09-29T00:04:23.195643Z", - "start_time": "2018-09-29T00:04:23.187945Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "OPENQASM 2.0;\n", - "include \"qelib1.inc\";\n", - "qreg q0[3];\n", - "creg c0[3];\n", - "x q0[0];\n", - "x q0[1];\n", - "barrier q0[0];\n", - "barrier q0[1];\n", - "barrier q0[2];\n", - "ccx q0[0],q0[1],q0[2];\n", - "cx q0[0],q0[1];\n", - "measure q0[0] -> c0[0];\n", - "measure q0[1] -> c0[1];\n", - "measure q0[2] -> c0[2];\n", - "\n" - ] - } - ], - "source": [ - "# QASM from a program\n", - "\n", - "QASM_source = circuit.qasm()\n", - "\n", - "print(QASM_source)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Visualize Circuit\n", + "## Visualize Circuit\n", "\n", "You can visualize your circuit using Qiskit's `circuit_drawer`, which plots the unrolled circuit in the specified basis." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:26.904758Z", @@ -226,25 +154,21 @@ "scrolled": true }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING Unable to complile latex. The output from the pdflatex command can be found in latex_error.log\n" - ] - }, { "data": { - "image/png": "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\n", + "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, + "execution_count": 5, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ + "from qiskit.tools.visualization import circuit_drawer\n", + "\n", "circuit_drawer(circuit)" ] }, @@ -252,27 +176,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Execute " + "## Execute " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "First we need to choose the backend. Lets start with the simulator provided by the Aer element " + "First we need to choose the backend. Lets start with the simulator provided by the Qiskit Aer element " ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:28.595093Z", "start_time": "2018-09-29T00:04:28.589162Z" - } + }, + "collapsed": true }, "outputs": [], "source": [ + "from qiskit import Aer\n", "backend = Aer.get_backend('qasm_simulator')" ] }, @@ -285,12 +211,13 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:30.559484Z", "start_time": "2018-09-29T00:04:30.513862Z" - } + }, + "collapsed": true }, "outputs": [], "source": [ @@ -310,7 +237,7 @@ "\n", "(**Tip**: You can obtain the above parameters in Jupyter. Simply place the text cursor on a function and press Shift+Tab)\n", "\n", - "When you run a program a job object is made\n", + "When you run a program a job object is made that has the following two useful methods\n", "\n", "```\n", "job.status()\n", @@ -325,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:32.831346Z", @@ -336,10 +263,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -350,12 +277,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:33.459197Z", "start_time": "2018-09-29T00:04:33.452591Z" - } + }, + "collapsed": true }, "outputs": [], "source": [ @@ -366,15 +294,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Result\n", - "You can access the result via the function \n", + "## Result\n", + "Once you have a results object you can access the counts via the function \n", + "\n", + "```get_counts(circuit)```. \n", "\n", - "```get_counts(circuit)```. " + "This gives you the binary outcomes of the circuit you have run." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:35.950706Z", @@ -388,7 +318,7 @@ "{'101': 1024}" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -401,19 +331,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Execute on a Real Device\n", + "## Execute on a Real Device\n", "\n", - "To run it on a real device we need to register the IBMQ backends. For the public devices this can be done by loading the IBMQ provider class:\n" + "This is the important part of Qiskit. You can use it to run your circuits on real quantum computers using the IBMQ provider. They are small and noisy but are advancing at a fast pace. In the next tutorial we will go into more details about the provider but for now we will outline the basic functions. " ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:37.950277Z", "start_time": "2018-09-29T00:04:37.947819Z" - } + }, + "collapsed": true }, "outputs": [], "source": [ @@ -443,7 +374,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:41.166242Z", @@ -464,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:50.410670Z", @@ -476,19 +407,40 @@ "name": "stdout", "output_type": "stream", "text": [ - "the best backend is ibmq_16_melbourne\n" + "the best backend is ibmq_20_tokyo\n" ] } ], "source": [ - "large_enough_devices = IBMQ.backends(filters=lambda x: x.configuration()['n_qubits'] > 3 and not x.configuration()['simulator'])\n", + "from qiskit.backends.ibmq import least_busy\n", + "\n", + "large_enough_devices = IBMQ.backends(filters=lambda x: x.configuration()['n_qubits'] > 3 and\n", + " not x.configuration()['simulator'])\n", "backend = least_busy(large_enough_devices)\n", "print(\"the best backend is \" + backend.name())" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To improve the user experience, Qiskit provides some simple Jupyter notebook functions. These can be activated via:" + ] + }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from qiskit.wrapper.jupyter import *" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:04:52.336262Z", @@ -500,12 +452,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "02a0cc2bf0ef479289cab09eedc2463b", + "model_id": "9c33880198024c4694f0c9b096c01fcd", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "VBox(children=(HTML(value=\"

Job Status : job is being initialized

\"),))" + "A Jupyter Widget" ] }, "metadata": {}, @@ -515,19 +467,20 @@ "source": [ "%%qiskit_job_status\n", "shots = 1024 # Number of shots to run the program (experiment); maximum is 8192 shots.\n", - "max_credits = 3 # Maximum number of credits to spend on executions. \n", + "max_credits = 3 # Maximum number of credits to spend on executions. \n", "\n", "job_exp = execute(circuit, backend=backend, shots=shots, max_credits=max_credits)" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:05:42.718830Z", "start_time": "2018-09-29T00:05:42.296069Z" - } + }, + "collapsed": true }, "outputs": [], "source": [ @@ -538,12 +491,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Like before, the counts from the execution can be obtained using ```get_counts('name')``` " + "Like before, the counts from the execution can be obtained using ```get_counts(circuit)``` " ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:05:44.604801Z", @@ -554,17 +507,17 @@ { "data": { "text/plain": [ - "{'000': 62,\n", - " '001': 161,\n", - " '010': 121,\n", - " '011': 47,\n", - " '100': 77,\n", - " '101': 430,\n", - " '110': 49,\n", - " '111': 77}" + "{'000': 10,\n", + " '001': 121,\n", + " '010': 12,\n", + " '011': 56,\n", + " '100': 56,\n", + " '101': 530,\n", + " '110': 63,\n", + " '111': 176}" ] }, - "execution_count": 17, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -577,12 +530,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The job ID can be obtained using the following which you can use later to get the job if your experiment takes longer to run then you have time to wait around." + "## Retrieving a job\n", + "\n", + "If your experiment takes longer to run then you have time to wait around, or if you simply want to retrieve old jobs back, the IBMQ backends allow you to do that.\n", + "First you would need to save your job's ID:" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2018-09-29T00:05:57.842131Z", @@ -594,7 +550,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "JOB ID: 5bb8039cdc2ba1005273a488\n" + "JOB ID: 5bbab4081e05e30056b929e3\n" ] } ], @@ -608,13 +564,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The job can be gotten from the backend using retrieve_job" + "Given a job ID, that job object can be later reconstructed from the backend using retrieve_job:" ] }, { "cell_type": "code", - "execution_count": 19, - "metadata": {}, + "execution_count": 21, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "job_get=backend.retrieve_job(jobID)" @@ -629,23 +587,23 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'000': 62,\n", - " '001': 161,\n", - " '010': 121,\n", - " '011': 47,\n", - " '100': 77,\n", - " '101': 430,\n", - " '110': 49,\n", - " '111': 77}" + "{'000': 10,\n", + " '001': 121,\n", + " '010': 12,\n", + " '011': 56,\n", + " '100': 56,\n", + " '101': 530,\n", + " '110': 63,\n", + " '111': 176}" ] }, - "execution_count": 20, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -653,13 +611,6 @@ "source": [ "job_get.result().get_counts(circuit)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -679,7 +630,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.6.3" } }, "nbformat": 4,