Skip to content

Commit

Permalink
Merge qiskit-runtime into qiskit-ibm-runtime (#91)
Browse files Browse the repository at this point in the history
* Initial commit

* [WIP] Add RuntimeResult class

* change headers

* cleanup

* add setup file

* Add a quasidistribution test

* style fixes

* Start the documentation

* Add classes

* Add result to docs

* fix header

* tweak doc string

* add intro and upload tutorials

* remove bad import

* update some texts

* move things into circuit-runner folder

* rename to RunnerResult

* move to runner

* update to runner dir

* rename apidoc entry

* fix directories

* Move to automodapi

* remove unused docs

* fix what I thought I fixed earlier

* update docs requirements

* add to/from json

* Fix docs doing inherited members

* rename intro

* fix json

* add circuit runner tutorial

* update README

* version should be string

* add shields

* fix json

* fix plot

* add 120x wording

* Add CI configuration (#8)

* Add CI configuration

This commit adds a basic CI configuration for the qiskit-runtime
repository. It adds 3 jobs, a unittest job that runs the repository's
sole unit test on all supported platforms, a docs build job that
verifies the docs build, and a doc publishing job that will build the
documentation on tags and upload the built html to
https://qiskit.org/documentation/partners/qiskit_runtime . We should add
some lint/style jobs but that can be done in a follow up commit because
it's likely that we'll need to update the code to conform to whichever
tooling we decide on.

* Add missing docs artifact upload to docs PR/Push ci job

* Fix typo in deploy_documentation.sh

The output path for the built documentation is `docs/_build/html`
not `docs/build/html`.

* Add ``VQEProgram``  (#9)

* VQEProgram + lightweight tests

* fix aux_values

* add tutorial

* small fixes

* fix allowed settings for qn-spsa
* fix missing optimal_value in result dict
* remove print of job id

* add tutorial

* remove old tutorial

* rm tutorial from this PR

* fix leftover todos

* rename program_name to program_id
* callback stddev has been fixed
* initial_point can be none
* also cast aux_ops to PauliSumOp

* Adding QKA files (#12)

* Create kernel_matrix.py

* Create featuremaps.py

* Create temp.py

* Add files via upload

* Delete temp.py

* Add a tutorial for the VQE script and ``VQEProgram`` (#11)

* add tutorial

* update the VQE tutorital texts

replace runtime for Qiskit Runtime. and add some context to differientate Qiskit Runtime programs, and Qiskit Runtime service

* rerun notebook once to get final cell executed

* add link to qiskit nature tutorials

Co-authored-by: Ismael Faro <Ismael.Faro1@ibm.com>

* Fix circuit runner parameters (#14)

* fix runner parameters

* remove update_program

* add job retrieval to intro

* Move circuit runner tests (#15)

* remove program update from title (#16)

* Add docs logistics (#17)

* Add docs logistics

* add nbsphinx

* Add some frontmatter (#18)

* Add docs meat (#19)

* Add some frontmatter

* updates

* tweaks

* add links (#20)

* Start a list of current runtime limitations (#21)

* Add runtime limitations

* add note about missing upload support

* Tweak the nav bar to simplify things (#22)

* Tweak the nav bar to simplify things

* slide in a text fix

* fix a lint error

* Fix README text and link (#24)

* fix install in README

* fix tutorial link

* Add init file (#25)

* Create __init__.py

* Update featuremaps.py

* Update kernel_matrix.py

* add API direct tutorial (#30)

* runtime to program inputs (#28)

* update the installation process (#33)

* update the installation process

* update qiskit install to force update

* Add lint configuration and run in CI (#27)

This commit adds a lint configuration based on the current pattern used
in upstream Qiskit. Leverage black for auto code formatting and then
pylint for a deeper analysis and catch common issues. The code style is
updated to then conform to these guidelines.

Fixes #23

* Remove API docs (#34)

* remove api docs

* remove unused test

* Update installation wording in README (#35)

* update installation wording

* add additional requirements

* a word

* remove unused badges

* move runnerresult import (#36)

* Move api direct tutorial from 05 to 01 (#32)

* move api direct tutorial

* number uploading

* renumber

* Update intro wording (#39)

* fix wording and directory

* update intro tutorial

* update qiskit requirements (#41)

* Add circuit runner overview (#40)

* Add circuit runner overview

* remove VQE listed twice

* specify it is an overview section

* move circuit runner nb to tutorials

* Move REST API to navbar (#42)

* Move REST API to navbar

* update arch image while I am here

* capitalize Runtime

* Update getting started (#43)

* Update the getting started.

* add links to the IQX docs

* Build docs on merges with main (#44)

* Fix source path for docs upload

The tools/deploy_documentation.sh script had a typo and was trying to upload the wrong
source path which was causing a job error. This commit fixes the path so that the built
documentation will actually be uploaded.

* Update VQE tutorial (#45)

* update to latest VQEProgram version from nature

* update imoprt location and REM -> MEM, and re-run

* add nature to the requirements

* Add qka files and figs (#37)

* Create qka.py

* Add figs for qka notebook

* Add qka notebook

* Update qka.ipynb

* Update requirements.txt

added `pandas` and `scikit-learn`

* Delete qka.ipynb

* Upload updated qka notebook

* Update qka.py

Fix linter errors

* Update qka.py

Fix more linter errors

* Update qka.py

Fix one more tiny linter error

* Update qka.py

Fix more linter errors

* Update qka.py

* Update qka.py

* Delete chip.png

* Delete subgraphs.png

* Add images for the QKA tutorial

* Update QKA tutorial with new image location

* Update qka.py

* Update qka.py

fix more linter errors

* Update qka.py

and some more

* Update qka.py

* Update qka.py

fix missing return type doc

* Update qka.py

* Create temp.py

* Add images for qka to tutorials folder

* Delete qka.ipynb

* Add updated qka tutorial

* Delete temp.py

* Update path to images

* Update path again

* update path one more time

* Delete qka.ipynb

* Add updated tutorial

* Delete qka.ipynb

* Add qka tutorial with updated eqrefs

* Update qka.py

Update comment and remove `warnings`

* Delete chip.png

* Delete subgraphs.png

* add qka and remove vqe (#47)

* Update documentation about simulator access (#49)

* update doc on access

* make wording more generic

* Update 01_circuit_runner.ipynb (#50)

Minor editing suggestions.

* Rename runtime-simple to sample-program (#52)

* rename simple program to sample

* fix import

* add querying for backends (#53)

* remove 5 circ limit on circuit runner (#55)

* remove 5 circ limit on circuit runner

* remove payload size from readme

* 63 Add tests (#62)

* remove vqe program and tests

* add empty test file

* Revert "remove vqe program and tests"

This reverts commit 463986347a660e2bae99f26c880780be6d19e4b6.

* add tests

* address some comments

* address comments

* format

* address comments

* address comments

* address comments and fix lint

* fix serialize inputs

Co-authored-by: Lucy-Xing <Lucy.Xing@ibm.com>

* Update tutorials (#65)

* update tutorials

* return final result

* fix test

* use returned result

* lint fix

* add to docstring

* add return type

Co-authored-by: Lucy-Xing <Lucy.Xing@ibm.com>

* Add IEEE workshop tutorial (#67)

* add ieee tutorial

* rename file

* use image files

* Remove system limitation (#68)

* remove system limitation

* remove simulators

* update upload tutorial (#69)

* update upload tutorial

* add more details

* address comments

* update tutorial (#71)

* update requirements (#72)

* Move IEEE tutorial (#73)

* move ieee tutorial

* fix wording

* Circuit runner tutorial not using proper format (#74)

* add binary_probabilities

* remove has_service call

* use quasi obj

* fix max execution time

* Update README.md (#75)

* Update README.md (#76)

* Add full custom program tutorial (#77)

* fix some typos, lang consistency, etc. (#78)

* fix some typos, lang consistency, etc.

* Update tutorials/sample_vqe_program/qiskit_runtime_vqe_program.ipynb

oops missed one

* Add back cell contents (#79)

* Tweaks to full example based on review (#80)

* tweaks based on review

* one more tweak

* Fix readme to avoid saying premium users (#81)

* avoid premium

* fix format

* Add UUID to program name in full example (#82)

* Add custom expval program (#83)

* Add custom expval program

* Add QV example

* Update IEEE tutorial (#84)

* add qce21 tutorial

* revert accidental changes

* minor update the sample expval program (#85)

* Add missing files (#86)

* add missing files

* add vqe

* fix version

* Update tutorials (#90)

* Update tutorials

* Undo changes about which backend was used

* Remove version from 02_uploading_program

* Fixes

- Update metadata for sample_expval and sample_vqe_program
- Undo backend change in execution_count 7 of 01_circuit_runner

* Update cells where programs are printed

* Update tutorials sample notebooks

* Fixes for tutorials sample notebooks

* Update tutorials/02_uploading_program.ipynb

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

* Address PR comments

- Remove last cell with version info in 00_introduction
- Rerun cell with spec populated

Co-authored-by: Jane Kwon <janeheekwon@ibm.com>
Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

* Update wording on public programs (#88)

* update wording on public programs

* consistent wording

* update Qiskit version

* Add link to article on 120x quantum speedup (#91)

* Introduction Tutorial - more updates (#92)

* More tutorial updates

* Update tutorials/00_introduction.ipynb

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

* Fix review comments

* lower case

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

* Update tutorials for ibmq-provider 0.18 (#93)

* reflect ibmq provider 0.18 changes

* fix 02

* program names need not be unique

* no more version

* QAOA runtime (#94)

* * QAOA runtime.

* * Runtime script.

* * Black.

* 71 rename sample_program to hello_world (#96)

* rename to hello_world

* update docs

* add back sample program

* Update qiskit_runtime/hello_world/hello_world.py

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

* Update qiskit_runtime/sample_program/sample_program.json

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>

* remove files/folders no longer needed

* delete notebook that is no longer needed

Co-authored-by: Jessie Yu <jessieyu@us.ibm.com>
Co-authored-by: Paul Nation <nonhermitian@gmail.com>
Co-authored-by: Ismael Faro <Ismael.Faro1@ibm.com>
Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
Co-authored-by: Julien Gacon <gaconju@gmail.com>
Co-authored-by: Jen Glick <41485571+jenglick@users.noreply.github.com>
Co-authored-by: Ismael Faro Sertage <ismael.faro.sertage@gmail.com>
Co-authored-by: beckykd <66339736+beckykd@users.noreply.github.com>
Co-authored-by: Lucy Xing <88128115+LucyXing@users.noreply.github.com>
Co-authored-by: Lucy-Xing <Lucy.Xing@ibm.com>
Co-authored-by: Jay Gambetta <jay.gambetta@us.ibm.com>
Co-authored-by: abbycross <across@us.ibm.com>
Co-authored-by: Hwajung Kang <hwajungkang@gmail.com>
Co-authored-by: kwoane <12764049+kwoane@users.noreply.github.com>
Co-authored-by: Jane Kwon <janeheekwon@ibm.com>
Co-authored-by: Rathish Cholarajan <rathishc24@gmail.com>
Co-authored-by: Daniel J. Egger <38065505+eggerdj@users.noreply.github.com>
  • Loading branch information
18 people authored Jan 11, 2022
1 parent c3c5483 commit 2350e67
Show file tree
Hide file tree
Showing 33 changed files with 10,813 additions and 0 deletions.
19 changes: 19 additions & 0 deletions qiskit_runtime/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This code is part of qiskit-runtime.
#
# (C) Copyright IBM 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Main entry point for the qiskit_runtime"""


try:
from .version import version as __version__
except ImportError:
__version__ = "0.0.0"
15 changes: 15 additions & 0 deletions qiskit_runtime/circuit_runner/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# This code is part of qiskit-runtime.
#
# (C) Copyright IBM 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""
Qiskit circuit runner module
"""
23 changes: 23 additions & 0 deletions qiskit_runtime/circuit_runner/circuit_runner.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "circuit-runner",
"description": "A runtime program that takes one or more circuits, compiles them, executes them, and optionally applies measurement error mitigation.",
"max_execution_time": 14400,
"version": "1.0",
"parameters": [
{"name": "circuits", "description": "A circuit or a list of circuits.", "type": "A QuantumCircuit or a list of QuantumCircuits.", "required": true},
{"name": "shots", "description": "Number of repetitions of each circuit, for sampling. Default: 1024.", "type": "int", "required": false},
{"name": "initial_layout", "description": "Initial position of virtual qubits on physical qubits.", "type": "dict or list", "required": false},
{"name": "layout_method", "description": "Name of layout selection pass ('trivial', 'dense', 'noise_adaptive', 'sabre')", "type": "string", "required": false},
{"name": "routing_method", "description": "Name of routing pass ('basic', 'lookahead', 'stochastic', 'sabre').", "type": "string", "required": false},
{"name": "translation_method", "description": "Name of translation pass ('unroller', 'translator', 'synthesis').", "type": "string", "required": false},
{"name": "seed_transpiler", "description": "Sets random seed for the stochastic parts of the transpiler.", "type": "int", "required": false},
{"name": "optimization_level", "description": "How much optimization to perform on the circuits (0-3). Higher levels generate more optimized circuits. Default is 1.", "type": "int", "required": false},
{"name": "init_qubits", "description": "Whether to reset the qubits to the ground state for each shot.", "type": "bool", "required": false},
{"name": "rep_delay", "description": "Delay between programs in seconds.", "type": "float", "required": false},
{"name": "transpiler_options", "description": "Additional compilation options.", "type": "dict", "required": false},
{"name": "measurement_error_mitigation", "description": "Whether to apply measurement error mitigation. Default is False.", "type": "bool", "required": false}
],
"return_values": [
{"name": "-", "description": "Circuit execution results.", "type": "RunnerResult object"}
]
}
68 changes: 68 additions & 0 deletions qiskit_runtime/circuit_runner/circuit_runner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# This code is part of qiskit-runtime.
#
# (C) Copyright IBM 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Circuit-runner runtime program.
This is a simplified version of the circuit-runner program.
"""

from qiskit.compiler import transpile, schedule


def main(
backend,
user_messenger, # pylint: disable=unused-argument
circuits,
initial_layout=None,
seed_transpiler=None,
optimization_level=None,
transpiler_options=None,
scheduling_method=None,
schedule_circuit=False,
inst_map=None,
meas_map=None,
measurement_error_mitigation=False,
**kwargs,
):
"""Run the circuits on the backend."""

# transpiling the circuits using given transpile options
transpiler_options = transpiler_options or {}
circuits = transpile(
circuits,
initial_layout=initial_layout,
seed_transpiler=seed_transpiler,
optimization_level=optimization_level,
backend=backend,
**transpiler_options,
)

if schedule_circuit:
circuits = schedule(
circuits=circuits,
backend=backend,
inst_map=inst_map,
meas_map=meas_map,
method=scheduling_method,
)

if not isinstance(circuits, list):
circuits = [circuits]

# Compute raw results
result = backend.run(circuits, **kwargs).result()

if measurement_error_mitigation:
# Performs measurement error mitigation.
pass

return result.to_dict()
13 changes: 13 additions & 0 deletions qiskit_runtime/hello_world/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# This code is part of qiskit-runtime.
#
# (C) Copyright IBM 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Package containing ``hello-world`` Qiskit quantum program."""
41 changes: 41 additions & 0 deletions qiskit_runtime/hello_world/hello_world.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"name": "hello-world",
"description": "A sample runtime program.",
"max_execution_time": 300,
"spec": {
"backend_requirements": {
"min_num_qubits": 5
},
"parameters": {
"$schema": "https://json-schema.org/draft/2019-09/schema",
"properties": {
"iterations": {
"type": "integer",
"minimum": 0,
"description": "Number of iterations to run. Each iteration generates a runs a random circuit."
}
},
"required": [
"iterations"
]
},
"return_values": {
"$schema": "https://json-schema.org/draft/2019-09/schema",
"description": "A string that says 'All done!'.",
"type": "string"
},
"interim_results": {
"$schema": "https://json-schema.org/draft/2019-09/schema",
"properties": {
"iteration": {
"type": "integer",
"description": "Iteration number."
},
"counts": {
"description": "Histogram data of the circuit result.",
"type": "object"
}
}
}
}
}
55 changes: 55 additions & 0 deletions qiskit_runtime/hello_world/hello_world.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# This code is part of qiskit-runtime.
#
# (C) Copyright IBM 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""A sample runtime program called hello-world that submits random circuits
for user-specified iterations.
"""

import random
from typing import Any

from qiskit import transpile
from qiskit.circuit.random import random_circuit


def prepare_circuits(backend):
"""Generate a random circuit.
Args:
backend (qiskit.providers.Backend): Backend used for transpilation.
Returns:
qiskit.QuantumCircuit: Generated circuit.
"""
circuit = random_circuit(num_qubits=5, depth=4, measure=True, seed=random.randint(0, 1000))
return transpile(circuit, backend)


def main(backend, user_messenger, **kwargs) -> Any:
"""Main entry point of the program.
Args:
backend (qiskit.providers.Backend): Backend to submit the circuits to.
user_messenger (qiskit.providers.ibmq.runtime.UserMessenger): Used to communicate with the
program consumer.
kwargs: User inputs.
Returns:
Final result of the program.
"""
iterations = kwargs.pop("iterations", 1)
for it in range(iterations):
qc = prepare_circuits(backend)
result = backend.run(qc).result()
user_messenger.publish({"iteration": it, "counts": result.get_counts()})

return "All done!"
Loading

0 comments on commit 2350e67

Please sign in to comment.