diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md index 3061c05382..9710fd41de 100644 --- a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md @@ -10,4 +10,4 @@ assignees: '' -### What is the expected behavior? +### Suggested feature diff --git a/.github/ISSUE_TEMPLATE/NEW_EXPERIMENT.md b/.github/ISSUE_TEMPLATE/NEW_EXPERIMENT.md index 25f5a66516..d86e989221 100644 --- a/.github/ISSUE_TEMPLATE/NEW_EXPERIMENT.md +++ b/.github/ISSUE_TEMPLATE/NEW_EXPERIMENT.md @@ -17,7 +17,7 @@ your proposal. --> ## General details ### Experiment name - + ### Experiment type @@ -86,7 +86,7 @@ experiment data is displayed correctly in the results DB webpage - [ ] Add unit testing for the experiment and analysis classes. If needed implement a mock-backend for your experiment Include in your testing running the experiment in the context of `ParallelExperiment` - [ ] Write API docs for all your API methods. Follow the guideline [here](https://github.com/Qiskit/qiskit-experiments/blob/main/CONTRIBUTING.md) -- [ ] Write a tutorial for your experiment. Follow the guideline [here](https://github.com/Qiskit/qiskit-experiments/blob/main/docs/tutorials/GUIDELINES.md) +- [ ] Write a user guide for your experiment. Follow the guideline [here](https://github.com/Qiskit/qiskit-experiments/blob/main/docs/GUIDELINES.md) - [ ] Add a new release note. Follow the guideline [here](https://github.com/Qiskit/qiskit-experiments/blob/main/CONTRIBUTING.md#adding-a-new-release-note) - [ ] Ask for a final review for the implementation, documentation and testing - [ ] Celebrate! diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 09a46c01e0..4761fece4c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -97,7 +97,7 @@ jobs: python -m pip install -U tox sudo apt-get install -y pandoc graphviz - name: Build Docs - run: tox -edocs + run: tox -edocs-parallel -- -W - name: Compress Artifacts run: | mkdir artifacts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e38527d07a..60c55f3438 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,36 +1,31 @@ # Contributing Guide To contribute to Qiskit Experiments, first read the overall [Qiskit project contributing -guidelines](https://qiskit.org/documentation/contributing_to_qiskit.html). - -## Contributing to Qiskit Experiments - -In addition to the general guidelines, the specific guidelines for contributing to -Qiskit Experiments are documented below. - -### Contents - - + [Proposing a new experiment](#proposing-a-new-experiment) - + [Choosing an issue to work on](#choosing-an-issue-to-work-on) - + [Pull request checklist](#pull-request-checklist) - + [Code style](#code-style) - + [Testing your code](#testing-your-code) - - [STDOUT/STDERR and logging capture](#stdoutstderr-and-logging-capture) - + [Changelog generation](#changelog-generation) - + [Release notes](#release-notes) - - [Adding a new release note](#adding-a-new-release-note) - * [Linking to issues](#linking-to-issues) - - [Generating release notes](#generating-release-notes) - + [Documentation](#documentation) - + [Experiment class documentation](#experiment-class-documentation) - + [Analysis class documentation](#analysis-class-documentation) - + [Populating the table of contents](#populating-the-table-of-contents) - + [Updating the tutorials](#updating-the-tutorials) - + [Building documentation locally](#building-documentation-locally) - + [Adding deprecation warnings](#adding-deprecation-warnings) - + [Development cycle](#development-cycle) - + [Branches](#branches) - + [Release cycle](#release-cycle) +guidelines](https://qiskit.org/documentation/contributing_to_qiskit.html). In addition +to the general guidelines, the specific guidelines for contributing to Qiskit +Experiments are documented below. + +Contents: + +- [Contributing Guide](#contributing-guide) + - [Proposing a new experiment](#proposing-a-new-experiment) + - [Choosing an issue to work on](#choosing-an-issue-to-work-on) + - [Pull request checklist](#pull-request-checklist) + - [Testing your code](#testing-your-code) + - [STDOUT/STDERR and logging capture](#stdoutstderr-and-logging-capture) + - [Code style](#code-style) + - [Changelog generation](#changelog-generation) + - [Release notes](#release-notes) + - [Adding a new release note](#adding-a-new-release-note) + - [Linking to issues](#linking-to-issues) + - [Generating release notes](#generating-release-notes) + - [Documentation](#documentation) + - [Updating the documentation](#updating-the-documentation) + - [Building documentation locally](#building-documentation-locally) + - [Adding deprecation warnings](#adding-deprecation-warnings) + - [Development cycle](#development-cycle) + - [Branches](#branches) + - [Release cycle](#release-cycle) ### Proposing a new experiment @@ -40,20 +35,24 @@ or equivalent source, with a use case that is of interest to the Qiskit and quan experimentalist community. If there is an experiment you would like to see added, you can propose it by creating a -[new experiment proposal issue](https://github.com/Qiskit/qiskit-experiments/issues/new?assignees=&labels=enhancement&template=NEW_EXPERIMENT.md&title=) in GitHub. The issue template will ask you to fill in -details about the experiment type, protocol, analysis, and implementation, which will -give us the necessary information to decide whether the experiment is feasible to -implement and useful to include in our package library. +[new experiment proposal +issue](https://github.com/Qiskit/qiskit-experiments/issues/new?assignees=&labels=enhancement&template=NEW_EXPERIMENT.md&title=) +in GitHub. The issue template will ask you to fill in details about the experiment type, +protocol, analysis, and implementation, which will give us the necessary information to +decide whether the experiment is feasible to implement and useful to include in our +package library. ### Choosing an issue to work on We use the following labels to help non-maintainers find issues best suited to their interests and experience level: -* [good first issue](https://github.com/Qiskit/qiskit-experiments/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) +* [good first + issue](https://github.com/Qiskit/qiskit-experiments/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) - these issues are typically the simplest available to work on, perfect for newcomers. They should already be fully scoped, with a clear approach outlined in the descriptions. -* [help wanted](https://github.com/Qiskit/qiskit-experiments/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) +* [help + wanted](https://github.com/Qiskit/qiskit-experiments/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) - these issues are generally more complex than good first issues. They typically cover work that core maintainers don't currently have capacity to implement and may require more investigation/discussion. These are a great option for experienced contributors @@ -65,9 +64,9 @@ When submitting a pull request for review, please ensure that: 1. The code follows the code style of the project and successfully passes the tests. 2. The API documentation has been updated accordingly. -3. You have updated the relevant tutorial or write a new one. In case the PR needs to be - merged without delay (e.g. for a high priority fix), open an issue for updating or - adding the tutorial later. +3. You have updated the relevant documentation or written new docs. In case the PR needs + to be merged without delay (e.g. for a high priority fix), open an issue for updating + or adding the documentation later. 4. You've added tests that cover the changes you've made, if relevant. 5. If your change has an end user facing impact (new feature, deprecation, removal, etc.), you've added or updated a reno release note for that change and tagged the PR @@ -75,24 +74,6 @@ When submitting a pull request for review, please ensure that: The sections below go into more detail on the guidelines for each point. -### Code style - -The qiskit-experiments repository uses `black` for code formatting and style and -`pylint` for linting. You can run these checks locally with - -``` -tox -elint -``` - -If there is a code formatting issue identified by black you can just run ``black`` -locally to fix this (or ``tox -eblack`` which will install it and run it). - -Because `pylint` analysis can be slow, there is also a `tox -elint-incr` target, which -only applies `pylint` to files which have changed from the source github. On rare -occasions this will miss some issues that would have been caught by checking the -complete source tree, but makes up for this by being much faster (and those rare -oversights will still be caught by the CI after you open a pull request). - ### Testing your code It is important to verify that your code changes don't break any existing tests and that @@ -111,8 +92,8 @@ specific python version such as 3.10: `tox -epy310`. If you just want to run a subset of tests you can pass a selection regex to the test runner. For example, if you want to run all tests that have "dag" in the test id you can -run: `tox -- dag`. You can pass arguments directly to the test runner after the -bare `--`. To see all the options on test selection you can refer to the stestr manual: +run: `tox -- dag`. You can pass arguments directly to the test runner after the bare +`--`. To see all the options on test selection you can refer to the stestr manual: https://stestr.readthedocs.io/en/stable/MANUAL.html#test-selection If you want to run a single test module, test class, or individual test method you can @@ -144,12 +125,30 @@ to the tests run so output can be associated with the test case it originated fr However, if you run tests with `stestr` outside of these mechanisms, by default the streams are not captured. To enable stream capture, just set the `QISKIT_TEST_CAPTURE_STREAMS` env variable to `1`. If this environment variable is set -outside of running with `stestr`, the streams (STDOUT, STDERR, and logging) will still be -captured but **not** displayed in the test runners output. If you are using the stdlib -unittest runner, a similar result can be accomplished by using the +outside of running with `stestr`, the streams (STDOUT, STDERR, and logging) will still +be captured but **not** displayed in the test runners output. If you are using the +stdlib unittest runner, a similar result can be accomplished by using the [`--buffer`](https://docs.python.org/3/library/unittest.html#command-line-options) option (e.g. `python -m unittest discover --buffer ./test/python`). +### Code style + +The qiskit-experiments repository uses `black` for code formatting and style and +`pylint` for linting. You can run these checks locally with + +``` +tox -elint +``` + +If there is a code formatting issue identified by black you can just run ``black`` +locally to fix this (or ``tox -eblack`` which will install it and run it). + +Because `pylint` analysis can be slow, there is also a `tox -elint-incr` target, which +only applies `pylint` to files which have changed from the source github. On rare +occasions this will miss some issues that would have been caught by checking the +complete source tree, but makes up for this by being much faster (and those rare +oversights will still be caught by the CI after you open a pull request). + ### Changelog generation The changelog is automatically generated as part of the release process automation. This @@ -160,8 +159,8 @@ merge) and checks if that PR had a `Changelog:` label on it. If there is a label add the git commit message summary line from the git log for the release to the changelog. -If there are multiple `Changelog:` tags on a PR, the git commit message summary line from -the git log will be used for each changelog category tagged. +If there are multiple `Changelog:` tags on a PR, the git commit message summary line +from the git log will be used for each changelog category tagged. The current categories for each label are as follows: @@ -277,7 +276,7 @@ example you would write a release note with a link to issue 12345 as: ```yaml fixes: - | - Fixes a race condition in the function ``foo()``. Refer to + Fixed a race condition in the function ``foo()``. Refer to `#12345 ` for more details. ``` @@ -300,267 +299,21 @@ At release time, ``reno report`` is used to generate the release notes for the r and the output will be submitted as a pull request to the documentation repository's [release notes file]( https://github.com/Qiskit/qiskit-experiments/blob/main/docs/release_notes.rst). + ### Documentation The [Qiskit Experiments documentation](https://qiskit.org/documentation/experiments/) is -rendered from experiment and analysis class docstrings into HTML files. We provide a -special syntax and macros as [Sphinx](https://www.sphinx-doc.org/en/master/) extensions -to format these docstrings. If you implement a new experiment or analysis or update how -an existing one functions, you should use following style so that the documentation is -formatted in the same manner throughout our experiment library. You can use standard -[reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html) -directives along with our syntax. - -#### Experiment class documentation - -You should complete or update the class documentation and method documentation for -`_default_experiment_options`. You can use several predefined sections for the class docstring. - -```buildoutcfg - """One line simple summary of this experiment. - - You can add more information after line feed. The first line will be shown in an - automatically generated table of contents on the module's top page. - This text block is not shown so you can keep the table clean. - - You can use following sections. The text within a section should be indented. - - # section: overview - Overview of the experiment. This information SHOULD be provided for every experiment. - This section covers technical aspect of experiment and explains how the experiment works. - - A diagram of typical quantum circuit that the experiment generates may help readers - to grasp the behavior of this experiment. - - # section: analysis_ref - You MUST provide a reference to the default analysis class in the base class. - This section is recursively referred by child classes if not explicitly given there. - Note that this is NOT reference nor import path of the class. - You should write the pass to the docstring, i.e. - - :py:class:`~qiskit_experiments.framework.BaseAnalysis` - - # section: warning - If user must take special care when using the experiment (e.g. API is not stabilized) - you should clarify in this section. - - # section: note - Optional. This comment is shown in a box so that the message is stood out. - - # section: example - Optional. You can write code example here. For example, - - .. code-block:: python - - exp = MyExperiment(qubits=[0, 1], backend=backend) - exp.run() - - This is effective especially when your experiment has complicated options. - - # section: reference - Optional. You can write reference to article or external website. - To write a reference to an arXiv work, you can use convenient macro. - - .. ref_arxiv:: Auth2020a 21xx.01xxx - - This collects the latest article information from web and automatically - generates a nicely formatted citation from the arXiv ID. - - For referring to the website, - - .. ref_website:: Qiskit Experiment Github, https://github.com/Qiskit/qiskit-experiments - - you can use the above macro, where you can provide a string for the hyperlink and - the destination location separated by single comma. - - # section: tutorial - Optional. Link to tutorial of this experiment if one exists. - - # section: see_also - Optional. You can list relevant experiment or module. - Here you cannot write any comments. - You just need to list absolute paths to relevant API documents, i.e. - - qiskit_experiments.framework.BaseExperiment - qiskit_experiments.framework.BaseAnalysis - """ -``` - -You also need to provide the experiment option description in the `_default_experiment_options` method -if you add new options. This description will be automatically propagated through child classes, -so you don't need to manually copy documentation. -Of course, you can override documentation in the child class if it behaves differently there. - -```buildoutcfg - """Default experiment options. - - Experiment Options: - opt1 (int): Description of opt1. - opt2 (float): Description of opt2. - opt3 (List[SomeClass]): Description of opt3. - """ -``` - -Note that you should use the [Google docstring style](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html). -Numpy or other docstring styles cannot be parsed by our Sphinx extension, -and the section header should be named `Experiment Options` (NOT `Args`). -Since this is a private method, any other documentation besides option descriptions -are not rendered in the HTML documentation. Documentation for options are -automatically formatted and inserted into the class documentation. - -#### Analysis class documentation - -You can use the same syntax and section headers for the analysis class documentation. In addition, you can use extra sections, `fit_model` and `fit_parameters`, if needed. - -```buildoutcfg - """One line simple summary of this analysis. - - # section: overview - Overview of this analysis. - - # section: fit_model - Optional. If this analysis fits something, probably it is worth describing - the fit model. You can use math mode where latex commands are available. - - .. math:: - - F(x) = a\exp(x) + b - - It is recommended to omit `*` symbols for multiplication (looks ugly in math mode), - and you should carefully choose the parameter name so that symbols matches with - variable names shown in analysis results. You can write symbol :math:`a` here too. - - # section: fit_parameters - Optional. Description for fit parameters in the model. - You can also write how initial guess is generated and how fit bound is determined. - - defpar a: - desc: Amplitude. - init_guess: This is how :math:`a` is generated. No line feed. - bounds: [-1, 1] - - defpar b: - desc: Offset. - init_guess: This is how :math:`b` is generated. No line feed. - bounds: (0, 1] - - The defpar syntax is parsed and formatted nicely. - """ -``` - -You also need to provide a description for analysis class options in the -`_default_options` method. - -```buildoutcfg - """Default analysis options. - - Analysis Options: - opt1 (int): Description of opt1. - opt2 (float): Description of opt2. - opt3 (List[SomeClass]): Description of opt3. - """ -``` - -This is the same syntax with experiment options in the experiment class. -Note that header should be named `Analysis Options` to be parsed correctly. - -#### Populating the table of contents - -After you complete documentation of your classes, you must add documentation to the -toctree so that it can be rendered as the API documentation. In Qiskit Experiments, we -have a separate tables of contents for each experiment module (e.g. [characterization -experiments](https://qiskit.org/documentation/experiments/apidocs/mod_characterization.html)) -and for the [entire -library](https://qiskit.org/documentation/experiments/apidocs/library.html). Thus we -should add document to the tree of a particular module and then reference it to the -entire module. - -As an example, when writing the characterization experiment and analysis, first add your -documentation to the table of contents of the module: - -```buildoutcfg -qiskit_experiments/library/characterization/__init__.py - """ - .. currentmodule:: qiskit_experiments.library.characterization - - Experiments - =========== - .. autosummary:: - :toctree: ../stubs/ - :template: autosummary/experiment.rst - - MyExperiment1 - MyExperiment2 - - Analysis - ======== - - .. autosummary:: - :toctree: ../stubs/ - :template: autosummary/analysis.rst - - ... - """ - - from my_experiment import MyExperiment1, MyExperiment2 - from my_analysis import MyAnalysis -``` +rendered from `.rst` files as well as experiment and analysis class docstrings into HTML +files. -Note that there are different stylesheets, `experiment.rst` and `analysis.rst`, for the -experiment class and analysis class, respectively. Take care to place your documentation -under the correct stylesheet, otherwise it may not be rendered properly. Then the table -for the entire library should be written like this: +#### Updating the documentation -```buildoutcfg -qiskit_experiments/library/__init__.py +Any change that would affect existing documentation, or a new feature that requires a +documentation, should be updated correspondingly. Before updating, review the [existing +documentation](https://qiskit.org/documentation/experiments) for their style and +content, and read the [documentation guidelines](docs/GUIDELINES.md) for further +details. - """ - .. currentmodule:: qiskit_experiments.library - - Characterization Experiments - ============================ - .. autosummary:: - :toctree: ../stubs/ - :template: autosummary/experiment.rst - - ~characterization.MyExperiment1 - ~characterization.MyExperiment2 - """ - - from .characterization import MyExperiment1, MyExperiment2 - from . import characterization -``` - -Here the reference start with `~`. We only add experiment classes to the table of the -entire library. - -#### Updating the tutorials - -Any change that would affect an existing tutorial or a new feature that requires a -tutorial should be updated correspondingly. Before updating a tutorial, review the -[existing tutorials](https://qiskit.org/documentation/experiments/tutorials/index.html) for their style and content, and read the [tutorial guidelines](docs/tutorials/GUIDELINES.md) - for further details. - -Tutorials are written in reStructuredText format and then built into Jupyter notebooks. -Code cells can be written using `jupyter-execute` blocks, which will be automatically -executed, with both code and output shown to the user: - - .. jupyter-execute:: - - # write Python code here - -Your code should use the appropriate mock backend to show what expected experiment -results might look like for the user. To instantiate a mock backend without exposing it -to the user, use the `:hide-code:` and `:hide-output:` directives: - - .. jupyter-execute:: - :hide-code: - :hide-output: - - from qiskit.test.ibmq_mock import mock_get_backend - backend = mock_get_backend('FakeLima') - -To ignore an error from a Jupyter cell block, use the `:raises:` directive. #### Building documentation locally To check what the rendered html output of the API documentation, tutorials, and release @@ -572,18 +325,26 @@ This will build all the documentation into `docs/_build/html`. The main page `index.html` will link to the relevant pages in the subdirectories, or you can navigate manually: +* `tutorials/`: Contains the built tutorials. +* `howtos/`: Contains the built how-to guides. +* `manuals/`: Contains the built experiment manuals. * `apidocs/`: Contains the API docs automatically compiled from module docstrings. -* `tutorials/`: Contains the executed tutorials built from `.rst` files. * `release_notes.html`: Contains the release notes. -To build release notes and API docs without building the Jupyter cells in the `.rst` -files under `tutorials/`, which is a relatively slow process, you can run +If you encounter a build error involving `config-inited`, you need to be in the root of +the qiskit-experiments git repository then run `git remote add upstream +https://github.com/Qiskit/qiskit-experiments` and `git fetch upstream` before building. +Trying to rebuild docs over a document tree that's changed can also lead to problems; +in this case, you should delete the `docs/stubs` and `docs/_build` directories before +rebuilding. - tox -edocsnorst - -instead. +There are a few other build options available: + +* `tox -edocs-minimal`: build documentation without executing Jupyter code cells +* `tox -edocs-parallel`: do a full build with multiprocessing (may crash on Macs) ### Adding deprecation warnings + Qiskit Experiments is part of Qiskit and, therefore, the [Qiskit Deprecation Policy](https://qiskit.org/documentation/contributing_to_qiskit.html#deprecation-policy) fully applies here. We have a deprecation decorator for showing deprecation warnings. To diff --git a/docs/GUIDELINES.md b/docs/GUIDELINES.md new file mode 100644 index 0000000000..8ed4ba4a45 --- /dev/null +++ b/docs/GUIDELINES.md @@ -0,0 +1,435 @@ +# Guidelines for writing documentation + +Read the [contributing guidelines](CONTRIBUTING.md) before proceeding. + +Contents: +- [Guidelines for writing documentation](#guidelines-for-writing-documentation) + - [Introduction](#introduction) + - [General formatting guidelines](#general-formatting-guidelines) + - [Tutorials](#tutorials) + - [How-to guides](#how-to-guides) + - [Experiment manuals](#experiment-manuals) + - [API documentation](#api-documentation) + - [Experiment class documentation](#experiment-class-documentation) + - [Analysis class documentation](#analysis-class-documentation) + - [Populating the table of contents](#populating-the-table-of-contents) + +## Introduction + +Qiskit Experiments documentation is split into four sections: + +- Tutorials for learning the package from the ground up +- How-to guides for solving specific problems +- Experiment manuals for information on specific experiments +- API reference for technical documentation + +All documentation is written in reStructuredText format and then built into formatted +text by Sphinx. Code cells can be written using `jupyter-execute` blocks, which will be +automatically executed, with both code and output shown to the user: + + .. jupyter-execute:: + + # write Python code here + +Your code should use the appropriate mock backend to show what expected experiment +results might look like for the user. To instantiate a mock backend without exposing it +to the user, use the `:hide-code:` and `:hide-output:` directives: + + .. jupyter-execute:: + :hide-code: + :hide-output: + + from qiskit.test.ibmq_mock import mock_get_backend + backend = mock_get_backend('FakeLima') + +To display a block without actually executing the code, use the `.. jupyter-input::` and +`.. jupyter-output::` directives. To ignore an error from a Jupyter cell block, use the +`:raises:` directive. To see more options, consult the [Jupyter Sphinx documentation](https://jupyter-sphinx.readthedocs.io/en/latest/). + +### General formatting guidelines + +* For experiments, documentation title should be just the name of the experiment. Use + regular capitalization. +* Use headers, subheaders, subsubheaders etc. for hierarchical text organization. No + need to number the headers +* Use present progressive for subtitles, such as "Saving experiment data to the + database" instead of "Save experiment data to the database" +* Use math notation as much as possible (e.g. use $\frac{\pi}{2}$ instead of pi-half or + pi/2) +* Use device names as shown in the IBM Quantum Services dashboard, e.g. `ibmq_lima` + instead of IBMQ Lima +* put identifier names (e.g. osc_freq) in code blocks using double backticks, i.e. `osc_freq` + +Below we provide templates and guidelines for each of these types of documentation. + +### Tutorials + +The learning tutorials are for users who are familiar with Python and Qiskit and new to +the Qiskit Experiments package. Here are what to keep in mind when writing and updating +tutorials: + +- The tutorials should be suitable for progressive learning, starting with simple + instructions and gradually adding complexity. For example, T1 is a much better + starting experiment than cross resonance hamiltonian tomography. Each new bit of + added complexity that the user hasn't seen before should be explained. +- Whenever possible, external resources should be linked to. For example, classes and + methods in Qiskit should be linked. +- If you make changes to the basic API shown in the tutorials, it's important to update + the corresponding part in the tutorials. Consider adding a special note for major + recent changes to inform users who may be used to the old usage pattern. + + +### How-to guides + +The title of a how-to should clearly describe what problem it's solving. It should be an +action that follows "How to". The text itself has up to four sections, but only the +first two are required: + +- Problem: This section should describe the user problem that your guide is providing a + direct solution for in second person. This should ideally be a one-liner so that users + can quickly scan it and see if it’s relevant to what they’re trying to do. + +- Solution: This section should describe possible solutions for the problem with code + snippets and text before and after that describe what is needed to run the code, as + well as what it generates and how this solves the problem. + +- Discussion: This section can go into detail on when this kind of problem can arise, + caveats to running the code, and any related. + +- See also: Links to other relevant documentation or resources. + +Here is a template for how-to guides: + +``` +Write a how-to guide +==================== + +Problem +------- + +You want to write a how-to guide. + +Solution +-------- + +First, you need to have a specific problem in mind that you want to solve with your +how-to. This might be a problem you encountered when using Qiskit Experiments yourself, +for example. You then need to have a solution that you can describe with words and code +examples. + +Discussion +---------- + +Not every type of information is suitable for a how-to. For example, if it's essential +information that newcomers to the package should know, then it should go in the tutorials +section. + +Subsection +~~~~~~~~~~ + +You can add subsections whenever appropriate. + +See also +-------- + +* `The Qiskit Docs Guide `__ +``` + + +### Experiment manuals + +The main goal of `qiskit-experiment` experiment manuals is to serve as user manuals for +the various package components such as the characterization and calibration experiments. +To this end, each document should introduce the cover the main (if not all) use cases of +the experiment functionality, including code examples and expected outputs. Another +objective of the documentation is to provide the user with basic background on each +experiment method. The start of the manual should have a short background explanation +for what the experiment does, preferably 1 or 2 paragraphs long, which includes the main +literature references as well as a link to the relevant chapter in the Qiskit textbook, +if available. The common use cases of the experiment should be covered with a code +example and example outputs by printing relevant analysis results and plot figures. +Required and common parameters, such as experiment and analysis options, should be +covered. + +See the [Randomized Benchmarking](https://qiskit.org/documentation/experiments/manuals/benchmarking/randomized_benchmarking.html) +guide and its [source code](docs/manuals/benchmarking/randomized_benchmarking.rst) for an +example. Here is a simple template for a manual: + +``` +New Experiment +============== + +Here the experiment is introduced, and any background info needed to understand it is +ideally provided to the level of someone who has taken a background course in quantum +computing. References are provided to the original paper where the experiment was +described, if relevant, and to good resources for understanding it. + +Running the experiment +---------------------- + +Here caveats about the specific implementation of the experiment in this package are +discussed and sample code is provided. Because information on the general inputs and +outputs of an experiment will be covered in the tutorials, there’s no need to repeat +information that applies to all experiments. + +.. jupyter-execute:: + + # Sample code that runs the experiment is shown here. + +Choosing good parameters +~~~~~~~~~~~~~~~~~~~~~~~~ + +If there are specific considerations when running the experiment that you want to +highlight, this is a good place to discuss them. + +Advanced usage +-------------- + +You may want to highlight advanced usage or ways to improve performance that will be of +interest to experimentalists and researchers. For example, for the T1 experiment, one +such section might discuss the optimal way of choosing delay lengths to obtain the +most information about T1, in scenarios where T1 is roughly known versus scenarios +where nearly nothing is known. Papers should be cited where relevant. + +See also +-------- + +Links to relevant experiment classes in the API docs should be provided here. + +``` + +### API documentation + +API documentation is automatically generated from docstrings. If you implement a new +experiment or analysis or update how an existing one functions, you should use following +style so that the documentation is formatted in the same manner throughout our +experiment library. You can use standard +[reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html) +directives along with our syntax. + +#### Experiment class documentation + +There are several predefined sections for the class docstring. + +```buildoutcfg + """One line simple summary of this experiment in the format of "An experiment that + measures [parameter]". + + You can add more information after line feed. The first line will be shown in an + automatically generated table of contents on the module's top page. + This text block is not shown so you can keep the table clean. + + You can use following sections. The text within a section should be indented. + + # section: overview + + Overview of the experiment. This information SHOULD be provided for every experiment. + This section covers technical aspect of experiment and explains how the experiment works. + + A diagram of typical quantum circuit that the experiment generates may help readers + to grasp the behavior of this experiment. + + # section: analysis_ref + + You MUST provide a reference to the default analysis class in the base class. + This section is recursively referred by child classes if not explicitly given there. + The format should be a Sphinx cross-reference to the class, such as + + :class:`~qiskit_experiments.framework.BaseAnalysis` + + # section: warning + If user must take special care when using the experiment (e.g. API is not stabilized) + you should clarify in this section. + + # section: note + Optional. This comment is shown in a box so that the message is stood out. + + # section: example + Optional. You can write code example here. For example, + + .. code-block:: python + + exp = MyExperiment(qubits=[0, 1], backend=backend) + exp.run() + + This is effective especially when your experiment has complicated options. + + # section: reference + Optional. You can write reference to article or external website. + To write a reference to an arXiv work, you can use convenient macro. + + .. ref_arxiv:: Auth2020a 21xx.01xxx + + This collects the latest article information from web and automatically + generates a nicely formatted citation from the arXiv ID. + + For referring to the website, + + .. ref_website:: Qiskit Experiment Github, https://github.com/Qiskit/qiskit-experiments + + you can use the above macro, where you can provide a string for the hyperlink and + the destination location separated by single comma. + + # section: manual + Optional. Link to manuals of this experiment if one exists. + + # section: see_also + Optional. You can list relevant experiment or module. + Here you cannot write any comments. + You just need to list absolute paths to relevant API documents, i.e. + + qiskit_experiments.framework.BaseExperiment + qiskit_experiments.framework.BaseAnalysis + """ +``` + +You also need to provide the experiment option description in the +`_default_experiment_options` method if you add new options. This description will be +automatically propagated through child classes, so you don't need to manually copy +documentation. Of course, you can override documentation in the child class if it +behaves differently there. + +```buildoutcfg + """Default experiment options. + + Experiment Options: + opt1 (int): Description of opt1. + opt2 (float): Description of opt2. + opt3 (List[SomeClass]): Description of opt3. + """ +``` + +Note that you should use the [Google docstring +style](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html). +Numpy or other docstring styles cannot be parsed by our Sphinx extension, and the +section header should be named `Experiment Options` (NOT `Args`). Since this is a +private method, any other documentation besides option descriptions are not rendered in +the HTML documentation. Documentation for options are automatically formatted and +inserted into the class documentation. + +#### Analysis class documentation + +You can use the same syntax and section headers for the analysis class documentation. In +addition, you can use extra sections, `fit_model` and `fit_parameters`, if needed. + +```buildoutcfg + """One line simple summary of this analysis. + + # section: overview + Overview of this analysis. + + # section: fit_model + Optional. If this analysis fits something, probably it is worth describing + the fit model. You can use math mode where latex commands are available. + + .. math:: + + F(x) = a\exp(x) + b + + It is recommended to omit `*` symbols for multiplication (looks ugly in math mode), + and you should carefully choose the parameter name so that symbols matches with + variable names shown in analysis results. You can write symbol :math:`a` here too. + + # section: fit_parameters + Optional. Description for fit parameters in the model. + You can also write how initial guess is generated and how fit bound is determined. + + defpar a: + desc: Amplitude. + init_guess: This is how :math:`a` is generated. No line feed. + bounds: [-1, 1] + + defpar b: + desc: Offset. + init_guess: This is how :math:`b` is generated. No line feed. + bounds: (0, 1] + + The defpar syntax is parsed and formatted nicely. + """ +``` + +You also need to provide a description for analysis class options in the +`_default_options` method. + +```buildoutcfg + """Default analysis options. + + Analysis Options: + opt1 (int): Description of opt1. + opt2 (float): Description of opt2. + opt3 (List[SomeClass]): Description of opt3. + """ +``` + +This is the same syntax with experiment options in the experiment class. Note that +header should be named `Analysis Options` to be parsed correctly. + +#### Populating the table of contents + +After you complete documentation of your classes, you must add documentation to the +toctree so that it can be rendered as the API documentation. In Qiskit Experiments, we +have a separate tables of contents for each experiment module (e.g. [characterization +experiments](https://qiskit.org/documentation/experiments/apidocs/mod_characterization.html)) +and for the [entire +library](https://qiskit.org/documentation/experiments/apidocs/library.html). Thus we +should add document to the tree of a particular module and then reference it to the +entire module. + +As an example, when writing the characterization experiment and analysis, first add your +documentation to the table of contents of the module: + +```buildoutcfg +qiskit_experiments/library/characterization/__init__.py + """ + .. currentmodule:: qiskit_experiments.library.characterization + + Experiments + =========== + .. autosummary:: + :toctree: ../stubs/ + :template: autosummary/experiment.rst + + MyExperiment1 + MyExperiment2 + + Analysis + ======== + + .. autosummary:: + :toctree: ../stubs/ + :template: autosummary/analysis.rst + + ... + """ + + from my_experiment import MyExperiment1, MyExperiment2 + from my_analysis import MyAnalysis +``` + +Note that there are different stylesheets, `experiment.rst` and `analysis.rst`, for the +experiment class and analysis class, respectively. Take care to place your documentation +under the correct stylesheet, otherwise it may not be rendered properly. Then the table +for the entire library should be written like this: + +```buildoutcfg +qiskit_experiments/library/__init__.py + + """ + .. currentmodule:: qiskit_experiments.library + + Characterization Experiments + ============================ + .. autosummary:: + :toctree: ../stubs/ + :template: autosummary/experiment.rst + + ~characterization.MyExperiment1 + ~characterization.MyExperiment2 + """ + + from .characterization import MyExperiment1, MyExperiment2 + from . import characterization +``` + +Here the reference start with `~`. We only add experiment classes to the table of the +entire library. diff --git a/docs/_ext/autodoc_analysis.py b/docs/_ext/autodoc_analysis.py index ded49695c6..259ce8c0fd 100644 --- a/docs/_ext/autodoc_analysis.py +++ b/docs/_ext/autodoc_analysis.py @@ -63,3 +63,4 @@ def setup(app: Sphinx): existing_documenter = app.registry.documenters.get(AnalysisDocumenter.objtype) if existing_documenter is None or not issubclass(existing_documenter, AnalysisDocumenter): app.add_autodocumenter(AnalysisDocumenter, override=True) + return {"parallel_read_safe": True} diff --git a/docs/_ext/autodoc_experiment.py b/docs/_ext/autodoc_experiment.py index a243b7cde9..9d74f026d3 100644 --- a/docs/_ext/autodoc_experiment.py +++ b/docs/_ext/autodoc_experiment.py @@ -39,7 +39,10 @@ def add_content(self, more_content: Any, no_docstring: bool = False) -> None: sourcename = self.get_sourcename() try: - class_doc, init_doc = self.get_doc() + if self.get_doc() is not None: + class_doc, init_doc = self.get_doc() + else: + return except ValueError: raise QiskitError( f"Documentation of {self.name} doesn't match with the expected format." @@ -76,3 +79,4 @@ def setup(app: Sphinx): existing_documenter = app.registry.documenters.get(ExperimentDocumenter.objtype) if existing_documenter is None or not issubclass(existing_documenter, ExperimentDocumenter): app.add_autodocumenter(ExperimentDocumenter, override=True) + return {"parallel_read_safe": True} diff --git a/docs/_ext/autodoc_visualization.py b/docs/_ext/autodoc_visualization.py index 938c11dcc9..203944fd05 100644 --- a/docs/_ext/autodoc_visualization.py +++ b/docs/_ext/autodoc_visualization.py @@ -97,3 +97,4 @@ def setup(app: Sphinx): existing_documenter = app.registry.documenters.get(DrawerDocumenter.objtype) if existing_documenter is None or not issubclass(existing_documenter, DrawerDocumenter): app.add_autodocumenter(DrawerDocumenter, override=True) + return {"parallel_read_safe": True} diff --git a/docs/_ext/autoref.py b/docs/_ext/autoref.py index 6a4c42a4ae..4d303d0246 100644 --- a/docs/_ext/autoref.py +++ b/docs/_ext/autoref.py @@ -103,3 +103,5 @@ def run(self): def setup(app: Sphinx): app.add_directive("ref_arxiv", Arxiv) app.add_directive("ref_website", WebSite) + + return {"parallel_read_safe": True} diff --git a/docs/_ext/custom_styles/formatter.py b/docs/_ext/custom_styles/formatter.py index d32fa413f9..03665b49d7 100644 --- a/docs/_ext/custom_styles/formatter.py +++ b/docs/_ext/custom_styles/formatter.py @@ -82,19 +82,17 @@ def format_note(self, lines: List[str]) -> List[str]: @_check_no_indent def format_see_also(self, lines: List[str]) -> List[str]: """Format see also section.""" - text = ".. seealso:: Module(s) " + format_lines = [".. rubric:: See Also", ""] - modules = [] - for line in lines: - modules.append(f":py:mod:`~{line.lstrip()}`") - text += ", ".join(modules) + format_lines.extend(lines) + format_lines.append("") - return [text, ""] + return format_lines @_check_no_indent - def format_tutorial(self, lines: List[str]) -> List[str]: - """Format tutorial section.""" - format_lines = [".. rubric:: Tutorials", ""] + def format_manual(self, lines: List[str]) -> List[str]: + """Format user manual section.""" + format_lines = [".. rubric:: User Manual", ""] format_lines.extend(lines) format_lines.append("") @@ -119,7 +117,7 @@ def format_experiment_opts(self, lines: List[str]) -> List[str]: format_lines = [ ".. rubric:: Experiment Options", "", - "These options can be set by :py:meth:`set_experiment_options` method.", + "These options can be set by the :meth:`set_experiment_options` method.", "", ] format_lines.extend(lines) @@ -133,7 +131,7 @@ def format_analysis_opts(self, lines: List[str]) -> List[str]: format_lines = [ ".. rubric:: Analysis Options", "", - "These options can be set by :py:meth:`analysis.set_options` method.", + "These options can be set by the :meth:`analysis.set_options` method.", "", ] format_lines.extend(lines) @@ -147,7 +145,7 @@ def format_transpiler_opts(self, lines: List[str]) -> List[str]: format_lines = [ ".. rubric:: Transpiler Options", "", - "This option can be set by :py:meth:`set_transpile_options` method.", + "This option can be set by the :meth:`set_transpile_options` method.", "", ] format_lines.extend(lines) @@ -161,7 +159,7 @@ def format_run_opts(self, lines: List[str]) -> List[str]: format_lines = [ ".. rubric:: Backend Run Options", "", - "This option can be set by :py:meth:`set_run_options` method.", + "This option can be set by the :meth:`set_run_options` method.", "", ] format_lines.extend(lines) @@ -179,7 +177,7 @@ def format_analysis_opts(self, lines: List[str]) -> List[str]: format_lines = [ ".. rubric:: Run Options", "", - "These are the keyword arguments of :py:meth:`run` method.", + "These are the keyword arguments of :meth:`run` method.", "", ] format_lines.extend(lines) @@ -216,6 +214,7 @@ def format_fit_parameters(self, lines: List[str]) -> List[str]: return format_lines + class VisualizationSectionFormatter(DocstringSectionFormatter): """Formatter for visualization classes.""" diff --git a/docs/_ext/custom_styles/styles.py b/docs/_ext/custom_styles/styles.py index 3b37c45c89..ae9c3b47e5 100644 --- a/docs/_ext/custom_styles/styles.py +++ b/docs/_ext/custom_styles/styles.py @@ -161,7 +161,7 @@ class ExperimentDocstring(QiskitExperimentDocstring): "warning": load_standard_section, "overview": load_standard_section, "reference": load_standard_section, - "tutorial": load_standard_section, + "manual": load_standard_section, "analysis_ref": load_standard_section, "experiment_opts": None, "transpiler_opts": None, @@ -266,7 +266,7 @@ class AnalysisDocstring(QiskitExperimentDocstring): "fit_model": load_standard_section, "fit_parameters": load_fit_parameters, "reference": load_standard_section, - "tutorial": load_standard_section, + "manual": load_standard_section, "analysis_opts": None, "example": load_standard_section, "note": load_standard_section, @@ -322,9 +322,9 @@ class VisualizationDocstring(QiskitExperimentDocstring): "warning": load_standard_section, "overview": load_standard_section, "reference": load_standard_section, - "tutorial": load_standard_section, - "opts": None, # For standard options - "figure_opts": None, # For figure options + "manual": load_standard_section, + "opts": None, # For standard options + "figure_opts": None, # For figure options "example": load_standard_section, "note": load_standard_section, "see_also": load_standard_section, diff --git a/docs/_ext/custom_styles/utils.py b/docs/_ext/custom_styles/utils.py index f86cd250d7..bee6be7ecc 100644 --- a/docs/_ext/custom_styles/utils.py +++ b/docs/_ext/custom_styles/utils.py @@ -181,7 +181,7 @@ def _format_default_options(defaults: Dict[str, Any], indent: str = "") -> List[ if not defaults: docstring_lines.append(indent + "No default options are set.") else: - docstring_lines.append(indent + "Following values are set by default.") + docstring_lines.append(indent + "The following values are set by default.") docstring_lines.append("") docstring_lines.append(indent + ".. parsed-literal::") docstring_lines.append("") diff --git a/docs/_ext/jupyter-execute-checkenv.py b/docs/_ext/jupyter_execute_custom.py similarity index 74% rename from docs/_ext/jupyter-execute-checkenv.py rename to docs/_ext/jupyter_execute_custom.py index 6e8e75047d..2bc463f0c0 100644 --- a/docs/_ext/jupyter-execute-checkenv.py +++ b/docs/_ext/jupyter_execute_custom.py @@ -11,7 +11,7 @@ # that they have been altered from the originals. """ -Directive to skip build of tutorial cells when indicated by the environment. +Customizations of :mod:`jupyter-sphinx`. """ from jupyter_sphinx import JupyterCell from sphinx.application import Sphinx @@ -20,16 +20,17 @@ class JupyterCellCheckEnv(JupyterCell): """This class overrides the JupyterCell class in :mod:`jupyter-sphinx` - to skip cell execution when `QISKIT_DOCS_SKIP_RST` is true in the environment. + to skip cell execution when `QISKIT_DOCS_SKIP_EXECUTE` is true in the environment. """ def run(self): [cell] = super().run() - if os.getenv("QISKIT_DOCS_SKIP_RST", False): + if os.getenv("QISKIT_DOCS_SKIP_EXECUTE", False): cell["execute"] = False cell["hide_code"] = False return [cell] def setup(app: Sphinx): - app.add_directive("jupyter-execute", JupyterCellCheckEnv) + app.add_directive("jupyter-execute", JupyterCellCheckEnv, override=True) + return {"parallel_read_safe": True} diff --git a/docs/_static/api.png b/docs/_static/api.png new file mode 100644 index 0000000000..cf18a0d871 Binary files /dev/null and b/docs/_static/api.png differ diff --git a/docs/_static/custom.css b/docs/_static/custom.css deleted file mode 100644 index 3f981b6581..0000000000 --- a/docs/_static/custom.css +++ /dev/null @@ -1,27 +0,0 @@ -.toggle .header { - display: block; - clear: both; - background-color: #785EF0; - color: #f9f9f9; - height: 40px; - padding-top: 10px; - padding-left: 5px; - margin-bottom: 20px; -} - -.toggle .header:before { - float: left; - content: "▶ "; - font-size: 20px; - -} - -.toggle .header.open:before { - float: left; - content: "▼ "; - font-size: 20px; -} - -.toggle{ - background: #FBFBFB; -} diff --git a/docs/_static/howtos.png b/docs/_static/howtos.png new file mode 100644 index 0000000000..7e58dd759c Binary files /dev/null and b/docs/_static/howtos.png differ diff --git a/docs/_static/manuals.png b/docs/_static/manuals.png new file mode 100644 index 0000000000..3b43043d61 Binary files /dev/null and b/docs/_static/manuals.png differ diff --git a/docs/_static/style.css b/docs/_static/style.css deleted file mode 100644 index 84980a3a4a..0000000000 --- a/docs/_static/style.css +++ /dev/null @@ -1,12 +0,0 @@ -.wy-nav-content { - max-width: 90% !important; -} - -.wy-side-scroll { - background:#8c8c8c; -} - -.pre -{ -color:#BE8184; -} diff --git a/docs/_static/tutorials.png b/docs/_static/tutorials.png new file mode 100644 index 0000000000..0d69d6f2a1 Binary files /dev/null and b/docs/_static/tutorials.png differ diff --git a/docs/_templates/autosummary/class.rst b/docs/_templates/autosummary/class.rst index e4d661a008..f6e8a53f58 100644 --- a/docs/_templates/autosummary/class.rst +++ b/docs/_templates/autosummary/class.rst @@ -15,32 +15,52 @@ {% block attributes_summary %} {% if attributes %} + {# This counter lets us only render the heading if there's at least + one valid entry. #} + {% set count = namespace(value=0) %} + + {% for item in attributes %} + {% if not item.startswith('_') %} + {% set count.value = count.value + 1 %} + {% if count.value == 1 %} .. rubric:: Attributes .. autosummary:: :toctree: ../stubs/ - {% for item in all_attributes %} - {%- if not item.startswith('_') %} + {% endif %} + {{ name }}.{{ item }} - {%- endif -%} - {%- endfor %} + {% endif %} + {% endfor %} {% endif %} {% endblock %} {% block methods_summary %} {% if methods %} + {% set count = namespace(value=0) %} + {% for item in all_methods %} + + {%- if not item.startswith('_') or item in ['__call__', '__mul__', '__getitem__', '__len__'] %} + {% set count.value = count.value + 1 %} + {% if count.value == 1 %} .. rubric:: Methods .. autosummary:: :toctree: ../stubs/ - {% for item in all_methods %} - {%- if not item.startswith('_') or item in ['__call__', '__mul__', '__getitem__', '__len__'] %} + {% endif %} {{ name }}.{{ item }} {%- endif -%} {%- endfor %} {% for item in inherited_members %} {%- if item in ['__call__', '__mul__', '__getitem__', '__len__'] %} + {% set count.value = count.value + 1 %} + {% if count.value == 1 %} + .. rubric:: Methods + + .. autosummary:: + :toctree: ../stubs/ + {% endif %} {{ name }}.{{ item }} {%- endif -%} {%- endfor %} diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html deleted file mode 100644 index 3c4fb7294b..0000000000 --- a/docs/_templates/layout.html +++ /dev/null @@ -1,325 +0,0 @@ -{# TEMPLATE VAR SETTINGS #} -{%- set url_root = pathto('', 1) %} -{%- if url_root == '#' %}{% set url_root = '' %}{% endif %} -{%- if not embedded and docstitle %} - {%- set titlesuffix = " — "|safe + docstitle|e %} -{%- else %} - {%- set titlesuffix = "" %} -{%- endif %} -{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %} -{% import 'theme_variables.jinja' as theme_variables %} - - - - - - - {{ metatags }} - - {% block htmltitle %} - {{ title|striptags|e }}{{ titlesuffix }} - {% endblock %} - - {# FAVICON #} - {% if favicon %} - - {% endif %} - {# CANONICAL URL #} - {% if theme_canonical_url %} - - {% endif %} - - {# CSS #} - - {# OPENSEARCH #} - {% if not embedded %} - {% if use_opensearch %} - - {% endif %} - - {% endif %} - - - - {%- for css in css_files %} - {%- if css|attr("rel") %} - - {%- else %} - - {%- endif %} - {%- endfor %} - {%- for cssfile in extra_css_files %} - - {%- endfor %} - - {%- block linktags %} - {%- if hasdoc('about') %} - - {%- endif %} - {%- if hasdoc('genindex') %} - - {%- endif %} - {%- if hasdoc('search') %} - - {%- endif %} - {%- if hasdoc('copyright') %} - - {%- endif %} - {%- if next %} - - {%- endif %} - {%- if prev %} - - {%- endif %} - {%- endblock %} - {%- block extrahead %} {% endblock %} - - {# Keep modernizr in head - http://modernizr.com/docs/#installing #} - - - - -
-
-
- - - - - -
- -
-
- - - - - {% block extrabody %} {% endblock %} - - {# SIDE NAV, TOGGLES ON MOBILE #} - - {% include "versions.html" %} - - - - - -
-
-
- {% include "breadcrumbs.html" %} -
- -
- Shortcuts -
-
- -
-
- - {%- block content %} - {% if theme_style_external_links|tobool %} - - -
-
-
- {{ toc }} -
-
-
-
-
- - {% if not embedded %} - - {% if sphinx_version >= "1.8.0" %} - - {%- for scriptfile in script_files %} - {{ js_tag(scriptfile) }} - {%- endfor %} - {% else %} - - {%- for scriptfile in script_files %} - - {%- endfor %} - {% endif %} - - {% endif %} - - - - - - - - -{%- block footer %} {% endblock %} - -
-
-
- - - -
-
-
-
- - -
-
-
- - -
- - - - - - - - \ No newline at end of file diff --git a/docs/_templates/theme_variables.jinja b/docs/_templates/theme_variables.jinja deleted file mode 100644 index f2c185bbe4..0000000000 --- a/docs/_templates/theme_variables.jinja +++ /dev/null @@ -1,9 +0,0 @@ -{%- set external_urls = { - 'github': 'https://github.com/Qiskit/qiskit-experiments', - 'docs': 'https://qiskit.org/documentation/', - 'slack': 'https://qiskit.slack.com', - 'home': 'https://qiskit.org/', - 'resources': 'https://qiskit.org/learn', - 'tutorials': 'https://qiskit.org/documentation/experiments/tutorials/index.html', -} --%} diff --git a/docs/apidocs/index.rst b/docs/apidocs/index.rst index 3a87c0eaa3..7533030ccd 100644 --- a/docs/apidocs/index.rst +++ b/docs/apidocs/index.rst @@ -1,11 +1,20 @@ -.. _qiskit-experiments: +API Reference +============= -================================ -Qiskit Experiments API Reference -================================ +.. warning:: + + This package is still under active development and it is very likely + that there will be breaking API changes in future releases. + If you encounter any bugs, please open an issue on + `GitHub `_. + +The API documentation is organized into two sections below. The package modules include the framework, the +experiment library, experiment modules, and test utilities. Experiment modules are +the main categories of the experiment library itself, such as qubit characterization +and experimental suites like tomography. Package Modules -=============== +--------------- .. toctree:: :maxdepth: 1 @@ -21,7 +30,7 @@ Package Modules test Experiment Modules -================== +------------------ .. toctree:: :maxdepth: 1 diff --git a/docs/conf.py b/docs/conf.py index a2bf64b712..1085b52310 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,62 +17,38 @@ # full list see the documentation: # http://www.sphinx-doc.org/en/master/config +""" +Sphinx documentation builder. +""" + +import os +import sys +import subprocess +import datetime + # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -import os -import sys -import subprocess sys.path.insert(0, os.path.abspath(".")) sys.path.append(os.path.abspath("./_ext")) sys.path.append(os.path.abspath("..")) -""" -Sphinx documentation builder -""" - # Set env flag so that we can doc functions that may otherwise not be loaded # see for example interactive visualizations in qiskit.visualization. os.environ["QISKIT_DOCS"] = "TRUE" # -- Project information ----------------------------------------------------- -project = "Qiskit Experiments" -copyright = "2021, Qiskit Development Team" # pylint: disable=redefined-builtin -author = "Qiskit Development Team" - # The short X.Y version version = "0.5" # The full version, including alpha/beta/rc tags release = "0.5.0" - -rst_prolog = """ -.. raw:: html - -


- -.. |version| replace:: {0} -""".format( - release -) - -nbsphinx_prolog = """ -{% set docname = env.doc2path(env.docname, base=None) %} -.. only:: html - - .. role:: raw-html(raw) - :format: html - - .. raw:: html - -


- - .. note:: - Run interactively in jupyter notebook. -""" +project = f"Qiskit Experiments {version}" +copyright = f"2021-{datetime.date.today().year}, Qiskit Development Team" # pylint: disable=redefined-builtin +author = "Qiskit Development Team" # -- General configuration --------------------------------------------------- @@ -91,46 +67,51 @@ "sphinx.ext.mathjax", "sphinx.ext.viewcode", "sphinx.ext.extlinks", + "sphinx_copybutton", "jupyter_sphinx", "sphinx_autodoc_typehints", "reno.sphinxext", - "sphinx_panels", + "sphinx_design", "sphinx.ext.intersphinx", "nbsphinx", "autoref", "autodoc_experiment", "autodoc_analysis", "autodoc_visualization", - "jupyter-execute-checkenv", + "jupyter_execute_custom", ] + html_static_path = ["_static"] templates_path = ["_templates"] -html_css_files = ["style.css", "custom.css", "gallery.css"] +html_css_files = ["gallery.css"] nbsphinx_timeout = 360 nbsphinx_execute = os.getenv("QISKIT_DOCS_BUILD_TUTORIALS", "never") nbsphinx_widgets_path = "" exclude_patterns = ["_build", "**.ipynb_checkpoints"] -nbsphinx_thumbnails = {} + +# Thumbnails for experiment manuals from output images +# These should ideally be automatically generated using a custom macro to specify +# chosen cells for thumbnails, like the nbsphinx-gallery tag +nbsphinx_thumbnails = { + "manuals/benchmarking/quantum_volume": "_images/quantum_volume_2_0.png", + "manuals/measurement/readout_mitigation": "_images/readout_mitigation_4_0.png", + "manuals/benchmarking/randomized_benchmarking": "_images/randomized_benchmarking_3_1.png", + "manuals/measurement/restless_measurements": "_images/restless_shots.png", + "manuals/benchmarking/state_tomography": "_images/state_tomography_3_0.png", + "manuals/characterization/t1": "_images/t1_0_0.png", + "manuals/characterization/t2ramsey": "_images/t2ramsey_4_0.png", + "manuals/characterization/tphi": "_images/tphi_5_1.png", + "manuals/characterization/t2hahn": "_images/t2hahn_5_0.png", +} # Add `data keys` and `style parameters` alias. Needed for `expected_*_data_keys` methods in # visualization module and `default_style` method in `PlotStyle` respectively. napoleon_custom_sections = [("data keys", "params_style"), ("style parameters", "params_style")] -# ----------------------------------------------------------------------------- -# Autosummary -# ----------------------------------------------------------------------------- - autosummary_generate = True -# ----------------------------------------------------------------------------- -# Autodoc -# ----------------------------------------------------------------------------- - -autodoc_default_options = { - "inherited-members": None, -} - +autodoc_default_options = {"inherited-members": None} # If true, figures, tables and code-blocks are automatically numbered if they # have a caption. @@ -177,7 +158,11 @@ # html_theme = "qiskit_sphinx_theme" # use the theme in subdir 'theme' -# html_sidebars = {'**': ['globaltoc.html']} +html_context = { + "analytics_enabled": True, + "expandable_sidebar": True, +} + html_last_updated_fmt = "%Y/%m/%d" html_theme_options = { @@ -192,25 +177,16 @@ intersphinx_mapping = { "matplotlib": ("https://matplotlib.org/stable/", None), "qiskit": ("https://qiskit.org/documentation/", None), + "uncertainties": ("https://pythonhosted.org/uncertainties", None), } -# Current scipy hosted docs are missing the object.inv file so leaving this -# commented out until the missing file is added back. -# 'scipy': ('https://docs.scipy.org/doc/scipy/reference/', None)} - # Prepend warning for development docs: -if not os.getenv("EXPERIMENTS_DEV_DOCS", None): - rst_prolog = """ -.. raw:: html -


-""".format( - release - ) -else: +if os.getenv("EXPERIMENTS_DEV_DOCS", None): rst_prolog = """ .. raw:: html +


.. note:: This is the documentation for the current state of the development branch @@ -247,3 +223,39 @@ def _get_version_label(current_version): def setup(app): app.connect("config-inited", _get_versions) + app.connect("autodoc-skip-member", maybe_skip_member) + + +# Hardcoded list of class variables to skip in autodoc to avoid warnings +# Should come up with better way to address this + +from qiskit_experiments.curve_analysis import ParameterRepr +from qiskit_experiments.curve_analysis import SeriesDef + + +def maybe_skip_member(app, what, name, obj, skip, options): + skip_names = [ + "analysis", + "set_run_options", + "data_allocation", + "labels", + "shots", + "x", + "y", + "y_err", + "name", + "filter_kwargs", + "fit_func", + "signature", + ] + skip_members = [ + ParameterRepr.repr, + ParameterRepr.unit, + SeriesDef.plot_color, + SeriesDef.plot_symbol, + SeriesDef.model_description, + SeriesDef.canvas, + ] + if not skip: + return (name in skip_names or obj in skip_members) and what == "attribute" + return skip diff --git a/docs/howtos/cloud_service.rst b/docs/howtos/cloud_service.rst new file mode 100644 index 0000000000..ec9a68f093 --- /dev/null +++ b/docs/howtos/cloud_service.rst @@ -0,0 +1,190 @@ +Save and load experiment data with the cloud service +==================================================== + +.. note:: + This guide is only for those who have access to the cloud service. You can + check whether you do by logging into the IBM Quantum interface + and seeing if you can see the `database `__. + +Problem +------- + +You want to save and retrieve experiment data from the cloud service. + +Solution +-------- + +Saving +~~~~~~ + +.. note:: + This guide requires :mod:`qiskit-ibm-provider`. For how to migrate from the deprecated :mod:`qiskit-ibmq-provider` to :mod:`qiskit-ibm-provider`, + consult the `migration guide `_.\ + +You must run the experiment on a real IBM +backend and not a simulator to be able to save the experiment data. This is done by calling +:meth:`~.ExperimentData.save`: + +.. jupyter-input:: + + from qiskit_ibm_provider import IBMProvider + from qiskit_experiments.library.characterization import T1 + import numpy as np + + provider = IBMProvider() + backend = provider.get_backend("ibmq_lima") + + t1_delays = np.arange(1e-6, 600e-6, 50e-6) + + exp = T1(qubit=0, delays=t1_delays) + + t1_expdata = exp.run(backend=backend).block_for_results() + t1_expdata.save() + +.. jupyter-output:: + + You can view the experiment online at + https://quantum-computing.ibm.com/experiments/10a43cb0-7cb9-41db-ad74-18ea6cf63704 + +Loading +~~~~~~~ + +Let's load a `previous T1 +experiment `__ +(requires login to view), which we've made public by editing the ``Share level`` field: + +.. jupyter-input:: + + from qiskit_experiments.framework.experiment_data import ExperimentData + service = ExperimentData.get_service_from_backend(backend) + load_expdata = ExperimentData.load("9640736e-d797-4321-b063-d503f8e98571", service) + +To display the figure, which is serialized into a string, we need the +``SVG`` library: + +.. jupyter-input:: + + from IPython.display import SVG + SVG(load_expdata.figure(0).figure) + +.. image:: ./experiment_cloud_service/t1_loaded.png + +The analysis results have been retrieved as well: + +.. jupyter-input:: + + for result in load_expdata.analysis_results(): + print(result) + +.. jupyter-output:: + + AnalysisResult + - name: T1 + - value: 0.0001040+/-0.0000028 + - χ²: 0.8523786276663019 + - quality: good + - extra: <1 items> + - device_components: ['Q0'] + - verified: False + AnalysisResult + - name: @Parameters_T1Analysis + - value: CurveFitResult: + - fitting method: least_squares + - number of sub-models: 1 + * F_exp_decay(x) = amp * exp(-x/tau) + base + - success: True + - number of function evals: 9 + - degree of freedom: 9 + - chi-square: 7.671407648996717 + - reduced chi-square: 0.8523786276663019 + - Akaike info crit.: 0.6311217041870707 + - Bayesian info crit.: 2.085841653551072 + - init params: + * amp = 0.923076923076923 + * tau = 0.00016946294665316433 + * base = 0.033466533466533464 + - fit params: + * amp = 0.9266620487665083 ± 0.007096409569790425 + * tau = 0.00010401411623191737 ± 2.767679521974391e-06 + * base = 0.036302726197354626 ± 0.0037184540724124844 + - correlations: + * (tau, base) = -0.6740808746060173 + * (amp, base) = -0.4231810882291163 + * (amp, tau) = 0.09302612202500576 + - quality: good + - device_components: ['Q0'] + - verified: False + +Discussion +---------- + +Note that calling :meth:`~.ExperimentData.save` before the experiment is complete will +instantiate an experiment entry in the database, but it will not have +complete data. To fix this, you can call :meth:`~.ExperimentData.save` again once the +experiment is done running. + +Auto-saving an experiment +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The :meth:`~.ExperimentData.auto_save` feature automatically saves changes to the +:class:`.ExperimentData` object to the cloud service whenever it's updated. + +.. jupyter-input:: + + exp = T1(qubit=0, delays=t1_delays) + + t1_expdata = exp.run(backend=backend, shots=1000) + t1_expdata.auto_save = True + t1_expdata.block_for_results() + +.. jupyter-output:: + + You can view the experiment online at https://quantum-computing.ibm.com/experiments/cdaff3fa-f621-4915-a4d8-812d05d9a9ca + + +Deleting an experiment +~~~~~~~~~~~~~~~~~~~~~~ + +Both figures and analysis results can be deleted. Note that unless you +have auto save on, the update has to be manually saved to the remote +database by calling :meth:`~.ExperimentData.save`. Because there are two analysis +results, one for the T1 parameter and one for the curve fitting results, we must +delete twice to fully remove the analysis results. + +.. jupyter-input:: + + t1_expdata.delete_figure(0) + t1_expdata.delete_analysis_result(0) + t1_expdata.delete_analysis_result(0) + +.. jupyter-output:: + + Are you sure you want to delete the experiment plot? [y/N]: y + Are you sure you want to delete the analysis result? [y/N]: y + Are you sure you want to delete the analysis result? [y/N]: y + +Tagging and sharing experiments +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Tags and notes can be added to experiments to help identify specific experiments in the interface. +For example, an experiment can be tagged and made public with the following code. + +.. jupyter-input:: + + t1_expdata.tags = ['tag1', 'tag2'] + t1_expdata.share_level = "public" + t1_expdata.notes = "Example note." + +Web interface +~~~~~~~~~~~~~ + +You can also view experiment results as well as change the tags and share level at the `IBM Quantum Experiments +pane `__ +on the cloud. The documentation below explains how to view, search, and share experiment +data entries. + +See also +-------- + +* `Experiments web interface documentation `__ + diff --git a/docs/tutorials/experiment_cloud_service/t1_loaded.png b/docs/howtos/experiment_cloud_service/t1_loaded.png similarity index 100% rename from docs/tutorials/experiment_cloud_service/t1_loaded.png rename to docs/howtos/experiment_cloud_service/t1_loaded.png diff --git a/docs/howtos/index.rst b/docs/howtos/index.rst new file mode 100644 index 0000000000..4fc1fcab39 --- /dev/null +++ b/docs/howtos/index.rst @@ -0,0 +1,26 @@ +How-To Guides +============= + +This section of the documentation provides concrete step-by-step instructions for how to +do specific useful actions in Qiskit Experiments. It is recommended that you first +familiarize with :ref:`the basics ` of the package before using these guides. + +.. toctree:: + :caption: How to... + :maxdepth: 1 + :glob: + + * + +| + +If there are guides on solving specific problems that you'd like to see added, please +`file an issue on GitHub `_. + +| + + +.. Hiding - Indices and tables + :ref:`genindex` + :ref:`modindex` + :ref:`search` diff --git a/docs/howtos/job_splitting.rst b/docs/howtos/job_splitting.rst new file mode 100644 index 0000000000..0785551e67 --- /dev/null +++ b/docs/howtos/job_splitting.rst @@ -0,0 +1,47 @@ +Control the splitting of experiment circuits into jobs +====================================================== + +Problem +------- + +You want to manually control how an experiment is split into jobs when running on +a backend. + +Solution +-------- + +There are two experiment options relevant to custom job splitting. +You can set the ``max_circuits`` option manually when running an experiment: + +.. jupyter-input:: + + exp = Experiment([0]) + exp.set_experiment_options(max_circuits=100) + +The experiment class will split its circuits into jobs such that no job has more than +``max_circuits`` number of jobs. + +Furthermore, the :class:`.BatchExperiment` class has the experiment option +``separate_jobs`` which will run circuits of different sub-experiments in different +jobs: + +.. jupyter-input:: + + batch_exp = BatchExperiment([exp, exp]) + batch_exp.set_experiment_options(separate_jobs=True) + +Note that this option is only available to :class:`.BatchExperiment` objects. To manage +job splitting when using :class:`.ParallelExperiment`, you can make a nested batch +experiment of parallel experiments. + +Discussion +---------- + +Qiskit Experiments will automatically split circuits across jobs for you for backends +that have a maximum circuit number per circuit, which is given by the ``max_experiments`` +property of :meth:`qiskit.providers.BackendV1.configuration` for V1 backends and +:attr:`qiskit.providers.BackendV2.max_circuits` for V2. This should +work automatically in most cases, but there may be some backends where other limits +exist. When the ``max_circuits`` experiment option is provided, the experiment class +will split the experiment circuits as dictated by the smaller of the backend property +and the experiment option. \ No newline at end of file diff --git a/docs/howtos/new_experimentdata.rst b/docs/howtos/new_experimentdata.rst new file mode 100644 index 0000000000..24dcc11fd7 --- /dev/null +++ b/docs/howtos/new_experimentdata.rst @@ -0,0 +1,87 @@ +Instantiate a new data object for an existing experiment +======================================================== + +Problem +------- + +You want to instantiate a new :class:`.ExperimentData` object from an existing +experiment whose jobs have finished execution successfully. + +Solution +-------- + +.. note:: + This guide requires :mod:`qiskit-ibm-provider`. For how to migrate from the deprecated :mod:`qiskit-ibmq-provider` to :mod:`qiskit-ibm-provider`, + consult the `migration guide `_.\ + +Use the code template below. You need to recreate the exact experiment you ran and its +options, as well as the IDs of the jobs that were executed. The jobs must be accessible +through the provider that you use. + +.. jupyter-input:: + + from qiskit_experiments.framework import ExperimentData + from qiskit_ibm_provider import IBMProvider + + # The experiment you ran + experiment = Experiment(**opts) + + # List of job IDs for the experiment + job_ids= [job1, job2, ...] + + provider = IBMProvider() + + data = ExperimentData(experiment = experiment) + data.add_jobs([provider.retrieve_job(job_id) for job_id in job_ids]) + experiment.analysis.run(data) + + # Block execution of subsequent code until analysis is complete + data.block_for_results() + +``data`` will be the new experiment data object. + +Discussion +---------- + +This guide is helpful for cases such as a lost connection during experiment execution, +where the jobs may have finished running on the remote backends but the +:class:`.ExperimentData` class returned upon completion of an experiment does not +contain correct results. + +Recreation of the experiment object is often done by rerunning the code that you ran +previously to create it. It may sometimes be helpful instead to save an experiment and +restore it later with the following lines of code: + +.. jupyter-input:: + + serialized_exp = json.dumps(Experiment.config()) + Experiment.from_config(json.loads(serialized_exp)) + +You may also want to rerun the analysis with different options of a previously-run +experiment when you instantiate this new :class:`.ExperimentData` object. Here's a code +snippet where we reconstruct a parallel experiment consisting of randomized benchmarking +experiments, then change the gate error ratio as well as the line plot color of the +first component experiment. + +.. jupyter-input:: + + pexp = ParallelExperiment([ + StandardRB((i,), np.arange(1, 800, 200), num_samples=10) for i in range(2)]) + + pexp.analysis.component_analysis(0).options.gate_error_ratio = { + "x": 10, "sx": 1, "rz": 0 + } + pexp.analysis.component_analysis(0).plotter.figure_options.series_params.update( + { + "rb_decay": {"color": "r"} + } + ) + + data = ExperimentData(experiment=pexp) + data.add_jobs([provider.retrieve_job(job_id) for job_id in job_ids]) + pexp.analysis.run(data) + +See Also +-------- + +* `Saving and loading experiment data with the cloud service `_ diff --git a/docs/index.rst b/docs/index.rst index 1437e3c9ae..e3b0686a9b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,39 +1,131 @@ -################################ +.. _qiskit-experiments: + Qiskit Experiments Documentation -################################ +================================ + +.. warning:: -About Qiskit Experiments -======================== + This package is still under active development and it is very likely + that there will be breaking API changes in future releases. + If you encounter any bugs, please open an issue on + `GitHub `_. Qiskit Experiments provides both a :doc:`library ` of standard quantum characterization, calibration, and verification experiments, and a general :doc:`framework ` for implementing custom experiments which can be run on quantum devices through Qiskit. -Experiments run on `IBMQ Provider `_ -backends can be stored and retrieved from an online experiment -:doc:`database `. +We've divided up the documentation into four sections with different purposes: -.. warning:: +.. grid:: 2 + :gutter: 5 + + .. grid-item-card:: Tutorials + + .. image:: _static/tutorials.png + :target: tutorials/index.html + + These step-by-step tutorials teach the fundamentals of the package and + are suitable for getting started. You'll find in these tutorials: + + * An overview of the :ref:`package structure ` + * How to :doc:`install the package and run your first experiment ` + * How to :doc:`write your own experiment ` + + +++ + + .. button-ref:: tutorials/index + :expand: + :color: secondary + + To the learning tutorials + + .. grid-item-card:: How-To Guides + + .. image:: _static/howtos.png + :target: howtos/index.html + + These standalone how-to guides provide short and direct solutions to some commonly + asked questions for Qiskit Experiments users. You'll find in these guides: + + * How to :doc:`re-instantiate experiment data for an existing experiment ` + * How to :doc:`customize the splitting of circuits into jobs ` + + +++ + + .. button-ref:: howtos/index + :expand: + :color: secondary - This package is still under active development and it is very likely - that there will be breaking API changes in future releases. - If you encounter any bugs please open an issue on - `Github `_ + To the how-to guides + .. grid-item-card:: Experiment Manuals -Table of Contents -================= + .. image:: _static/manuals.png + :target: manuals/index.html + + These are in-depth manuals to key experiments in the package, describing their + background, principle, and how to run them in Qiskit Experiments. You'll find in + these manuals: + + * How to analyze 1- and 2-qubit errors in :doc:`randomized benchmarking ` + * How to calculate the speedup from using :doc:`restless measurements ` + + +++ + + .. button-ref:: manuals/index + :expand: + :color: secondary + + To the experiment manuals + + + .. grid-item-card:: API Reference + + .. image:: _static/api.png + :target: apidocs/index.html + + This is a detailed description of every module, method, and function in + Qiskit Experiments and how to use them, suitable for those working closely + with specific parts of the package or writing your custom code. You'll find in these references: + + * Parameters, attributes, and methods of the :class:`.BaseExperiment` class + * Default experiment, transpile, and run options for the :class:`.T1` experiment + +++ + + .. button-ref:: apidocs/index + :expand: + :color: secondary + + To the API reference .. toctree:: - :maxdepth: 2 + :hidden: + :caption: Tutorials - API References - Experiment Library - Tutorials - Release Notes + All Tutorials + tutorials/intro + tutorials/getting_started + Calibrations + Data Processor + Curve Analysis + Visualization + Custom Experiments + +.. toctree:: + :hidden: + + howtos/index + manuals/index + apidocs/index + release_notes + GitHub + Development Branch Docs + +| .. Hiding - Indices and tables :ref:`genindex` :ref:`modindex` :ref:`search` + diff --git a/docs/tutorials/quantum_volume.rst b/docs/manuals/benchmarking/quantum_volume.rst similarity index 87% rename from docs/tutorials/quantum_volume.rst rename to docs/manuals/benchmarking/quantum_volume.rst index a180826992..e57a192c2c 100644 --- a/docs/tutorials/quantum_volume.rst +++ b/docs/manuals/benchmarking/quantum_volume.rst @@ -7,9 +7,9 @@ QV method quantifies the largest random circuit of equal width and depth that the computer successfully implements. Quantum computing systems with high-fidelity operations, high connectivity, large calibrated gate sets, and circuit rewriting toolchains are expected to have higher -quantum volumes. See `Qiskit +quantum volumes. See the `Qiskit Textbook `__ -for an explanation on the QV method, which is described in Ref. [1, 2]. +for an explanation on the QV method, which is described in Refs. [1]_ [2]_. The Quantum Volume is determined by the largest successful circuit depth :math:`d_{max}`, and equals to :math:`2^{d_{max}}`. In the QV experiment @@ -18,8 +18,8 @@ circuits 2/3 with confidence level > 0.977 (corresponding to @@ -174,16 +174,18 @@ Extracting the maximum Quantum Volume. References ---------- -[1] Andrew W. Cross, Lev S. Bishop, Sarah Sheldon, Paul D. Nation, and -Jay M. Gambetta, Validating quantum computers using randomized model -circuits, Phys. Rev. A 100, 032328 (2019). -https://arxiv.org/pdf/1811.12926 +.. [1] Andrew W. Cross, Lev S. Bishop, Sarah Sheldon, Paul D. Nation, and + Jay M. Gambetta, Validating quantum computers using randomized model + circuits, Phys. Rev. A 100, 032328 (2019). + https://arxiv.org/pdf/1811.12926 -[2] Petar Jurcevic et. al. Demonstration of quantum volume 64 on -a superconducting quantum computing system, -https://arxiv.org/pdf/2008.08571 +.. [2] Petar Jurcevic et. al. Demonstration of quantum volume 64 on + a superconducting quantum computing system, + https://arxiv.org/pdf/2008.08571 -.. jupyter-execute:: +See also +-------- + +* API documentation: :mod:`~qiskit_experiments.library.quantum_volume` +* Qiskit Textbook: `Measuring Quantum Volume `__ - import qiskit.tools.jupyter - %qiskit_copyright diff --git a/docs/tutorials/randomized_benchmarking.rst b/docs/manuals/benchmarking/randomized_benchmarking.rst similarity index 62% rename from docs/tutorials/randomized_benchmarking.rst rename to docs/manuals/benchmarking/randomized_benchmarking.rst index 492d65c68d..a1c6fa874c 100644 --- a/docs/tutorials/randomized_benchmarking.rst +++ b/docs/manuals/benchmarking/randomized_benchmarking.rst @@ -1,15 +1,15 @@ Randomized Benchmarking ======================= -A randomized benchmarking (RB) experiment consists of the generation of -random Clifford circuits on the given qubits such that the unitary -computed by the circuits is the identity. After running the circuits, -the number of shots resulting in an error (i.e. an output different than -the ground state) are counted, and from this data one can infer error -estimates for the quantum device, by calculating the Error Per Clifford. -See `Qiskit -Textbook `__ -for an explanation on the RB method, which is based on Ref. [1, 2]. +Randomized benchmarking (RB) is a popular protocol for characterizing the error rate of +quantum processors. An RB experiment consists of the generation of random Clifford +circuits on the given qubits such that the unitary computed by the circuits is the +identity. After running the circuits, the number of shots resulting in an error (i.e. an +output different from the ground state) are counted, and from this data one can infer +error estimates for the quantum device, by calculating the Error Per Clifford. See the +`Qiskit Textbook +`__ for an +explanation on the RB method, which is based on Refs. [1]_ [2]_. .. jupyter-execute:: @@ -54,16 +54,17 @@ The analysis results of the RB Experiment may include: :math:`a \cdot \alpha^m + b`, where :math:`m` is the Clifford length - ``EPG``: The Error Per Gate calculated from the EPC, only for 1-qubit - or 2-qubit quantum gates (see Ref. [3]) + or 2-qubit quantum gates (see [3]_) Running a 1-qubit RB experiment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------- -Standard RB experiment will provide you gate errors for every basis gates -constituting averaged Clifford gate. Note that you can only obtain a single EPC value :math:`\cal E` -from a single RB experiment. As such, computing the error values for multiple gates :math:`\{g_i\}` -requires some assumption of contribution of each gate to the total depolarizing error. -This is so called ``gate_error_ratio`` option you can find in analysis options. +The standard RB experiment will provide you gate errors for every basis gate +constituting an averaged Clifford gate. Note that you can only obtain a single EPC value +:math:`\cal E` from a single RB experiment. As such, computing the error values for +multiple gates :math:`\{g_i\}` requires some assumption of contribution of each gate to +the total depolarizing error. This is provided by the ``gate_error_ratio`` analysis +option. Provided that we have :math:`n_i` gates with independent error :math:`e_i` per Clifford, the total EPC is estimated by the composition of error from every basis gate, @@ -82,14 +83,14 @@ some standard value :math:`e_0`, we can compute EPG :math:`e_i` for each basis g {\cal E} \sim e_0 \sum_{i} n_i r_i -The EPG of :math:`i` th basis gate will be +The EPG of the :math:`i` th basis gate will be .. math:: e_i \sim r_i e_0 = \dfrac{r_i{\cal E}}{\sum_{i} n_i r_i}. Because EPGs are computed based on this simple assumption, -this is not necessary representing the true gate error on the hardware. +this is not necessarily representing the true gate error on the hardware. If you have multiple kinds of basis gates with unclear error ratio :math:`r_i`, interleaved RB experiment will always give you accurate error value :math:`e_i`. @@ -114,14 +115,14 @@ interleaved RB experiment will always give you accurate error value :math:`e_i`. Running a 2-qubit RB experiment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------- In the same way we can compute EPC for two-qubit RB experiment. However, the EPC value obtained by the experiment indicates a depolarization which is a composition of underlying error channels for 2Q gates and 1Q gates in each qubit. Usually 1Q gate contribution is small enough to ignore, but in case this contribution is significant comparing to the 2Q gate error, -we can decompose the contribution of 1Q gates [3]. +we can decompose the contribution of 1Q gates [3]_. .. math:: @@ -205,32 +206,37 @@ contribution of depolarization from single-qubit error channels. Displaying the RB circuits -~~~~~~~~~~~~~~~~~~~~~~~~~~ +-------------------------- -Generating an example RB circuit: +The default RB circuit output shows Clifford blocks: .. jupyter-execute:: # Run an RB experiment on qubit 0 - exp = StandardRB(physical_qubits=[0], lengths=[10], num_samples=1, seed=seed) + exp = StandardRB(physical_qubits=[0], lengths=[2], num_samples=1, seed=seed) c = exp.circuits()[0] + c.draw("mpl") -We transpile the circuit into the backend’s basis gate set: +You can decompose the circuit into underlying gates: + +.. jupyter-execute:: + + c.decompose().draw("mpl") + +And see the transpiled circuit using the basis gate set of the backend: .. jupyter-execute:: from qiskit import transpile basis_gates = backend.configuration().basis_gates - print(transpile(c, basis_gates=basis_gates)) + transpile(c, basis_gates=basis_gates).draw("mpl") Interleaved RB experiment ------------------------- -Interleaved RB experiment is used to estimate the gate error of the -interleaved gate (see Ref. [4]). - -In addition to the usual RB parameters, we also need to provide: +The interleaved RB experiment is used to estimate the gate error of the interleaved gate +(see [4]_). In addition to the usual RB parameters, we also need to provide: - ``interleaved_element``: the element to interleave, given either as a group element or as an instruction/circuit @@ -245,40 +251,12 @@ The analysis results of the RB Experiment includes the following: Extra analysis results include - ``EPC_systematic_err``: The systematic error of the interleaved gate - error (see Ref. [4]) + error [4]_ - ``EPC_systematic_bounds``: The systematic error bounds of the - interleaved gate error (see Ref. [4]) - -Running a 1-qubit interleaved RB experiment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. jupyter-execute:: - - lengths = np.arange(1, 800, 200) - num_samples = 10 - seed = 1010 - qubits = [0] - - # Run an Interleaved RB experiment on qubit 0 - # The interleaved gate is the x gate - int_exp1 = InterleavedRB( - circuits.XGate(), qubits, lengths, num_samples=num_samples, seed=seed) - - # Run - int_expdata1 = int_exp1.run(backend).block_for_results() - int_results1 = int_expdata1.analysis_results() - -.. jupyter-execute:: - - # View result data - display(int_expdata1.figure(0)) - for result in int_results1: - print(result) - + interleaved gate error [4]_ -Running a 2-qubit interleaved RB experiment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Let's run an interleaved RB experiment on two qubits: .. jupyter-execute:: @@ -304,72 +282,29 @@ Running a 2-qubit interleaved RB experiment print(result) - -Running a simultaneous RB experiment ------------------------------------- - -We use ``ParallelExperiment`` to run the RB experiment simultaneously on -different qubits (see Ref. [5]) - -.. jupyter-execute:: - - lengths = np.arange(1, 800, 200) - num_samples = 10 - seed = 1010 - qubits = range(3) - - # Run a parallel 1-qubit RB experiment on qubits 0, 1, 2 - exps = [StandardRB([i], lengths, num_samples=num_samples, seed=seed + i) - for i in qubits] - par_exp = ParallelExperiment(exps) - par_expdata = par_exp.run(backend).block_for_results() - par_results = par_expdata.analysis_results() - - -Viewing sub experiment data -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The experiment data returned from a batched experiment also contains -individual experiment data for each sub experiment which can be accessed -using ``child_data`` - -.. jupyter-execute:: - - # Print sub-experiment data - for i in qubits: - print(f"Component experiment {i}") - display(par_expdata.child_data(i).figure(0)) - for result in par_expdata.child_data(i).analysis_results(): - print(result) - References ---------- -[1] Easwar Magesan, J. M. Gambetta, and Joseph Emerson, *Robust -randomized benchmarking of quantum processes*, -https://arxiv.org/pdf/1009.3639 +.. [1] Easwar Magesan, J. M. Gambetta, and Joseph Emerson, *Robust + randomized benchmarking of quantum processes*, + https://arxiv.org/abs/1009.3639. -[2] Easwar Magesan, Jay M. Gambetta, and Joseph Emerson, *Characterizing -Quantum Gates via Randomized Benchmarking*, -https://arxiv.org/pdf/1109.6887 +.. [2] Easwar Magesan, Jay M. Gambetta, and Joseph Emerson, *Characterizing + Quantum Gates via Randomized Benchmarking*, + https://arxiv.org/abs/1109.6887. -[3] David C. McKay, Sarah Sheldon, John A. Smolin, Jerry M. Chow, and -Jay M. Gambetta, *Three Qubit Randomized Benchmarking*, -https://arxiv.org/pdf/1712.06550 +.. [3] David C. McKay, Sarah Sheldon, John A. Smolin, Jerry M. Chow, and + Jay M. Gambetta, *Three Qubit Randomized Benchmarking*, + https://arxiv.org/abs/1712.06550. -[4] Easwar Magesan, Jay M. Gambetta, B. R. Johnson, Colm A. Ryan, Jerry -M. Chow, Seth T. Merkel, Marcus P. da Silva, George A. Keefe, Mary B. -Rothwell, Thomas A. Ohki, Mark B. Ketchen, M. Steffen, *Efficient -measurement of quantum gate error by interleaved randomized -benchmarking*, https://arxiv.org/pdf/1203.4550 +.. [4] Easwar Magesan, Jay M. Gambetta, B. R. Johnson, Colm A. Ryan, Jerry + M. Chow, Seth T. Merkel, Marcus P. da Silva, George A. Keefe, Mary B. + Rothwell, Thomas A. Ohki, Mark B. Ketchen, M. Steffen, *Efficient + measurement of quantum gate error by interleaved randomized + benchmarking*, https://arxiv.org/abs/1203.4550. -[5] Jay M. Gambetta, A. D. C´orcoles, S. T. Merkel, B. R. Johnson, John -A. Smolin, Jerry M. Chow, Colm A. Ryan, Chad Rigetti, S. Poletto, Thomas -A. Ohki, Mark B. Ketchen, and M. Steffen, *Characterization of -addressability by simultaneous randomized benchmarking*, -https://arxiv.org/pdf/1204.6308 - -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.randomized_benchmarking` +* Qiskit Textbook: `Randomized Benchmarking `__ diff --git a/docs/tutorials/state_tomography.rst b/docs/manuals/benchmarking/state_tomography.rst similarity index 71% rename from docs/tutorials/state_tomography.rst rename to docs/manuals/benchmarking/state_tomography.rst index 7b7c1cd368..549ec623b5 100644 --- a/docs/tutorials/state_tomography.rst +++ b/docs/manuals/benchmarking/state_tomography.rst @@ -17,9 +17,10 @@ Quantum State Tomography State Tomography Experiment --------------------------- -To run a state tomography experiment we initialize the experiment with a -circuit to prepare the state to be measured. We can also pass in an -``Operator``, or a ``Statevector`` to describe the preparation circuit. +To run a state tomography experiment, we initialize the experiment with a circuit to +prepare the state to be measured. We can also pass in an +:class:`~qiskit.quantum_info.Operator` or a :class:`~qiskit.quantum_info.Statevector` +to describe the preparation circuit. .. jupyter-execute:: @@ -54,8 +55,12 @@ The main result for tomography is the fitted state, which is stored as a state_result = qstdata1.analysis_results("state") print(state_result.value) +We can also visualize the density matrix: +.. jupyter-execute:: + from qiskit.visualization import plot_state_city + plot_state_city(qstdata1.analysis_results("state").value, title='Density Matrix') The state fidelity of the fitted state with the ideal state prepared by the input circuit is stored in the ``"state_fidelity"`` result field. @@ -74,24 +79,25 @@ Additional state metadata ^^^^^^^^^^^^^^^^^^^^^^^^^ Additional data is stored in the tomography under the -``"state_metadata"`` field. This includes - ``eigvals``: the eigenvalues -of the fitted state - ``trace``: the trace of the fitted state - -``positive``: Whether the eigenvalues are all non-negative - -``positive_delta``: the deviation from positivity given by 1-norm of -negative eigenvalues. - -If trace rescaling was performed this dictionary will also contain a -``raw_trace`` field containing the trace before rescaling. Futhermore, -if the state was rescaled to be positive or trace 1 an additional field -``raw_eigvals`` will contain the state eigenvalues before rescaling was -performed. +``"state_metadata"`` field. This includes + +- ``eigvals``: the eigenvalues of the fitted state +- ``trace``: the trace of the fitted state +- ``positive``: Whether the eigenvalues are all non-negative +- ``positive_delta``: the deviation from positivity given by 1-norm of negative + eigenvalues. + +If trace rescaling was performed this dictionary will also contain a ``raw_trace`` field +containing the trace before rescaling. Futhermore, if the state was rescaled to be +positive or trace 1 an additional field ``raw_eigvals`` will contain the state +eigenvalues before rescaling was performed. .. jupyter-execute:: state_result.extra -To see the effect of rescaling we can perform a “bad” fit with very low -counts +To see the effect of rescaling, we can perform a “bad” fit with very low +counts: .. jupyter-execute:: @@ -114,13 +120,11 @@ The default fitters is ``linear_inversion``, which reconstructs the state using *dual basis* of the tomography basis. This will typically result in a non-positive reconstructed state. This state is rescaled to be positive-semidefinite (PSD) by computing its eigen-decomposition and -rescaling its eigenvalues using the approach from \*J Smolin, JM -Gambetta, G Smith, Phys. Rev. Lett. 108, 070502 (2012), `open -access `__. +rescaling its eigenvalues using the approach from Ref. [1]_. There are several other fitters are included (See API documentation for -details). For example if ``cvxpy`` is installed we can use the -``cvxpy_gaussian_lstsq`` fitter which allows constraining the fit to be +details). For example, if ``cvxpy`` is installed we can use the +:func:`~.cvxpy_gaussian_lstsq` fitter, which allows constraining the fit to be PSD without requiring rescaling. .. jupyter-execute:: @@ -146,7 +150,7 @@ PSD without requiring rescaling. Parallel Tomography Experiment ------------------------------ -We can also use the ``qiskit_experiments.ParallelExperiment`` class to +We can also use the :class:`.ParallelExperiment` class to run subsystem tomography on multiple qubits in parallel. For example if we want to perform 1-qubit QST on several qubits at once: @@ -159,7 +163,7 @@ For example if we want to perform 1-qubit QST on several qubits at once: for i in range(num_qubits)] subexps = [ - StateTomography(gate, qubits=[i]) + StateTomography(gate, physical_qubits=[i]) for i, gate in enumerate(gates) ] parexp = ParallelExperiment(subexps) @@ -168,7 +172,7 @@ For example if we want to perform 1-qubit QST on several qubits at once: for result in pardata.analysis_results(): print(result) -View component experiment analysis results +View component experiment analysis results: .. jupyter-execute:: @@ -180,8 +184,13 @@ View component experiment analysis results print("State Fidelity: {:.5f}".format(fid_result_i.value)) print("State: {}".format(state_result_i.value)) +References +---------- -.. jupyter-execute:: +.. [1] J Smolin, JM Gambetta, G Smith, Phys. Rev. Lett. 108, 070502 (2012), + `open access `__. + +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.tomography.StateTomography` diff --git a/docs/tutorials/t1.rst b/docs/manuals/characterization/t1.rst similarity index 73% rename from docs/tutorials/t1.rst rename to docs/manuals/characterization/t1.rst index 4e59930f8c..c25ff1c9da 100644 --- a/docs/tutorials/t1.rst +++ b/docs/manuals/characterization/t1.rst @@ -1,8 +1,11 @@ -A :math:`T_1` experiment -======================== +T1 Characterization +=================== + +Background +---------- In a :math:`T_1` experiment, we measure an excited qubit after a delay. -Due to decoherence processes (e.g. amplitude damping channel), it is +Due to decoherence processes (e.g. the amplitude damping channel), it is possible that, at the time of measurement, after the delay, the qubit will not be excited anymore. The larger the delay time is, the more likely is the qubit to fall to the ground state. The goal of the @@ -16,14 +19,12 @@ measure :math:`|1\rangle` after the delay. We repeat this process for a set of delay times, resulting in a set of probability estimates. In the absence of state preparation and measurement errors, the -probability to measure \|1> after time :math:`t` is :math:`e^{-t/T_1}`, +probability to measure :math:`|1\rangle` after time :math:`t` is :math:`e^{-t/T_1}`, for a constant :math:`T_1` (the coherence time), which is our target number. Since state preparation and measurement errors do exist, the qubit’s decay towards the ground state assumes the form :math:`Ae^{-t/T_1} + B`, for parameters :math:`A, T_1`, and :math:`B`, -which we deduce form the probability estimates. To this end, the -:math:`T_1` experiment internally calls the ``curve_fit`` method of -``scipy.optimize``. +which we deduce from the probability estimates. The following code demonstrates a basic run of a :math:`T_1` experiment for qubit 0. @@ -74,45 +75,12 @@ for qubit 0. print(result) -Parallel :math:`T_1` experiments on multiple qubits ---------------------------------------------------- - -To measure :math:`T_1` of multiple qubits in the same experiment, we -create a parallel experiment: - -.. jupyter-execute:: - - # Create a parallel T1 experiment - parallel_exp = ParallelExperiment([T1(physical_qubits=[i], delays=delays) for i in range(2)]) - parallel_exp.set_transpile_options(scheduling_method='asap') - parallel_data = parallel_exp.run(backend, seed_simulator=101).block_for_results() - - # View result data - for result in parallel_data.analysis_results(): - print(result) - - -Viewing sub experiment data -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The experiment data returned from a batched experiment also contains -individual experiment data for each sub experiment which can be accessed -using ``child_data`` - -.. jupyter-execute:: - - # Print sub-experiment data - for i, sub_data in enumerate(parallel_data.child_data()): - print("Component experiment",i) - display(sub_data.figure(0)) - for result in sub_data.analysis_results(): - print(result) - :math:`T_1` experiments with kerneled measurement ---------------------------------------------------- +------------------------------------------------- + :math:`T_1` experiments can also be done with kerneled measurements. -If we set the run option `meas_level=MeasLevel.KERNELED`, the job -will not discriminate the data and will not label it. In the T1 experiment, +If we set the run option ``meas_level=MeasLevel.KERNELED``, the job +will not discriminate the IQ data and will not label it. In the T1 experiment, since we know that :math:`P(1|t=0)=1`, we will add a circuit with delay=0, and another circuit with a very large delay. In this configuration we know that the data starts from a point [I,Q] that is close to a logical value '1' and ends at a point [I,Q] @@ -164,7 +132,7 @@ that is close to a logical value '0'. for result in expdataT1_kerneled.analysis_results(): print(result) -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.characterization.T1` diff --git a/docs/tutorials/t2hahn_characterization.rst b/docs/manuals/characterization/t2hahn.rst similarity index 76% rename from docs/tutorials/t2hahn_characterization.rst rename to docs/manuals/characterization/t2hahn.rst index 0d2256b1a3..2eef6441e1 100644 --- a/docs/tutorials/t2hahn_characterization.rst +++ b/docs/manuals/characterization/t2hahn.rst @@ -1,37 +1,35 @@ -T2 Hahn Characterization (CPMG) -=============================== +T2 Hahn Characterization +======================== -The purpose of the :math:`T_2` Hahn Echo experiment is to determine +The purpose of the :math:`T_2` Hahn Echo experiment is to determine the :math:`T_2` qubit property. -In this experiment, we would like to get a more precise estimate of the -qubit’s decay time. :math:`T_2` represents the amount of time required -for a single qubit Bloch vector projection on the XY plane, to fall to -approximately 37% (:math:`\frac{1}{e}`) of its initial amplitude. In -Ramsey Experiment we were introduced to the term detuning frequency (The -difference between the frequency used for the control rotation, and the -precise frequency). Hahn Echo experiment and CPMG sequence are -experiments to estimate :math:`T_2` which are robust to the detuning -frequency. The decay in amplitude causes the probability function to -take the following form: +In this experiment, we would like to get a more precise estimate of the qubit’s decay +time. :math:`T_2` represents the amount of time required for a single qubit's Bloch +vector projection on the XY plane to fall to approximately 37% (:math:`\frac{1}{e}`) of +its initial amplitude. Unlike :math:`T_2^*`, which is measured by :class:`.T2Ramsey`, +:math:`T_2` is insensitive to inhomogenous broadening. Hahn Echo experiment and the +Carr-Purcell-Meiboom-Gill (CPMG) sequence are experiments to estimate :math:`T_2` which +are robust to the detuning frequency, or the difference between the qubit frequency and +the pulse frequency of the applied rotation. The decay in amplitude causes the +probability function to take the following form: .. math:: f(t) = A \cdot e^{-\frac{t}{T_2}}+ B -The difference between Hahn Echo and CPMG sequence is that in Hahn Echo +The difference between the Hahn Echo and CPMG sequence is that in the Hahn Echo experiment, there is only one echo sequence while in CPMG there are multiple echo sequences. -1. Decoherence Time -------------------- +Decoherence Time +---------------- -Decoherence time is the time taken for off-diagonal components of the +The decoherence time is the time taken for off-diagonal components of the density matrix to fall to approximately 37% (:math:`\frac{1}{e}`). For -:math:`t\gg T_2`, the qubit statistics behave like a random bit. It gets -the value of ``0`` with probability of :math:`p` and the value of ``1`` -with probability of :math:`1-p`. +:math:`t\gg T_2`, the qubit statistics behave like a random bit, with +value 0 with probability of :math:`p` and value 1 with probability :math:`1-p`. Since the qubit is exposed to other types of noise (like T1), we are -using :math:`Rx(\pi)` pulses for decoupling and to solve our inaccuracy +using :math:`R_x(\pi)` pulses for decoupling and to solve our inaccuracy for the qubit frequency estimation. .. jupyter-execute:: @@ -42,16 +40,21 @@ for the qubit frequency estimation. The circuit used for an experiment with :math:`N` echoes comprises the following components: -  1.\ :math:`Rx\left(\frac{\pi}{2} \right)` gate   2. :math:`N` times -Echo sequence :     (a) :math:`Delay \left(t_{0} \right)` gate     (b) -:math:`Rx \left(\pi \right)` gate     (c) -:math:`Delay \left(t_{0} \right)` gate   3. -:math:`Rx \left(\pm \frac{\pi}{2} \right)` gate (sign depends on the -number of echoes)   4. Measurement gate +#. :math:`R_x\left(\frac{\pi}{2} \right)` gate +#. :math:`N` times echo sequence: + + #. :math:`Delay \left(t_{0} \right)` gate + #. :math:`R_x \left(\pi \right)` gate + #. :math:`Delay \left(t_{0} \right)` gate + +#. :math:`R_x \left(\pm \frac{\pi}{2} \right)` gate (sign depends on the number of echoes) +#. Measurement gate + +| The user provides as input a series of delays in seconds. During the delay, we expect the qubit to precess about the z-axis. Because of the -echo gate (:math:`Rx(\pi)`) for each echo, the angle after the delay +echo gate (:math:`R_x(\pi)`) for each echo, the angle after the delay gates will be :math:`\theta_{new} = \theta_{old} + \pi`. After waiting the same delay time, the angle will be approximately :math:`0` or :math:`\pi`. By varying the extension of the delays, we get a series of @@ -71,7 +74,7 @@ and can analytically extract the desired values. print(exp1.circuits()[0]) -We run the experiment on a simple, simulated backend, tailored +We run the experiment on a simple simulated backend tailored specifically for this experiment. .. jupyter-execute:: @@ -108,8 +111,8 @@ The resulting graph will have the form: print(result) -2. Providing initial user estimates -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Providing initial user estimates +-------------------------------- The user can provide initial estimates for the parameters to help the analysis process. In the initial guess, the keys ``{amp, tau, base}`` @@ -140,8 +143,8 @@ computed for other qubits. -3. Number of echoes -~~~~~~~~~~~~~~~~~~~ +Number of echoes +---------------- The user can provide the number of echoes that the circuit will perform. This will determine the amount of delay and echo gates. As the number of @@ -163,9 +166,12 @@ total delay time. # set the desired delays conversion_factor = 1e-6 - # The delays aren't equally spaced due the behavior of exponential decay curve where the change in the result - # in earlier times is larger than later times. In addition, since the total delay is 'delay * 2 * num_of_echoes', - # the construction of the delays for each experiment will be different, such that their total length will be the same. + # The delays aren't equally spaced due the behavior of the exponential + # decay curve where the change in the result during earlier times is + # larger than later times. In addition, since the total delay is + # 'delay * 2 * num_of_echoes', the construction of the delays for + # each experiment will be different such that their total length + # will be the same. # Delays for Hahn Echo Experiment with 0 echoes delays2 = np.append( @@ -230,9 +236,9 @@ total delay time. We see that the estimate :math:`T_2` is different in the two plots. The mock backend for this experiment used :math:`T_{2} = 30[\mu s]`, which -is close to the estimate of the 1 echo experiment. +is close to the estimate of the one echo experiment. -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.characterization.T2Hahn` diff --git a/docs/tutorials/t2ramsey_characterization.rst b/docs/manuals/characterization/t2ramsey.rst similarity index 72% rename from docs/tutorials/t2ramsey_characterization.rst rename to docs/manuals/characterization/t2ramsey.rst index 4e24c0933d..65e1cd2026 100644 --- a/docs/tutorials/t2ramsey_characterization.rst +++ b/docs/manuals/characterization/t2ramsey.rst @@ -1,23 +1,21 @@ -T2 Ramsey Characterization -========================== - -The purpose of the :math:`T_2`\ Ramsey experiment is to determine two of -the qubit’s properties: *Ramsey* or *detuning frequency* and -:math:`T_2^\ast`. The rough frequency of the qubit was already -determined previously. The control pulses are based on this frequency. - -In this experiment, we would like to get a more precise estimate of the -qubit’s frequency. The difference between the frequency used for the -control rotation pulses, and the precise frequency is called the -*detuning frequency*. This part of the experiment is called a *Ramsey -Experiment*. :math:`T_2^\ast` represents the rate of decay toward a -mixed state, when the qubit is initialized to the -:math:`\left|1\right\rangle` state. - -Since the detuning frequency is relatively small, we add a phase gate to -the circuit to enable better measurement. The actual frequency measured -is the sum of the detuning frequency and the user induced *oscillation -frequency* (``osc_freq`` parameter). +T2* Ramsey Characterization +=========================== + +The purpose of the :math:`T_2^*` Ramsey experiment is to determine two of the qubit's +properties: *Ramsey* or *detuning frequency* and :math:`T_2^\ast`. In this experiment, +we would like to get a more precise estimate of the qubit's frequency given a rough +estimate. The difference between the frequency used for the control rotation pulses and +the qubit transition frequency is called the *detuning frequency*. This part of the +experiment is called a *Ramsey Experiment*. :math:`T_2^\ast` represents the rate of +decay toward a mixed state, when the qubit is initialized to the +:math:`\left|1\right\rangle` state. It is the dephasing time or the transverse +relaxation time of the qubit on the Bloch sphere as a result of both energy relaxation +and pure dephasing in the transverse plane. Unlike :math:`T_2`, which is measured by +:class:`.T2Hahn`, :math:`T_2^*` is sensitive to inhomogenous broadening. + +Since the detuning frequency is relatively small, we add a phase gate to the circuit to +enable better measurement. The actual frequency measured is the sum of the detuning +frequency and the user induced *oscillation frequency* (``osc_freq`` parameter). .. jupyter-execute:: @@ -25,15 +23,15 @@ frequency* (``osc_freq`` parameter). import qiskit from qiskit_experiments.library import T2Ramsey -The circuit used for the experiment comprises the following: +The circuits used for the experiment comprise the following steps: -:: +#. Hadamard gate +#. Delay +#. RZ gate that rotates the qubit in the x-y plane +#. Hadamard gate +#. Measurement - 1. Hadamard gate - 2. delay - 3. RZ gate that rotates the qubit in the x-y plane - 4. Hadamard gate - 5. measurement +| The user provides as input a series of delays (in seconds) and the oscillation frequency (in Hz). During the delay, we expect the qubit to @@ -140,7 +138,7 @@ computed for other qubits. print(result) -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.characterization.T2Ramsey` diff --git a/docs/tutorials/tphi_characterization.rst b/docs/manuals/characterization/tphi.rst similarity index 93% rename from docs/tutorials/tphi_characterization.rst rename to docs/manuals/characterization/tphi.rst index bab957b381..93d8cad789 100644 --- a/docs/tutorials/tphi_characterization.rst +++ b/docs/manuals/characterization/tphi.rst @@ -1,5 +1,5 @@ -Experiment: :math:`T_\varphi` characterization -============================================== +Tφ Characterization +=================== :math:`T_\varphi`, or :math:`1/\Gamma_\varphi`, is the pure dephasing time of depolarization in the :math:`x - y` plane of the Bloch sphere. We compute @@ -17,7 +17,8 @@ refocusing pulse, and so it is strictly larger than :math:`T_2^*` on a real devi superconducting qubits, :math:`T_2^*` tends to be significantly smaller than :math:`T_1`, so :math:`T_2` is usually used. -From the :math:`T_1` and :math:`T_2` estimates, we compute the results for :math:`T_\varphi.` +From the :math:`T_1` and :math:`T_2` estimates, we compute the results for +:math:`T_\varphi.` .. jupyter-execute:: @@ -104,12 +105,13 @@ Because we are using a simulator that doesn't model inhomogeneous broadening, th superconducting device, :math:`T_{\varphi}` should be significantly larger when the Hahn echo experiment is used. -| +References +---------- -.. [#] Krantz, Philip, et al. "A Quantum Engineer's Guide to Superconducting Qubits." +.. [#] Krantz, Philip, et al. *A Quantum Engineer's Guide to Superconducting Qubits*. `arXiv:1904.06560 (2019) `_. -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.characterization.Tphi` diff --git a/docs/manuals/index.rst b/docs/manuals/index.rst new file mode 100644 index 0000000000..a8117496d5 --- /dev/null +++ b/docs/manuals/index.rst @@ -0,0 +1,49 @@ +Experiment Manuals +================== + +These experiment manuals are in-depth dives into individual experiments, their +operational principles, and how to run them in Qiskit Experiments. + +.. _benchmarking: + +Benchmarking Experiments +------------------------ + +These experiments measure your device performance according to a set of defined +metrics, such as the space-time volume of circuits that can be successfully executed. + +.. nbgallery:: + :glob: + + benchmarking/* + +.. _qubit characterization: + +Qubit Characterization Experiments +---------------------------------- + +These experiment measure specific properties of a qubit. + +.. nbgallery:: + :glob: + + characterization/* + +.. _measurement-related: + +Measurement-Related Experiments +------------------------------- + +These experiments postprocess on measurement results to improve some aspect of a +quantum circuit, such as readout fidelity or run time. + +.. nbgallery:: + :glob: + + measurement/* + + +.. Hiding - Indices and tables + :ref:`genindex` + :ref:`modindex` + :ref:`search` diff --git a/docs/tutorials/readout_mitigation.rst b/docs/manuals/measurement/readout_mitigation.rst similarity index 88% rename from docs/tutorials/readout_mitigation.rst rename to docs/manuals/measurement/readout_mitigation.rst index d7f518f11d..6c7eab475d 100644 --- a/docs/tutorials/readout_mitigation.rst +++ b/docs/manuals/measurement/readout_mitigation.rst @@ -19,15 +19,13 @@ are independent of each other. In this case, the assignment matrix is the tensor product of :math:`n` :math:`2 \times 2` matrices, one for each qubit, making it practical to store the assignment matrix in implicit form, by storing the individual :math:`2 \times 2` assignment -matrices. The corresponding class in Qiskit is the `Local readout -mitigator `__ -in ``qiskit-terra``. +matrices. The corresponding class in Qiskit is the +:class:`~qiskit.result.LocalReadoutMitigator`. A *Correlated readout mitigator* uses the full :math:`2^n \times 2^n` assignment matrix, meaning it can only be used for small values of -:math:`n`. The corresponding class in Qiskit is the `Correlated readout -mitigator `__ -in ``qiskit-terra``. +:math:`n`. The corresponding class in Qiskit is the +:class:`~qiskit.result.CorrelatedReadoutMitigator`. This notebook demonstrates the usage of both the local and correlated experiments to generate the corresponding mitigators. @@ -53,7 +51,7 @@ experiments to generate the corresponding mitigators. .. jupyter-execute:: - SHOTS = 1024 + shots = 1024 qubits = [0,1,2,3] num_qubits = len(qubits) @@ -110,8 +108,8 @@ Mitigation Example .. jupyter-execute:: - counts = backend.run(qc, shots=SHOTS, seed_simulator=42, method="density_matrix").result().get_counts() - unmitigated_probs = {label: count / SHOTS for label, count in counts.items()} + counts = backend.run(qc, shots=shots, seed_simulator=42, method="density_matrix").result().get_counts() + unmitigated_probs = {label: count / shots for label, count in counts.items()} .. jupyter-execute:: @@ -138,7 +136,7 @@ Expectation value diagonals = [str2diag(d) for d in diagonal_labels] qubit_index = {i: i for i in range(num_qubits)} unmitigated_probs_vector, _ = counts_probability_vector(unmitigated_probs, qubit_index=qubit_index) - unmitigated_expectation = [expval_with_stddev(d, unmitigated_probs_vector, SHOTS) for d in diagonals] + unmitigated_expectation = [expval_with_stddev(d, unmitigated_probs_vector, shots) for d in diagonals] mitigated_expectation = [mitigator.expectation_value(counts, d) for d in diagonals] .. jupyter-execute:: @@ -173,7 +171,9 @@ a few qubits. print(c) -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright +* API documentation: :mod:`~qiskit_experiments.library.characterization.LocalReadoutError`, + :mod:`~qiskit_experiments.library.characterization.CorrelatedReadoutError` +* Qiskit Textbook: `Measurement Error Mitigation `__ diff --git a/docs/tutorials/restless_measurements.rst b/docs/manuals/measurement/restless_measurements.rst similarity index 77% rename from docs/tutorials/restless_measurements.rst rename to docs/manuals/measurement/restless_measurements.rst index 598af434ab..7475fe9a71 100644 --- a/docs/tutorials/restless_measurements.rst +++ b/docs/manuals/measurement/restless_measurements.rst @@ -1,7 +1,7 @@ Restless Measurements ===================== -When running circuits the qubits are typically reset to the ground state after +When running circuits, the qubits are typically reset to the ground state after each measurement to ensure that the next circuit has a well-defined initial state. This can be done passively by waiting several :math:`T_1`-times so that qubits in the excited state decay to :math:`\left\vert0\right\rangle`. Since :math:`T_1`-times @@ -27,18 +27,18 @@ allow the readout resonator to depopulate. When the qubit is not reset it will either be in the :math:`\left\vert0\right\rangle` or in the :math:`\left\vert1\right\rangle` state when the next circuit starts. Therefore, the measured outcomes of the restless experiments require post-processing. -The following example, taken from Ref. [1], illustrates what happens to the single +The following example, taken from Ref. [1]_, illustrates what happens to the single measurement outcomes represented as complex numbers in the IQ plane in a restless setting. Here, we run three circuits with an identity gate and three circuits with -an X gate, each followed by a measurement. The numbers in the IQ shots indicate the +an :math:`X` gate, each followed by a measurement. The numbers in the IQ shots indicate the order in which the shots were acquired. The IQ plane on the left shows the single measurement shots gathered when the qubits are reset. Here, the blue and red points, -corresponding to measurements following the Id and X gates, are associated with the +corresponding to measurements following the :math:`Id` and :math:`X` gates, are associated with the :math:`\left\vert0\right\rangle` and :math:`\left\vert1\right\rangle` states, respectively. By contrast, with restless measurements the qubit is not reset after a measurement. As one can see in the IQ plane on the right the single measurement -outcomes of the Id and X circuits no longer match with the +outcomes of the :math:`Id`` and :math:`X` circuits no longer match with the :math:`\left\vert0\right\rangle` and :math:`\left\vert1\right\rangle` states, respectively. This is why restless measurements need special post-processing. @@ -48,13 +48,13 @@ respectively. This is why restless measurements need special post-processing. Enabling restless measurements ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In Qiskit Experiments the experiments that support restless measurements -have a special method :meth:`enable_restless` to set the restless run options +In Qiskit Experiments, the experiments that support restless measurements +have a special method :meth:`~.RestlessMixin.enable_restless` to set the restless run options and define the data processor that will process the measured data. -If you are an experiment developer, you can add the :class:`RestlessMixin` +If you are an experiment developer, you can add the :class:`.RestlessMixin` to your experiment class to add support for restless measurements. Here, we will show how to activate restless measurements using -a fake backend and a rough Drag experiment. Note however, that you will not +a fake backend and a rough DRAG experiment. Note however, that you will not observe any meaningful outcomes with fake backends since the circuit simulator they use always starts with the qubits in the ground state. @@ -87,17 +87,19 @@ data processor post-processes the restless measured shots according to the order they were acquired. Furthermore, the appropriate run options are also set. Note that these run options might be unique to IBM Quantum providers. Therefore, execute may fail on non-IBM Quantum providers if the required options are not supported. -After calling ``enable_restless`` the experiment is ready to be run in a restless -mode. With a hardware backend this would be done by calling the ``run`` method -.. code:: python +After calling :meth:`~.RestlessMixin.enable_restless` the experiment is ready to be run +in a restless mode. With a hardware backend, this would be done by calling the +:meth:`~.BaseExperiment.run` method: + +.. jupyter-input:: drag_data_restless = cal_drag.run() As shown by the example, the code is identical to running a normal experiment aside -from a call to the method ``enable_restless``. Note that you can also choose to keep +from a call to the method :meth:`~.RestlessMixin.enable_restless`. Note that you can also choose to keep the standard data processor by providing it to the analysis options and telling -``enable_restless`` not to override the data processor. +:meth:`~.RestlessMixin.enable_restless` not to override the data processor. .. jupyter-execute:: @@ -117,17 +119,17 @@ the standard data processor by providing it to the analysis options and telling If you run the experiment in this setting you will see that the data is often unusable which illustrates the importance of the data processing. As detailed -in Ref. [2] restless measurements can be done with a wide variety +in Ref. [2]_, restless measurements can be done with a wide variety of experiments such as fine amplitude and drag error amplifying gate sequences as well as randomized benchmarking. Calculating restless quantum processor speed-ups ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Following Ref. [2], we can compare the time spent by the quantum processor executing +Following Ref. [2]_, we can compare the time spent by the quantum processor executing restless and standard jobs. This allows us to compute the effective speed-up we gain when performing restless experiments. Note that we do not consider any classical -run-time contributions such as runtime-compilation or data transfer times [3]. +run-time contributions such as runtime-compilation or data transfer times [3]_. The time to run :math:`K` circuits and gather :math:`N` shots for each circuit is @@ -191,23 +193,23 @@ The example above is applicable to other experiments and shows that restless measurements can greatly speed-up characterization and calibration tasks. References -~~~~~~~~~~ +---------- -[1] Max Werninghaus, Daniel J. Egger, Stefan Filipp, High-speed calibration and -characterization of superconducting quantum processors without qubit reset, -PRX Quantum **2**, 020324 (2021). https://arxiv.org/abs/2010.06576 +.. [1] Max Werninghaus, Daniel J. Egger, Stefan Filipp, High-speed calibration and + characterization of superconducting quantum processors without qubit reset, + PRX Quantum **2**, 020324 (2021). https://arxiv.org/abs/2010.06576. -[2] Caroline Tornow, Naoki Kanazawa, William E. Shanks, Daniel J. Egger, -Minimum quantum run-time characterization and calibration via restless -measurements with dynamic repetition rates, Physics Review Applied **17**, -064061 (2022). https://arxiv.org/abs/2202.06981 +.. [2] Caroline Tornow, Naoki Kanazawa, William E. Shanks, Daniel J. Egger, + Minimum quantum run-time characterization and calibration via restless + measurements with dynamic repetition rates, Physics Review Applied **17**, + 064061 (2022). https://arxiv.org/abs/2202.06981. -[3] Andrew Wack, Hanhee Paik, Ali Javadi-Abhari, Petar Jurcevic, Ismael Faro, -Jay M. Gambetta, Blake R. Johnson, Quality, Speed, and Scale: three key -attributes to measure the performance of near-term quantum computers, -https://arxiv.org/abs/2110.14108 +.. [3] Andrew Wack, Hanhee Paik, Ali Javadi-Abhari, Petar Jurcevic, Ismael Faro, + Jay M. Gambetta, Blake R. Johnson, Quality, Speed, and Scale: three key + attributes to measure the performance of near-term quantum computers, + https://arxiv.org/abs/2110.14108. -.. jupyter-execute:: +See also +-------- - import qiskit.tools.jupyter - %qiskit_copyright \ No newline at end of file +* API documentation: :mod:`~qiskit_experiments.framework.RestlessMixin` diff --git a/docs/tutorials/restless_shots.png b/docs/manuals/measurement/restless_shots.png similarity index 100% rename from docs/tutorials/restless_shots.png rename to docs/manuals/measurement/restless_shots.png diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 7e2951be41..ec77acc34c 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -1 +1 @@ -.. release-notes:: Release Notes \ No newline at end of file +.. release-notes:: Release Notes diff --git a/docs/tutorials/Calibrating_ single-qubit_ gates_on_a_pulse_backend.rst b/docs/tutorials/Calibrating_ single-qubit_ gates_on_a_pulse_backend.rst deleted file mode 100644 index 393c6475b1..0000000000 --- a/docs/tutorials/Calibrating_ single-qubit_ gates_on_a_pulse_backend.rst +++ /dev/null @@ -1,388 +0,0 @@ -============================================================= -Calibrating single-qubit gates on a pulse backend -============================================================= -In this tutorial we demonstrate how to calibrate single-qubit gates -on ``SingleTransmonTestBackend`` using the calibration framework in qiskit-experiments. -We will run experiments to find the qubit frequency, calibrate the amplitude -of DRAG pulses and chose the value of the DRAG parameter that minimizes leakage. -The calibration framework requires the user to - -- setup an instance of Calibrations, - -- run calibration experiments which can be found in ``qiskit_experiments.library.calibration``. - -Note that the values of the parameters stored in the instance of the ``Calibrations`` class -will automatically be updated by the calibration experiments. -This automatic updating can also be disabled using the ``auto_update`` flag. - -.. jupyter-execute:: - - import pandas as pd - import numpy as np - import qiskit.pulse as pulse - from qiskit.circuit import Parameter - from qiskit_experiments.calibration_management.calibrations import Calibrations - from qiskit import schedule - from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend - -.. jupyter-execute:: - - backend = SingleTransmonTestBackend(5.2e9,-.25e9, 1e9, 0.8e9, noise=False) - qubit = 0 - cals=Calibrations.from_backend(backend) - print(cals.get_inst_map()) - -The two functions below show how to setup an instance of Calibrations. -To do this the user defines the template schedules to calibrate. -These template schedules are fully parameterized, even the channel indices -on which the pulses are played. Furthermore, the name of the parameter in the channel -index must follow the convention laid out in the documentation -of the calibration module. Note that the parameters in the channel indices -are automatically mapped to the channel index when get_schedule is called. - -.. jupyter-execute:: - - # A function to instantiate calibrations and add a couple of template schedules. - def setup_cals(backend) -> Calibrations: - - cals = Calibrations.from_backend(backend) - - dur = Parameter("dur") - amp = Parameter("amp") - sigma = Parameter("σ") - beta = Parameter("β") - drive = pulse.DriveChannel(Parameter("ch0")) - - # Define and add template schedules. - with pulse.build(name="xp") as xp: - pulse.play(pulse.Drag(dur, amp, sigma, beta), drive) - - with pulse.build(name="xm") as xm: - pulse.play(pulse.Drag(dur, -amp, sigma, beta), drive) - - with pulse.build(name="x90p") as x90p: - pulse.play(pulse.Drag(dur, Parameter("amp"), sigma, Parameter("β")), drive) - - cals.add_schedule(xp, num_qubits=1) - cals.add_schedule(xm, num_qubits=1) - cals.add_schedule(x90p, num_qubits=1) - - return cals - - # Add guesses for the parameter values to the calibrations. - def add_parameter_guesses(cals: Calibrations): - - for sched in ["xp", "x90p"]: - cals.add_parameter_value(80, "σ", schedule=sched) - cals.add_parameter_value(0.5, "β", schedule=sched) - cals.add_parameter_value(320, "dur", schedule=sched) - cals.add_parameter_value(0.5, "amp", schedule=sched) - -When setting up the calibrations we add three pulses: a :math:`\pi`-rotation, -with a schedule named ``xp``, a schedule ``xm`` identical to ``xp`` -but with a nagative amplitude, and a :math:`\pi/2`-rotation, with a schedule -named ``x90p``. Here, we have linked the amplitude of the ``xp`` and ``xm`` pulses. -Therefore, calibrating the parameters of ``xp`` will also calibrate -the parameters of ``xm``. - -.. jupyter-execute:: - - cals = setup_cals(backend) - add_parameter_guesses(cals) - -A samilar setup is achieved by using a pre-built library of gates. -The library of gates provides a standard set of gates and some initial guesses -for the value of the parameters in the template schedules. -This is shown below using the ``FixedFrequencyTransmon`` library which provides the ``x``, -``y``, ``sx``, and ``sy`` pulses. Note that in the example below -we change the default value of the pulse duration to 320 samples - -.. jupyter-execute:: - - from qiskit_experiments.calibration_management.basis_gate_library import FixedFrequencyTransmon - - library = FixedFrequencyTransmon(default_values={"duration": 320}) - cals = Calibrations.from_backend(backend, libraries=[library]) - print(library.default_values()) # check what parameter values this library has - print(cals.get_inst_map()) # check the new cals's InstructionScheduleMap made from the library - print(cals.get_schedule('x',(0,))) # check one of the schedules built from the new calibration - -We are going to run the spectroscopy, Rabi, DRAG, and fine-amplitude calibration experiments -one after another and update the parameters after every experiment. -We will keep track of the parameter values after every experiment. - -==================================== -1. Finding qubits with spectroscopy -==================================== -Here, we are using a backend for which we already know the qubit frequency. -We will therefore use the spectroscopy experiment to confirm that -there is a resonance at the qubit frequency reported by the backend. - -.. jupyter-execute:: - - from qiskit_experiments.library.calibration.rough_frequency import RoughFrequencyCal - - -We first show the contents of the calibrations for qubit 0. -Note that the guess values that we added before apply to all qubits on the chip. -We see this in the table below as an empty tuple ``()`` in the qubits column. -Observe that the parameter values of ``y`` do not appear in this table as they are given by the values of ``x``. - -.. jupyter-execute:: - - columns_to_show = ["parameter", "qubits", "schedule", "value", "date_time"] - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()]))[columns_to_show] - - -.. jupyter-execute:: - - freq01_estimate = backend.defaults().qubit_freq_est[qubit] - frequencies = np.linspace(freq01_estimate -15e6, freq01_estimate + 15e6, 51) - spec = RoughFrequencyCal(qubit, cals, frequencies, backend=backend) - spec.set_experiment_options(amp=0.005) - -.. jupyter-execute:: - - circuit = spec.circuits()[0] - circuit.draw(output="mpl") - -.. jupyter-execute:: - - next(iter(circuit.calibrations["Spec"].values())).draw() # let's check the schedule - - -.. jupyter-execute:: - - spec_data = spec.run().block_for_results() - spec_data.figure(0) - - -.. jupyter-execute:: - - print(spec_data.analysis_results("f01")) - - -The instance of ``calibrations`` has been automatically updated with the measured -frequency, as shown below. -In addition to the columns shown below, the calibrations also store the group to which a value belongs, -whether a values is valid or not and the experiment id that produce a value. - -.. jupyter-execute:: - - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit]))[columns_to_show] - - -================================================================= -2. Calibrating the pulse amplitudes with a Rabi experiment -================================================================= -In the Rabi experiment we apply a pulse at the frequency of the qubit -and scan its amplitude to find the amplitude that creates a rotation -of a desired angle. We do this with the calibration experiment ``RoughXSXAmplitudeCal``. -This is a specialization of the ``Rabi`` experiment that will update the calibrations -for both the ``X`` pulse and the ``SX`` pulse using a single experiment. - -.. jupyter-execute:: - - from qiskit_experiments.library.calibration import RoughXSXAmplitudeCal - rabi = RoughXSXAmplitudeCal(qubit, cals, backend=backend, amplitudes=np.linspace(-0.1, 0.1, 51)) - -The rough amplitude calibration is therefore a Rabi experiment in which -each circuit contains a pulse with a gate. Different circuits correspond to pulses -with different amplitudes. - -.. jupyter-execute:: - - rabi.circuits()[0].draw("mpl") - -After the experiment completes the value of the amplitudes in the calibrations -will automatically be updated. This behaviour can be controlled using the ``auto_update`` -argument given to the calibration experiment at initialization. - -.. jupyter-execute:: - - rabi_data = rabi.run().block_for_results() - rabi_data.figure(0) - -.. jupyter-execute:: - - print(rabi_data.analysis_results("rabi_rate")) - -.. jupyter-execute:: - - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] - -The table above shows that we have now updated the amplitude of our :math:`\pi` pulse -from 0.5 to the value obtained in the most recent Rabi experiment. -Importantly, since we linked the amplitudes of the ``x`` and ``y`` schedules -we will see that the amplitude of the ``y`` schedule has also been updated -as seen when requesting schedules form the ``Calibrations`` instance. -Furthermore, we used the result from the Rabi experiment to also update -the value of the ``sx`` pulse. - -.. jupyter-execute:: - - cals.get_schedule("sx", qubit) - -.. jupyter-execute:: - - cals.get_schedule("x", qubit) - -.. jupyter-execute:: - - cals.get_schedule("y", qubit) - - -===================================== -3. Saving and loading calibrations -===================================== -The values of the calibrated parameters can be saved to a .csv file -and reloaded at a later point in time. - -.. jupyter-execute:: - - cals.save(file_type="csv", overwrite=True, file_prefix="PulseBackend") - -After saving the values of the parameters you may restart your kernel. If you do so, -you will only need to run the following cell to recover the state of your calibrations. -Since the schedules are currently not stored we need to call our ``setup_cals`` function -or use a library to populate an instance of Calibrations with the template schedules. -By contrast, the value of the parameters will be recovered from the file. - -.. jupyter-execute:: - - cals = Calibrations.from_backend(backend, library) - cals.load_parameter_values(file_name="PulseBackendparameter_values.csv") - -.. jupyter-execute:: - - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] - -=========================================================== - 4. Calibrating the value of the DRAG coefficient -=========================================================== - -A Derivative Removal by Adiabatic Gate (DRAG) pulse is designed to minimize leakage -and phase errors to a neighbouring transition. It is a standard pulse with an additional -derivative component. It is designed to reduce the frequency spectrum of a -normal pulse near the :math:`|1> - |2>` transition, -reducing the chance of leakage to the :math:`|2>` state. -The optimal value of the DRAG parameter is chosen to minimize both -leakage and phase errors resulting from the AC Stark shift. -The pulse envelope is :math:`f(t)=\Omega_x(t)+j\beta\frac{\rm d}{{\rm d}t}\Omega_x(t)`. -Here, :math:`\Omega_x(t)` is the envelop of the in-phase component -of the pulse and :math:`\beta` is the strength of the quadrature -which we refer to as the DRAG parameter and seek to calibrate -in this experiment. The DRAG calibration will run several -series of circuits. In a given circuit a Rp(β) - Rm(β) block -is repeated :math:`N` times. Here, Rp is a rotation -with a positive angle and Rm is the same rotation with a -negative amplitude. - -.. jupyter-execute:: - - from qiskit_experiments.library import RoughDragCal - cal_drag = RoughDragCal(qubit, cals, backend=backend, betas=np.linspace(-20, 20, 25)) - cal_drag.set_experiment_options(reps=[3, 5, 7]) - cal_drag.circuits()[5].draw(output='mpl') - -.. jupyter-execute:: - - drag_data = cal_drag.run().block_for_results() - drag_data.figure(0) - -.. jupyter-execute:: - - print(drag_data.analysis_results("beta")) - -.. jupyter-execute:: - - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="β"))[columns_to_show] - -========================================================== -5. Fine amplitude calibration -========================================================== -The ``FineAmplitude`` calibration experiment repeats :math:`N` times -a gate with a pulse to amplify the under or over-rotations -in the gate to determine the optimal amplitude. - -.. jupyter-execute:: - - from qiskit_experiments.library.calibration.fine_amplitude import FineXAmplitudeCal - amp_x_cal = FineXAmplitudeCal(qubit, cals, backend=backend, schedule_name="x") - amp_x_cal.circuits()[5].draw(output="mpl") - -.. jupyter-execute:: - - data_fine = amp_x_cal.run().block_for_results() - data_fine.figure(0) - -.. jupyter-execute:: - - print(data_fine.analysis_results("d_theta")) - -The cell below shows how the amplitude is updated based on the error in the rotation angle measured by the FineXAmplitude experiment. Note that this calculation is automatically done by the Amplitude.update function. - -.. jupyter-execute:: - - dtheta = data_fine.analysis_results("d_theta").value.nominal_value - target_angle = np.pi - scale = target_angle / (target_angle + dtheta) - pulse_amp = cals.get_parameter_value("amp", qubit, "x") - print(f"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.") - print(f"Thus, scale the {pulse_amp:.4f} pulse amplitude by {scale:.3f} to obtain {pulse_amp*scale:.5f}.") - -Observe, once again, that the calibrations have automatically been updated. - -.. jupyter-execute:: - - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] - -To check that we have managed to reduce the error in the rotation angle we will run the fine amplitude calibration experiment once again. - -.. jupyter-execute:: - - data_fine2 = amp_x_cal.run().block_for_results() - data_fine2.figure(0) - -.. jupyter-execute:: - - print(data_fine2.analysis_results("d_theta")) - -As can be seen from the data above and the analysis result below -we have managed to reduce the error in the rotation angle dtheta. - -==================================================================== -Fine amplitude clibration of the :math:`\pi`/2 rotation -==================================================================== - -We now wish to calibrate the amplitude of the :math:`\pi/2` rotation. - -.. jupyter-execute:: - - from qiskit_experiments.library.calibration.fine_amplitude import FineSXAmplitudeCal - - amp_sx_cal = FineSXAmplitudeCal(qubit, cals, backend=backend, schedule_name="sx") - amp_sx_cal.circuits()[5].draw(output="mpl") - -.. jupyter-execute:: - - data_fine_sx = amp_sx_cal.run().block_for_results() - data_fine_sx.figure(0) - -.. jupyter-execute:: - - print(data_fine_sx.analysis_results(0)) - -.. jupyter-execute:: - - print(data_fine_sx.analysis_results("d_theta")) - -.. jupyter-execute:: - - pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] - - - - - - diff --git a/docs/tutorials/GUIDELINES.md b/docs/tutorials/GUIDELINES.md deleted file mode 100644 index fdb127c6e5..0000000000 --- a/docs/tutorials/GUIDELINES.md +++ /dev/null @@ -1,39 +0,0 @@ -# Guidelines for writing tutorials - -First read the overall project contributing guidelines. These are all -included in the qiskit documentation: - -https://qiskit.org/documentation/contributing_to_qiskit.html - -## Introduction - -The main goal of `qiskit-experiment` tutorials is to serve as user guides for -the various package components such as the characterization and calibration -experiments. To this end each tutorial should cover the main (if not all) use-cases -of the documented functionality, including code examples and expected outputs. -Another objective of the tutorials is to provide the user with basic background -on each experiment method. Hence a good practice would -be to have in the beginning of the tutorial a short background explanation, -preferably 1 or 2 paragraphs long which includes the main literature references -as well as a link to the relevant chapter in the Qiskit textbook, if available. See for example the -[Randomized Benchmarking](randomized_benchmarking.ipynb) tutorial. - -Below are more concrete guidelines pertaining to various tutorial aspects: - -## Formatting guidelines -* For experiments, tutorial title should be just the name of the experiment. Use regular capitalization. -* For sub titles of how-to steps - use present progressive. E.e. "Saving exp data to the DB" (instead of "Save exp data to the DB") -* Use math notation as much as possible (e.g. use $\frac{\pi}{2}$ instead of pi-half or pi/2) -* Use headers, subheaders, subsubheaders etc. for hierarchical text organization. No need to number the headers -* Use device names as shown in the IBM Quantum Services dashboard, e.g. ibmq_lima instead of IBMQ Lima -* put identifier names (e.g. osc_freq) in code blocks using backticks, i.e. `osc_freq` - -## Content guidelines - -* First section should be a general explanation on the topic. Put 2-3 most relevant references (papers and Qiskit textbook) -* Cover the common use-cases of the documented functionality (e.g. experiment) -* For each use-case, provide an example output, such as console printings and plot figures -* Cover all the required and common params (e.g. experiment and analysis options) -* For an experiment tutorial, cover using the experiment in a composite experiment setting - - diff --git a/docs/tutorials/calibrating_real_device.ipynb b/docs/tutorials/calibrating_real_device.ipynb deleted file mode 100644 index 6de10a5aa5..0000000000 --- a/docs/tutorials/calibrating_real_device.ipynb +++ /dev/null @@ -1,1974 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "b11c2f66", - "metadata": {}, - "source": [ - "# Calibrating single-qubit gates on a real device\n", - "\n", - "In this tutorial we demonstrate how to calibrate single-qubit gates on `ibmq_lima` using the calibration framework in qiskit-experiments. We will run experiments to find the qubit frequency, calibrate the amplitude of DRAG pulses and chose the value of the DRAG parameter that minimizes leakage. The calibration framework requires the user to\n", - "\n", - "* setup an instance of `Calibrations`,\n", - "* run calibration experiments which can be found in `qiskit_experiments.library.calibration`. \n", - "\n", - "Note that the values of the parameters stored in the instance of the `Calibrations` class will automatically be updated by the calibration experiments. This automatic updating can also be disabled using the `auto_update` flag." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "e3836dba", - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "\n", - "import qiskit.pulse as pulse\n", - "from qiskit.circuit import Parameter\n", - "\n", - "from qiskit_experiments.calibration_management.calibrations import Calibrations\n", - "\n", - "from qiskit import IBMQ, schedule" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "87e1101f", - "metadata": {}, - "outputs": [], - "source": [ - "IBMQ.load_account()\n", - "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", - "backend = provider.get_backend('ibmq_lima')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "e3f6f6c1", - "metadata": {}, - "outputs": [], - "source": [ - "qubit = 0 # The qubit we will work with" - ] - }, - { - "cell_type": "markdown", - "id": "5325fe3d", - "metadata": {}, - "source": [ - "The two functions below show how to setup an instance of `Calibrations`. To do this the user defines the template schedules to calibrate. These template schedules are fully parameterized, even the channel indices on which the pulses are played. Furthermore, the name of the parameter in the channel index must follow the convention laid out in the documentation of the calibration module. Note that the parameters in the channel indices are automatically mapped to the channel index when `get_schedule` is called. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "ca0c1462", - "metadata": {}, - "outputs": [], - "source": [ - "def setup_cals(backend) -> Calibrations:\n", - " \"\"\"A function to instantiate calibrations and add a couple of template schedules.\"\"\"\n", - " cals = Calibrations.from_backend(backend)\n", - "\n", - " dur = Parameter(\"dur\")\n", - " amp = Parameter(\"amp\")\n", - " sigma = Parameter(\"σ\")\n", - " beta = Parameter(\"β\")\n", - " drive = pulse.DriveChannel(Parameter(\"ch0\"))\n", - "\n", - " # Define and add template schedules.\n", - " with pulse.build(name=\"xp\") as xp:\n", - " pulse.play(pulse.Drag(dur, amp, sigma, beta), drive)\n", - "\n", - " with pulse.build(name=\"xm\") as xm:\n", - " pulse.play(pulse.Drag(dur, -amp, sigma, beta), drive)\n", - " \n", - " with pulse.build(name=\"x90p\") as x90p:\n", - " pulse.play(pulse.Drag(dur, Parameter(\"amp\"), sigma, Parameter(\"β\")), drive)\n", - "\n", - " cals.add_schedule(xp, num_qubits=1)\n", - " cals.add_schedule(xm, num_qubits=1)\n", - " cals.add_schedule(x90p, num_qubits=1)\n", - " \n", - " return cals\n", - "\n", - "def add_parameter_guesses(cals: Calibrations):\n", - " \"\"\"Add guesses for the parameter values to the calibrations.\"\"\"\n", - " for sched in [\"xp\", \"x90p\"]:\n", - " cals.add_parameter_value(80, \"σ\", schedule=sched)\n", - " cals.add_parameter_value(0.5, \"β\", schedule=sched)\n", - " cals.add_parameter_value(320, \"dur\", schedule=sched)\n", - " cals.add_parameter_value(0.5, \"amp\", schedule=sched)" - ] - }, - { - "cell_type": "markdown", - "id": "31ec74cd", - "metadata": {}, - "source": [ - "When setting up the calibrations we add three pulses: a $\\pi$-rotation, with a schedule named `xp`, a schedule `xm` identical to `xp` but with a nagative amplitude, and a $\\pi/2$-rotation, with a schedule named `x90p`. Here, we have linked the amplitude of the `xp` and `xm` pulses. Therefore, calibrating the parameters of `xp` will also calibrate the parameters of `xm`." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "a2f9d7e5", - "metadata": {}, - "outputs": [], - "source": [ - "cals = setup_cals(backend)\n", - "add_parameter_guesses(cals)" - ] - }, - { - "cell_type": "markdown", - "id": "af0cd5a0", - "metadata": {}, - "source": [ - "A samilar setup is achieved by using a pre-built library of gates. The library of gates provides a standard set of gates and some initial guesses for the value of the parameters in the template schedules. This is shown below using the `FixedFrequencyTransmon` which provides the `x`, `y`, `sx`, and `sy` pulses. Note that in the example below we change the default value of the pulse duration to 320 samples." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "48895a9f", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.calibration_management.basis_gate_library import FixedFrequencyTransmon" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "bd83e088", - "metadata": {}, - "outputs": [], - "source": [ - "library = FixedFrequencyTransmon(default_values={\"duration\": 320})\n", - "cals = Calibrations.from_backend(backend, libraries=[library])" - ] - }, - { - "cell_type": "markdown", - "id": "d145b612", - "metadata": {}, - "source": [ - "## 1. Finding qubits with spectroscopy\n", - "\n", - "Here, we are using a backend for which we already know the qubit frequency. We will therefore use the spectroscopy experiment to confirm that there is a resonance at the qubit frequency reported by the backend." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "908ff764", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library.calibration.rough_frequency import RoughFrequencyCal" - ] - }, - { - "cell_type": "markdown", - "id": "4c2699ac", - "metadata": {}, - "source": [ - "We first show the contents of the calibrations for qubit 0. Note that the guess values that we added before apply to all qubits on the chip. We see this in the table below as an empty tuple `()` in the qubits column. Observe that the parameter values of `xm` do not appear in this table as they are given by the values of `xp`." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "fa22b8a4", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0σ()sx8.000000e+01defaultTrue2022-07-14 14:54:15.214182-0400None
1β()x0.000000e+00defaultTrue2022-07-14 14:54:15.214160-0400None
2β()sx0.000000e+00defaultTrue2022-07-14 14:54:15.214297-0400None
3drive_freq(0,)None5.029745e+09defaultTrue2022-07-14 14:54:15.475717-0400None
4duration()x3.200000e+02defaultTrue2022-07-14 14:54:15.214171-0400None
5amp()x5.000000e-01defaultTrue2022-07-14 14:54:15.214147-0400None
6σ()x8.000000e+01defaultTrue2022-07-14 14:54:15.214114-0400None
7duration()sx3.200000e+02defaultTrue2022-07-14 14:54:15.214323-0400None
8amp()sx2.500000e-01defaultTrue2022-07-14 14:54:15.214312-0400None
9meas_freq(0,)None7.425143e+09defaultTrue2022-07-14 14:54:15.475778-0400None
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 σ () sx 8.000000e+01 default True \n", - "1 β () x 0.000000e+00 default True \n", - "2 β () sx 0.000000e+00 default True \n", - "3 drive_freq (0,) None 5.029745e+09 default True \n", - "4 duration () x 3.200000e+02 default True \n", - "5 amp () x 5.000000e-01 default True \n", - "6 σ () x 8.000000e+01 default True \n", - "7 duration () sx 3.200000e+02 default True \n", - "8 amp () sx 2.500000e-01 default True \n", - "9 meas_freq (0,) None 7.425143e+09 default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 14:54:15.214182-0400 None \n", - "1 2022-07-14 14:54:15.214160-0400 None \n", - "2 2022-07-14 14:54:15.214297-0400 None \n", - "3 2022-07-14 14:54:15.475717-0400 None \n", - "4 2022-07-14 14:54:15.214171-0400 None \n", - "5 2022-07-14 14:54:15.214147-0400 None \n", - "6 2022-07-14 14:54:15.214114-0400 None \n", - "7 2022-07-14 14:54:15.214323-0400 None \n", - "8 2022-07-14 14:54:15.214312-0400 None \n", - "9 2022-07-14 14:54:15.475778-0400 None " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()]))" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "502aef29", - "metadata": {}, - "outputs": [], - "source": [ - "freq01_estimate = backend.defaults().qubit_freq_est[qubit]\n", - "frequencies = np.linspace(freq01_estimate -15e6, freq01_estimate + 15e6, 51)\n", - "spec = RoughFrequencyCal(qubit, cals, frequencies, backend=backend)\n", - "spec.set_experiment_options(amp=0.005)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "91184061", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "circuit = spec.circuits()[0]\n", - "circuit.draw(output=\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "32a49399", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "schedule(circuit, backend).draw()" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "1e24ce2a", - "metadata": {}, - "outputs": [], - "source": [ - "spec_data = spec.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "e880af97", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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KadPny6feuopecEFF8hPfvKTg25/zz33yEgkUnjc3t4uly5dKi+55BKZTCYL1+zll18+bN93v/vd8vrrr5fd3d3y6aef7vfa9lz73kb6e320Dcf3KPCKHCAuqpq+ooyCH/7wh3z5y19m8uTJNDQ08PLLL2OaJmvXruWSSy7ps+0ll1zC6tWrj+l8v/rVr4hGo4P+9G4iHojtuKRNB0MfeKz+9R+6mplTJ7F06Tn9Npn3tnbtWizL6vOep0yZwrx58wZ8zwcOHOB///d/ueCCCwY87rp169iwYQOf/exn0bT+v+aEGGy+weGmTJlSaL1oaGhgy5Yt1NXVHffm/3PPPZff/va3tLW14bouDz30EC0tLVx00UX9bt/e3s6vfvUrzjrrrCOOkr/pppv4wAc+wPLly4+6XAcOHOD8889n8uTJPPzww0QikSHvu3Tp0j7X9pVXXqG4uHjMda1MBOMqDa+iTBRFRUXEYjF0Xae62ks9ceDAARzHoaqqqs+2VVVVPPHEE8d0vve85z2cddZZg25z6Hn7k7Ucr6++n4b9aCTKN7/9Hyw5eyloGo//9RGuvvpqfvGLX/De97633+M1Njai6zrl5eWHlaWxsbHPc3//93/PQw89RCaT4fLLL+eee+4ZsJxbtmwBYM6cOYXnurq6mDRpUuHxbbfdxm233VZ4fO211x7Wx2yaZmGsRe//K9d1+ehHP0pNTQ133333gOW4/fbbuf32gwuF5nI5hBB873vfKzz317/+lfPOO2/AYxzqt7/9LR/84AcpLy/HMAwCgQC/+c1vOPXUU/ts9/nPf5477riDdDrNkiVL+POf/zzocX/yk5+wbds27r///iGXpce2bdu4+OKLufTSS7nrrrsOu9E6//zzD3sum81yzTXXAOD3+wvXtuf/d/ny5XzlK1856rIog1NBX1FOALFY7JiniLlSknNcjAFqzmXl5Xzq0/8EeG2zp562iK6ONr7zne8MGPSPxn/913/xla98hS1btvDFL36Rz3zmM/z4xz8e8v6xWIx169YB8K53vavPQD6A7373u1x22WV9nvva177G3r17DzvW5z//ed544w1efvnlQWvPN998M1dddVWf/SZNmsQ//MM/FEa9974RGYovfelLtLa28sQTT1BeXs4f//hHrrvuOlatWsUpp5xS2O5zn/scH/nIR9i9ezdf+9rXuOaaa/jrX//abwvH5s2bue2223juuefw+XxHVR7TNDn33HN5//vfz5133tnvNr/+9a9ZsGBBn+duuummw7aTUnLDDTfgOA6//OUvj7o1RjkyFfQVZYwoLy9H13Wampr6PN/U1FSoBb1dv/rVr/jYxz426DY//vGP+fCHPzzg67YjQQ6SZKOXnm1OX3wG995774DbVVdX4zgOra2tVFRUFJ5vamo6rPZbXV1NdXU1c+fOpbS0lPPOO48vfelLTJky5bDjzp49G4BNmzZx2mmnAd6AwJkzvWSgfr+/37L0vN6jqKjosKD/i1/8grvvvpvnnnvuiK0jpaWllJaWFh7HYjFKS0uZMWPG27oJ2759Oz/60Y9Yt25dIcCfcsopPPvss/zoRz/ipz/9aWHb8vJyysvLmT17NvPmzWPKlCk899xz/bYqvPDCC7S2tnLSSScVnnMch1WrVnH33XeTSqUIBAL9lsnn83HJJZfwyCOPsHv3burq6g7bZvLkyYdd23A4fNh2X//611m1ahUvv/zyUXUPKEOngr6ijBF+v59Fixbx+OOP8//+3/8rPP/444/z/ve//5iOPRzN+6bjHlXNS9cEr762jpqamgG3WbRoET6fj8cff5wPfehDAOzbt4+NGzcWmtX747ou4DWX9+fUU09l3rx5fOc73+Gqq65C1/Uhl3swq1ev5uMf/zi/+c1v+tSqj5d0Og1w2PvRdb1wTfpzpOv1vve977CkNzfeeCOzZs3itttu6/cmqYcQgnvvvZfrr7+e5cuXs3LlSqZOnTqk99Pb73//e77zne/w9NNPM3ny5KPeXxkaFfQVZQy59dZbufbaaznzzDM555xzuPvuuzlw4AA333xzYZvGxkYaGxsL/dYbNmygs7OTqVOn9qlV9naszftSSkzbQe8n216PX99/Hz6fj4WnnIqmafz1kb/wsxV3863bv13Y5qWXXuK6667jvvvu48wzz6SoqIiPfOQj/Mu//AuVlZWUlZVx6623snDhwsLAtD//+c+0tbWxaNEiotEob731Fp/73OdYsmTJYbXHHj2B6KKLLuLss8/mX//1X5k3bx6O4/D888+zb9++o74RaGxs5Morr+QTn/gEZ511VmHMga7rfVopeksmkySTycLjf//3fwe8loxUKgV4rQGDBdXe5s6dy8yZM/nEJz7B9773PcrKyvjjH//I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", - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "spec_data.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "6e8e067c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: f01\n", - "- value: (5.02937+/-0.00008)e+09\n", - "- χ²: 0.004001950803601646\n", - "- quality: good\n", - "- extra: <1 items>\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(spec_data.analysis_results(\"f01\"))" - ] - }, - { - "cell_type": "markdown", - "id": "125628a5", - "metadata": {}, - "source": [ - "We now update the instance of `Calibrations` with the value of the frequency that we measured using the `Frequency.update` function. Note that for the remainder of this notebook we use the value of the qubit frequency in the backend as it is not yet possible to updated qubit frequencies with the circuit path." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "6937956d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0drive_freq(0,)None5.029375e+09defaultTrue2022-07-14 15:04:35.248000-0400c9a39474-dd2e-4b43-b8ee-afc2d7a50906
1meas_freq(0,)None7.425143e+09defaultTrue2022-07-14 14:54:15.475778-0400None
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 drive_freq (0,) None 5.029375e+09 default True \n", - "1 meas_freq (0,) None 7.425143e+09 default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 15:04:35.248000-0400 c9a39474-dd2e-4b43-b8ee-afc2d7a50906 \n", - "1 2022-07-14 14:54:15.475778-0400 None " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit]))" - ] - }, - { - "cell_type": "markdown", - "id": "adc314d6", - "metadata": {}, - "source": [ - "As seen from the table above the measured frequency has been added to the calibrations." - ] - }, - { - "cell_type": "markdown", - "id": "351b4f8a", - "metadata": {}, - "source": [ - "## 2. Calibrating the pulse amplitudes with a Rabi experiment\n", - "\n", - "In the Rabi experiment we apply a pulse at the frequency of the qubit and scan its amplitude to find the amplitude that creates a rotation of a desired angle. We do this with the calibration experiment `RoughXSXAmplitudeCal`. This is a specialization of the `Rabi` experiment that will update the calibrations for both the `X` pulse and the `SX` pulse using a single experiment." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "ed4a5f77", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library.calibration import RoughXSXAmplitudeCal" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "8227b8ba", - "metadata": {}, - "outputs": [], - "source": [ - "rabi = RoughXSXAmplitudeCal(qubit, cals, backend=backend, amplitudes=np.linspace(-0.1, 0.1, 51))" - ] - }, - { - "cell_type": "markdown", - "id": "1b425031", - "metadata": {}, - "source": [ - "The rough amplitude calibration is therefore a Rabi experiment in which each circuit contains a pulse with a gate. Different circuits correspond to pulses with different amplitudes." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "b82cf6dc", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rabi.circuits()[0].draw(\"mpl\")" - ] - }, - { - "cell_type": "markdown", - "id": "f8ecc750", - "metadata": {}, - "source": [ - "After the experiment completes the value of the amplitudes in the calibrations will automatically be updated. This behaviour can be controlled using the `auto_update` argument given to the calibration experiment at initialization." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "68d32b29", - "metadata": {}, - "outputs": [], - "source": [ - "rabi_data = rabi.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "ffb1e7b8", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rabi_data.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "444d829c", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: rabi_rate\n", - "- value: 8.006+/-0.007\n", - "- χ²: 1.4033703465519922\n", - "- quality: good\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(rabi_data.analysis_results(\"rabi_rate\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "7fa0e4b4", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0amp(0,)x0.062450+0.000000jdefaultTrue2022-07-14 15:14:35.606000-0400273991e1-0985-43d8-9ad2-d9d4738bc1fb
1amp(0,)sx0.031225+0.000000jdefaultTrue2022-07-14 15:14:35.606000-0400273991e1-0985-43d8-9ad2-d9d4738bc1fb
2amp()sx0.250000+0.000000jdefaultTrue2022-07-14 14:54:15.214312-0400None
3amp()x0.500000+0.000000jdefaultTrue2022-07-14 14:54:15.214147-0400None
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 amp (0,) x 0.062450+0.000000j default True \n", - "1 amp (0,) sx 0.031225+0.000000j default True \n", - "2 amp () sx 0.250000+0.000000j default True \n", - "3 amp () x 0.500000+0.000000j default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 15:14:35.606000-0400 273991e1-0985-43d8-9ad2-d9d4738bc1fb \n", - "1 2022-07-14 15:14:35.606000-0400 273991e1-0985-43d8-9ad2-d9d4738bc1fb \n", - "2 2022-07-14 14:54:15.214312-0400 None \n", - "3 2022-07-14 14:54:15.214147-0400 None " - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters=\"amp\"))" - ] - }, - { - "cell_type": "markdown", - "id": "c90b2be5", - "metadata": {}, - "source": [ - "The table above shows that we have now updated the amplitude of our $\\pi$-pulse from 0.5 to the value obtained in the most recent Rabi experiment. Importantly, since we linked the amplitudes of the `x` and `y` schedules we will see that the amplitude of the `y` schedule has also been updated as seen when requesting schedules form the `Calibrations` instance. Furthermore, we used the result from the `Rabi` experiment to also update the value of the `sx` pulse. This was achieved by specifying `(np.pi/2, \"amp\", \"sx\")` when calling `update`." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "bd9ff343", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ScheduleBlock(Play(Drag(duration=320, amp=(0.03122496+0j), sigma=80, beta=0), DriveChannel(0)), name=\"sx\", transform=AlignLeft())" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cals.get_schedule(\"sx\", qubit)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "95d75c23", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ScheduleBlock(Play(Drag(duration=320, amp=(0.06244991+0j), sigma=80, beta=0), DriveChannel(0)), name=\"x\", transform=AlignLeft())" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cals.get_schedule(\"x\", qubit)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "62b1318f", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ScheduleBlock(Play(Drag(duration=320, amp=0.06244991j, sigma=80, beta=0), DriveChannel(0)), name=\"y\", transform=AlignLeft())" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cals.get_schedule(\"y\", qubit)" - ] - }, - { - "cell_type": "markdown", - "id": "addeda59", - "metadata": {}, - "source": [ - "## 3. Saving and loading calibrations\n", - "\n", - "The values of the calibrated parameters can be saved to a `.csv` file and reloaded at a later point in time. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "317994db", - "metadata": {}, - "outputs": [], - "source": [ - "cals.save(file_type=\"csv\", overwrite=True, file_prefix=\"Lima\")" - ] - }, - { - "cell_type": "markdown", - "id": "b384d6d0", - "metadata": {}, - "source": [ - "After saving the values of the parameters you may restart your kernel. If you do so, you will only need to run the following cell to recover the state of your calibrations. Since the schedules are currently not stored we need to call our `setup_cals` function to populate an instance of `Calibrations` with the template schedules. By contrast, the value of the parameters will be recovered from the file." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "24256b82", - "metadata": {}, - "outputs": [], - "source": [ - "cals = Calibrations.from_backend(backend, library)\n", - "cals.load_parameter_values(file_name=\"Limaparameter_values.csv\")" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "80ca665c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0amp(0,)sx0.031225+0.000000jdefaultTrue2022-07-14 15:14:35.606000-0400273991e1-0985-43d8-9ad2-d9d4738bc1fb
1amp(0,)x0.062450+0.000000jdefaultTrue2022-07-14 15:14:35.606000-0400273991e1-0985-43d8-9ad2-d9d4738bc1fb
2amp()sx0.250000+0.000000jdefaultTrue2022-07-14 15:14:51.580671-0400None
3amp()x0.500000+0.000000jdefaultTrue2022-07-14 15:14:51.580614-0400None
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 amp (0,) sx 0.031225+0.000000j default True \n", - "1 amp (0,) x 0.062450+0.000000j default True \n", - "2 amp () sx 0.250000+0.000000j default True \n", - "3 amp () x 0.500000+0.000000j default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 15:14:35.606000-0400 273991e1-0985-43d8-9ad2-d9d4738bc1fb \n", - "1 2022-07-14 15:14:35.606000-0400 273991e1-0985-43d8-9ad2-d9d4738bc1fb \n", - "2 2022-07-14 15:14:51.580671-0400 None \n", - "3 2022-07-14 15:14:51.580614-0400 None " - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters=\"amp\"))" - ] - }, - { - "cell_type": "markdown", - "id": "7d1f127f", - "metadata": {}, - "source": [ - "## 4. Calibrating the value of the DRAG coefficient\n", - "\n", - "A Derivative Removal by Adiabatic Gate (DRAG) pulse is designed to minimize leakage\n", - "to a neighbouring transition. It is a standard pulse with an additional derivative\n", - "component. It is designed to reduce the frequency spectrum of a normal pulse near\n", - "the $|1\\rangle$ - $|2\\rangle$ transition, reducing the chance of leakage\n", - "to the $|2\\rangle$ state. The optimal value of the DRAG parameter is chosen to\n", - "minimize both leakage and phase errors resulting from the AC Stark shift.\n", - "The pulse envelope is $f(t) = \\Omega_x(t) + j \\beta \\frac{\\rm d}{{\\rm d }t} \\Omega_x(t)$.\n", - "Here, $\\Omega_x$ is the envelop of the in-phase component of the pulse and\n", - "$\\beta$ is the strength of the quadrature which we refer to as the DRAG\n", - "parameter and seek to calibrate in this experiment. \n", - "The DRAG calibration will run\n", - "several series of circuits. In a given circuit a Rp(β) - Rm(β) block is repeated\n", - "$N$ times. Here, Rp is a rotation with a positive angle and Rm is the same rotation\n", - "with a negative amplitude." - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "74edd0ee", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library import RoughDragCal" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "fac11c93", - "metadata": {}, - "outputs": [], - "source": [ - "cal_drag = RoughDragCal(qubit, cals, backend=backend, betas=np.linspace(-20, 20, 25))" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "3a337cf4", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cal_drag.set_experiment_options(reps=[3, 5, 7])\n", - "\n", - "cal_drag.circuits()[5].draw(output='mpl')" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "c3958dff", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "drag_data = cal_drag.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "3a6430f4", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "drag_data.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "dc39db70", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: beta\n", - "- value: 0.909+/-0.007\n", - "- χ²: 3.4576970514589824\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(drag_data.analysis_results(\"beta\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "f02bd7a6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0β()sx0.000000defaultTrue2022-07-14 15:14:51.580660-0400None
1β()x0.000000defaultTrue2022-07-14 15:14:51.580628-0400None
2β(0,)x0.908745defaultTrue2022-07-14 15:25:35.434000-0400d809cd2d-9487-449f-b0cd-21a4a048cb1c
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 β () sx 0.000000 default True \n", - "1 β () x 0.000000 default True \n", - "2 β (0,) x 0.908745 default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 15:14:51.580660-0400 None \n", - "1 2022-07-14 15:14:51.580628-0400 None \n", - "2 2022-07-14 15:25:35.434000-0400 d809cd2d-9487-449f-b0cd-21a4a048cb1c " - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters=\"β\"))" - ] - }, - { - "cell_type": "markdown", - "id": "00ae061c", - "metadata": {}, - "source": [ - "## 5. Fine amplitude calibration\n", - "\n", - "The `FineAmplitude` calibration experiment repeats $N$ times a gate with a pulse\n", - "to amplify the under or over-rotations in the gate to determine the optimal amplitude.\n", - "The circuits that are run have a custom gate with the pulse schedule attached to it\n", - "through the calibrations." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "20ab91f2", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library.calibration.fine_amplitude import FineXAmplitudeCal" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "bfb3124b", - "metadata": {}, - "outputs": [], - "source": [ - "amp_x_cal = FineXAmplitudeCal(qubit, cals, backend=backend, schedule_name=\"x\")" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "c6127e65", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amp_x_cal.circuits()[5].draw(output=\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "24067164", - "metadata": {}, - "outputs": [], - "source": [ - "data_fine = amp_x_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "076bed0c", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_fine.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "cf2cc09a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: 0.0212+/-0.0005\n", - "- χ²: 9.42123821511291\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_fine.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "markdown", - "id": "367c2e1f", - "metadata": {}, - "source": [ - "The cell below shows how the amplitude is updated based on the error in the rotation angle measured by the `FineXAmplitude` experiment. Note that this calculation is automatically done by the `Amplitude.update` function." - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "81adf659", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The ideal angle is 3.14 rad. We measured a deviation of 0.021 rad.\n", - "Thus, scale the 0.0620+0.0000j pulse amplitude by 0.993 to obtain 0.06162+0.00000j.\n" - ] - } - ], - "source": [ - "dtheta = data_fine.analysis_results(\"d_theta\").value.nominal_value\n", - "target_angle = np.pi\n", - "scale = target_angle / (target_angle + dtheta)\n", - "pulse_amp = cals.get_parameter_value(\"amp\", qubit, \"x\")\n", - "print(f\"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.\")\n", - "print(f\"Thus, scale the {pulse_amp:.4f} pulse amplitude by {scale:.3f} to obtain {pulse_amp*scale:.5f}.\")" - ] - }, - { - "cell_type": "markdown", - "id": "97c69c65", - "metadata": {}, - "source": [ - "Observe, once again, that the calibrations have automatically been updated." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "81e7f3de", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0amp(0,)sx0.031225+0.000000jdefaultTrue2022-07-14 15:14:35.606000-0400273991e1-0985-43d8-9ad2-d9d4738bc1fb
1amp(0,)x0.062032+0.000000jdefaultTrue2022-07-14 15:33:45.470000-0400f175c8ae-2db8-4f4a-9856-8b0da99ba563
2amp()sx0.250000+0.000000jdefaultTrue2022-07-14 15:14:51.580671-0400None
3amp()x0.500000+0.000000jdefaultTrue2022-07-14 15:14:51.580614-0400None
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 amp (0,) sx 0.031225+0.000000j default True \n", - "1 amp (0,) x 0.062032+0.000000j default True \n", - "2 amp () sx 0.250000+0.000000j default True \n", - "3 amp () x 0.500000+0.000000j default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 15:14:35.606000-0400 273991e1-0985-43d8-9ad2-d9d4738bc1fb \n", - "1 2022-07-14 15:33:45.470000-0400 f175c8ae-2db8-4f4a-9856-8b0da99ba563 \n", - "2 2022-07-14 15:14:51.580671-0400 None \n", - "3 2022-07-14 15:14:51.580614-0400 None " - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters=\"amp\"))" - ] - }, - { - "cell_type": "markdown", - "id": "114a92a9", - "metadata": {}, - "source": [ - "To check that we have managed to reduce the error in the rotation angle we will run the fine amplitude calibration experiment once again." - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "84146c1a", - "metadata": {}, - "outputs": [], - "source": [ - "data_fine2 = amp_x_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "5218f8e0", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_fine2.figure(0)" - ] - }, - { - "cell_type": "markdown", - "id": "2fbc466a", - "metadata": {}, - "source": [ - "As can be seen from the data above and the analysis result below we have managed to reduce the error in the rotation angle ${\\rm d}\\theta$." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "25ddccd3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: 0.0059+/-0.0005\n", - "- χ²: 14.235087428889651\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_fine2.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "markdown", - "id": "a4935730", - "metadata": {}, - "source": [ - "### Fine amplitude calibration of the $\\pi/2$ rotation\n", - "\n", - "We now wish to calibrate the amplitude of the $\\pi/2$ rotation." - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "50423105", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library.calibration.fine_amplitude import FineSXAmplitudeCal" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "a075eacb", - "metadata": {}, - "outputs": [], - "source": [ - "amp_sx_cal = FineSXAmplitudeCal(qubit, cals, backend=backend, schedule_name=\"sx\")" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "3d38a13f", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amp_sx_cal.circuits()[5].draw(output=\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "6c00c3f5", - "metadata": {}, - "outputs": [], - "source": [ - "data_fine_sx = amp_sx_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "0117cb2d", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAFLCAYAAAAznT7eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAACt/0lEQVR4nOydd5xcVfn/32dme02ym7JppAAhhDR6qKGHDj9REEFio/MFFaQKCIIFFBBRRCnSFEFUQGkCkdAhECCEUEJC6qZu7ztzfn+ce+7c3Z2dnXLr5n5er3ntzsy955x7557znKd9HiGlJESIECFChAgxuBHxegAhQoQIESJECOcRCvwQIUKECBFiG0Ao8EOECBEiRIhtAKHADxEiRIgQIbYBhAI/RIgQIUKE2AYQCvwQIUKECBFiG0Ao8EOECBEiRIhtAK4LfCHEAUKIJ4QQa4UQUggxP41zpgsh/ieEaDPOu1oIIVwYbogQIUKECDEo4IWGXwYsAS4E2gY6WAhRATwPbAD2MM67BPiBg2MMESJEiBAhBhWEl0x7Qohm4Hwp5X0pjjkH+AUwUkrZZnx2FXAOMFaGVIEhQoQIESLEgAiCD38OsFALewPPAqOBCZ6MKESIECFChAgY8rweQBoYBazp9dkGy3crrF8IIc4EzgQoLi7ebdy4cbYOJh6PE4lkt0/q3PvbyJpdiL73N/JWvmHruIKEXO5hCIXwHuaO8B7mjvAe5g4n7uGnn366WUo5vPfnQRD4GUFKeRdwF8Duu+8u33nnHVvbX7BgAXPnzs3q3BPveJX3Vtfzm5t+ztEzamwdV5CQyz0MoRDew9wR3sPcEd7D3OHEPRRCfJns8yBszWqBkb0+G2n5LjCob+sEoKJ40O2zQoQIESKEzxEEgf86sL8Qosjy2WHAOmClJyPKEs3tMQAqivI9HkmIECFChNjW4LqqKYQoA7Y33kaA8UKIWcBWKeUqIcTPgD2llIcYxzwMXAPcJ4T4KbAjcBnwk6BF6Ld2dQNQUZyBwP/bfNi6HMpHQvloGDoBKsZAaTWUjYTS4er/SNSRMYcIESJEiMEBL2zLuwMvWd7/xHj9GZgP1ACT9ZdSygYhxGHAHcA7QB3wK+DXLo3XNnR0xwGoKMrgtlfUwJq3obsDtnwBX7wERCCaBwiIdcGo6XDKg46MOUSIECFCDA64LvCllAuAflnypJTzk3z2IXCAc6NyHlJKumPKIFGeiUl/xsnw6bOQVwTJyAXbG2C7fW0aZYgQIUKEGKwIgg9/UKC1U/nvIwIK8jK47TUzoXwUdBs0BDIGUlkK6G6HwjLY7QybRxvCl2hvgPZGr0fhPZo2QLC8eSHsQuM6iHV7PYrAIhT4LqGxvQuA/GiGt1wI2PUMZbqvWwmbPoWuVrXgdXfA/pdAQYn9Aw7hL7RuhWevgo/+CfG416PxDstfgtd+A211Xo8khNv47AV4+lLY+LHXIwkswvwwl9DYpnalRflZBNdNmQcLfg4dTUrDb1oP5TVQORamHmPzSH2K9kZAgogAAqL5kFfo9ajcw0s3wnv3w6dPb7sunK0r4eGvQawTxu4F047zekTuobsD2uohkqfidyL5ys23rZDexLrh8e+ojV53B3z1Xigo9XpUgUMo8F2C1vBLC7MQ+EWVMHQ81H2h3ne2Ko3/oCu3jej8DR/D4ocSC100X2UszPr6tnH9UsKyp9T/LZvglV8jKk7wdEiuQ0r45zlK2AMsunfbEfjdnfDmnbBxmcrMKRkK+cUwchfYbh+vR+cOVr+RsOosfwFWvgo7Hu7tmAKIUOC7hMY2JfCzysFvb4Q1iywfSBi6HYzf257B+RmtW+GPByViGDTyS2DHeVBW7c243ETth8qqo/Hho5RO3wVFR7GN4INHYNVrifer34SuNiX4Bjve/TM8f3XPz0QEJh+y7Qj8j59M/B/vhv/9HEbPhrI+7LEhUiAU+C5Ba/hDSwoyP/n5q6GzCRBqossYRAuSR+0PNqx91xD2hhlfxtWE72qFlS/DLv/P1u6OPfZY1q9fP/CBLuK7O2zh7CnwnxVRdhsZZ2RJB0/84TrOvv6PhotjcKM0L8ZjB65keDHc81E+357WRUtrC4fsvRfdIov5ZKC9vZ2ioqKBD/QYN85ez+Fj4JOtAoSgpjRORUGc9157ke/duhspkp4chzv3UPKvg1cypgTuXVrIt3buoH75Ik44cD+aRbktPdTU1PDkk08OfGDAEQp8l1DXogR+dVmGC1TtErXDBygdAe31EIvB6reVqS8v+wUvEFj3nvpbWAGzv6EC1j75NzSsVmZumwX++vXrsbv+Qs74wwGwfitHnX+z2uQ9dRE/OaiY6856EirHeD065/HUD+Cdu2HkNL594cPw0Nco3fwJb9x/PUw7Putmm5qaKC+3R2A4ittmQl0zU879C9TMUG6duw5k9ugC3nn9FU+tHK7cw9olcOe+UDyMb939Bvz1VIasfYcF1x4JR/7Cllie3Xff3YaB+h+DXz3wCba2KN9jdXkGD6eU8OT/Ka02vwT2+C7sYPitOhqhoXcRwUGIde+qvyVDlQlz4v4welf12SrvKg4ec8wxzJ8/P+vz77vvPsrKygY+sGEtrH9fLWrbHwqzT4NRMxCtW+CVXyd82oMVa96Bd+5RsRoHXaGYJfUc+OzZwZ+e17pVZefkFcLY3aCwHIaMU0G73W2wYanXI3QeOn5lwn5QPBQOu069X/yQitiX23DWSoYIBb5L2NzcAUB1WQYC/6N/wNpFgFCR2bNPVYx65TWAhHcfcGSsvsJaI3ZhhyNgh0NVVsKsr6vPWrcEIid3woQJ3Hzzzdmd/Okz6u/YPaFshHJrHHGj+uzd+9lvxqTs2/YAHR0dXHDBBVRXV1NaWspxxx3HmjX9bFylhH//AJC8K2Yycd65FFVU8d2bH1ffr1yo3DvAXXfdxUEHHcSQIUMQQrBy5coeTS1YsAAhRI9XRUUFQggeffRR87hPP/2UE044gerqasrLy9l777155plnerT1wgsvsM8++1BeXs6oUaO49NJL6e526DnUG97qHZWwK6qAkipkzWwALjztSIqKiqipqeG0005j7dq1KZu74447mDFjBhUVFVRUVDBnzhz+/e9/9zimubmZCy64gLFjx1JcXMyUKVO45ZZbkrYnpeTII49ECMFjjz3W47u6ujpOP/10Kisrqays5PTTT6e+vj7ze7DMGN+kuRDNQ47fmyWxiRDr5P4L9mPu3IP46KOPkp7a3t7OzJkzEUL4z3LnAUKB7xI2NSmBP7Qkg6C99wyBXjRE5eJXGObbHY9Ufz96fHBrOI3roXkDIGBni+m2Zpb6q1OVBjM++Y/6O2F/FbcBMGFfYjseBbFOzpja7t3YssBFF13E3//+d/7yl7+wcOFCGhsbOeaYY4jFYn0PbqqF9e/TKYqYe+MrXHH55bz33nuU7nQQ9e0S6leZGm5rayuHH3441157bdJ+99lnH9avX9/j9cMf/pCysjKOPPJI87hjjjmG9vZ2XnjhBd577z32228/jj/+eJYvXw7A+++/z1FHHcVhhx3Ge++9xyOPPMITTzzBZZddltF9mDt3Lvfdd9/AB641XFrDp/bISJE1MwG47JT9+eSTT/j73//OF198wYknnpiyubFjx/KLX/yCd999l3feeYeDDz6YE044gQ8++MA85gc/+AH//ve/eeCBB/j444+58sorueyyy3jggb4Kxu23395vLfdTTz2Vd999l2eeeYZnnnmGd999l9NPP33ga7aifhXUfgB5xcqyIyL88qabOfXe5cSJcvr0PKaPKeKwww6jqampz+kXX3wxY8eOzazPwQwp5aB97bbbbtJuvPTSS1mdd8JvX5HbXfqUfOr9demf9KupUl5TIeXDp0jZ1pD4/PMF6vOfVEnZvDmr8XiJtO/hsv+o67x+RN/r/MVE9d0Hj9k6tmTPTEtLizzjjDNkaWmpHDFihLzhhhvk0UcfLc8444wB2zvwwAMl0OMlpZT33nuvLC0tlf/973/ltGnTZElJiZw7d6784osvEie3N8nua4fJ2NUVctzQQjlhwgR5xRVXyI6ODtm66BEpr6mQz55W0qftzZs3y1NOOUWOGTNGFhUVyZ133lnec889ttyfXFBfXy/z8/Plgw8+aH62atUqKYSQzzzzTN8Tlr8k5TUV8r3zh8vvfuubPb56av5w9fu/dGOPz99++20JyBUrVgw4nsmTJ8vvfe975vtNmzZJQL744ovmZ11dXTISichHH31USinl5ZdfLmfNmtWjnSeeeEIWFRXJxsbGAfvUOPDAA+W999478IEPn6yuc+GtPT//5Fn1+Z0HSBmLSSml/Ne//iUB2dbWlvY4pJRy6NCh8s477zTfT5s2TV599dU9jjnggAPkeeed1+Ozt956S44ZM0Zu2LBBAuY9klLKpUuXSkC+8sor5mcLFy6UgFy2bJn52auvvioPOOAAWVxcLEePHi3PPvts2dBgWete/726zj8fL2Vnm4zH43LUqFHyp9dfL+X9J0p5TYXsWHiHLCsr63ENUkr5z3/+U+68887mWN5+++1+74ETsiJdZCtTUgF4RyaRiaGG7xLqdVpecZpxkp0t0GiY52Z/U5nyNCbso3a88S747DmbR+oj6IC9vEIoHtLzO63lL3M+svbiiy/m+eef5+9//7up+b388stpnfv4448zduxYrr76alOz1Ojo6OBnP/sZ99xzD6+//jr19fWcffbZ5vfv/f3XRGU3m/NG89Krb3PPPffw2GOPccUVVxCrmgLAtJH5XP3jH/dou729nV133ZWnnnqKjz76iAsvvJCzzjqLF154IeVYy8rKUr6smnA2WLRoEV1dXRx+eCJ/ety4cUydOpXXXnut7wmbPwPgnVXNHH7EUT2/GmrEcSx/CeJJrAMDYMGCBSxfvpwzzzzT/KyqqoqpU6fywAMP0NzcTCwW46677qK8vJx991VkRx0dHX2i0ouLi2lvb2fRokXYjrWGSX/cHj0/Hz1L/d38KcQ62bp1Kw899BB77bVX2lHzsViMv/71rzQ3N7PPPon0vv32248nn3yS1atXA/Daa6+xePFi5s2bZx7T1NTEqaeeym233caIESP6tP36669TVlbWo919992X0tJS87f+8MMPOfzwwznuuON4//33efzxx1m8eDHf/va3Ew2Z5vwDIVrAihUrqK2t5fAjjoCROwNQ0PAFBxxwQI9naM2aNZxzzjk8/PDDFBdvA6mbaSKM0ncJze1Gadx08/C3fK7+RvJh3J49v4vmqwnw6TOw6L6ET3uwQQv88pq+BDtj91AEHKvfdHQIzc3N3H333dxzzz0cccQRANx7771pmwmHDRtGNBo1/b1WdHd3c8cddzBlihLeF198Md/+9reRUiKEoPZ/90ANjNj9OEZM2ZnJU6P84he/4LTTTuPqq66ASD5jyroYVpzXo+0xY8ZwySWXmO/PPPNMXnzxRf7yl79wyCGH0B8WL16c8lpyXThra2uJRqNUV/fkThg5ciS1tbV9T9j8KQAfb4pxfE1Nj682Vc4iHn+dyLr3oLUuYz6Gu+66ixkzZvSIzhZC8Pzzz3PiiSdSUVFBJBJh2LBhPP3009QY/R9xxBHccsstPPjgg5xyyils2LCB665TQWSp0jnPPvtsHnwwUdGyra2NN954g/PPP9/8bOnSpYwfPz5xUuM65dIqKFMkO1aUjVDzomk9syZW8f7aVvbee2+eeuqpAa/9ww8/ZM6cObS3t1NWVsY//vEPpk+fbn7/m9/8hrPOOovx48eTl6dExO23384xxyRYPc8++2zmzZvXY/NmRW1tLcOHD0dYUoeFEIwYMcL8rW+66SZOPvlkfvjDH5rH/P73v2f27Nls3LiREWV58OWrIKLKjRmJmOeOHDkS8nZSJ9WtYOTIkWb8QiwW4xvf+AY//OEPmTlzZp94jm0ZoYbvElq7DIFfnKbAN7QbogWKaa83phosY+vfV8x7gw1SJgL2dkyiWY5WQUu0bnU0cG/58uV0dnYyZ84c87OysrIeC2S2KCwsNIU9wOjRo+ns7KSurg7iMXav3ArA7mf/lrKKSsrKyjj11FNpaWlhw6YtMHQCAEO6N/VoNxaLccMNNzBjxgyqqqooKyvj8ccfZ9WqVSnHs/3226d8jRnjcgqgIfCXbe4bhd0qSvhwS57KUvg8MyvXli1bePzxxznjjJ5Fp6SUnHvuuVRVVbFw4ULeeustTjrpJL7yla+YwuTwww/n5ptv5rzzzqOoqIgdd9yRo45S1of+fNkA1113HYsXLzZfu+++e5/PRo8e3fMkrd0P30ll6fTGKOXHf/p3l/Pcc88RjUY57bTTkAPE9UyZMoXFixfz5ptvcs4553DGGWewZMkS8/vbb7+d1157jSeeeIJFixZxyy23cPHFF5vBiw888ADvv/8+N910U8p+BsKiRYt48MEHe1iRtCVl+fLlvPbna0HGeGllF2WTdmfhwoU9G6jeUf2tX9UjlunGG2+koKCAH/zgBzmNbzAi1PBdQme3WrQqitK85cZiR16hopTtjR3nAcJIzfmor8kv6GhYo6LwRQR2Orrv99qk2d2hKDcDyLiltScNrQ3F43FY8zbDSwR1spy//vuJni4dlPmZ4TvCls8YFt/Y47ubb76ZX/3qV9x2221Mnz6dsrIyrrjiCjZu7HlcbwyUJrj//vvz9NNPp3t5fTBq1ChisRibN29m+PDE77Vhwwb233//vicYc+CzOnWMFRs2bGBRUxUzqzcot9bMU9ImIbr//vuJRqN87Wtf6/H5iy++yJNPPsnWrVsZMmQIAL/73e94/vnnuffee7nqqqsAFdT2/e9/n/Xr1zN06FBWrlzJ5ZdfzqRJk/rtc8SIET1M38XFxYwYMYLtt9++/4HqCP0RU5NTSI+eBZ89Q018HTWHHcbUqVMZN24cr7zySvL7aaCgoMDsd7fdduPtt9/mlltu4e6776atrY3LL7+cRx99lGOPPRaAGTNmsHjxYm6++WbmzZvHCy+8wNKlS/s8LyeffDJz5szhlVdeYdSoUWzatMm0VoHaUG3cuNG0RsXjcb773e/y/e9/v88Yx4wZQ97y22AD7DLv2yy+/FzGjBtvWlE2bNjA+GnGvatfzYYN1Wa7L7zwAgsXLiQ/v6dytffee3PyySfz0EMP9X/PBzlCge8CpJR0xdQOtDxdk74W+CVVyb8vrYKR02DDEnj3/sEn8LU5P1oA1Tv0/b58FJRUQ+tm+GIBzPiqI8OYPHky+fn5vPHGG+aC3tLSwpIlS5g8eXJabRQUFCSPQk8FIx3vza2VzJs6o8+mr6mpCarUfRnaS8N/5ZVXOPbYY82IaCkln376qSnE+oPTJv3ddtuN/Px8nn/+eU499VRA+Vo//vjjHr5eQBWKalwH0QKqJu7A888/z1e/mviNn3/+eXb6yv7AY/Dla8rKkyYJ1Z/+9Ce++tWvUlnZ03LW2qosZb019UgkojZhFgghTI38L3/5C+PGjWPXXXdNq/+0oefAqBnJWTW1lWvjxxCPm2Ps6OjIqJt4PG6e09XVRVdXF9Fozw1GNBo127/hhhu4+OKLATUXSktLmT59OjfffDPHH6+yaebMmUNzczOvv/66+du+/vrrtLS0mO933XVXPvroo+SbHilhldLoh8/5BsPHK0vYxIkTGTVqFM8//zx77LEHlAyD1q0sX/wqx12jLA733nsvLS0tZlPr1q3jiCOO4KGHHjItCNsqQoHvAlo71WIfEVCQl6YXRZv0x6YQ5DvOUwJ/RXoBZIGCGbBXrFj2kmH0LPj8v4qYwyGBX1ZWxne+8x0uvfRShg8fzujRo7nuuusyEuATJkxg4cKFnHbaaRQWFvbxYSeFkW5290vLee3an/C1k08mLy+PJUuW8NZbb/HjH//YNGl2b/6CtWvXmm3vuOOOPPLII7zyyitUV1dz++23s2LFCmbPnp2yy5Tapg2orKzkO9/5Dj/60Y8YMWIEVVVV/OAHP2DGjBkceuih5nE77bQT1511Al8DqBzHRd//AaefMZ8999yTfffdlzvvvJN169Zx3FlXwaMLoHkDm5a+wtr4MD79VG2Uly5dSn19PePHj2fYsGFm26+88gpLly7lrrvu6jO+OXPmMGzYML71rW9x9dVXU1xczB//+Ee++OKLHv7rm266iXnz5hGJRHj88cf5+c9/zt/+9rc+QtKKhoYG2toS9SD++te/AvSIXRg+fHiiDSkTc6B3DA9KeC57+z2+BcQ3LmPBf5/lxz/5KRMmTGC//fbrcS/PP/98M1bgsssu4+ijj2bcuHE0NTXx8MMPs2DBAjMXv6KiggMPPJDLLruMsrIytttuO/73v/9x//3388tf/hJQ2rd271iZ9saNG2duiqdOncq8efM466yzzHt91llnccwxx5hurEsvvZS9996bs88+m7POOovy8nKWLVvGk08+yR9+9VPobIaCcmXhMCCE4KKLLuLGG29kp5124ojiMZS2bmXG6EJzEzlx4sQe90pbIiZPnrzNp+iFAt8FaB79/Giawj4ehy2GwN8hRYEUPRFaN+cwOp9C+y+HjOu/BOiYPZTAdzhw7+abb6alpYUTTzyRkpISLrjggh4axEC47rrrOOuss5g8eTIdHR0D+lgB5ZcEfnDFT/jR75/i5l/9iry8PHbccccEw59h+RiZ19Sj7auuuooVK1Zw5JFHUlxczPz58/nGN77B0qXes7Ldeuut5OXlcfLJJ9PW1sYhhxximtg1PvnkE/IaVqg3Q7fj5FO+zpa6en7605+yfv16dtllF/7zn/+w3YSJMGJnWPEyzz5yF6ff+IjZxtFHKzfQvffe24MR8Y9//CNTp05l33337ZO3XV1dzTPPPMOVV17JwQcfTFdXF1OnTuWf//xnD+396aef5oYbbqCjo4OZM2fyr3/9a8AMhgsvvJA///nPKY9ZsWIFEyZMUG/qVihXVfFQqOq7ESsuLub+fzzHkbvDqNJWrvvh95ix37E88sgjPaL0P/nkEzZvTqwPtbW1nHbaadTW1lJZWcmMGTN4+umnzYBUUJuRyy+/nG984xts3bqV7bbbjuuvv75HgGE6ePjhh7ngggvMto877jh++9vfmt/PmDGDl19+mauuuooDDzyQWCzGpEmTFJdA/ZfqoIqaPtTBP/rRj2hra+O8887jZ3s3MX9mlFsv/mYwaJK9RrJcvcHy8kse/rL1jXK7S5+SM659Nr0Ttq5UuafXDlX/94dVb6njrhsuZTye8bi8woD3MB6X8saxRp71z/s/7pNnEnn63V22jM3LfFwT8biUPx2lrq1uddJDGhsbpWzZkrj+rg6XB+kw/nudurYnL0x93L8uUMct+EXGXWSSN+86PnhUXdc986SMpXi2HzxJHffWn9wbmwWO3UN9/fcdl3ptW3iLOu6x7+bUXZiHH8I2aA2/tDDN2u1au4/mq/rX/WHodupvvAu6g8W4lhJ1K1StABFRlLr9oQfj3lZXhuYKWjaraoCF5amDEUuGqRiP7vaERjRYoGNYhg4QJzHESGMbbNevzfnDd1Zpaf1BzwF9/GBB3Ur1t2J06qqgOr6n/svBzTpqE0KB7wIaNelO2gF7lpS8/BQkGqXDVRS/jMPWFTmO0kcwA/YKoar/yGfKR6p7gFQELB5g4cKFKclqsoIWXuU1iochFYzAvUFXREXPgZFTUx83xNj0Nq5zdjxuQ6ekju4nYE/DDNxbqlyBgwV6DlQO4HPXz3/9qrCIThoIffguQGv4afPomyl5A0RFCwGV45VFYM3bJvNU4KEFfn6x0nJToWYWfP68CtybebLjQ+uN3XfffcDo9oyhtZvy0f3HL2hU7wCr34DNy4DsS8X6CrHuBPHUiF1SH6utXI3rlYaXSjgGBfEYrDe47cftnfpYg1OfTZ9CrAsiuZeK9QXqDIFvcE30i6ETlAWkqRbaG1VVzRD9IhT4LqC+VQn8tCvlae1mRBoCfOgEQ+C/BbudMeDhgYAO2Bs2aeAFfOweSuCvftv5cSVBcXGx/dHtZsDS6NTHQYJ8RD8zgwH1Xyo3Vdko5bZIBW3Sb1qvNLxU5u+gYNMn0NWiUk+HjE99bMXoRHrqlk9hVO6EUL6AngNJAhZ7IK9Abfq2fqEUpfF7OT+2ACM06buArc2qZnl1eboC39DwJx048LFaw6ldkvq4oCAeh/WL1f+aTTAVtEmzvS4QpXLTghGhT2UazHbah1k3iHyYpv9+u+SkU1aUjlCun/Z69RoM0IQ7w6cmKiT2ByESJFRrBkn513hMEW8BVKXBdaHN+hsHmVvLAYQC3wVsblGkFmlp+O0NiZKwkw8a+Hjtw6xfnf0A/YSty1XhIBFNnZKoYWXc62h0dGiuIV1zJgxOH6YW+EO2G5g9LxJRqZugtLzBgA1GbffhU9JjDxxsgXuNayHerSwXRf1wcFihN736uQnRL0KB7wI2NSmBn5YPf7Phu4zmw9CJqY+FhIYfy4xdy7fQwi5akLi2VCgbYbARyoQrIOjQ5sxhKQIWNYZupwL7mmvVZnEwwNTwJ6R3vN70blnuyHBch9Zuh4xPLyZBb3o3LXNsSK6izpKDL9LwOmuBv/WLwWPlcgihwHcBW1qUSb+yOA3qT73YRQsGDliDhI8v1jk4HnZdEjiaDwWl6Z2j78FgEPjxWMJak4xSuDei+QnBuOkTx4blKjYZc2D4Tukdr39/HeyYJVavXs3cuXPZeeedmTFjBo8++mhO7WUNnXEwkP9eY5hh9tZxDEGHmaWSRtAq9LJyDYI10EGEAt8F6KC9iuI0dqtmDn5heg+71m7i3YOjap4p8NPjRQeg0jDp1n5g/3jcRtN6FbBWPAyKhqR3jt4YbPzIsWG5BikTm97eJWH7g7YE1eWWi5+Xl8ett97K0qVLee6557jooosyYlS0DXoOpGvh0MGdzZsGR2qeNQc/HVRbBH58kMTxOIRQ4LuA5najNG46efh6sSsflfo4jeKhShOW8UQqU5ChF7tkJYH7Q4UR3LZ1EJh06ywR+skqpCWDjtTf5L4P85hjjulBXZszWjar4LuCsoRvfiAYmvA7C5/PqeuamhpmzZoFqMp+1dXVbN3qMqFTrEulmCESm/mBUFSpyud2t6kKk0FHXZo5+Bqlw1W9jc7mwcfHYDNCge8C2rpUoZXydErj6vSqdNNLhGVhWPVGFqPzGfSEHZZG/IKGqeHUpj4uCLByiKdZ7jURqT8IgtasAXt5aWa1GM9/dX6bbSbdRYsWEYvFGDcuzU2HTXjzhX8BktoWiSiu5L777uvx/R133MGMGTOoqKigoqKCOXPm8O///Cex6W1Y1afNWCzGj3/8YyZOnEhRURETJ07kqquuors7oQ2//PLLHHfccYwZMwYhRJ9+XUUmMSyg1kCdvrfxY2fGNEgQCnwX0NGtBH5F8QAafqw7EXiUilK2N7Tpb403uei2Qgv8kRnkE2uB391l/3jchk7JK0/TnAkJH2aWqXmdnZ0Zn+MYrCl56W54tMAvaLfFh71161a++c1vJq2o5zRidSpgr2Do6KTliMeOHcsvfvEL3n33Xd555x0OPvhgTjjhBJoiRjR7ErfGL37xC+644w5+85vfsGzZMm677TbuuOMOfvazn5nHNDc3s8suu3DbbbflXAY5Z9SlmYNvhd70bgoFfiqEAt9hSCnpiqlFeEANXxOORPISDFrpQGv4g8GHqyOUx2VAoKG1m/ggEPiZmjPB4sNcnRYXwdy5cznnnHO4+OKLGT58OPvuuy9SSn75y18yefJkiouLmT59Og8++GCP81pbW5k/fz5lZWWMHDmSG2+8MWnbvauqzZ8/v0d5WSklv/rVr9hhhx0oLCxk7NixXH755eo7I/Dwlw+/QHFJSXrjuO0u2mMRyqLdKU3aJ598MlVVVdx6663mZx9//DElJSVmudqOjg5OOOEELrvsMrNuu5vYZ5pyTwwbswORJDE8xx9/PEceeSTbb789O+64IzfccAPl5eWsazYO0PPHgtdee41jjz2WY489lgkTJnDcccdx3HHH8eabiSqTRx11FDfeeCMnnXRS0n5dQ1ebstRFoullKWnoTe9gcGs6iFDgOwxtzo8IKMwbwCerzfmRfCPVLE3ooKWm9VmM0Edob1R+OASMnJb+eVrDj3cHn3xHmzMzWezMIjptaReRefDBB5FSsnDhQu6//36uuuoq7r77bu644w6WLl3K5ZdfzllnnWXWSQe4+OKLef755/n73//OCy+8wHvvvcfLL7+cydUBcMUVV3D99ddz+eWX89FHH/Hoo4+apvPPXlf9HXrCaemPY/FiVtareZaqpsStt97Kqaeeyk9+8hNACfevf/3rnHTSSZxyyilIKZk/fz4HH3wwp59++oDXceONN6aso1BWVsbChQszuzk6hiVV0SwDsViMv/71rzQ3NzN0u2k9z7dgv/3246WXXmLZMpW2t3TpUl588UWOOuqozMbmBnSGStmo1HVEemMwElA5gJBa12E0tikBlB9NY29lcugXKsrIdKHTd7p9ZJrNBtqcH81T+fXporwGEErgt9dDabUTo3MHpjkzDYYxK6p2UNrtho+gemBT6MSJE/nVr34FQEtLC7/+9a957rnn2H///c3v33rrLe644w6OPvpompubufvuu7nnnnvM+ub33nsvY8dmYIlAmY5vueUWbr31Vr797W8DsP322zNnzhxaWlooaPwShgh2PexrMH5i2uN49bwx7FQFbP283/iXmpoafvjDH/Lb3/6WL7/8kl/+8pc0NjZyxx13APDqq6/yyCOPMGPGDP75z38C8MADDzB9enL30tlnn83Xvva1lNc7ZkwabIlW6DmQ4vn/8MMPmTNnDu3t7ZSVlfGPf/yDESNqYdn9RsBfT1x66aU0NTWx8847E41G6e7u5sorr+Tcc8/NbGxuoEfhqAxokq2R+jKWXv7+NojwrjgMXTinKD+Nh1en5OWXZNaJmZrXFewCIlo7ieSnH7AFanNUWg0tm5TAS4eS2I/o7lT3QEQSudXpIsMiOrvttpv5/9KlS2lvb2fevHkIy7PT1dXFhAkTAFi+fDmdnZ3MmTPH/L6srKxfYdgfli5dSkdHB4ccckif75Z9+C6zK6ErJhm+y6F0x9MfR0t+FbAFtq7koYce4qyzzjK/f/rpp82NzIQJExgyZAi/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", - "text/plain": [ - "" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_fine_sx.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "id": "3d6416eb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: @Parameters_FineAmplitudeAnalysis\n", - "- value: CurveFitResult:\n", - " - fitting method: least_squares\n", - " - number of sub-models: 2\n", - " * F_spam cal.(x) = amp / 2 * (2 * x - 1) + base\n", - " * F_fine amp.(x) = amp / 2 * cos((d_theta + angle_per_gate) * x - phase_offset)...\n", - " - success: True\n", - " - number of function evals: 4\n", - " - degree of freedom: 11\n", - " - chi-square: 151.8690392576554\n", - " - reduced chi-square: 13.806276296150491\n", - " - Akaike info crit.: 39.37545730432373\n", - " - Bayesian info crit.: 41.292629293169504\n", - " - init params:\n", - " * amp = 0.9575106223444139\n", - " * base = 0.48712821794551364\n", - " * d_theta = 0.01609675454624555\n", - " * angle_per_gate = 1.5707963267948966\n", - " * phase_offset = 3.141592653589793\n", - " - fit params:\n", - " * amp = 0.9577757484044117 ± 0.0030085604459862336\n", - " * base = 0.48725465793313366 ± 0.0013044949734525495\n", - " * d_theta = 0.017888140290864118 ± 0.0003383997071097267\n", - " * angle_per_gate = 1.5707963267948966 ± 0.0\n", - " * phase_offset = 3.141592653589793 ± 0.0\n", - " - correlations:\n", - " * (amp, d_theta) = -0.22302123064374882\n", - " * (base, d_theta) = -0.18796538515909572\n", - " * (amp, base) = 0.5175856247793784\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_fine_sx.analysis_results(0))" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "id": "5d5a1131", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: 0.01789+/-0.00034\n", - "- χ²: 13.806276296150491\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_fine_sx.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "markdown", - "id": "72571816", - "metadata": {}, - "source": [ - "The parameter value is reflected in the calibrations." - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "ae984c47", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
parameterqubitsschedulevaluegroupvaliddate_timeexp_id
0amp(0,)sx0.030873+0.000000jdefaultTrue2022-07-14 15:48:35.561000-04008975dc2f-4c33-4320-9cad-55078d42a509
1amp(0,)x0.061915+0.000000jdefaultTrue2022-07-14 15:42:25.570000-04003473321c-f37a-4933-9c99-821cff0c2f5f
2amp()sx0.250000+0.000000jdefaultTrue2022-07-14 15:14:51.580671-0400None
3amp()x0.500000+0.000000jdefaultTrue2022-07-14 15:14:51.580614-0400None
\n", - "
" - ], - "text/plain": [ - " parameter qubits schedule value group valid \\\n", - "0 amp (0,) sx 0.030873+0.000000j default True \n", - "1 amp (0,) x 0.061915+0.000000j default True \n", - "2 amp () sx 0.250000+0.000000j default True \n", - "3 amp () x 0.500000+0.000000j default True \n", - "\n", - " date_time exp_id \n", - "0 2022-07-14 15:48:35.561000-0400 8975dc2f-4c33-4320-9cad-55078d42a509 \n", - "1 2022-07-14 15:42:25.570000-0400 3473321c-f37a-4933-9c99-821cff0c2f5f \n", - "2 2022-07-14 15:14:51.580671-0400 None \n", - "3 2022-07-14 15:14:51.580614-0400 None " - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters=\"amp\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "f7cb5878", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ScheduleBlock(Play(Drag(duration=320, amp=(0.0308733757+0j), sigma=80, beta=0), DriveChannel(0)), name=\"sx\", transform=AlignLeft())" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cals.get_schedule(\"sx\", qubit)" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "id": "f45f6482", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ScheduleBlock(Play(Drag(duration=320, amp=(0.0619148338+0j), sigma=80, beta=0.9087453946), DriveChannel(0)), name=\"x\", transform=AlignLeft())" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cals.get_schedule(\"x\", qubit)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "id": "68f6e469", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "ScheduleBlock(Play(Drag(duration=320, amp=0.0619148338j, sigma=80, beta=0.9087453946), DriveChannel(0)), name=\"y\", transform=AlignLeft())" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cals.get_schedule(\"y\", qubit)" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "id": "8c8369d4", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

This code is a part of Qiskit

© Copyright IBM 2017, 2022.

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.

" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import qiskit.tools.jupyter\n", - "%qiskit_copyright" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/tutorials/calibrations.rst b/docs/tutorials/calibrations.rst new file mode 100644 index 0000000000..9021a6887e --- /dev/null +++ b/docs/tutorials/calibrations.rst @@ -0,0 +1,498 @@ +Calibrations: Schedules and gate parameters from experiments +============================================================ + +To produce high fidelity quantum operations, we want to be able to run good gates. The +calibration module in Qiskit Experiments allows users to run experiments to find the +pulse shapes and parameter values that maximize the fidelity of the resulting quantum +operations. Calibration experiments encapsulate the internal processes and allow +experimenters to perform calibration operations in a quicker way. Without the +experiments module, we would need to define pulse schedules and plot the resulting +measurement data manually. + +In this tutorial, we demonstrate how to calibrate single-qubit gates using the +calibration framework in Qiskit Experiments. We will run experiments on our test pulse +backend, :class:`.SingleTransmonTestBackend`, a backend that simulates the underlying +pulses with `Qiskit Dynamics `_ on a +three-level model of a transmon. You can also run these experiments on any real backend +with Pulse enabled (see +:external+qiskit:doc:`tutorials/circuits_advanced/08_gathering_system_information`). + +We will run experiments to +find the qubit frequency, calibrate the amplitude of DRAG pulses, and choose the value +of the DRAG parameter that minimizes leakage. The calibration framework requires +the user to: + +- Set up an instance of :class:`.Calibrations`, + +- Run calibration experiments found in :mod:`qiskit_experiments.library.calibration`. + +Note that the values of the parameters stored in the instance of the :class:`.Calibrations` class +will automatically be updated by the calibration experiments. +This automatic updating can also be disabled using the ``auto_update`` flag. + +.. jupyter-execute:: + + import pandas as pd + import numpy as np + import qiskit.pulse as pulse + from qiskit.circuit import Parameter + from qiskit_experiments.calibration_management.calibrations import Calibrations + from qiskit import schedule + from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend + +.. jupyter-execute:: + + backend = SingleTransmonTestBackend(5.2e9,-.25e9, 1e9, 0.8e9, noise=False) + qubit = 0 + cals=Calibrations.from_backend(backend) + print(cals.get_inst_map()) + +The two functions below show how to set up an instance of :class:`.Calibrations`. +To do this the user defines the template schedules to calibrate. +These template schedules are fully parameterized, even the channel indices +on which the pulses are played. Furthermore, the name of the parameter in the channel +index must follow the convention laid out in the documentation +of the calibration module. Note that the parameters in the channel indices +are automatically mapped to the channel index when :meth:`.Calibrations.get_schedule` is called. + +.. jupyter-execute:: + + # A function to instantiate calibrations and add a couple of template schedules. + def setup_cals(backend) -> Calibrations: + + cals = Calibrations.from_backend(backend) + + dur = Parameter("dur") + amp = Parameter("amp") + sigma = Parameter("σ") + beta = Parameter("β") + drive = pulse.DriveChannel(Parameter("ch0")) + + # Define and add template schedules. + with pulse.build(name="xp") as xp: + pulse.play(pulse.Drag(dur, amp, sigma, beta), drive) + + with pulse.build(name="xm") as xm: + pulse.play(pulse.Drag(dur, -amp, sigma, beta), drive) + + with pulse.build(name="x90p") as x90p: + pulse.play(pulse.Drag(dur, Parameter("amp"), sigma, Parameter("β")), drive) + + cals.add_schedule(xp, num_qubits=1) + cals.add_schedule(xm, num_qubits=1) + cals.add_schedule(x90p, num_qubits=1) + + return cals + + # Add guesses for the parameter values to the calibrations. + def add_parameter_guesses(cals: Calibrations): + + for sched in ["xp", "x90p"]: + cals.add_parameter_value(80, "σ", schedule=sched) + cals.add_parameter_value(0.5, "β", schedule=sched) + cals.add_parameter_value(320, "dur", schedule=sched) + cals.add_parameter_value(0.5, "amp", schedule=sched) + +When setting up the calibrations we add three pulses: a :math:`\pi`-rotation, +with a schedule named ``xp``, a schedule ``xm`` identical to ``xp`` +but with a nagative amplitude, and a :math:`\pi/2`-rotation, with a schedule +named ``x90p``. Here, we have linked the amplitude of the ``xp`` and ``xm`` pulses. +Therefore, calibrating the parameters of ``xp`` will also calibrate +the parameters of ``xm``. + +.. jupyter-execute:: + + cals = setup_cals(backend) + add_parameter_guesses(cals) + +A similar setup is achieved by using a pre-built library of gates. +The library of gates provides a standard set of gates and some initial guesses +for the value of the parameters in the template schedules. +This is shown below using the ``FixedFrequencyTransmon`` library which provides the ``x``, +``y``, ``sx``, and ``sy`` pulses. Note that in the example below +we change the default value of the pulse duration to 320 samples + +.. jupyter-execute:: + + from qiskit_experiments.calibration_management.basis_gate_library import FixedFrequencyTransmon + + library = FixedFrequencyTransmon(default_values={"duration": 320}) + cals = Calibrations.from_backend(backend, libraries=[library]) + print(library.default_values()) # check what parameter values this library has + print(cals.get_inst_map()) # check the new cals's InstructionScheduleMap made from the library + print(cals.get_schedule('x',(0,))) # check one of the schedules built from the new calibration + +We are going to run the spectroscopy, Rabi, DRAG, and fine amplitude calibration experiments +one after another and update the parameters after every experiment, keeping track of +parameter values. + +Finding qubits with spectroscopy +-------------------------------- + +Here, we are using a backend for which we already know the qubit frequency. +We will therefore use the spectroscopy experiment to confirm that +there is a resonance at the qubit frequency reported by the backend. + +.. jupyter-execute:: + + from qiskit_experiments.library.calibration.rough_frequency import RoughFrequencyCal + +We first show the contents of the calibrations for qubit 0. +Note that the guess values that we added before apply to all qubits on the chip. +We see this in the table below as an empty tuple ``()`` in the qubits column. +Observe that the parameter values of ``y`` do not appear in this table as they are given by the values of ``x``. + +.. jupyter-execute:: + :hide-code: + :hide-output: + + # dataframe styling + pd.set_option('display.precision', 5) + pd.set_option('display.html.border', 1) + pd.set_option('display.max_colwidth', 24) + +.. jupyter-execute:: + + columns_to_show = ["parameter", "qubits", "schedule", "value", "date_time"] + pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()]))[columns_to_show] + +Instantiate the experiment and draw the first circuit in the sweep: + +.. jupyter-execute:: + + freq01_estimate = backend.defaults().qubit_freq_est[qubit] + frequencies = np.linspace(freq01_estimate-15e6, freq01_estimate+15e6, 51) + spec = RoughFrequencyCal([qubit], cals, frequencies, backend=backend) + spec.set_experiment_options(amp=0.005) + +.. jupyter-execute:: + + circuit = spec.circuits()[0] + circuit.draw(output="mpl") + +We can also visualize the pulse schedule for the circuit: + +.. jupyter-execute:: + + next(iter(circuit.calibrations["Spec"].values())).draw() + circuit.calibrations["Spec"] + +Run the calibration experiment: + +.. jupyter-execute:: + + spec_data = spec.run().block_for_results() + spec_data.figure(0) + + +.. jupyter-execute:: + + print(spec_data.analysis_results("f01")) + + +The instance of ``calibrations`` has been automatically updated with the measured +frequency, as shown below. In addition to the columns shown below, ``calibrations`` also +store the group to which a value belongs, whether a values is valid or not and the +experiment id that produce a value. + +.. jupyter-execute:: + + pd.DataFrame(**cals.parameters_table(qubit_list=[qubit]))[columns_to_show] + +.. _Rabi Calibration: + +Calibrating the pulse amplitudes with a Rabi experiment +------------------------------------------------------- + +In the Rabi experiment we apply a pulse at the frequency of the qubit +and scan its amplitude to find the amplitude that creates a rotation +of a desired angle. We do this with the calibration experiment :class:`.RoughXSXAmplitudeCal`. +This is a specialization of the :class:`.Rabi` experiment that will update the calibrations +for both the :math:`X` pulse and the :math:`SX` pulse using a single experiment. + +.. jupyter-execute:: + + from qiskit_experiments.library.calibration import RoughXSXAmplitudeCal + rabi = RoughXSXAmplitudeCal([qubit], cals, backend=backend, amplitudes=np.linspace(-0.1, 0.1, 51)) + +The rough amplitude calibration is therefore a Rabi experiment in which +each circuit contains a pulse with a gate. Different circuits correspond to pulses +with different amplitudes. + +.. jupyter-execute:: + + rabi.circuits()[0].draw("mpl") + +After the experiment completes the value of the amplitudes in the calibrations +will automatically be updated. This behaviour can be controlled using the ``auto_update`` +argument given to the calibration experiment at initialization. + +.. jupyter-execute:: + + rabi_data = rabi.run().block_for_results() + rabi_data.figure(0) + +.. jupyter-execute:: + + print(rabi_data.analysis_results("rabi_rate")) + +.. jupyter-execute:: + + pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] + +The table above shows that we have now updated the amplitude of our :math:`\pi` pulse +from 0.5 to the value obtained in the most recent Rabi experiment. +Importantly, since we linked the amplitudes of the ``x`` and ``y`` schedules +we will see that the amplitude of the ``y`` schedule has also been updated +as seen when requesting schedules from the :class:`.Calibrations` instance. +Furthermore, we used the result from the Rabi experiment to also update +the value of the ``sx`` pulse. + +.. jupyter-execute:: + + cals.get_schedule("sx", qubit) + +.. jupyter-execute:: + + cals.get_schedule("x", qubit) + +.. jupyter-execute:: + + cals.get_schedule("y", qubit) + +Saving and loading calibrations +------------------------------- + +The values of the calibrated parameters can be saved to a .csv file +and reloaded at a later point in time. + +.. jupyter-input:: + + cals.save(file_type="csv", overwrite=True, file_prefix="PulseBackend") + +After saving the values of the parameters you may restart your kernel. If you do so, +you will only need to run the following cell to recover the state of your calibrations. +Since the schedules are currently not stored we need to call our ``setup_cals`` function +or use a library to populate an instance of Calibrations with the template schedules. +By contrast, the value of the parameters will be recovered from the file. + +.. jupyter-input:: + + cals = Calibrations.from_backend(backend, library) + cals.load_parameter_values(file_name="PulseBackendparameter_values.csv") + +.. jupyter-execute:: + + pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] + +.. _DRAG Calibration: + +Calibrating the value of the DRAG coefficient +--------------------------------------------- + +A Derivative Removal by Adiabatic Gate (DRAG) pulse is designed to minimize leakage +and phase errors to a neighbouring transition. It is a standard pulse with an additional +derivative component. It is designed to reduce the frequency spectrum of a +normal pulse near the :math:`|1\rangle - |2\rangle` transition, +reducing the chance of leakage to the :math:`|2\rangle` state. +The optimal value of the DRAG parameter is chosen to minimize both +leakage and phase errors resulting from the AC Stark shift. +The pulse envelope is :math:`f(t)=\Omega_x(t)+j\beta\frac{\rm d}{{\rm d}t}\Omega_x(t)`. +Here, :math:`\Omega_x(t)` is the envelop of the in-phase component +of the pulse and :math:`\beta` is the strength of the quadrature +which we refer to as the DRAG parameter and seek to calibrate +in this experiment. The DRAG calibration will run several +series of circuits. In a given circuit a Rp(β) - Rm(β) block +is repeated :math:`N` times. Here, Rp is a rotation +with a positive angle and Rm is the same rotation with a +negative amplitude. + +.. jupyter-execute:: + + from qiskit_experiments.library import RoughDragCal + cal_drag = RoughDragCal([qubit], cals, backend=backend, betas=np.linspace(-20, 20, 25)) + cal_drag.set_experiment_options(reps=[3, 5, 7]) + cal_drag.circuits()[5].draw(output='mpl') + +.. jupyter-execute:: + + drag_data = cal_drag.run().block_for_results() + drag_data.figure(0) + +.. jupyter-execute:: + + print(drag_data.analysis_results("beta")) + +.. jupyter-execute:: + + pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="β"))[columns_to_show] + +.. _fine-amplitude-cal: + +Fine calibrations of a pulse amplitude +-------------------------------------- + +The amplitude of a pulse can be precisely calibrated using error amplifying gate +sequences. These gate sequences apply the same gate a variable number of times. +Therefore, if each gate has a small error :math:`d\theta` in the rotation angle then a +sequence of :math:`n` gates will have a rotation error of :math:`n` * :math:`d\theta`. +The :class:`.FineAmplitude` experiment and its subclass experiments implements these +sequences to obtain the correction value of imperfect pulses. We will first examine how +to detect imperfect pulses using the characterization version of these experiments, then +update calibrations with a calibration experiment. + +.. jupyter-execute:: + + from qiskit.pulse import InstructionScheduleMap + from qiskit_experiments.library import FineXAmplitude + +.. jupyter-execute:: + + backend = SingleTransmonTestBackend() + qubit = 0 + +Detecting over- and under-rotated pulses +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We now run the error amplifying experiments with our own pulse schedules on which we +purposefully add over- and under-rotations to observe their effects. To do this, we +create an instruction to schedule map which we populate with the schedules we wish to +work with. This instruction schedule map is then given to the transpile options of the +experiment so that the Qiskit transpiler can attach the pulse schedules to the gates in +the experiments. We base all our pulses on the default :math:`X` pulse of +:class:`.SingleTransmonTestBackend`. + +.. jupyter-execute:: + + x_pulse = backend.defaults().instruction_schedule_map.get('x', (qubit,)).instructions[0][1].pulse + d0, inst_map = pulse.DriveChannel(qubit), pulse.InstructionScheduleMap() + + +We now take the ideal :math:`X` pulse amplitude reported by the backend and add/subtract +a 2% over/underrotation to it by scaling the ideal amplitude and see if the experiment +can detect this over/underrotation. We replace the default :math:`X` pulse in the +instruction schedule map with this over/under-rotated pulse. + +.. jupyter-execute:: + + ideal_amp = x_pulse.amp + over_amp = ideal_amp*1.02 + under_amp = ideal_amp*0.98 + print(f"The reported amplitude of the X pulse is {ideal_amp:.4f} which we set as ideal_amp.") + print(f"we use {over_amp:.4f} amplitude for overroation pulse and {under_amp:.4f} for underrotation pulse.") + # build the over rotated pulse and add it to the instruction schedule map + with pulse.build(backend=backend, name="x") as x_over: + pulse.play(pulse.Drag(x_pulse.duration, over_amp, x_pulse.sigma, x_pulse.beta), d0) + inst_map.add("x", (qubit,), x_over) + +Let's look at one of the circuits of the :class:`.FineXAmplitude` experiment. To +calibrate the :math:`X` gate, we add an :math:`SX` gate before the :math:`X` gates to +move the ideal population to the equator of the Bloch sphere where the sensitivity to +over/under rotations is the highest. + +.. jupyter-execute:: + + overamp_exp = FineXAmplitude(qubit, backend=backend) + overamp_exp.set_transpile_options(inst_map=inst_map) + overamp_exp.circuits()[4].draw(output='mpl') + +.. jupyter-execute:: + + # do the experiment + exp_data_over = overamp_exp.run(backend).block_for_results() + exp_data_over.figure(0) + +The ping-pong pattern on the figure indicates an over-rotation which makes the initial +state rotate more than :math:`\pi`. + +We now look at a pulse with an under rotation to see how the :class:`.FineXAmplitude` +experiment detects this error. We will compare the results to the over-rotation above. + +.. jupyter-execute:: + + # build the under rotated pulse and add it to the instruction schedule map + with pulse.build(backend=backend, name="x") as x_under: + pulse.play(pulse.Drag(x_pulse.duration, under_amp, x_pulse.sigma, x_pulse.beta), d0) + inst_map.add("x", (qubit,), x_under) + + # do the experiment + underamp_exp = FineXAmplitude(qubit, backend=backend) + underamp_exp.set_transpile_options(inst_map=inst_map) + + exp_data_under = underamp_exp.run(backend).block_for_results() + exp_data_under.figure(0) + +Similarly to the over-rotation, the under-rotated pulse creates qubit populations that +do not lie on the equator of the Bloch sphere. However, compared to the ping-pong +pattern of the over rotated pulse, the under rotated pulse produces an inverted +ping-pong pattern. This allows us to determine not only the magnitude of the rotation +error but also its sign. + +.. jupyter-execute:: + + # analyze the results + target_angle = np.pi + dtheta_over = exp_data_over.analysis_results("d_theta").value.nominal_value + scale_over = target_angle / (target_angle + dtheta_over) + dtheta_under = exp_data_under.analysis_results("d_theta").value.nominal_value + scale_under = target_angle / (target_angle + dtheta_under) + print(f"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta_over:.3f} rad in over-rotated pulse case.") + print(f"Thus, scale the {over_amp:.4f} pulse amplitude by {scale_over:.3f} to obtain {over_amp*scale_over:.5f}.") + print(f"On the other hand, we measued a deviation of {dtheta_under:.3f} rad in under-rotated pulse case.") + print(f"Thus, scale the {under_amp:.4f} pulse amplitude by {scale_under:.3f} to obtain {under_amp*scale_under:.5f}.") + + +Calibrating a :math:`\pi`/2 :math:`X` pulse +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Now we apply the same principles to a different example using the calibration version of +a Fine Amplitude experiment. The amplitude of the :math:`SX` gate, which is an :math:`X` +pulse with half the amplitude, is calibrated with the :class:`.FineSXAmplitudeCal` +experiment. Unlike the :class:`.FineSXAmplitude` experiment, the +:class:`.FineSXAmplitudeCal` experiment does not require other gates than the :math:`SX` +gate since the number of repetitions can be chosen such that the ideal population is +always on the equator of the Bloch sphere. To demonstrate the +:class:`.FineSXAmplitudeCal` experiment, we create a :math:`SX` pulse by dividing the +amplitude of the X pulse by two. We expect that this pulse might have a small rotation +error which we want to correct. + +.. jupyter-execute:: + + from qiskit_experiments.library import FineSXAmplitudeCal + + amp_cal = FineSXAmplitudeCal([qubit], cals, backend=backend, schedule_name="sx") + amp_cal.circuits()[4].draw(output="mpl") + +Let's run the calibration experiment: + +.. jupyter-execute:: + + exp_data_x90p = amp_cal.run().block_for_results() + exp_data_x90p.figure(0) + +Observe, once again, that the calibrations have automatically been updated. + +.. jupyter-execute:: + + pd.DataFrame(**cals.parameters_table(qubit_list=[qubit, ()], parameters="amp"))[columns_to_show] + +.. jupyter-execute:: + + cals.get_schedule("sx", qubit) + +If we run the experiment again, we expect to see that the updated calibrated gate will +have a smaller :math:`d\theta` error: + +.. jupyter-execute:: + + exp_data_x90p_rerun = amp_cal.run().block_for_results() + exp_data_x90p_rerun.figure(0) + +See also +-------- + +* API documentation: :mod:`~qiskit_experiments.calibration_management` and :mod:`~qiskit_experiments.library.calibration` +* Qiskit Textbook: `Calibrating Qubits with Qiskit Pulse `__ + + + diff --git a/docs/tutorials/curve_analysis.rst b/docs/tutorials/curve_analysis.rst new file mode 100644 index 0000000000..3cfc82bd4d --- /dev/null +++ b/docs/tutorials/curve_analysis.rst @@ -0,0 +1,443 @@ +Curve Analysis: Fitting your data +================================= + +.. currentmodule:: qiskit_experiments.curve_analysis + +For most experiments, we are interested in fitting our results to a pre-defined +mathematical model. +The Curve Analysis module provides the analysis base class for a variety of experiments with +a single experimental parameter sweep. This analysis subclasses can override +several class attributes to customize the behavior from data processing to post-processing, +including providing systematic initial guess for parameters tailored to the experiment. +Here we describe how the Curve Analysis module works and how you can create new +analyses that inherits from the base class. + + +.. _curve_analysis_overview: + +Curve Analysis overview +----------------------- + +The base class :class:`.CurveAnalysis` implements the multi-objective optimization on +different sets of experiment results. A single experiment can define sub-experiments +consisting of multiple circuits which are tagged with common metadata, +and curve analysis sorts the experiment results based on the circuit metadata. + +This is an example of showing the abstract data structure of typical curve analysis experiment: + +.. jupyter-input:: + :emphasize-lines: 1,10,19 + + "experiment" + - circuits[0] (x=x1_A, "series_A") + - circuits[1] (x=x1_B, "series_B") + - circuits[2] (x=x2_A, "series_A") + - circuits[3] (x=x2_B, "series_B") + - circuits[4] (x=x3_A, "series_A") + - circuits[5] (x=x3_B, "series_B") + - ... + + "experiment data" + - data[0] (y1_A, "series_A") + - data[1] (y1_B, "series_B") + - data[2] (y2_A, "series_A") + - data[3] (y2_B, "series_B") + - data[4] (y3_A, "series_A") + - data[5] (y3_B, "series_B") + - ... + + "analysis" + - "series_A": y_A = f_A(x_A; p0, p1, p2) + - "series_B": y_B = f_B(x_B; p0, p1, p2) + - fixed parameters {p1: v} + +Here the experiment runs two subset of experiments, namely, series A and series B. +The analysis defines corresponding fit models :math:`f_A(x_A)` and :math:`f_B(x_B)`. +Data extraction function in the analysis creates two datasets, :math:`(x_A, y_A)` +for the series A and :math:`(x_B, y_B)` for the series B, from the experiment data. +Optionally, the curve analysis can fix certain parameters during the fitting. +In this example, :math:`p_1 = v` remains unchanged during the fitting. + +The curve analysis aims at solving the following optimization problem: + +.. math:: + + \Theta_{\mbox{opt}} = \arg\min_{\Theta_{\rm fit}} \sigma^{-2} (F(X, \Theta)-Y)^2, + +where :math:`F` is the composite objective function defined on the full experiment data +:math:`(X, Y)`, where :math:`X = x_A \oplus x_B` and :math:`Y = y_A \oplus y_B`. +This objective function can be described by two fit functions as follows. + +.. math:: + + F(X, \Theta) = f_A(x_A, \theta_A) \oplus f_B(x_B, \theta_B). + +The solver conducts the least square curve fitting against this objective function +and returns the estimated parameters :math:`\Theta_{\mbox{opt}}` +that minimizes the reduced chi-squared value. +The parameters to be evaluated are :math:`\Theta = \Theta_{\rm fit} \cup \Theta_{\rm fix}`, +where :math:`\Theta_{\rm fit} = \theta_A \cup \theta_B`. +Since series A and B share the parameters in this example, :math:`\Theta_{\rm fit} = \{p_0, p_2\}`, +and the fixed parameters are :math:`\Theta_{\rm fix} = \{ p_1 \}` as mentioned. +Thus, :math:`\Theta = \{ p_0, p_1, p_2 \}`. + +Experiment for each series can perform individual parameter sweep for :math:`x_A` and +:math:`x_B`, and experiment data yield outcomes :math:`y_A` and :math:`y_B`, which might +be different size. Data processing function may also compute :math:`\sigma_A` and +:math:`\sigma_B` which are the uncertainty of outcomes arising from the sampling error +or measurement error. + +More specifically, the curve analysis defines following data model. + +- Model: Definition of a single curve that is a function of reserved parameter "x". + +- Group: List of models. Fit functions defined under the same group must share the + fit parameters. Fit functions in the group are simultaneously fit to + generate a single fit result. + +Once the group is assigned, a curve analysis instance builds +a proper internal optimization routine. +Finally, the analysis outputs a set of :class:`.AnalysisResultData` entries +for important fit outcomes along with a single Matplotlib figure of the fit curves +with the measured data points. + +With this baseclass, a developer can avoid writing boilerplate code in +various curve analyses subclass and can quickly write up +the analysis code for a particular experiment. + + +.. _curve_analysis_define_group: + +Defining new models +------------------- + +The fit model is defined by the `LMFIT`_ ``Model``. If you are familiar with this +package, you can skip this section. The LMFIT package manages complicated fit function +and offers several algorithms to solve non-linear least-square problems. Curve Analysis +delegates the core fitting functionality to this package. + +You can intuitively write the definition of a model, as shown below: + +.. jupyter-input:: + + import lmfit + + models = [ + lmfit.models.ExpressionModel( + expr="amp * exp(-alpha * x) + base", + name="exp_decay", + ) + ] + +Note that ``x`` is the reserved name to represent a parameter +that is scanned during the experiment. In above example, the fit function +consists of three parameters (``amp``, ``alpha``, ``base``), and ``exp`` indicates +a universal function in Python's math module. +Alternatively, you can take a callable to define the model object. + +.. jupyter-input:: + + import lmfit + import numpy as np + + def exp_decay(x, amp, alpha, base): + return amp * np.exp(-alpha * x) + base + + models = [lmfit.Model(func=exp_decay)] + +See the `LMFIT`_ documentation for detailed user guide. They also provide preset models. + +If the :class:`.CurveAnalysis` is instantiated with multiple models, +it internally builds a cost function to simultaneously minimize the residuals of +all fit functions. +The names of the parameters in the fit function are important since they are used +in the analysis result, and potentially in your experiment database as a fit result. + +Here is another example how to implement multi-objective optimization task: + +.. jupyter-input:: + + import lmfit + + models = [ + lmfit.models.ExpressionModel( + expr="amp * exp(-alpha1 * x) + base", + name="my_experiment1", + data_sort_key={"tag": 1}, + ), + lmfit.models.ExpressionModel( + expr="amp * exp(-alpha2 * x) + base", + name="my_experiment2", + data_sort_key={"tag": 2}, + ), + ] + +Note that now you need to provide ``data_sort_key`` which is unique argument to +Qiskit curve analysis. This specifies the metadata of your experiment circuit +that is tied to the fit model. If multiple models are provided without this option, +the curve fitter cannot prepare data to fit. +In this model, you have four parameters (``amp``, ``alpha1``, ``alpha2``, ``base``) +and the two curves share ``amp`` (``base``) for the amplitude (baseline) in +the exponential decay function. +Here one should expect the experiment data will have two classes of data with metadata +``"tag": 1`` and ``"tag": 2`` for ``my_experiment1`` and ``my_experiment2``, respectively. + +By using this model, one can flexibly set up your fit model. Here is another example: + +.. jupyter-input:: + + import lmfit + + models = [ + lmfit.models.ExpressionModel( + expr="amp * cos(2 * pi * freq * x + phi) + base", + name="my_experiment1", + data_sort_key={"tag": 1}, + ), + lmfit.models.ExpressionModel( + expr="amp * sin(2 * pi * freq * x + phi) + base", + name="my_experiment2", + data_sort_key={"tag": 2}, + ), + ] + +You have the same set of fit parameters in two models, but now you fit two datasets +with different trigonometric functions. + +.. _LMFIT: https://lmfit.github.io/lmfit-py/intro.html + +.. _curve_analysis_fixed_param: + +Fitting with fixed parameters +----------------------------- + +You can also keep certain parameters unchanged during the fitting by specifying the +parameter names in the analysis option ``fixed_parameters``. This feature is useful +especially when you want to define a subclass of a particular analysis class. + +.. jupyter-input:: + + class AnalysisA(CurveAnalysis): + + def __init__(self): + super().__init__( + models=[ + lmfit.models.ExpressionModel( + expr="amp * exp(-alpha * x) + base", name="my_model" + ) + ] + ) + + class AnalysisB(AnalysisA): + + @classmethod + def _default_options(cls) -> Options: + options = super()._default_options() + options.fixed_parameters = {"amp": 3.0} + + return options + +The parameter specified in ``fixed_parameters`` is excluded from the fitting. +This code will give you identical fit model to the one defined in the following class: + +.. jupyter-input:: + + class AnalysisB(CurveAnalysis): + + super().__init__( + models=[ + lmfit.models.ExpressionModel( + expr="3.0 * exp(-alpha * x) + base", name="my_model" + ) + ] + ) + +However, note that you can also inherit other features, e.g. the algorithm to +generate initial guesses for parameters, from the :class:`AnalysisA` in the first example. +On the other hand, in the latter case, you need to manually copy and paste +every logic defined in the :class:`AnalysisA`. + +.. _curve_analysis_workflow: + +Curve Analysis workflow +----------------------- + +Typically curve analysis performs fitting as follows. +This workflow is defined in the method :meth:`CurveAnalysis._run_analysis`. + +1. Initialization +^^^^^^^^^^^^^^^^^ + +Curve analysis calls :meth:`_initialization` method where it initializes +some internal states and optionally populate analysis options +with the input experiment data. +In some case it may train the data processor with fresh outcomes, +or dynamically generate the fit models (``self._models``) with fresh analysis options. +A developer can override this method to perform initialization of analysis-specific variables. + +2. Data processing +^^^^^^^^^^^^^^^^^^ + +Curve analysis calls :meth:`_run_data_processing` method where +the data processor in the analysis option is internally called. +This consumes input experiment results and creates :class:`.CurveData` dataclass. +Then :meth:`_format_data` method is called with the processed dataset to format it. +By default, the formatter takes average of the outcomes in the processed dataset +over the same x values, followed by the sorting in the ascending order of x values. +This allows the analysis to easily estimate the slope of the curves to +create algorithmic initial guess of fit parameters. +A developer can inject extra data processing, for example, filtering, smoothing, +or elimination of outliers for better fitting. + +3. Fitting +^^^^^^^^^^ + +Curve analysis calls :meth:`_run_curve_fit` method which is the core functionality of the fitting. +The another method :meth:`_generate_fit_guesses` is internally called to +prepare the initial guess and parameter boundary with respect to the formatted data. +A developer usually override this method to provide better initial guess +tailored to the defined fit model or type of the associated experiment. +See :ref:`curve_analysis_init_guess` for more details. +A developer can also override the entire :meth:`_run_curve_fit` method to apply +custom fitting algorithms. This method must return :class:`.CurveFitResult` dataclass. + +4. Post processing +^^^^^^^^^^^^^^^^^^ + +Curve analysis runs several postprocessing against to the fit outcome. +It calls :meth:`._create_analysis_results` to create :class:`.AnalysisResultData` class +for the fitting parameters of interest. A developer can inject a custom code to +compute custom quantities based on the raw fit parameters. +See :ref:`curve_analysis_results` for details. +Afterwards, the analysis draws several curves in the Matplotlib figure. +Users can set a custom plotter in :class:`.CurveAnalysis` classes, to customize +figures, by setting the :attr:`~.CurveAnalysis.plotter` attribute. +Finally, it returns the list of created analysis results and Matplotlib figure. + + +.. _curve_analysis_init_guess: + +Providing initial guesses +------------------------- + +Fitting without initial guesses for parameters often results in a bad fit. User can +provide initial guesses and boundaries for the fit parameters through analysis options +``p0`` and ``bounds``. These values are the dictionary keyed on the parameter name, and +one can get the list of parameters with the :attr:`CurveAnalysis.parameters`. Each +boundary value can be a tuple of float representing min and max value. + +Apart from user provided guesses, the analysis can systematically generate those values +with the method :meth:`_generate_fit_guesses` which is called with :class:`CurveData` +dataclass. If the analysis contains multiple models definitions, we can get the subset +of curve data with :meth:`.CurveData.get_subset_of` with the name of the series. A +developer can implement the algorithm to generate initial guesses and boundaries by +using this curve data object, which will be provided to the fitter. Note that there are +several common initial guess estimators available in :mod:`curve_analysis.guess`. + +The :meth:`_generate_fit_guesses` also receives the :class:`.FitOptions` instance +``user_opt``, which contains user provided guesses and boundaries. This is +dictionary-like object consisting of sub-dictionaries for initial guess ``.p0``, +boundary ``.bounds``, and extra options for the fitter. See the API +documentation for available options. + +The :class:`.FitOptions` class implements convenient method :meth:`set_if_empty` to manage +conflict with user provided values, i.e. user provided values have higher priority, +thus systematically generated values cannot override user values. + +.. jupyter-input:: + + def _generate_fit_guesses(self, user_opt, curve_data): + + opt1 = user_opt.copy() + opt1.p0.set_if_empty(p1=3) + opt1.bounds = set_if_empty(p1=(0, 10)) + opt1.add_extra_options(method="lm") + + opt2 = user_opt.copy() + opt2.p0.set_if_empty(p1=4) + + return [opt1, opt2] + +Here you created two options with different ``p1`` values. If multiple options are +returned like this, the :meth:`_run_curve_fit` method attempts to fit with all provided +options and finds the best outcome with the minimum reduced chi-square value. When the +fit model contains some parameter that cannot be easily estimated from the curve data, +you can create multiple options with varying the initial guess to let the fitter find +the most reasonable parameters to explain the model. This allows you to avoid analysis +failure with the poor initial guesses. + +.. _curve_analysis_quality: + +Evaluate Fit Quality +-------------------- + +A subclass can override :meth:`_evaluate_quality` method to +provide an algorithm to evaluate quality of the fitting. +This method is called with the :class:`.CurveFitResult` object which contains +fit parameters and the reduced chi-squared value, +in addition to the several statistics on the fitting. +Qiskit Experiments often uses the empirical criterion chi-squared < 3 as a good fitting. + + +.. _curve_analysis_results: + +Curve Analysis Results +---------------------- + +Once the best fit parameters are found, the :meth:`_create_analysis_results` method is +called with the same :class:`.CurveFitResult` object. + +If you want to create an analysis result entry for the particular parameter, +you can override the analysis options ``result_parameters``. +By using :class:`ParameterRepr` representation, you can rename the parameter in the entry. + +.. jupyter-input:: + + from qiskit_experiments.curve_analysis import ParameterRepr + + def _default_options(cls) -> Options: + options = super()._default_options() + options.result_parameters = [ParameterRepr("p0", "amp", "Hz")] + + return options + +Here the first argument ``p0`` is the target parameter defined in the series definition, +``amp`` is the representation of ``p0`` in the result entry, +and ``Hz`` is the optional string for the unit of the value if available. + +Not only returning the fit parameters, you can also compute new quantities +by combining multiple fit parameters. +This can be done by overriding the :meth:`_create_analysis_results` method. + +.. jupyter-input:: + + from qiskit_experiments.framework import AnalysisResultData + + def _create_analysis_results(self, fit_data, quality, **metadata): + + outcomes = super()._create_analysis_results(fit_data, **metadata) + + p0 = fit_data.ufloat_params["p0"] + p1 = fit_data.ufloat_params["p1"] + + extra_entry = AnalysisResultData( + name="p01", + value=p0 * p1, + quality=quality, + extra=metadata, + ) + outcomes.append(extra_entry) + + return outcomes + +Note that both ``p0`` and ``p1`` are `UFloat`_ object consisting of +a nominal value and an error value which assumes the standard deviation. +Since this object natively supports error propagation, +you don't need to manually recompute the error of new value. + +.. _ufloat: https://pythonhosted.org/uncertainties/user_guide.html + +See also +-------- + +API documentation: :doc:`Curve Analysis Module ` \ No newline at end of file diff --git a/docs/tutorials/custom_experiment.rst b/docs/tutorials/custom_experiment.rst new file mode 100644 index 0000000000..ff0ec51f10 --- /dev/null +++ b/docs/tutorials/custom_experiment.rst @@ -0,0 +1,612 @@ +Writing your own experiment +=========================== + +Qiskit Experiments is designed to be easily customizable. If you would like to +run an experiment that's similar to an existing experiment in the +:doc:`library `, you can subclass the existing experiment and analysis +classes. You can also write your own experiment class from the ground up by subclassing +the :class:`.BaseExperiment` class. We will discuss both cases in this tutorial. + +In general, to subclass :class:`.BaseExperiment` class, you should: + +- Implement the abstract :meth:`.BaseExperiment.circuits` method. + This should return a list of :class:`~qiskit.QuantumCircuit` objects defining + the experiment payload. + +- Call the :meth:`.BaseExperiment.__init__` method during the subclass + constructor with a list of physical qubits. The length of this list must + be equal to the number of qubits in each circuit and is used to map these + circuits to this layout during execution. + Arguments in the constructor can be overridden so that a subclass can + be initialized with some experiment configuration. + +Optionally, to allow configuring experiment and execution options, you can override: + +- :meth:`.BaseExperiment._default_experiment_options` + to set default values for configurable option parameters for the experiment. + +- :meth:`.BaseExperiment._default_transpile_options` + to set custom default values for the :func:`qiskit.compiler.transpile` method used to + transpile the generated circuits before execution. + +- :meth:`.BaseExperiment._default_run_options` + to set default backend options for running the transpiled circuits on a backend. + +- :meth:`.BaseAnalysis._default_options` + to set default values for configurable options for the experiment's analysis class. + +- :meth:`.BaseExperiment._transpiled_circuits` + to override the default transpilation of circuits before execution. + +- :meth:`.BaseExperiment._metadata` + to add any experiment metadata to the result data. + +Furthermore, some characterization and calibration experiments can be run with restless +measurements, i.e. measurements where the qubits are not reset and circuits are executed +immediately after the previous measurement. Here, the :class:`.RestlessMixin` class +can help to set the appropriate run options and data processing chain. + +Analysis Subclasses +------------------- + +To create an analysis subclass, one only needs to implement the abstract +:meth:`.BaseAnalysis._run_analysis` method. This method takes an +:class:`.ExperimentData` container and kwarg analysis options. If any +kwargs are used, the :meth:`.BaseAnalysis._default_options` method should be +overriden to define default values for these options. You can also write a custom +analysis class for an existing experiment class and then run ``exp.analysis = NewAnalysis()`` +after instantiating the experiment object ``exp`` to override its default analysis class. + +The :meth:`.BaseAnalysis._run_analysis` method should return a pair +:code:`(results, figures)`, where ``results`` is a list of +:class:`.AnalysisResultData` objects and ``figures`` is a list of +:class:`matplotlib.figure.Figure` objects. + +The :doc:`Data Processor ` module contains classes for +building data processor workflows to help with advanced analysis of +experiment data. + +If you want to customize the figures of the experiment, consult the +:doc:`Visualization tutorial `. + + +Custom experiment template +-------------------------- + +Here is a barebones template to help you get started with customization: + +.. jupyter-input:: + + from qiskit.circuit import QuantumCircuit + from typing import List, Optional, Sequence + from qiskit.providers.backend import Backend + from qiskit_experiments.framework import BaseExperiment, Options + + class CustomExperiment(BaseExperiment): + """Custom experiment class template.""" + + def __init__(self, + physical_qubits: Sequence[int], + backend: Optional[Backend] = None): + """Initialize the experiment.""" + super().__init__(physical_qubits, + analysis = CustomAnalysis(), + backend = backend) + + def circuits(self) -> List[QuantumCircuit]: + """Generate the list of circuits to be run.""" + circuits = [] + # Generate circuits and populate metadata here + for i in loops: + circ = QuantumCircuit(self.num_qubits) + circ.metadata = {} + circuits.append(circ) + return circuits + + @classmethod + def _default_experiment_options(cls) -> Options: + """Set default experiment options here.""" + options = super()._default_experiment_options() + options.update_options( + dummy_option = None, + ) + return options + +Notice that when we called ``super().__init__``, we provided the list of physical +qubits, the name of our analysis class, and the backend, which is optionally specified +by the user at this stage. + +The corresponding custom analysis class template: + +.. jupyter-input:: + + import matplotlib + from typing import Tuple, List + from qiskit_experiments.framework import ( + BaseAnalysis, + Options, + ExperimentData, + AnalysisResultData + ) + + class CustomAnalysis(BaseAnalysis): + """Custom analysis class template.""" + + @classmethod + def _default_options(cls) -> Options: + """Set default analysis options. Plotting is on by default.""" + + options = super()._default_options() + options.dummy_analysis_option = None + options.plot = True + options.ax = None + return options + + def _run_analysis( + self, + experiment_data: ExperimentData + ) -> Tuple[List[AnalysisResultData], List["matplotlib.figure.Figure"]]: + """Run the analysis.""" + + # Process the data here + + analysis_results = [ + AnalysisResultData(name="dummy result", value=data) + ] + figures = [] + if self.options.plot: + figures.append(self._plot(data)) + return analysis_results, figures + +Now we'll use what we've learned so far to make an entirely new experiment using +the :class:`.BaseExperiment` template. + +Example custom experiment: randomized measurement +------------------------------------------------- + +Symmetrizing the measurement readout error of a circuit is especially useful in systems +where readout has an unknown and potentially large bias. We can create an experiment +using the Qiskit Experiments framework to take a circuit as an input and symmetrize +its readout. + +To do so, our experiment should create a list of copies of the input circuit +and randomly sample an :math:`N`-qubit Pauli to apply to each one, then add +a final :math:`N`-qubit :math:`Z`-basis measurement to randomize the expected +ideal output bitstring in the measurement. The analysis uses the applied Pauli frame of +a randomized measurement experiment to de-randomize the measured counts. The results +are then combined across samples to return a single counts dictionary for +the original circuit. This has the effect of Pauli twirling and symmetrizing the +measurement readout error. + +To start, we write our own ``__init__()`` method to take as input the circuit that we +want to twirl on. We also want to give the user the option to specify which physical +qubits to run the circuit over, which qubits to measure over, the number of samples to +repeat, and the seed for the random generator. If the user doesn't specify these +options, we default the qubits to the list of qubits starting with 0 and up to the +length of the number of qubits in the circuit - 1 for both, and the number of samples +to 10. + +.. jupyter-input:: + + from numpy.random import default_rng, Generator + from qiskit import QuantumCircuit + from qiskit.quantum_info import random_pauli_list + from qiskit_experiments.framework import BaseExperiment + + class RandomizedMeasurement(BaseExperiment): + """Randomized measurement experiment.""" + def __init__( + self, + circuit, + measured_qubits=None, + physical_qubits=None, + backend=None, + num_samples=10, + seed=None + ): + """Basic randomized Z-basis measurement experiment via a Pauli frame transformation + + Note this will just append a new set of measurements at the end of a circuit. + A more advanced version of this experiment would be to use a transpiler pass to + replace all existing measurements in a circuit with randomized measurements. + """ + if physical_qubits is None: + physical_qubits = tuple(range(circuit.num_qubits)) + if measured_qubits is None: + measured_qubits = tuple(range(circuit.num_qubits)) + + # Initialize BaseExperiment + analysis = RandomizedMeasurementAnalysis() + super().__init__(physical_qubits, analysis=analysis, backend=backend) + + # Add experiment properties + self._circuit = circuit + self._measured_qubits = measured_qubits + + # Set any init optinos + self.set_experiment_options(num_samples=num_samples, seed=seed) + +Now we consider default experiment options. We choose to only let the user change +the number of samples and seed after instantiation by updating the experiment options. + +.. jupyter-input:: + + ... + + @classmethod + def _default_experiment_options(cls): + options = super()._default_experiment_options() + options.num_samples = None + options.seed = None + return options + + +Now we write the ``circuits()`` method. We need to take the input circuit in +``self._circuit`` and add our random Paulis as well as measurement at the end. We use +the built-in property :attr:`~.BaseExperiment.num_qubits` of :class:`~.BaseExperiment` +to get the number of qubits in the experiment. We keep track of the list of qubits and +classical registers. Note that the circuits themselves are always built on qubits `0` to +`length of the circuit - 1`, and not the actual physical qubit indices given in +``physical_qubits``, as discussed in :doc:`getting_started`. + +.. jupyter-input:: + + ... + + + def circuits(self): + # Number of classical bits of the original circuit + circ_nc = self._circuit.num_clbits + + # Number of added measurements + meas_nc = len(self._measured_qubits) + + # Classical bits of the circuit + circ_clbits = list(range(circ_nc)) + + # Classical bits of the added measurements + meas_clbits = list(range(circ_nc, circ_nc + meas_nc)) + + # Qubits of the circuit + circ_qubits = list(range(self.num_qubits)) + + # Qubits of the added measurements + meas_qubits = self._measured_qubits + + # Get number of samples from options + num_samples = self.experiment_options.num_samples + if num_samples is None: + num_samples = 2 ** self.num_qubits + + # Get rng seed + seed = self.experiment_options.seed + if isinstance(seed, Generator): + rng = seed + else: + rng = default_rng(seed) + + paulis = random_pauli_list(meas_nc, size=num_samples, phase=False, seed=rng) + +In the last line of the above code block, we used the +:func:`~qiskit.quantum_info.random_pauli_list` function from the :mod:`qiskit.quantum_info` +module to generate random Paulis. This returns ``num_samples`` Paulis, each +across ``meas_nc`` qubits. + +Now we construct the circuits by composing the original circuit with a Pauli frame then +adding a measurement at the end only to the measurement qubits. Metadata containing +the classical measurement register and the applied Pauli is added to +each of the circuits to tell the analysis class how to restore the original results. +To make restoration easier, we store Paulis in the +:class:`x symplectic form ` in ``metadata["rm_sig"]`` +so we know whether to apply a bit flip to each bit of the result +(the phase is not important for our purposes). + +.. jupyter-input:: + + ... + + # Construct circuits + circuits = [] + orig_metadata = self._circuit.metadata or {} + for pauli in paulis: + name = f"{self._circuit.name}_{str(pauli)}" + circ = QuantumCircuit( + self.num_qubits, circ_nc + meas_nc, + name=name + ) + # Append original circuit + circ.compose( + self._circuit, circ_qubits, circ_clbits, inplace=True + ) + + # Add Pauli frame + circ.compose(pauli, meas_qubits, inplace=True) + + # Add final measurement + circ.measure(meas_qubits, meas_clbits) + + circ.metadata = orig_metadata.copy() + circ.metadata["rm_bits"] = meas_clbits + circ.metadata["rm_frame"] = str(pauli) + circ.metadata["rm_sig"] = pauli.x.astype(int).tolist() + circuits.append(circ) + return circuits + +Now we write the analysis class, overriding ``_run_analysis`` as described above. We +loop over each circuit to process the output bitstring. Since we're using default level +2 data, we access it with the ``counts`` key. We use the circuit metadata to calculate the bitwise XOR mask from the Pauli +signature to restore the output to what it should be without the random Pauli frame +at the end. We make a new :class:`.AnalysisResultData` object since we're rewriting the +counts from the original experiment. + +.. jupyter-input:: + + from qiskit_experiments.framework import BaseAnalysis, AnalysisResultData + + class RandomizedMeasurementAnalysis(BaseAnalysis): + """Analysis for randomized measurement experiment.""" + + def _run_analysis(self, experiment_data): + + combined_counts = {} + for datum in experiment_data.data(): + # Get counts + counts = datum["counts"] + num_bits = len(next(iter(counts))) + + # Get metadata + metadata = datum["metadata"] + clbits = metadata["rm_bits"] + sig = metadata["rm_sig"] + + # Construct full signature + full_sig = num_bits * [0] + for bit, val in zip(clbits, sig): + full_sig[bit] = val + + # Combine dicts + for key, val in counts.items(): + bitstring = self._swap_bitstring(key, full_sig) + if bitstring in combined_counts: + combined_counts[bitstring] += val + else: + combined_counts[bitstring] = val + + result = AnalysisResultData("counts", combined_counts) + return [result], [] + +This is the helper function we're using to apply the XOR mask and flip the bitstring +output if the Pauli corresponding to that bit has a nonzero signature. + +.. jupyter-input:: + + ... + # Helper dict to swap a clbit value + _swap_bit = {"0": "1", "1": "0"} + + @classmethod + def _swap_bitstring(cls, bitstring, sig): + """Swap a bitstring based signature to flip bits at.""" + # This is very inefficient but demonstrates the basic idea + return "".join(reversed( + [cls._swap_bit[b] if sig[- 1 - i] else b for i, b in enumerate(bitstring)] + )) + +.. jupyter-execute:: + :hide-code: + :hide-output: + + # this is the actual code that defines the experiment so the experiment execution code below can work + + from numpy.random import default_rng, Generator + from qiskit import QuantumCircuit + from qiskit_experiments.framework import BaseExperiment + from qiskit.quantum_info import random_pauli_list + + class RandomizedMeasurement(BaseExperiment): + def __init__( + self, + circuit, + measured_qubits=None, + physical_qubits=None, + backend=None, + num_samples=10, + seed=None + ): + + if physical_qubits is None: + physical_qubits = tuple(range(circuit.num_qubits)) + if measured_qubits is None: + measured_qubits = tuple(range(circuit.num_qubits)) + + analysis = RandomizedMeasurementAnalysis() + super().__init__(physical_qubits, analysis=analysis, backend=backend) + + self._circuit = circuit + self._measured_qubits = measured_qubits + + self.set_experiment_options(num_samples=num_samples, seed=seed) + + @classmethod + def _default_experiment_options(cls): + options = super()._default_experiment_options() + options.num_samples = None + options.seed = None + return options + + def circuits(self): + circ_nc = self._circuit.num_clbits + meas_nc = len(self._measured_qubits) + circ_qubits = list(range(self.num_qubits)) + circ_clbits = list(range(circ_nc)) + meas_qubits = self._measured_qubits + meas_clbits = list(range(circ_nc, circ_nc + meas_nc)) + + num_samples = self.experiment_options.num_samples + if num_samples is None: + num_samples = 2 ** self.num_qubits + + seed = self.experiment_options.seed + if isinstance(seed, Generator): + rng = seed + else: + rng = default_rng(seed) + + paulis = random_pauli_list(meas_nc, size=num_samples, phase=False, seed=rng) + + circuits = [] + orig_metadata = self._circuit.metadata or {} + for pauli in paulis: + name = f"{self._circuit.name}_{str(pauli)}" + circ = QuantumCircuit( + self.num_qubits, circ_nc + meas_nc, + name=name + ) + circ.compose( + self._circuit, circ_qubits, circ_clbits, inplace=True + ) + circ.compose(pauli, meas_qubits, inplace=True) + circ.measure(meas_qubits, meas_clbits) + circ.metadata = orig_metadata.copy() + circ.metadata["rm_bits"] = meas_clbits + circ.metadata["rm_sig"] = pauli.x.astype(int).tolist() + + circuits.append(circ) + + return circuits + + from qiskit_experiments.framework import BaseAnalysis, AnalysisResultData + + class RandomizedMeasurementAnalysis(BaseAnalysis): + """Analysis for randomized measurement experiment.""" + + # Helper dict to swap a clbit value + _swap_bit = {"0": "1", "1": "0"} + + def _run_analysis(self, experiment_data): + + combined_counts = {} + for datum in experiment_data.data(): + counts = datum["counts"] + num_bits = len(next(iter(counts))) + metadata = datum["metadata"] + clbits = metadata["rm_bits"] + sig = metadata["rm_sig"] + full_sig = num_bits * [0] + for bit, val in zip(clbits, sig): + full_sig[bit] = val + for key, val in counts.items(): + bitstring = self._swap_bitstring(key, full_sig) + if bitstring in combined_counts: + combined_counts[bitstring] += val + else: + combined_counts[bitstring] = val + + + result = AnalysisResultData("counts", combined_counts) + return [result], [] + + @classmethod + def _swap_bitstring(cls, bitstring, sig): + """Swap a bitstring based signature to flip bits at.""" + # This is very inefficient but demonstrates the basic idea + # Really should do with bitwise operations of integer counts rep + return "".join(reversed( + [cls._swap_bit[b] if sig[- 1 - i] else b for i, b in enumerate(bitstring)] + )) + + +To test our code, we first simulate a noisy backend with asymmetric readout error in Aer: + +.. jupyter-execute:: + + from qiskit.providers.aer import AerSimulator, noise + + backend_ideal = AerSimulator() + + # Backend with asymetric readout error + p0g1 = 0.3 + p1g0 = 0.05 + noise_model = noise.NoiseModel() + noise_model.add_all_qubit_readout_error([[1 - p1g0, p1g0], [p0g1, 1 - p0g1]]) + noise_backend = AerSimulator(noise_model=noise_model) + +Let's use a GHZ circuit as the input: + +.. jupyter-execute:: + + # GHZ Circuit + nq = 4 + qc = QuantumCircuit(nq) + qc.h(0) + for i in range(1, nq): + qc.cx(i-1, i) + + qc.draw("mpl") + +Check that the experiment is appending a random Pauli and measurements as expected: + +.. jupyter-execute:: + + # Experiment parameters + total_shots = 100000 + num_samples = 50 + shots = total_shots // num_samples + + # Run ideal randomized meas experiment + exp = RandomizedMeasurement(qc, num_samples=num_samples) + exp.circuits()[0].draw("mpl") + +We now run the experiment with a GHZ circuit on an ideal backend, whic produces nearly +perfect symmetrical results between :math:`|0000\rangle` and :math:`|1111\rangle`: + +.. jupyter-execute:: + + expdata_ideal = exp.run(AerSimulator(), shots=shots) + counts_ideal = expdata_ideal.analysis_results("counts").value + print(counts_ideal) + +Repeat the experiment on the backend with readout error and compare with results +from running GHZ circuit itself: + +.. jupyter-execute:: + + # Run noisy randomized meas experiment with readout error + expdata_noise = exp.run(noise_backend, shots=shots) + counts_noise = expdata_noise.analysis_results("counts").value + + # Run noisy simulation of the original circuit without randomization + meas_circ = qc.copy() + meas_circ.measure_all() + result = noise_backend.run(meas_circ, shots=total_shots).result() + counts_direct = result.get_counts(0) + + from qiskit.visualization import plot_histogram + + # Plot counts, ideally randomized one should be more symmetric in noise + # than direct one with asymmetric readout error + plot_histogram([counts_ideal, counts_direct, counts_noise], + legend=["Ideal", + "Asymmetric meas error (Direct)", + "Asymmetric meas error (Randomized)"]) + +For a GHZ state, we expect a symmetric noise model to also produce symmetric readout +results. The asymmetric measurement of the original circuit on this backend (Direct on +the plot legend) has been successfully symmetrized by the application of randomized +measurement (Randomized on the plot legend). + +Note that since this experiment tracks the original and added classical registers, it is +possible for the original circuit to have its own mid-circuit measurements that would be +unaffected by the added randomized measurements, which use its own classical registers: + +.. jupyter-execute:: + + qc = QuantumCircuit(nq) + qc.h(0) + qc.measure_all() + qc.barrier() + for i in range(1, nq): + qc.cx(i-1, i) + + exp = RandomizedMeasurement(qc, num_samples=num_samples) + exp.circuits()[0].draw("mpl") \ No newline at end of file diff --git a/docs/tutorials/data_processing.rst b/docs/tutorials/data_processor.rst similarity index 53% rename from docs/tutorials/data_processing.rst rename to docs/tutorials/data_processor.rst index 339c561754..f09755a8a0 100644 --- a/docs/tutorials/data_processing.rst +++ b/docs/tutorials/data_processor.rst @@ -1,186 +1,203 @@ -Data processing -=============== - -In this tutorial we describe how to manipulate the different -types of data that quantum computers can return. -The tutorial covers key aspects of the ``data_processing`` package -such as how to initialize an instance of ``DataProcessor`` and how -to create the ``DataAction`` nodes that process the data. - -Data types on IBM Quantum backends ----------------------------------- - -IBM Quantum backends can return different types of data. There is -counts data and IQ data [1], referred to as level 2 and level 1 data, -respectively. Level 2 data corresponds -to a dictionary with bit-strings as keys and the number of -times the bit-string was measured as a value. Importantly -for some experiments, the backends can return a lower data level -known as IQ data. Here, I and Q stand -for in phase and quadrature. The IQ are points in the complex plane -corresponding to a time integrated measurement signal which is -reflected or transmitted through the readout resonator depending -on the setup. IQ data can be returned as "single" or "averaged" data. -Here, single means that the outcome of each single shot is returned -while average only returns the average of the IQ points over the -measured shots. The type of data that an experiment should return -is specified by the ``run_options`` of an experiment. - -Processing data of different types ----------------------------------- - -An experiment should work with the different data levels. -Crucially, the analysis, such as a curve analysis, expects the -same data format no matter the run options of the experiment. -Transforming the data returned by the backend into the format -that the analysis accepts is done by the ``data_processing`` library. -The key class here is the ``DataProcessor``. It is initialized from -two arguments. The first, is the ``input_key`` which is typically -"memory" or "counts" and identifies the key in the experiment data -where the data is located. The second argument ``data_actions`` -is a list of ``nodes`` where each node performs a processing step -of the data processor. Crucially, the output of one node in the -list is the input to the next node in the list. - -To illustrate the data processing module we consider an example -in which we measure a rabi oscillation with different data levels. -The code below sets up the Rabi experiment. - - -.. jupyter-execute:: - - import numpy as np - - from qiskit import pulse - from qiskit.circuit import Parameter - - from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend - from qiskit_experiments.data_processing import DataProcessor, nodes - from qiskit_experiments.library import Rabi - - with pulse.build() as sched: - pulse.play( - pulse.Gaussian(160, Parameter("amp"), sigma=40), - pulse.DriveChannel(0) - ) - - backend = SingleTransmonTestBackend() - - exp = Rabi( - qubit=0, - backend=backend, - schedule=sched, - amplitudes=np.linspace(-0.1, 0.1, 21) - ) - -We now run the Rabi experiment twice, once with level 1 data and -once with level 2 data. Here, we manually configure two data -processors but note that typically you do not need to do this -yourself. We begin with single-shot IQ data. - -.. jupyter-execute:: - - data_nodes = [nodes.SVD(), nodes.AverageData(axis=1), nodes.MinMaxNormalize()] - iq_processor = DataProcessor("memory", data_nodes) - exp.analysis.set_options(data_processor=iq_processor) - - exp_data = exp.run(meas_level=1, meas_return="single").block_for_results() - - display(exp_data.figure(0)) - -Since we requested IQ data we set the input key to "memory" which is -the key under which the data is located in the experiment data. The -``iq_processor`` contains three nodes. The first node ``SVD`` is a -singular value decomposition which projects the two-dimensional IQ -data on its main axis. The second node averages the single-shot -data. The output is a single float per quantum circuit. Finally, -the last node ``MinMaxNormalize`` normalizes the measured signal to -the interval [0, 1]. The ``iq_dataprocessor`` is then set as an option -of the analysis class. For those who are wondering what single-shot IQ -data looks like we plot the data returned by the zeroth and sixth circuit -in the code block below. - -.. jupyter-execute:: - - %matplotlib inline - - from qiskit_experiments.visualization import IQPlotter, MplDrawer - - plotter = IQPlotter(MplDrawer()) - - for idx in [0, 6]: - plotter.set_series_data( - f"Circuit {idx}", - points=np.array(exp_data.data(idx)["memory"]).squeeze(), - ) - - plotter.figure() - -Now we turn to counts data and see how the -data processor needs to be changed. - -.. jupyter-execute:: - - data_nodes = [nodes.Probability(outcome="1")] - count_processor = DataProcessor("counts", data_nodes) - exp.analysis.set_options(data_processor=count_processor) - - exp_data = exp.run(meas_level=2).block_for_results() - - display(exp_data.figure(0)) - -Now, the ``input_key`` is "counts" since that is the key under which the counts -data is saved in instances of ``ExperimentData``. The list of nodes -comprises a single data action which converts the counts to an estimation -of the probability of measuring the outcome "1". - -Writing data actions ---------------------- - -The nodes in a data processor are all sub-classes of ``DataAction``. -Users who wish to write their own data actions must (i) sub-class -``DataAction`` and (ii) implement the internal ``_process`` method -called by instances of ``DataProcessor``. This method is the -processing step that the node implements. It takes a numpy array as -input and returns the processed numpy array as output. This output -serves as the input for the next node in the data processing chain. -Here, the input and output numpy arrays can have a different shape. - -In addition to the standard ``DataAction`` the data processing package -also supports trainable data actions as subclasses of ``TrainableDataAction``. -These nodes must first be trained on the data before they can -process the data. An example of a ``TrainableDataAction`` is the -``SVD`` node which must first learn the main axis of the data before -it can project a data point onto this axis. To implement trainable nodes -developers must also implement the ``train`` method. This method is -called when ``DataProcessor.train`` is called. - -Conclusion ----------- - -In this tutorial you learnt about the data processing module in Qiskit -Experiments. Data is processed by data processors that -call a list of nodes each acting once on the data. Data -processing connects the data returned by the backend to the data that -the analysis classes need. Typically, you will not need to implement -the data processing yourself since Qiskit Experiments has built-in -methods that determine the correct instance of ``DataProcessor`` for -your data. More advanced data processing includes, for example, handling -restless measurements [2, 3], see also the ``Restless Measurements`` tutorial. - -References -~~~~~~~~~~ - -[1] Thomas Alexander, Naoki Kanazawa, Daniel J. Egger, Lauren Capelluto, -Christopher J. Wood, Ali Javadi-Abhari, David McKay, Qiskit Pulse: -Programming Quantum Computers Through the Cloud with Pulses, Quantum -Science and Technology **5**, 044006 (2020). https://arxiv.org/abs/2004.06755 - -[2] Caroline Tornow, Naoki Kanazawa, William E. Shanks, Daniel J. Egger, -Minimum quantum run-time characterization and calibration via restless -measurements with dynamic repetition rates, Physics Review Applied **17**, -064061 (2022). https://arxiv.org/abs/2202.06981 - -[3] Max Werninghaus, Daniel J. Egger, Stefan Filipp, High-speed calibration and -characterization of superconducting quantum processors without qubit reset, -PRX Quantum 2, 020324 (2021). https://arxiv.org/abs/2010.06576 \ No newline at end of file +Data Processor: Wrangling data +============================== + +Data processing is the act of taking the data returned by the backend and +converting it into a format that can be analyzed. +It is implemented as a chain of data processing steps that transform various input data, +e.g. IQ data, into a desired format, e.g. population, which can be analyzed. +These data transformations may consist of multiple steps, such as kerneling and discrimination. +Each step is implemented by a member of the :class:`~.DataAction` class, also called a `node`. + +The data processor implements the :meth:`__call__` method. Once initialized, it +can thus be used as a standard python function: + +.. code-block:: python + + processor = DataProcessor(input_key="memory", [Node1(), Node2(), ...]) + out_data = processor(in_data) + +The data input to the processor is a sequence of dictionaries each representing the result +of a single circuit. The output of the processor is a numpy array whose shape and data type +depend on the combination of the nodes in the data processor. + +Uncertainties that arise from quantum measurements or finite sampling can be taken into account +in the nodes: a standard error can be generated in a node and can be propagated +through the subsequent nodes in the data processor. +Correlation between computed values is also considered. + +Let's look at an example to see how to initialize an instance of :class:`.DataProcessor` and +create the :class:`.DataAction` nodes that process the data. + +Data types on IBM Quantum backends +---------------------------------- + +IBM Quantum backends can return different types of data. There is counts data and IQ +data [1]_, referred to as level 2 and level 1 data, respectively. Level 2 data +corresponds to a dictionary with bit-strings as keys and the number of times the +bit-string was measured as a value. Importantly for some experiments, the backends can +return a lower data level known as IQ data. Here, I and Q stand for in phase and +quadrature. The IQ are points in the complex plane corresponding to a time integrated +measurement signal which is reflected or transmitted through the readout resonator +depending on the setup. IQ data can be returned as "single" or "averaged" data. Here, +single means that the outcome of each single shot is returned while average only returns +the average of the IQ points over the measured shots. The type of data that an +experiment should return is specified by the :meth:`~.BaseExperiment.run_options` of an +experiment. + +Processing data of different types +---------------------------------- + +An experiment should work with the different data levels. +Crucially, the analysis, such as a curve analysis, expects the +same data format no matter the run options of the experiment. +Transforming the data returned by the backend into the format +that the analysis accepts is done by the ``data_processing`` library. +The key class here is the :class:`.DataProcessor`. It is initialized from +two arguments. The first is the ``input_key``, which is typically +"memory" or "counts", and identifies the key in the experiment data +where the data is located. The second argument ``data_actions`` +is a list of ``nodes`` where each node performs a processing step +of the data processor. Crucially, the output of one node in the +list is the input to the next node in the list. + +To illustrate the data processing module, we consider an example +in which we measure a rabi oscillation with different data levels. +The code below sets up the Rabi experiment. + + +.. jupyter-execute:: + + import numpy as np + + from qiskit import pulse + from qiskit.circuit import Parameter + + from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend + from qiskit_experiments.data_processing import DataProcessor, nodes + from qiskit_experiments.library import Rabi + + with pulse.build() as sched: + pulse.play( + pulse.Gaussian(160, Parameter("amp"), sigma=40), + pulse.DriveChannel(0) + ) + + backend = SingleTransmonTestBackend() + + exp = Rabi( + qubit=0, + backend=backend, + schedule=sched, + amplitudes=np.linspace(-0.1, 0.1, 21) + ) + +We now run the Rabi experiment twice, once with level 1 data and +once with level 2 data. Here, we manually configure two data +processors but note that typically you do not need to do this +yourself. We begin with single-shot IQ data. + +.. jupyter-execute:: + + data_nodes = [nodes.SVD(), nodes.AverageData(axis=1), nodes.MinMaxNormalize()] + iq_processor = DataProcessor("memory", data_nodes) + exp.analysis.set_options(data_processor=iq_processor) + + exp_data = exp.run(meas_level=1, meas_return="single").block_for_results() + + display(exp_data.figure(0)) + +Since we requested IQ data we set the input key to "memory" which is +the key under which the data is located in the experiment data. The +``iq_processor`` contains three nodes. The first node ``SVD`` is a +singular value decomposition which projects the two-dimensional IQ +data on its main axis. The second node averages the single-shot +data. The output is a single float per quantum circuit. Finally, +the last node ``MinMaxNormalize`` normalizes the measured signal to +the interval [0, 1]. The ``iq_dataprocessor`` is then set as an option +of the analysis class. For those who are wondering what single-shot IQ +data looks like we plot the data returned by the zeroth and sixth circuit +in the code block below. + +.. jupyter-execute:: + :hide-code: + :hide-output: + + %matplotlib inline + +.. jupyter-execute:: + + from qiskit_experiments.visualization import IQPlotter, MplDrawer + + plotter = IQPlotter(MplDrawer()) + + for idx in [0, 6]: + plotter.set_series_data( + f"Circuit {idx}", + points=np.array(exp_data.data(idx)["memory"]).squeeze(), + ) + + plotter.figure() + +Now we turn to counts data and see how the +data processor needs to be changed. + +.. jupyter-execute:: + + data_nodes = [nodes.Probability(outcome="1")] + count_processor = DataProcessor("counts", data_nodes) + exp.analysis.set_options(data_processor=count_processor) + + exp_data = exp.run(meas_level=2).block_for_results() + + display(exp_data.figure(0)) + +Now, the ``input_key`` is "counts" since that is the key under which the counts +data is saved in instances of :class:`.ExperimentData`. The list of nodes +comprises a single data action which converts the counts to an estimation +of the probability of measuring the outcome "1". + +Writing data actions +-------------------- + +The nodes in a data processor are all sub-classes of :class:`.DataAction`. +Users who wish to write their own data actions must (i) sub-class +:class:`.DataAction` and (ii) implement the internal ``_process`` method +called by instances of :class:`.DataProcessor`. This method is the +processing step that the node implements. It takes a numpy array as +input and returns the processed numpy array as output. This output +serves as the input for the next node in the data processing chain. +Here, the input and output numpy arrays can have a different shape. + +In addition to the standard :class:`.DataAction` the data processing package +also supports trainable data actions as subclasses of :class:`.TrainableDataAction`. +These nodes must first be trained on the data before they can +process the data. An example of a :class:`.TrainableDataAction` is the +:class:`.SVD` node which must first learn the main axis of the data before +it can project a data point onto this axis. To implement trainable nodes +developers must also implement the :meth:`~.DataProcessor.train` method. This method is +called when :meth:`~.DataProcessor.train` is called. + +Conclusion +---------- + +Data is processed by data processors that +call a list of nodes each acting once on the data. Data +processing connects the data returned by the backend to the data that +the analysis classes need. Typically, you will not need to implement +the data processing yourself since Qiskit Experiments has built-in +methods that determine the correct instance of :class:`.DataProcessor` for +your data. More advanced data processing includes, for example, handling +:doc:`restless measurements `. + +References +---------- + +.. [1] Thomas Alexander, Naoki Kanazawa, Daniel J. Egger, Lauren Capelluto, + Christopher J. Wood, Ali Javadi-Abhari, David McKay, Qiskit Pulse: + Programming Quantum Computers Through the Cloud with Pulses, Quantum + Science and Technology **5**, 044006 (2020). https://arxiv.org/abs/2004.06755. + +See also +-------- + +- Experiment manual: :doc:`/manuals/measurement/restless_measurements` diff --git a/docs/tutorials/experiment_cloud_service.rst b/docs/tutorials/experiment_cloud_service.rst deleted file mode 100644 index 345abcce44..0000000000 --- a/docs/tutorials/experiment_cloud_service.rst +++ /dev/null @@ -1,245 +0,0 @@ -Saving Experiment Data to the Cloud -=================================== - -Qiskit Experiments is designed to work with Qiskit’s `online experiment -database `__, where you -can view and share results of experiments you’ve run as ``ExperimentData`` -objects. This tutorial shows how to save your experimental results to the -database. You will need to have ``qiskit-ibmq-provider`` installed locally -and an account in the Qiskit cloud service. We will use the ``ibmq_lima`` backend -which is open and available to everyone. - -:math:`T_1` Experiment ----------------------- - -Let’s run a :math:`T_1` experiment and save the results to the -experiment database. - -.. jupyter-execute:: - - from qiskit_experiments.library.characterization import T1 - import numpy as np - - t1_delays = np.arange(1e-6, 600e-6, 50e-6) - - # Create an experiment for qubit 0, - # setting the unit to microseconds, - # with the specified time intervals - exp = T1(qubit=0, delays=t1_delays) - print(exp.circuits()[0]) - -Now we run the experiment. ``block_for_results()`` blocks execution -until the experiment is complete, then ``save()`` is called to save the -data to ResultsDB. - -.. jupyter-execute:: - :hide-code: - :hide-output: - - from qiskit.test.ibmq_mock import mock_get_backend - backend = mock_get_backend('FakeLima') - - -.. jupyter-execute:: - - from qiskit import IBMQ - IBMQ.load_account() - provider = IBMQ.get_provider(hub="ibm-q", group="open", project="main") - backend = provider.get_backend("ibmq_lima") - - t1_expdata = exp.run(backend=backend, shots=1000).block_for_results() - t1_expdata.save() - -.. jupyter-execute:: - :hide-code: - - print("You can view the experiment online at https://quantum-computing.ibm.com/experiments/10a43cb0-7cb9-41db-ad74-18ea6cf63704") - -Note that calling ``save()`` before the experiment is complete will -instantiate an experiment entry in the database, but it will not have -complete data. To fix this, you can call ``save()`` again once the -experiment is done running. - -Our :math:`T_1` figure and analysis results: - -.. jupyter-execute:: - - display(t1_expdata.figure(0)) - for result in t1_expdata.analysis_results(): - print(result) - - -You can also view the results at the `IBM Quantum Experiments -pane `__ -on the cloud. - -By default, the interface displays all experiments you have privilege to -see, but this link shows your own experiments. You can change that -setting by clicking on the All Experiments dropdown. You can also filter -by device, date, provider, and result by clicking on the filter icon. - -.. image:: ./experiment_cloud_service/filter.png - -Individual experiment pages show the plot, and one or more important -analysis results, which for the :math:`T_1` experiment is the fitted -:math:`T_1` value. - -.. image:: ./experiment_cloud_service/t1_experiment.png - -The metadata field shows experiment metadata included in the ``ExperimentData`` object. - -.. image:: ./experiment_cloud_service/metadata.png - -You can change the quality and verify/unverify the results upon -selection of an analysis result. Quality is an automatic parameter -generated by the experiment analysis based on pre-set criteria. The verification field is for a -human to determine whether the result is acceptable. - -.. image:: ./experiment_cloud_service/verify_experiment.png - -Loading an experiment from the database -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -You can also retrieve the full ``ExperimentData`` object from the database service. -Let’s load a `previous T1 -experiment `__, -which we’ve made public by editing the ``Share level`` field: - -.. jupyter-execute:: - :hide-output: - :raises: - - from qiskit_experiments.framework.experiment_data import ExperimentData - service = ExperimentData.get_service_from_backend(backend) - load_expdata = ExperimentData.load("9640736e-d797-4321-b063-d503f8e98571", service) - -To display the figure, which is serialized into a string, we need the -``SVG`` library: - -.. jupyter-execute:: - :hide-output: - :raises: - - from IPython.display import SVG - SVG(load_expdata.figure(0).figure) - -.. image:: ./experiment_cloud_service/t1_loaded.png - -The analysis results have been retrieved as well: - -.. jupyter-execute:: - :hide-output: - :raises: - - for result in load_expdata.analysis_results(): - print(result) - -.. jupyter-execute:: - :hide-code: - - print("""AnalysisResult - - name: T1 - - value: 0.0001040+/-0.0000028 - - χ²: 0.8523786276663019 - - quality: good - - extra: <1 items> - - device_components: ['Q0'] - - verified: False - AnalysisResult - - name: @Parameters_T1Analysis - - value: CurveFitResult: - - fitting method: least_squares - - number of sub-models: 1 - * F_exp_decay(x) = amp * exp(-x/tau) + base - - success: True - - number of function evals: 9 - - degree of freedom: 9 - - chi-square: 7.671407648996717 - - reduced chi-square: 0.8523786276663019 - - Akaike info crit.: 0.6311217041870707 - - Bayesian info crit.: 2.085841653551072 - - init params: - * amp = 0.923076923076923 - * tau = 0.00016946294665316433 - * base = 0.033466533466533464 - - fit params: - * amp = 0.9266620487665083 ± 0.007096409569790425 - * tau = 0.00010401411623191737 ± 2.767679521974391e-06 - * base = 0.036302726197354626 ± 0.0037184540724124844 - - correlations: - * (tau, base) = -0.6740808746060173 - * (amp, base) = -0.4231810882291163 - * (amp, tau) = 0.09302612202500576 - - quality: good - - device_components: ['Q0'] - - verified: False""") - -Auto-saving an experiment -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The ``auto_save`` feature automatically saves changes to the `ExperimentData` object to -the cloud service whenever it's updated. - -.. jupyter-execute:: - :hide-output: - - exp = T1(qubit=0, delays=t1_delays) - - t1_expdata = exp.run(backend=backend, shots=1000) - t1_expdata.auto_save = True - t1_expdata.block_for_results() - -.. jupyter-execute:: - :hide-code: - - print("You can view the experiment online at https://quantum-computing.ibm.com/experiments/cdaff3fa-f621-4915-a4d8-812d05d9a9ca") - print("") - -Deleting an experiment -~~~~~~~~~~~~~~~~~~~~~~ - -Both figures and analysis results can be deleted. Note that unless you -have auto save on, the update has to be manually saved to the remote -database by calling ``save()``. Because there are two analysis results, one for -the T1 parameter and one for the curve fitting results, we delete twice. - -.. jupyter-execute:: - :hide-output: - - t1_expdata.delete_figure(0) - t1_expdata.delete_analysis_result(0) - t1_expdata.delete_analysis_result(0) - -.. jupyter-execute:: - :hide-code: - - print("Are you sure you want to delete the experiment plot? [y/N]: y") - print("Are you sure you want to delete the analysis result? [y/N]: y") - print("Are you sure you want to delete the analysis result? [y/N]: y") - -The web interface shows that both the figure and analysis result have been -deleted: |t1_deleted.png| - -.. |t1_deleted.png| image:: ./experiment_cloud_service/t1_deleted.png - -Tagging and sharing experiments -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Tags and notes can be added to experiments to help identify specific experiments in the interface. -For example, an experiment can be tagged and made public with the following code. - -.. jupyter-execute:: - - t1_expdata.tags = ['tag1', 'tag2'] - t1_expdata.share_level = "public" - t1_expdata.notes = "Example note." - -These fields can also be updated in the web interface. For more information about -using the interface, consult its -`documentation `__. - -.. jupyter-execute:: - - import qiskit.tools.jupyter - %qiskit_copyright - diff --git a/docs/tutorials/experiment_cloud_service/filter.png b/docs/tutorials/experiment_cloud_service/filter.png deleted file mode 100644 index 974c08c1d8..0000000000 Binary files a/docs/tutorials/experiment_cloud_service/filter.png and /dev/null differ diff --git a/docs/tutorials/experiment_cloud_service/metadata.png b/docs/tutorials/experiment_cloud_service/metadata.png deleted file mode 100644 index c1ae5d0589..0000000000 Binary files a/docs/tutorials/experiment_cloud_service/metadata.png and /dev/null differ diff --git a/docs/tutorials/experiment_cloud_service/t1_deleted.png b/docs/tutorials/experiment_cloud_service/t1_deleted.png deleted file mode 100644 index 49b0ebe2dc..0000000000 Binary files a/docs/tutorials/experiment_cloud_service/t1_deleted.png and /dev/null differ diff --git a/docs/tutorials/experiment_cloud_service/t1_experiment.png b/docs/tutorials/experiment_cloud_service/t1_experiment.png deleted file mode 100644 index 51b17f2910..0000000000 Binary files a/docs/tutorials/experiment_cloud_service/t1_experiment.png and /dev/null differ diff --git a/docs/tutorials/experiment_cloud_service/verify_experiment.png b/docs/tutorials/experiment_cloud_service/verify_experiment.png deleted file mode 100644 index 55f4be4155..0000000000 Binary files a/docs/tutorials/experiment_cloud_service/verify_experiment.png and /dev/null differ diff --git a/docs/tutorials/experiment_cloud_service/web_tags_share.png b/docs/tutorials/experiment_cloud_service/web_tags_share.png deleted file mode 100644 index f4dafc002f..0000000000 Binary files a/docs/tutorials/experiment_cloud_service/web_tags_share.png and /dev/null differ diff --git a/docs/tutorials/fine_amplitude_calibration.rst b/docs/tutorials/fine_amplitude_calibration.rst deleted file mode 100644 index 1f4799387e..0000000000 --- a/docs/tutorials/fine_amplitude_calibration.rst +++ /dev/null @@ -1,181 +0,0 @@ -================================================ -Fine Calibrations of a pulse amplitude -================================================ -Calibrating quantum gates is the task of finding the parameters of the underlying pulses that best implement the target gate. -The amplitude of a pulse can be precisely calibrated using -error amplifying gate sequences. These gate sequences apply -the same gate a variable number of times. Therefore, if each gate -has a small error :math:`d\theta` in the rotation angle then -a sequence of :math:`n` gates will have a rotation error of :math:`n` * :math:`d\theta`. - -We will illustrate how the `FineXAmplitude` experiment works with the `PulseBackend`, -i.e., a backend that simulates the underlying pulses with Qiskit Dynamics -on a three-level model of a transmon. This simulator backend -can be replaced with a standard hardware IBM Quantum backend. - -.. jupyter-execute:: - - import numpy as np - from qiskit.pulse import InstructionScheduleMap - import qiskit.pulse as pulse - from qiskit_experiments.library import FineXAmplitude, FineSXAmplitude - from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend - -.. jupyter-execute:: - - backend = SingleTransmonTestBackend() - qubit = 0 ------------------------------------------------------ -Fine X gate Amplitude Calibration ------------------------------------------------------ -We will run the error amplifying experiments with our own pulse schedules -on which we purposefully add over and under rotations. -To do this we create an instruction to schedule map which we populate with -the schedules we wish to work with. This instruction schedule map is then -given to the transpile options of the experiment so that -the Qiskit transpiler can attach the pulse schedules to the gates in the experiments. -We base all our pulses on the default X pulse of "SingleTransmonTestBackend". - -.. jupyter-execute:: - - x_pulse = backend.defaults().instruction_schedule_map.get('x', (qubit,)).instructions[0][1].pulse - d0, inst_map = pulse.DriveChannel(qubit), pulse.InstructionScheduleMap() - - -We now take the ideal x pulse amplitude reported by the backend and -add/subtract a 2% over/underrotation to it by scaling the ideal amplitude and see -if the experiment can detect this over/underrotation. We replace the default X pulse -in the instruction schedule map with this over/underrotated pulse. - -.. jupyter-execute:: - - ideal_amp = x_pulse.amp - over_amp = ideal_amp*1.02 - under_amp = ideal_amp*0.98 - print(f"The reported amplitude of the X pulse is {ideal_amp:.4f} which we set as ideal_amp.") - print(f"we use {over_amp:.4f} amplitude for overroation pulse and {under_amp:.4f} for underrotation pulse.") - # build the over rotated pulse and add it to the instruction schedule map - with pulse.build(backend=backend, name="x") as x_over: - pulse.play(pulse.Drag(x_pulse.duration, over_amp, x_pulse.sigma, x_pulse.beta), d0) - inst_map.add("x", (qubit,), x_over) - -Let's look at one of the circuits of the FineXAmplitude experiment. -To calibrate the X gate we add an SX gate before the X gates to move the ideal population -to the equator of the Bloch sphere where the sensitivity to over/under rotations is the highest. - -.. jupyter-execute:: - - overamp_cal = FineXAmplitude(qubit, backend=backend) - overamp_cal.set_transpile_options(inst_map=inst_map) - overamp_cal.circuits()[4].draw(output='mpl') - -.. jupyter-execute:: - - # do the experiment - exp_data_over = overamp_cal.run(backend).block_for_results() - print(f"The ping-pong pattern points on the figure below indicate") - print(f"an over rotation which makes the initial state rotate more than pi.") - print(f"Therefore, the miscalibrated X gate makes the qubit stay away from the Bloch sphere equator.") - exp_data_over.figure(0) - -We now look at a pulse with an under rotation to see how the FineXAmplitude experiment -detects this error. We will compare the results to the over rotation above. - -.. jupyter-execute:: - - # build the under rotated pulse and add it to the instruction schedule map - with pulse.build(backend=backend, name="x") as x_under: - pulse.play(pulse.Drag(x_pulse.duration, under_amp, x_pulse.sigma, x_pulse.beta), d0) - inst_map.add("x", (qubit,), x_under) - - # do the experiment - underamp_cal = FineXAmplitude(qubit, backend=backend) - underamp_cal.set_transpile_options(inst_map=inst_map) - - exp_data_under = underamp_cal.run(backend).block_for_results() - exp_data_under.figure(0) - -Similarly to the over rotation, the under rotated pulse creates -qubit populations that do not lie on the equator of the Bloch sphere. -However, compared to the ping-pong pattern of the over rotated pulse, -the under rotated pulse produces a flipped ping-pong pattern. -This allows us to determine not only the magnitude of the rotation error -but also its sign. - -.. jupyter-execute:: - - # analyze the results - target_angle = np.pi - dtheta_over = exp_data_over.analysis_results("d_theta").value.nominal_value - scale_over = target_angle / (target_angle + dtheta_over) - dtheta_under = exp_data_under.analysis_results("d_theta").value.nominal_value - scale_under = target_angle / (target_angle + dtheta_under) - print(f"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta_over:.3f} rad in over-rotated pulse case.") - print(f"Thus, scale the {over_amp:.4f} pulse amplitude by {scale_over:.3f} to obtain {over_amp*scale_over:.5f}.") - print(f"On the other hand, we measued a deviation of {dtheta_under:.3f} rad in under-rotated pulse case.") - print(f"Thus, scale the {under_amp:.4f} pulse amplitude by {scale_under:.3f} to obtain {under_amp*scale_under:.5f}.") - ------------------------------------------------------------------------------------ -Analyzing a pi/2 pulse ------------------------------------------------------------------------------------ -The amplitude of the SX gate is calibrated with the FineSXAmplitude experiment. -Unlike the FineXAmplitude experiment, the FineSXAmplitude experiment -does not require other gates than the SX gate since the number of repetitions -can be chosen such that the ideal population is always on the equator of the -Bloch sphere. -To demonstrate the FineSXAmplitude experiment, we now create a SX pulse by -dividing the amplitude of the X pulse by two. -We expect that this pulse might have a small rotation error which we want to correct. - - -.. jupyter-execute:: - - # build sx_pulse with the default x_pulse from defaults and add it to the InstructionScheduleMap - sx_pulse = pulse.Drag(x_pulse.duration, 0.5*x_pulse.amp, x_pulse.sigma, x_pulse.beta, name="SXp_d0") - with pulse.build(name='sx') as sched: - pulse.play(sx_pulse,d0) - inst_map.add("sx", (qubit,), sched) - - # do the expeirment - amp_cal = FineSXAmplitude(qubit, backend) - amp_cal.set_transpile_options(inst_map=inst_map) - exp_data_x90p = amp_cal.run().block_for_results() - exp_data_x90p.figure(0) - -From the analysis result, we can see that there is a small rotation error. - -.. jupyter-execute:: - - # check how much more the given sx_pulse makes over or under roatation - print(exp_data_x90p.analysis_results("d_theta")) - target_angle = np.pi / 2 - dtheta = exp_data_x90p.analysis_results("d_theta").value.nominal_value - scale = target_angle / (target_angle + dtheta) - print(f"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.") - print(f"Thus, scale the {sx_pulse.amp:.4f} pulse amplitude by {scale:.3f} to obtain {sx_pulse.amp*scale:.5f}.") - -Let's change the amplitude of the SX pulse by a factor :math:`\pi/2 / (\pi/2 + d\theta)` -to turn it into a sharp :math:`\pi/2` rotation. - -.. jupyter-execute:: - - pulse_amp = sx_pulse.amp*scale - - with pulse.build(backend=backend, name="sx") as sx_new: - pulse.play(pulse.Drag(x_pulse.duration, pulse_amp, x_pulse.sigma, x_pulse.beta), d0) - - inst_map.add("sx", (qubit,), sx_new) - inst_map.get('sx',(qubit,)) - - # do the experiment - data_x90p = amp_cal.run().block_for_results() - data_x90p.figure(0) - -You can now see that the correction to the pulse amplitude has allowed us -to improve our SX gate as shown by the analysis result below. - -.. jupyter-execute:: - - # check the dtheta - print(data_x90p.analysis_results("d_theta")) - diff --git a/docs/tutorials/fine_calibrations.ipynb b/docs/tutorials/fine_calibrations.ipynb deleted file mode 100644 index 518d489193..0000000000 --- a/docs/tutorials/fine_calibrations.ipynb +++ /dev/null @@ -1,1109 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "tamil-indonesia", - "metadata": {}, - "source": [ - "# Fine Calibrations" - ] - }, - { - "cell_type": "markdown", - "id": "civilian-radio", - "metadata": {}, - "source": [ - "The amplitude of a pulse can be precisely calibrated using error amplifying gate sequences. These gate sequences apply the same gate a variable number of times. Therefore, if each gate has a small error $\\delta\\theta$ in the rotation angle then a sequence of $n$ gates will have a rotation error of $n\\cdot\\delta\\theta$. We will work with `ibmq_lima` and compare our results to those reported by the backend." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "acoustic-paint", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "from qiskit import IBMQ\n", - "from qiskit.pulse import InstructionScheduleMap\n", - "import qiskit.pulse as pulse\n", - "\n", - "from qiskit_experiments.library import FineXAmplitude, FineSXAmplitude" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "accessory-alexandria", - "metadata": {}, - "outputs": [], - "source": [ - "IBMQ.load_account()\n", - "provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')\n", - "backend = provider.get_backend('ibmq_lima')" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "unusual-amendment", - "metadata": {}, - "outputs": [], - "source": [ - "qubit = 0" - ] - }, - { - "cell_type": "markdown", - "id": "5b924bfd", - "metadata": {}, - "source": [ - "### Instruction schedule map\n", - "\n", - "We will run the fine calibration experiments with our own pulse schedules. To do this we create an instruction to schedule map which we populate with the schedules we wish to work with. This instruction schedule map is then given to the transpile options of the calibration experiments so that the Qiskit transpiler can attach the pulse schedules to the gates in the experiments. We will base all our pulses on the default `X` pulse of Lima." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "phantom-language", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Drag(duration=160, amp=(0.12494962745493425+0j), sigma=40, beta=0.5729301274879344, name='Xp_d0')" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_pulse = backend.defaults().instruction_schedule_map.get('x', (qubit,)).instructions[0][1].pulse\n", - "x_pulse" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "478d07d1", - "metadata": {}, - "outputs": [], - "source": [ - "# create the schedules we need and add them to an instruction schedule map.\n", - "sx_pulse = pulse.Drag(x_pulse.duration, 0.5*x_pulse.amp, x_pulse.sigma, x_pulse.beta, name=\"SXp_d0\")\n", - "y_pulse = pulse.Drag(x_pulse.duration, 1.0j*x_pulse.amp, x_pulse.sigma, x_pulse.beta, name=\"Yp_d0\")\n", - "\n", - "d0, inst_map = pulse.DriveChannel(qubit), InstructionScheduleMap()\n", - "\n", - "for name, pulse_ in [(\"x\", x_pulse), (\"y\", y_pulse), (\"sx\", sx_pulse)]:\n", - " with pulse.build(name=name) as sched:\n", - " pulse.play(pulse_, d0)\n", - " \n", - " inst_map.add(name, (qubit,), sched)" - ] - }, - { - "cell_type": "markdown", - "id": "grand-color", - "metadata": {}, - "source": [ - "## Fine Amplitude Calibration" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "adjusted-religious", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The reported amplitude of the X pulse is 0.1249+0.0000j.\n" - ] - } - ], - "source": [ - "ideal_amp = x_pulse.amp\n", - "print(f\"The reported amplitude of the X pulse is {ideal_amp:.4f}.\")" - ] - }, - { - "cell_type": "markdown", - "id": "distributed-official", - "metadata": {}, - "source": [ - "### Detecting an over-rotated pulse\n", - "\n", - "We now take the x pulse reported by the backend and add a 2% overrotation to it by scaling the amplitude and see if the experiment can detect this overrotation. We replace the default `X` pulse in the instruction schedule map with this overrotated pulse." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "wanted-soundtrack", - "metadata": {}, - "outputs": [], - "source": [ - "pulse_amp = ideal_amp*1.02\n", - "target_angle = np.pi\n", - "\n", - "with pulse.build(backend=backend, name=\"x\") as x_over:\n", - " pulse.play(pulse.Drag(x_pulse.duration, pulse_amp, x_pulse.sigma, x_pulse.beta), d0)\n", - " \n", - "inst_map.add(\"x\", (qubit,), x_over)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "former-quest", - "metadata": {}, - "outputs": [], - "source": [ - "amp_cal = FineXAmplitude(qubit, backend=backend)\n", - "amp_cal.set_transpile_options(inst_map=inst_map)" - ] - }, - { - "cell_type": "markdown", - "id": "available-bread", - "metadata": {}, - "source": [ - "Observe here that we added a square-root of X pulse before appyling the error amplifying sequence. This is done to be able to distinguish between over-rotated and under-rotated pulses." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "subsequent-composite", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amp_cal.circuits()[5].draw(output=\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "numeric-motion", - "metadata": {}, - "outputs": [], - "source": [ - "data_over = amp_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "cooperative-division", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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hDDIWZ5ctpmSiipKSkooKSnh4E9/GYCP3n6VkpISTjzxxMTnJ4mlS5fS29vLcccdZ342ZswYpk2bxmuvvZbwnJ6eHpYuXRp3DsBxxx0Xd05raytnnXUWt912G8OH755+9vYrzzG6LITMKTQtbXPnziWUX0x7uByifbBrLU8++SRPPPEEt99++6BjmTNnDnV1dRxzzDG88IJ3z/nnPvc5hg8fzty5c5VpfvPb6ou6fsK6UnF/dG16n7POOot77rkn4e+UDJ599lkikQjbtm1jn332YdSoUXz2s59l7drBCZtaWloYNiyW/jjU850IS5cuZVatwR5YMw1EyHyG3t7Qoj5v3sjbb7/NjTfeyP333z+gJeOTiOCXcAJa6wvnxue+5uRDuaEN1784aBPrdrQDMLHGR4FdVnS3QvPH6u8p/QRBzd7qfWP2a/iRzSrQ66jTvsLxxx/P9OnT+eMf/8iaJkNTH0L7raysJBwOU1paamphGn19fdx5550cdNBBzJw5k4svvphFixaZ1RCvv/56LrnkEr7+9a+z1157MX/+fG688UbuvvtupJQDtj1q1CguueQS9t9/fyZOnMg555zDKaecwl//+tfEnTT894ce/3mWLVtmvv7yjDKNTq7KYdmbr/P73/8+7d8RYOvWrYTDYaqr4zkkamtr2bo18Qa4oaGBSCRCbW3toOece+65nHDCCbttDEwYcTOiehLkKOuMEILhw4fTEFXEO40rX+fb3/42Dz744IABldqy8Mgjj/Doo48ydepUjjnmmAFjCjT23XdfcyOl27Z+tu+++w56fn+UlJRw88038/e//52nnnqKY445hq99+XSi21copWL0gfEnVCrinecf+ysnnHBCRpu3tWvXEo1Gue6667jlllv45z//SW9vL/Pnz6ejoyPhOU888QQLFy7knHPOMT8b6vlOhK1bt3LQKMNtMfIAM0OmtraWVY3KLRRt2sgZZ5zB7bffzqhRo9Ie554In0WB7SEwBb5BuGNFzd5KSKx5QQW5DYD1jUrgj6sscqqXmWHHSvUezotp9BrVU9T7rnpXu2Q7olHzXk4+/DPmxyUlJYRqpgAfQdMG5ftNI/c3Pz+fqVNjv93IkSPp6elh165dVFZWsnTpUhYvXsyNN95o6VKUzs5Otm7dSl1dXaJmiUQi/PznP+ehhx5i06ZNdHd309PTw7x5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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_over.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "outer-growing", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: 0.0405+/-0.0005\n", - "- χ²: 13.353155002912484\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_over.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "convinced-juice", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The ideal angle is 3.14 rad. We measured a deviation of 0.040 rad.\n", - "Thus, scale the 0.1274+0.0000j pulse amplitude by 0.987 to obtain 0.12583+0.00000j.\n", - "Amplitude reported by the backend 0.1249+0.0000j.\n" - ] - } - ], - "source": [ - "dtheta = data_over.analysis_results(\"d_theta\").value.nominal_value\n", - "scale = target_angle / (target_angle + dtheta)\n", - "print(f\"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.\")\n", - "print(f\"Thus, scale the {pulse_amp:.4f} pulse amplitude by {scale:.3f} to obtain {pulse_amp*scale:.5f}.\")\n", - "print(f\"Amplitude reported by the backend {ideal_amp:.4f}.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "6b9c2476", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.04045058362020325+/-0.000541620229372572" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_over.analysis_results(\"d_theta\").value" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "8417b182", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_items([(< amp = 0.0+/-0.7479661744812719 >, 0.00010580796839217384), (< base = 0.0+/-0.9418237321009111 >, 0.0004354677743070045), (< d_theta = 0.0+/-1.2464006817566182 >, 0.00030417916468821794)])" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(data_over.analysis_results(\"d_theta\").value)\n", - "data_over.analysis_results(\"d_theta\").value.error_components().items()" - ] - }, - { - "cell_type": "markdown", - "id": "leading-partition", - "metadata": {}, - "source": [ - "### Detecting an under-rotated pulse" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "unable-deficit", - "metadata": {}, - "outputs": [], - "source": [ - "pulse_amp = ideal_amp*0.98\n", - "target_angle = np.pi\n", - "\n", - "with pulse.build(backend=backend, name=\"xp\") as x_under:\n", - " pulse.play(pulse.Drag(x_pulse.duration, pulse_amp, x_pulse.sigma, x_pulse.beta), d0)\n", - " \n", - "inst_map.add(\"x\", (qubit,), x_under)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "double-difference", - "metadata": {}, - "outputs": [], - "source": [ - "amp_cal = FineXAmplitude(qubit, backend=backend)\n", - "amp_cal.set_transpile_options(inst_map=inst_map)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "id": "worth-basis", - "metadata": {}, - "outputs": [], - "source": [ - "data_under = amp_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "proud-commission", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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22+zadMmvpwznHLgd7f+mGg0ytVXXx13fiklf/jDHzjjjDP69A61tbWxcqUaIEejUdavX8/ixYupqqpi7Nix7Lnnnpx11lnMmzfPzDTYsWMHCxcuZMKECRx11FG7HBMG/z4UFxczderUuH12lqhBcfXuMyDPslzz2DzYsYqL9tyuFAWjYXjtVhh3kEoxLq5WGipDRYFPSjlkf2bNmiXt5uWXXx58o1snSzm/TMqXf9r3582b1ecLKqTsbNnl4w/X75TjrvmXnH3j8+k1Ng0Suk4ppbz/BHUtv53b/zYv3ay2uW1vW9pmJ72vs6/vTFtbmzznnHNkcXGx/PSycinnl8lLTzlQnnfeebseMNQl5Y+HSzm/XMq27VJKKd988005ffp0mZ+fL9UtJ+X9998vi4uLd2kLIBsaGsz3nnvuOXnIIYfIwsJCWVpaKmfNmiXvvPNO8/O+jr1jxw55yimnyJKSElldXS2vuuoq+c1vflMefvjhyf1znvxf1W8vLJAyGu17m1d+qbb5+8UJH/bxxx+XkyZNkrm5uXKvvfaSTz75ZNzn5513nhw3blzcex9//LE89NBDZX5+vhw5cqRcsGCBjFraFAqF5IIFC+SECRNkQUGBHDNmjLz44ovljh07zG2APn/mz5+vNvjtYVLOL5MHjgn2v82tU6ScXyb3rg7sss3999/f7zXff//9/Z4/kf2ttLTEnhn333+/3GOPPWRBQYGcNm2a/Mtf/hK37eGHH75LvwPyukPypJxfJu86vkACcf/vhQsXysmTJ8srDymScn6ZfP6yveSmTZt2acdLL70kAfn222/32U79fe79Y71venp65Pz58+X48eNlbm6urKmpkSeeeKJ877334q6zN4N9H3rz6TXj1ff048fiP3j2WilvnSJXfm+YlDeOUNvcNErKX8+U8tezpPzVdCkfOavf49pBws/aJADek33YRM+NspM/nhj87jb1pZlfJuWGd/veJhqV8md1apvlz+zy8TMfb5bjrvmXPOGOV9NvcIok/CW8Yx91Hc//qP9tPvyL2ubmMba0zU4SMfgmkbCUPxqmrqVlS//b/e5wo2//bUsb7WCgh2e/3DlbXcdn/+l/myVPqG0eODH1xtlIStcppbonbx6trmX7yv63e/Q8tc2i21M7jw2kfI1WHj41dh39GcpPn1Hb/OHo9M+XArZcp+aX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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_under.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "separated-niger", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: -0.0821+/-0.0006\n", - "- χ²: 9.970967124462884\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_under.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "equal-exploration", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The ideal angle is 3.14 rad. We measured a deviation of -0.082 rad.\n", - "Thus, scale the 0.1225+0.0000j pulse amplitude by 1.027 to obtain 0.12574+0.00000j.\n", - "Amplitude reported by the backend 0.1249+0.0000j.\n" - ] - } - ], - "source": [ - "dtheta = data_under.analysis_results(\"d_theta\").value.nominal_value\n", - "scale = target_angle / (target_angle + dtheta)\n", - "print(f\"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.\")\n", - "print(f\"Thus, scale the {pulse_amp:.4f} pulse amplitude by {scale:.3f} to obtain {pulse_amp*scale:.5f}.\")\n", - "print(f\"Amplitude reported by the backend {ideal_amp:.4f}.\")" - ] - }, - { - "cell_type": "markdown", - "id": "novel-booking", - "metadata": {}, - "source": [ - "### Analyzing a $\\frac{\\pi}{2}$ pulse" - ] - }, - { - "cell_type": "markdown", - "id": "usual-battle", - "metadata": {}, - "source": [ - "We now consider the $\\frac{\\pi}{2}$ rotation. Note that in this case we do not need to add a $\\frac{\\pi}{2}$ rotation to the circuits." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "coordinated-education", - "metadata": {}, - "outputs": [], - "source": [ - "# restore the x_pulse\n", - "inst_map.add(\"x\", (qubit,), backend.defaults().instruction_schedule_map.get('x', (qubit,)))" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "boring-shaft", - "metadata": {}, - "outputs": [], - "source": [ - "amp_cal = FineSXAmplitude(qubit, backend)\n", - "amp_cal.set_transpile_options(inst_map=inst_map)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "interior-schedule", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "amp_cal.circuits()[5].draw(output=\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "id": "normal-content", - "metadata": {}, - "outputs": [], - "source": [ - "data_x90p = amp_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "naval-franklin", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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QTyzm7xg0bkLRSWw46lqkiurgUn7qMeXPOjd2AZg8uTJXHfddfYdcPVb6vuoWUzedg7X3XQzyXApjNtFPf7Fa/ady2Z6eno4//zzaWhooKKigmOOOYZVq4YuqfvDH/7AlClTKC0tZdddd+WT/96lnhi3KxSX0xOLc/6Vv+X+1zcAcMsvLhrwuE1NTYwbNw4hBE1NTebjCxcu5Nhjj2XMmDGUl5ezww47cNddd/V57/z58xFCbPFVUVHR53U333wzs2bNoqysjJkzZ3LPPfdkc5kyQyfrTT8YSqvUJmDfH6rHXr+dpYvf4IADDqCxsZHS0lKmTp3Kj3/8Y3p7B54jNm/ezPnnn8+2225LWVkZEyZM4JxzzmHTplQFzIIFC9JeAyEE//znP83Xffzxxxx33HE0NDRQVVXFHnvswRNPPJH2vLFYjHfeeYc333yTWCy2xfO15cVEwmnMkzQWNeEiIuEQtZVlUKwW0s3rV/LOO++waNEiPvroI7q6utKee/r06dx///1UVFRw6aWXctVVV5nPWXfV+ufzzz+f8847j/fee48//vGPfereS0rUBi4UChGJRMz3hEIh4vF42vP35+9//zsbN25k0aJFLF68mMbGRsdUCAOD7xJN7T0A1JZnkbS36M+p3f0up0PdVPX4Tqep752bVObycGaDITkZKVfGXmcjTzdaLax9V7k6hzNrUga/D2MNg68z133ID37wAx566CH++te/snDhQtra2jj66KNJJAbejT7wwANccMEF/PjHP+btt99mr732Ysmjf1BPjpsLoSJ13If/ydzD1WdhdFHrgMf95je/yU477bTF46+99hpz5szhwQcfZMmSJZxzzjmcddZZ3H///eZrbrrpJtauXdvna+rUqXzta18zX3PLLbdw8cUXc/nll/P+++9z5ZVX8r3vfY9HH300q2slhNhiV2gS74UP/qV+3vZoCBnzyJwTVX+N9rXUf/EkZ5xxBk899RQfffQRN954I3feeSeXXXbZgOdcs2YNq1ev5te//jXvvfce9913Hy+88IK50wXYa6+9trgGl156KZWVlRxyyCHm644++mi6u7t55plnePvtt9lnn3049thj+fTTT7c474oVKygvHzgMtff0ekIhQdy6y5fGz6Ei4kkIhQT7zGgwk/VCPe1MnDCB7bbbjqKiIj7++OO098OiRYuorq7myCOP5Ac/+AFvvfWW+dwDDzxgft9xxx0B5fIfN24cAH/+858HHPNQVFVVMX78eB555BFALYY7OztpbW1l1KhRRCIRnnvuOT7/PG1nW1sIDL5LbDZi+Fll6Wt3ddkI2OmUVHLa6NmqgY5Mwmu32jxSn7HB2OHXT+8rMDTFUFqOdymXpo10dnYyf/58KisraWxs5Je//GXG7503bx6ff/45F110kbkLsvLMM8+w/fbbU1FRwQEHHMDy5cv7PP/oo4+y6667UlpaypQpU/jJT35CcpXKMfjfWx4zj11dXc3+p6ndXXzNe5xyysmMHz+esrIyZs+ezZ/+9Kc8r0L+tLa2cuedd3LttddyyCGHsMsuu3Dvvffy7rvv8t///nfA911//fXMnz+fM888k1mzZvG7m25i/0nGVDV1Hq1tbeZxt9lPuUeP2Gls2uPedNNNZpJWfy688EKuvvpq9t57b6ZOnco555zDV77yFR566CHzNTU1NYwePdr8+vTTT/nss88488wzzdfce++9nHnmmZxyyilMnTqVk08+mbPOOotf/epX+Vy+vnz6rJLRrp8O43dNxarDEdjr+wA0rnuW+WecwY477sikSZM45phjOO2001i4cOGAh91+++15+OGHOeaYY5g+fTr7778/1157Lf/9739pa2sDoLi4uM81GD16NA8++CCnnHKKGaZqampi2bJlXHzxxey4445Mnz6d//u//yMej/P2230XpG1tbSSTSRob05dTRqNRVq/4lIPGh9nc3klndzcSzFr7uAwR7Unwzb0mU1lShCytRUqoLhGMqK6krKyMKVOmkEgk2Lx5c59jt7S08NZbb3HKKadw6qmncs011/RZEDU3N7PDDjtw0003cfHFFwNwxRVXcOKJJ7LrrrvS0JBfnsS9997Lb3/7W3bYYQf22msv1q1bx0knncSbb77JnDlzuOeee9h2223TvjfdojVbAoPvEq2dym2VVeOcTcvU9+kHqyQlK9t/VX0f7m799UvV92kH9X18xGTVKVAmYWl2O6mhuPDCC3n66ad56KGHzN3KCy+8kNF7H374YcaPH8/ll19u7oY0PT09XHPNNdx111288sortLS0cPbZZ5vPP/nkk5x22mmcd955vP/++9x11138v4f/QWL1OwBcdsO95rGXLVvG31/4EBCEW5az246z+fe//83777/PBRdcwHe/+12eeeaZQcdaWVk56NcRRxyR/cWzsGjRImKxGIceeqj52IQJE5g1axYvv5w+5t7b28uiRYv6vIf1SxhRIlnXVQSNs/sed9R2AJRGVzFr1rZ9jvv222/zq1/9invuuYdQKLOprq2tjREjRgz4/O23387s2bPZa6+9zMd6enq2yFQvKyvj9ddfT+uuzgkdupp+sOnCNplulOS1fJ7aBaMywp944gn233//rE7V1tZGSUnJgDvwBQsWsGzZMs466yzzsfr6embNmsW9995LNBolkUhw2223UVVVxd57p3p9vP3227S1tTFlypS0SWmdnZ18/PHH1NbW8sNj5nLmvlPoiSXpicXpSUjae5L0JCRn7TeVr+8xCYDeeJJor1RroO4WkJJQKERVVVWfGvbe3l4+//xzTj/9dN58803uv/9+XnjhBebOnWu+5qKLLuLdd9/ljTfeYNIkdfxjjz2Wzz77jEWLFnHttdeyYMECQC0ELrzwQvO91nP1f04zY8YMnn32Wd59910WLVrE1KlTqa+v55VXXuG9997jT3/6Ex988AGTJ0/e4pg6pyAfgix9l4j2KLdzdaY7/J6oUW8rYKevb1l6tuMp8PJvlQjN5uUwaqa9A/YD0Y3Q2QQImHFI3+eEUIIj7z+sYpt7fNeeU0aj3Hnnndx1110cdthhAPzpT39i/PjxGb2/rq6OcDhMVVUVo0f3rR6Ix+PcfPPNzJyp/lcXXngh3/rWt5BSIoTgF7/4BRdddBHf/OY3AZg2bRq/++m5RD7+GbJmAiMmbmseu7GxUWVH109HbFrGD0+aB1N2AuCss87i2Wef5a9//SsHHdRvoWRhqAmkrKwso795INatW0c4HN5iV9TY2Mi6devSvqepqYlEItF397dcLbZeWhPiq5HyLY9bWgPdrcwaP8E8bkdHByeffDK/+93vGDduHMuWLRtyvP/+97955plneOmll9I+39rayt///neuueaaPo8fdthh3HnnnXzlK19h7ty5LFq0iDvuuINYLEZTUxNjxoxJe7zZs2dv4b6dPXu2aQgnTZqkEsR6O+HD/6gXzPqyCvFZqZmgdDm6mqGjib0OO5633nqLnp4ezjzzzKw8VC0tLfz0pz/lzDPPpKgovXm47bbb2GmnnZg7dy7t7UraVwjB008/zfHHH091dTWhUIi6ujoef/xx8+/X/5P7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v843vvEN7rnnHnbffXfa29s59NBDaWtr45FHHqGjo8PcfdfV1VFcnNINefHFF1m6dCm33XbbFqffc889qaur45vf/CaXX345ZWVl3H777Xz22WccfbTq6Kn/Jx988AFlZWVmnXppaam5Ex89ejQffvghn3/+OSNHjiQUCtHd3U1Fd5SIAIq2XIQKIRg1ahSbW9dRUQ3xni4+37iccDhsemP036/RC5OSkpI+f+NwJzD4LtDerW7s4qIsDLLe4eta63SMmKy+J2MqsaekYuDXFhrJJGw0avC3OXLg1007UBn8jR/YFse/7rrr6Ojo4Pjjj6e8vJzzzz+/jwtyKK666iq++93vMm3aNHp6eobUDdccdthh/Oc//+HnP/851113HXtPLOLpkwVNoXoayuv6HHvHHXc0j51smEHRpo+57JyvsaSljPnz53PaaaexdOnSnP5+O7nxxhspKiripJNOoquri4MOOsh0C2s++uijPoI4J510Eps2beLqq69myv5NHDQlzJ7Hn8mkyVPTHrecLr44P8LskWFCpFFnG4C//OUvdHZ2ct111/URSpo0aVKfeG57ezt/+9vfuPzyy9MeJ5FIcP311/PRRx8RiUQ44IADePnll7d0zfdjt912G7Tm2hyH3uE3bDPga7XB71z7MbvtthtSSiZNmsT3vvc9/ud//sd8WWdnJx999JG5I1+0aBGvvvoqsOUi6bnnnuuzwLn99tuZNWtWn6x7TUNDA0888QQ/+clPOPDAA4nFYsyaNYtHHnmEXXYZZA7rR3l5OTNnzmT16tV033cKpR2rCZc1UNS1SoUz9roAqkYrhcWKkUpOOBRm9OjRbJbdQAud0TZisXK22WabPvdZAIhMJ6NCZO7cudJunfQFCxYMmQzVnw/WtnHETQsZUR7h7csPHfoNUsI141QCynG3qhr8gV73y3FKVvKs51Mufp+T0TVsXgE37agkdc99BUYOUIXQugpumA0IuPDjrLumzZ07179a+q/8AZ68FLb9Mpx0D4iUd6iPhvkj58Liv8C8S2HeJR4N1gEScfU5iHfDOa+kT17VXGtIzJ776pYCRQNQEFr6XS3wq0kqC/9HyweO4Xduhl9PUa+7ZBUU5dCVMwec0tIH4IlLYem/IFIGbasBqeSlwxFAKJnd0XPg5PvU62PdauEfikDj7EE9nr/97W+55ZZb2GWX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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_x90p.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "id": "indonesian-tribe", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: 0.00428+/-0.00033\n", - "- χ²: 11.230245902959357\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_x90p.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "id": "swiss-prayer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The ideal angle is 1.57 rad. We measured a deviation of 0.004 rad.\n", - "Thus, scale the 0.0625+0.0000j pulse amplitude by 0.997 to obtain 0.06231+0.00000j.\n", - "Amplitude reported by the backend 0.0618+0.0013j.\n" - ] - } - ], - "source": [ - "sx = backend.defaults().instruction_schedule_map.get('sx', (qubit,))\n", - "sx_ideal_amp = sx.instructions[0][1].pulse.amp\n", - "\n", - "target_angle = np.pi / 2\n", - "dtheta = data_x90p.analysis_results(\"d_theta\").value.nominal_value\n", - "scale = target_angle / (target_angle + dtheta)\n", - "print(f\"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.\")\n", - "print(f\"Thus, scale the {sx_pulse.amp:.4f} pulse amplitude by {scale:.3f} to obtain {sx_pulse.amp*scale:.5f}.\")\n", - "print(f\"Amplitude reported by the backend {sx_ideal_amp:.4f}.\")" - ] - }, - { - "cell_type": "markdown", - "id": "specified-english", - "metadata": {}, - "source": [ - "Let's rerun this calibration using the updated value of the amplitude of the $\\frac{\\pi}{2}$ pulse." - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "id": "extended-wedding", - "metadata": {}, - "outputs": [], - "source": [ - "pulse_amp = sx_pulse.amp*scale\n", - "\n", - "with pulse.build(backend=backend, name=\"sx\") as sx_new:\n", - " pulse.play(pulse.Drag(x_pulse.duration, pulse_amp, x_pulse.sigma, x_pulse.beta), d0)\n", - " \n", - "inst_map.add(\"sx\", (qubit,), sx_new)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "id": "artistic-stand", - "metadata": {}, - "outputs": [], - "source": [ - "data_x90p = amp_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "excessive-transformation", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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vZY999yTiRMn0tHRwb/+9S8efPBBbrut/6Y21jyGwsJC1q1b1+O1/Px8qqKtakJbWNn/s6BqItSv5K3n/krl/iV9jvXvf/87l112GS+99BKjRo1i7dq1zJkzh5EjR3LrrbdSV1dnbltTU2PGu2+88UaOPPJIIpEITzzxBL/+9a959NFHzffr6up47LHHmDNnDh0dHdx333089thjppodwK233sr48eOZOHEibW1tbN68mfr6+h4Tae2BycvLo6KiAiklXU2bKQfl7Uzh4SgqKoKCUqRsha5WWpoaWfnlaioqKsxEwt6T15aWlpSvD3ZCg+8CunFOfrrGHpIr/FGz+96mcrz6nuhSGe3RQTRTbd0CTWsBATse0fd24/eHRX9RCUs2GHyAm266iZaWFk444QSKi4s599xzzQdEOlx99dX84Ac/YNKkSXR0dAyoG6454ogjeOaZZ/jVr36lEqf2zeOKfQVbC8YwzsjM1vueMWOG2ne9EpuZUSsYcdRRFBUVMXfuXL75zW+yePHizP94m7n11lvJy8vjpJNOoq2tjUMOOYQHHnigR+LUp59+2sPQnHTSSWzevJk/3XoN3/t6K3XtEe5+4PEeq27rfk/dsYPbjojy/aN277HfBx98kAsuuICvfe1rSCnZb7/9eOmllyguVloOkUiEp59+mh//+McccMABFBUVcdhhh3HzzTebced4PM4ll1zCihUryMvLY9KkSfz617/ukQjX3NzM2WefzerVq03BmwceeMBUbesLHXboiwMPPJB59/5S/TJktNLj6IuqibDsZV568iGuOfe2Psfa0NDAp59+aiazvfDCCyxdupSlS5cyduzYHrtcvny56bJ/9tlnufbaa+no6GDGjBn84x//4Ktf/SpNTU3m9g888AAXXXQRUkr23ntv5s2bxx577GG+39nZyUUXXcTtt99OPB6nqKiIyZMn91C6q6mpIRKJsGHDBmJPfp/C1rUUlFZD82oVm9/nx0ppsbRWfS+phkiUcRMm0bF+MYUizvovv6CoaMg2f08IiHQfRkFk9uzZ0m6d9Hnz5g2YDNWbT9Y3cuStrzKkKMaiKw8f+AOJBFw3XK3cv/6AUphLRbwbrhmmBDnO/1g9FAJAWudwxWtw/9EqpPHTT/rWyf7gUXji+0pu+NIve5YspcHs2bP9q6X/l6+rkrTDr4V9zunxlqlh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3H333axdu5YddtiBSy65hG9961vm51pbW/nhD3/I3/72N0pKSlImMM2ZM4dddtmF22+/3Xxt7ty51NXVme5KKSU333wzf/jDH1i1ahU1NTWcdtppXH/99UgpufHGGzlt01uMKIEjvnspp53XmtY41pgGf3ky9mvhpJNO4t///jc///nPTWWzJUuWsPvuu3Pvvfdy8skn09HRwfHHH8+ll17KPvv008PAIY466iiOOuooWDYPPoPGyBCKLCV5zz//fI/tH3zwQSoqKnj99df52te+pgz+l/9NPkeAtrY2Hn/8cR5//HGzadVVV13FU089xV133cU111zT89jgTJjGYPTo0axevZpNmzb1v2HTBpVtX5yA/Pr0D9BghLW2RNIPi/Zi/fr1ttfA90V7e3tGRttKYWGh2Q8gHUKD7zAthjs/IiA2UHvc5g3Q2azitmP2TP8gPdrkdmfcMc5XNK1T3zMVzdCJe01r+t8uCGiXfkWG7uTyUbDu/aQ7vB8eeughzjzzTF599VWklFxxxRX87W9/44477mDKlCm8+eabfP/736eyspKjj1a5FBdeeCEvvvgijz/+OKNGjeKXv/wl8+fP53/+538yGubll1/OXXfdxc0338wBBxzApk2beO+99wC44oor+McTj3HRSRIpIsw952LO+MEP0hpHzf+coNy/LZtUe+Ve8d5bb72V6667jl/+8pecf/75dHR0cMopp3DiiSdy8sknI6Vk7ty5HHzwwZx22mkD/h3XXXcd1113Xb/bPPvss+y/fxp6Gr0xMvQbo5XU9pPH0dTURCKRoLLS8IZVGZU9FuXN7u5u4vH4NkalqKjIdiW3dIjFYkyYMIDnRkq4/lD1PDxnYWZyybd9S+VCfe9FGLPHwNun4LTTTnOti+a8efPYbbfdXDlWgC1DMNCNc/IHMvaQTNiLxJJJWOlQMUZNEhLd6mE3QGtIX9NoGPyiPtrh9oV26Q8GL4dZgz8+s8/payaNsqwJEybw29/+FoCWlhZuvvlmXnjhBdM4TZgwgbfeeos77riDo48+mubmZv70pz9x7733csQRRwBw3333ZbS6AOU2vuWWW7j11ls5/fTTAdhhhx3Ye++9zXHMf/I+xJs/gNLhnPKtufz3vY/SGodEKFW+jR+rr9I5PY49YsQIfvrTn3L77bezcuVKbrjhBhobG7njjjsAeP31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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_x90p.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "liquid-details", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: d_theta\n", - "- value: 0.00663+/-0.00033\n", - "- χ²: 12.911096523942346\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_x90p.analysis_results(\"d_theta\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "driving-density", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The ideal angle is 1.57 rad. We measured a deviation of 0.007 rad.\n", - "Thus, scale the 0.0623+0.0000j pulse amplitude by 0.996 to obtain 0.06204+0.00000j.\n", - "Amplitude reported by the backend 0.0618+0.0013j.\n" - ] - } - ], - "source": [ - "dtheta = data_x90p.analysis_results(\"d_theta\").value.nominal_value\n", - "scale = target_angle / (target_angle + dtheta)\n", - "print(f\"The ideal angle is {target_angle:.2f} rad. We measured a deviation of {dtheta:.3f} rad.\")\n", - "print(f\"Thus, scale the {pulse_amp:.4f} pulse amplitude by {scale:.3f} to obtain {pulse_amp*scale:.5f}.\")\n", - "print(f\"Amplitude reported by the backend {sx_ideal_amp:.4f}.\")" - ] - }, - { - "cell_type": "markdown", - "id": "restricted-brick", - "metadata": {}, - "source": [ - "## Fine DRAG Calibrations" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "billion-calibration", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library import FineXDrag" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "aging-volunteer", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The reported beta of the X pulse is 0.5729.\n" - ] - } - ], - "source": [ - "ideal_beta = x_pulse.beta\n", - "print(f\"The reported beta of the X pulse is {ideal_beta:.4f}.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "asian-anniversary", - "metadata": {}, - "outputs": [], - "source": [ - "pulse_beta = ideal_beta*1.25\n", - "target_angle = np.pi\n", - "\n", - "with pulse.build(backend=backend, name=\"x\") as x_over:\n", - " pulse.play(pulse.Drag(x_pulse.duration, x_pulse.amp, x_pulse.sigma, pulse_beta), d0)\n", - " \n", - "inst_map.add(\"x\", (qubit,), x_over)" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "id": "continuing-arkansas", - "metadata": {}, - "outputs": [], - "source": [ - "drag_cal = FineXDrag(qubit, backend)\n", - "drag_cal.set_transpile_options(inst_map=inst_map)" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "id": "independent-extraction", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "drag_cal.circuits()[2].draw(\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "excited-eleven", - "metadata": {}, - "outputs": [], - "source": [ - "data_drag_x = drag_cal.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "driven-fiber", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfwAAAFLCAYAAAAznT7eAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAABVAklEQVR4nO3debzc87348dd79rMlJ5tsRIIIsRRJ7eKEUi21tKm4bTW0LqFa6nJrqVItqmippW60qK38lOsWRdIQiUgsEUsiYssiJCHr2WfmzLx/f3y/M5kzmTlnJpmzzMz7+XhMTua7zecz23s+u6gqxhhjjCltnp5OgDHGGGO6ngV8Y4wxpgxYwDfGGGPKgAV8Y4wxpgxYwDfGGGPKgAV8Y4wxpgxYwDfGGGPKQLcHfBGZICL/FJHPRERF5IwcztlHRF4SkRb3vF+JiHRDco0xxpiS0BMl/GpgEXAB0NLZwSLSB5gBrAW+6p53CXBRF6bRGGOMKSnSkzPtiUgjcL6q3tfBMecCNwCDVbXF3fZL4FxgR7WpAo0xxphOFUMb/iHAnESwdz0PDANG9kiKjDHGmCLj6+kE5GAIsCpt29qUfctSd4jI2cDZABUVFeN22mmngiYmHo/j8RTD76TcWZ6KRynmqxTzBKWZL8tTcfjggw/Wqeqg9O3FEPDzoqrTgGkA48eP1zfeeKOg1581axZ1dXUFvWZPszwVj1LMVynmCUozX5an4iAiKzJtL4afNWuAwWnbBqfsM8YYY0wniiHgzwOOEJFQyrZjgM+B5T2SImOMMabI9MQ4/GoR2U9E9nMff4R7f4S7/3oRmZlyysNAM3CfiOwtIt8GLgX+YD30jTHGmNz0RAl/PLDQvVUAv3b/f427fyiwa+JgVd2MU6IfBrwB3AHcDPyh+5JsjDHGFLdu77SnqrOArLPkqeoZGba9C0zoulQZY4wxpa0Y2vCNMcYYs50s4BtjjDFlwAK+McYYUwYs4BtjjDFlwAK+McYYUwZKbmpdY7bHt771LVavXt3TyciqtbWVUCjU+YFFpBTzBKWZr1LN06hRo3jqqad6OildzgK+MSlWr15NoddfKKSGhgZqamp6OhkFVYp5gtLMV6nmaeLEiT2djG5hVfrGbIMTTjiBM844Y5vPv++++6iuri5cgowxphMW8I3pYiNHjuSmm24qumt3hXA4zE9/+lMGDhxIVVUVJ554Ip999lmn5915552MGjWKUCjEuHHjmDNnTrv906ZNY+LEidTW1iIiLF++PON1nn/+eQ455BAqKyupra3lqKOOarf/9ddf52tf+xq1tbXU1tZy9NFH89prr7U7RlW55ZZb2GOPPQgGgwwdOpRLL700vyeiQB588EH2228/QqEQAwcO5Ic//GGHx1955ZXsscceVFVV0a9fP44++mheeeWVdsfk8lxee+21HHbYYVRVVSGSdR41ANatW8fw4cMREdatW5d3HtOpKldffTXDhg2joqKCuro6Fi9enPHY1tZWvvKVryAivbrmrrtYwDfGdJsLL7yQxx9/nL///e/MmTOH+vp6Tj31VGKxWNZzHn30US644AIuv/xyFi5cyKGHHso3vvENVq5cmTymubmZY489lquvvjrrdZ588klOO+00Tj/9dBYuXMi8efP48Y9/nNzf2NjIcccdx7Bhw5g/fz7z5s1j6NChfP3rX6ehoSF53H/9139x5513csMNN7BkyRL+9a9/MWFCfhOBjhw5klmzZuV1Tro//elPXHLJJVx88cUsWrSIF198kZNOOqnDc8aMGcMdd9zBu+++y8svv8yoUaM47rjjWLt2bfKYXJ7LcDjMt7/9bS688MJO03nmmWey33775Zirzv3+97/n5ptv5rbbbuP1119nhx124Jhjjmn3GiVcfPHF7LjjjgV77KKnqiV7GzdunBbaiy++WPBr9jTL0xaZ3jNNTU06ZcoUraqq0h122EGvvfZaPf7443XKlCmdXu/II49UoN1NVfXee+/Vqqoq/fe//6177bWXVlZWal1dnX7yySftzv/nP/+pBxxwgAaDQR05cqRefPHFGg6HO7z2unXr9LTTTtPhw4drKBTSsWPH6j333LNNz0chbdq0Sf1+vz744IPJbStXrlQR0eeeey7reQceeKCeddZZ7bbttttueumll2517Ouvv66ALlu2rN32trY23WmnnXTatGlZHydxbupr8Mknnyigr7/+uqqqvv/+++rz+fS9997rMK+qqvX19Vn37bzzztv1udu4caNWVlbq9OnTt/kaqqqbN29WIOPzn+m5TM/TY489lnzfZXLLLbfoUUcdpTNnzlRAv/zyy3b7586dqxMmTNCKigodNmyYTp06VTdv3pz1evF4XIcMGaK//e1vk9uam5u1urpa77rrrnbHPvnkkzp27Fh977332r2G6err6zN+7osZ8IZmiIlWwjemExdffDEzZszg8ccfZ+bMmSxcuJDZs2fndO4TTzzBjjvuyK9+9StWr17dbgRAOBzm+uuv55577mHevHls2rSJqVOnJvc///zzfP/73+f8889n8eLF3HPPPTz55JNcfvnlHV67tbWVAw44gKeffprFixdzwQUXcM455zBz5kw6Ul1d3eHtG9/4Rr5PXTsLFiwgGo1y7LHHJrfttNNOjBkzZqtq5YRIJMKCBQvanQNw7LHHZj0n22N/+umnBAIBDjjgAIYMGcKxxx7LwoULk8eMGTOGQYMG8de//pVwOEw4HObuu+9mxIgR7LXXXgD83//9H7vssgvPPfccu+yyCyNHjmTKlCl88cUX+TwV22369OnEYjHWrl3L2LFjGT58OKeccgqffPJJzteIRCJMmzaNPn36FLQEnrBw4UJuuOEG7r//fjyerUPNu+++y7HHHsuJJ57I22+/zRNPPMFbb73Fj370o6zXXLZsGWvWrGn3fqioqGDChAnt3g+rVq3i3HPP5eGHH6aioqKwGStmmX4FlMrNSvi5sTxtkf6eaWho0EAg0K5U2tDQoH379s2phK/qlOZuvPHGdtvuvfdeBfT9999PbnvwwQc1EAhoPB5XVdUjjjhCr7nmmnbnPfzww1pVVZU8JtO1M5k8ebL++Mc/7vCYDz/8sMPbqlWrcspvNg899JB6vd5k2hMmTJigZ599dsZzPvvsMwX0pZdearf917/+te6+++5bHZ+thP/3v/9dAR0xYoQ+9thj+sYbb+iZZ56pffr00c8//zx53OLFi3X06NHq8XjU4/HoLrvsokuXLk3uP+ecczQYDOqBBx6oL730ks6ePVsPPPBAPfDAAzUWi7V7zNTS8HHHHadVVVXJm4hoKBRqty0f119/vfr9fh0zZow+++yz+uqrr+rxxx+vI0aM0Kampg7Pfeqpp5JpGDZsmL766qsZj9ueEn5jY6Puvvvu+o9//ENVnc8jaSX8008/XX/0ox+1O2/hwoUK6Nq1azOmae7cuQroihUr2m0/88wz9dhjj1VVpzZnwoQJetNNN6mq6rJly6yE795sWJ4xHfj444+JRCIccsghyW3V1dXss88+233tYDDImDFjkveHDRtGJBJh48aN9O/fnwULFvDaa69xww03JI+Jx+O0tLSwZs0ahg4dmvG6sViM3/3udzz66KN89tlnhMNhIpEIdXV1HaZnt9122+489VbxeByAK664gkmTJgFO57R///vf3H///fziF7+gpaWFH/3oRxx88ME89NBDxGIxbrrpJk466STeeOMNqqqqiMfjhMNhHnjgAXbffXcAHnjgAcaMGcPrr7/OQQcdlPHx//KXv9DS0pK8X1dXxw033JD1+FzyE41G+dOf/pQs7T700EMMGTKEp556ismTJ2c9d+LEibz11lusW7eOu+++m1NPPTXZX6FQfvazn3H44Yfzne98J+sxCxYs4KOPPuLRRx9NbnNilfO5mzFjBuecc05y37PPPovX6+30sa+77joCgQAXXXTRduSgNFnAN6aH+HztP36J3s6J4BSPx7nqqqv47ne/mzymsbGR6upqBg0alPW6N910EzfffDO33nor++yzD9XV1Vx++eWdVjt3NkzwiCOO4Nlnn+3wmI4MGTKEWCzGunXr2qX/iy++yPpjZODAgXi93nadygDWrl3LkCFDcn7sRDAbO3ZscpvP52P06NHJzn8PP/wwH3/8MXPnzk0Glocffph+/frxv//7v/zgBz9g6NCh+Hy+ZLAHGD16NF6vl5UrV2YN4MOHD2933+fzMXz48G3+kZUpP3379mXYsGHtOjNmUlVVxW677cZuu+3GwQcfzOjRo/nLX/7ClVdeuU1pyWTmzJl8+umn/O1vfwO2BPIhQ4bwi1/8gmuvvZZ4PM5ZZ53Fz3/+863OHz58OHvvvXe753P48OHJZqu1a9cyYsSI5L7U98PMmTOZM2cOfr+/3TUPPvhgJk+ezEMPPVSwfBYbC/jGdGDXXXfF7/czf/58dtllFwCamppYtGgRu+66a07XCAQCHfZCz+aAAw7g/fffbxcU0ic+yXTtl19+mW9961ucfvrpgPNl+8EHH1BbW9vh47311lsd7t/ettBx48bh9/uZMWMG3/ve9wCnrXXp0qUceuihGc8JBAKMGzeOGTNmtPvhM2PGjA5Lj5keOxgMsnTpUg4//HDA+UH18ccf8/Wvfx1weqeLSLv2Zo/Hg4gkf4QddthhtLW18fHHHydf/08++YRYLMbOO++cx7OxfQ477DAAli5dmuyF3tjYyOrVq/NOR6LWopCmT59OJBJJ3n/99df50Y9+xKxZsxg9ejTgvL8XL17c4Y+e9El+Ro0axZAhQ5gxYwZf/epXAafPypw5c7jxxhsBuPfee2lqakqe8/nnn/P1r3+dhx56KPm8la1M9fylcrM2/NxYnrbI9J6ZOnWq7rjjjjp9+nRdtGiRnnrqqVpTU5NzG/4xxxyjxx9/vK5atSrZhpnopZ+eZlLaOZ977jn1+Xx65ZVX6rvvvqtLlizR+++/Xy+55JIOr33RRRfp8OHDdc6cObpkyRI977zztE+fPnrkkUduwzNSWFOnTtXhw4frjBkz9M0339S6ujrdZ599tK2tLXnMmDFj9Lbbbkvef+SRR9Tv9+vdd9+t7733nv7sZz/TqqoqXb58efKY1atX68KFC/Whhx5SQJ955hlduHChrl+/PnnMBRdcoMOHD9fnnntO33//fT3//PPbteEvWbJEg8GgTp06Vd977z1dtGiR/uAHP9A+ffrop59+qqqqsVhMDzjgAJ0wYYK++eab+uabb+qECRP0oIMO6rANf/369bp69eoOb/k66aSTdK+99tKXX35ZFy9erJMmTdKdd9452Ya/atUqHTNmjD7xxBOq6vTIv+KKK3T+/Pm6YsWKZD+GQCCgb7/9dk7PZSJPK1as0IULF+qNN96ogC5cuFAXLlyoDQ0NGdOaqQ3/7bff1oqKCj3nnHP0zTff1A8//FCfeuqprP05En73u99pnz599PHHH9d3331XJ0+erEOHDs06KsLa8Lfcejwod+XNAn5uLE9bZHrPNDY26umnn65VVVU6aNAgveaaa3IelqeqOm/ePN133301GAxuNSwvPc3pX4rPP/+8Hn744VpRUaE1NTW6//77twuGma69YcMGPeWUU7S6uloHDRqkl1xyiZ577rm9IuC3trbq+eefr/3799eKigo94YQTthriBuhVV13Vbtsdd9yhO++8swYCAT3ggAO26sR31VVXbTVEEdB77703eUwkEtFLLrlEBw8erDU1NXrkkUfqggUL2l1n+vTpethhh2nfvn21trZW6+rqdO7cue2O+fzzz3XSpEnJ5/d73/uerlmzZqu8pgagTEMo02/5qq+v17POOkv79euntbW1esIJJ+hHH32U3J8IdInnoKmpSU8++WQdOnSoBgIBHTp0qJ544ok6f/78nJ/LRJ6mTJmS8Zhsn7tM721Vp2Pg17/+da2pqdHKykrde++99corr+ww3/F4XK+66iodMmSIBoNBnTBhgr777rtZj7eAv+Umzr7SNH78eC307EqzZs3qtPNTsbE8bTF+/PhePSNXqc5lXmp5gtLMV6nmaeLEib36c58vEVmgquPTt9s4fGOMMaYMWMA3ZjvMmTOnw8lqjDGmt7Be+sZsh/Hjx3fau90YY3oDC/jGbIeKioqSnrDGGFM6rErfGGOMKQMW8I0xxpgyYAHfGGOMKQMW8I0xBvj000+pq6tj7Nix7Lvvvjz22GM9nSRjCso67RljDM6CNrfccgv77bcfa9asYdy4cXzzm9+kqqqqp5NmTEFYCd8Ys81OOOEEzjjjjJ5ORkHSMXToUPbbbz/AWdVt4MCBbNiwYfsTZ0wvYQHfGGPSLFiwgFgsxk477dStjzt79mxOPPFEhg8fjohw3333tdt/xx13sO+++9KnTx/69OnDIYccwjPPPJPXY1x//fWICOeff/5W+1avXs2UKVMYNGgQoVCIsWPH8tJLL21PlkwvYgHfmDKXuoypgQ0bNvDDH/6QadOmdftjNzY2svfee3PrrbdmXI54xx135IYbbuDNN9/kjTfe4KijjuLkk0/mnXfeyen68+fPZ9q0aey7775b7du0aROHHXYYqsozzzzDkiVLuO2229hhhx22O1+md7CAb0yZqaur49xzz+Xiiy9m0KBByS/53//+9+y6665UVFSwzz778OCDD7Y7r7m5mTPOOIPq6moGDx7Mddddl/Ha6SXHM844gxNOOCF5X1W5+eabGT16NMFgkD322IPLLrssua8Q6chk8uTJDBgwgFtuuSW5bcmSJVRWVvLII48AEA6HOfnkk7n00ks59NBDc7puIX3zm9/kuuuuY9KkSXg8W389n3TSSXzjG99gt912Y/fdd+faa6+lpqaGefPmdXrtzZs38/3vf5977rmHfv36bbX/97//PUOHDuX+++/nwAMPZNSoURx99NHsueeeBcmb6XkW8I0pQw8++CCqypw5c7j//vv55S9/yV//+lfuuOMO3nvvPS677DLOOeecdtXFF198MTNmzODxxx9n5syZLFy4kNmzZ+f92Jdffjm/+c1vuOyyy1i8eDF/+9vfklXnXZmOW265he9973v8+te/Bpzg/h//8R9MmjSJ0047DVXljDPO4KijjuL000/v9HrXXXddh+soDB06lDlz5uT9/OQqFovxyCOP0NjYmNOPk7PPPptJkyYxceLEjPuffPJJDjroICZPnswOO+zAfvvtx+23304pr6hadjKtmVsqt65Y49jWji8O25qn3r4uduoa69vqyCOP1H322Sd5v7GxUUOhkM6ePbvdcRdccIF+4xvfUFXVhoYGDQQC+uCDDyb3NzQ0aN++fXXKlCntrv2Tn/yk3XWmTJmixx9/fPKcYDCof/7zn7fKUyHTkU1ibfTly5frhRdeqKNGjUo+/pw5c1RE9Ctf+Ury9s4772S91vr16/XDDz/Melu4cKE2Nzd3mqZsqqqqkmvZp3rnnXe0qqpKvV6v9u3bV59++ulOrzVt2jQ94IADNBKJqGrm1ykYDGowGNRLL71U33zzTb3nnnu0qqpKb7vttuQxhXj/9Tb19fW9/nOfL+ANzRATbVieMWVo3Lhxyf+/9957tLa2ctxxxyEiye3RaJSRI0cC8PHHHxOJRDjkkEOS+6urq9lnn33yetz33nuPcDjM0UcfnXFfIdLx0EMPcc455yTvP/vssxxxxBEAjBw5ktraWn7/+98zbdo0Zs+enVzf/fDDDycej+ecl/79+9O/f/+s+xsaGjK2w2+vMWPG8NZbb7F582b+8Y9/MGXKFGbNmsXee++d8filS5dy+eWX8/LLL+P3+7NeNx6PM378eK6//noA9t9/fz788EPuuOOOjB38TPGxgG9MGUodW54Ick899RQjRoxod1xHASITj8ezVRVwNBrN6dxCpePEE0/koIMOSt4fPnx4u/1f+cpXuPPOO7n66qvb/XDI13XXXddp/4HUHxuFEggEkgs2jRs3jtdff50//vGP/PWvf814/Lx581i3bh177bVXclssFmP27NncddddNDU1EQwGGTp0KGPHjm137p577smtt95a0PSbnmMB35gyN3bsWILBICtWrOCoo47KeMyuu+6K3+9n/vz57LLLLgA0NTWxaNEidt111+RxgwYNYvXq1e3Offvtt5Ml9D333JNgMMjMmTMZPXp0l6SjpqYmWWrPRFXZa6+9+OUvf9nBs9K5qVOncuqpp2bd39jYyJgxY7brMXIRj8cJh8NZ95988smMHz++3bYzzzyT0aNHc/nllxMIBAA47LDDWLp0abvjPvjgA3beeefCJ9r0CAv4xpS5mpoaLr74Yi6++GJUlQkTJtDY2Mj8+fPxeDycffbZVFdX8+Mf/5hf/OIXDBo0iGHD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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_drag_x.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "id": "pacific-bible", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: @Parameters_ErrorAmplificationAnalysis\n", - "- value: CurveFitResult:\n", - " - fitting method: least_squares\n", - " - number of sub-models: 1\n", - " * F_ping_pong(x) = amp / 2 * cos((d_theta + angle_per_gate) * x - phase_offset)...\n", - " - success: True\n", - " - number of function evals: 6\n", - " - degree of freedom: 18\n", - " - chi-square: 242.2756979579215\n", - " - reduced chi-square: 13.459760997662306\n", - " - Akaike info crit.: 53.886881038248454\n", - " - Bayesian info crit.: 55.878345585356435\n", - " - init params:\n", - " * amp = 1.0\n", - " * d_theta = 0.03930267433141715\n", - " * angle_per_gate = 0.0\n", - " * phase_offset = 1.5707963267948966\n", - " * base = 0.5678580354911272\n", - " - fit params:\n", - " * amp = 1.0 ± 0.0\n", - " * d_theta = 0.016856868773894 ± 0.0006311372319886394\n", - " * angle_per_gate = 0.0 ± 0.0\n", - " * phase_offset = 1.5707963267948966 ± 0.0\n", - " * base = 0.48688791053418623 ± 0.0034365498800017027\n", - " - correlations:\n", - " * (d_theta, base) = -0.8622992458490701\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(data_drag_x.analysis_results(0))" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "geographic-terminology", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.016856868773894" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data_drag_x.analysis_results(\"d_theta\").value.nominal_value" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "id": "cutting-firewall", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adjust β=0.716 by ddelta=-0.121 to get 0.595 as new β.\n", - "The backend reports β=0.573\n" - ] - } - ], - "source": [ - "dtheta = data_drag_x.analysis_results(\"d_theta\").value.nominal_value\n", - "\n", - "ddelta = -0.25 * np.sqrt(np.pi) * dtheta * x_pulse.sigma / ((target_angle**2) / 4)\n", - "\n", - "print(f\"Adjust β={pulse_beta:.3f} by ddelta={ddelta:.3f} to get {ddelta + pulse_beta:.3f} as new β.\")\n", - "print(f\"The backend reports β={x_pulse.beta:.3f}\")" - ] - }, - { - "cell_type": "markdown", - "id": "05ffc1e1", - "metadata": {}, - "source": [ - "## Half angle calibrations\n", - "\n", - "Phase errors imply that it is possible for the `sx` and `x` pulse to be misaligned. This can occure, for example, due to non-linearities in the mixer skew. The half angle experiment allows us to measure such issues." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "adc1e987", - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_experiments.library import HalfAngle" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "7b15ae90", - "metadata": {}, - "outputs": [], - "source": [ - "hac = HalfAngle(qubit, backend)\n", - "hac.set_transpile_options(inst_map=inst_map)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "46785cdb", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "execution_count": 46, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "hac.circuits()[5].draw(\"mpl\")" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "adf28640", - "metadata": {}, - "outputs": [], - "source": [ - "exp_data = hac.run().block_for_results()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "b1a1e889", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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//73vPrVr6asrIxjjjmGZ599lueff56TTjqJiooKTjnlFLZt22a978orr2TFihXcdNNNLF26lJKSEvr7+7nzzjs59dRTqauro76+nrPPPpuNGzeOuubjjz/OcccdR2lpKccccwyPPvooAM+1G0x6xy+qp3gcb3CumePd1+ucUFJ5efmov1VNTTq8vnHjRu68805uuOEGVq1axapVq/jFL37B7bffzksvvQTAFVdcwbe+9S1OPvlklixZwiWXXMLb3vY2/vznP0963TPe9n7ASD9FzdSFpLEqSmLMqi4hntR85ye/4G1vexsVFRVcccUVJJNJPv7xj7N48WLKyspYvnw53//+90ml0geDZDLJZZddRl1dHXV1dXz6058mmfSPpVBC+kfPrzngOVm/gyNJX/U+CgZ/mkDCSUXRiHVj2XGsmdffvK/X03E5jWRK86gZDn3ncXPHLeCaW2tsmF7wDlx22WXcc889/PnPf+bee+/lP//5D2vXrs3qM3784x9zxBFH8NRTT3H55Zfz+c9/nnXr1gHp/OeHznsLL7zwArfddhuPPfYYl156KY1VJZQXR+kdSvCac97EsmXLePjhh1m/fj3vfve7SSQmzndXVlZO+vP6178+9z+KDV/60pdYtGgR//Vf/3XAcyMjIzz55JOcddZZ1oG1qaaMs1/7Gh55ZHSFukRyXm7tJWV62CtXrqSpqYkzzzyT+++/P6PxfO1rX+Pyyy/nP//5D7W1tZx33nlceumlfPvb3+axxx5jaGiIT37yk6Pes23bNm677Tb++Mc/8swzz1BaWkp/fz+f/vSneeyxx1izZg01NTW88Y1vtLzTvr4+zjnnHJYsWcITTzzBd7/7XS677DLj87oNo7VyYd249+qcWqMyfZ+DAjO///3vaWho4PDDD+eyyy6jtze9D6xbt47KykpOOukk67GTTz6ZioqKA74HO3p6eqirq5vweYDimYsBI+o23r0qYf2f3/In3vCGN/Dcc8/x8Y9/nFQqRVNTE//7v//Lxo0b+fa3v81VV13FjTfeaL33hz/8Ib/85S/5xS9+wbp160gmk/z2t7/N7A/iMJIpzS4zXXry0oYDnj+sqRqlDN4MPyNyhSr9aQIx+ON5DGA7YcZTDMWTlBY5V73uJdr7hhlOpIgoOPeo8VsMZcOMp9wlpOnr6+NXv/oVv/71rzn77LMBuPHGG5k3b15Wn3PWWWfxiU98AoBLL72Un/70p9x777286oQTecmk1H3vOaczv76cRYsW8f3vf583v/nN/OY3v2FJQwXP7+3h4JWv5oYbbrA+89BDD530mk8//fSkz5eVlU36fCa4++67+d///d8Jr9Xe3k4ymWTWrFns7DCiMU01pcyaNYt777131GsPaaoiFlHs6hikonYh119/PccffzwjIyPccsstnHnmmTzwwAMcffTRk47pM5/5DG94wxsA+OxnP8sb3/hGvvnNb3L66acDRtGXfBcCucasWbOsx97+9rePes2NN95IdXU1jz32GKeccgq33XYbIyMj3HjjjVRWVrJixQq+9KUvccEFF9A5ZBxYls8cXYQJcNVVV/GdH/6EGR/+Ndua9/PIb3+LUmpUYeef//xna71lgvPPP5+FCxcyZ84cXnjhBb74xS/y7LPPcvfddwPQ0tJCY2PjKIOslGLmzJm0tLSM+5m333479957Lw8//PCk1xaDf+ic8avtFzdUsn5rB0ecejYf+tCHRj335S9/2arSX7RoEU899RS/+93v+OAHPwjANddcw+c//3ne9a53AfCTn/yEu+66a6o/hyto6RkintREFRw8+8C5VpTEWDSjnG3tA9y9oZVls/zpsigY/GkCMfiNlcXjPr9sZiWlRRGG4ime39PNSpPUJGwQPfiiaIQF9eO3t8w1yT0SSY3WetI2rnywZcsWRkZGWLVqlfVYZWUlRxxxRFafc+SRR476fc6cOezbt48d+/sZiqeoKdZc+K438dKLL9Ld3U0ymWRkZISWlhaWNBoGf9HRqyb49PGxbNmyrF4/GXbu3Mlhhx1m/X7FFVfw4Q9/mAsvvJDf/e531NbWTv0ZHeLhl6JaD/y+SmJRDmuq5tk93fQUN/DRj37Uem7VqlVs376dH/zgB1N6ePa/tRhw+/c1a9Ys+vv7GRgYoLzcWF/z5s0bZezB+O6/8pWv8Oijj9LW1kYqlSKVSlm1Bxs3buTII4+ksjJt1FetWgUqQtewRgHzx1m/H/3oR3nnO9/JG3+ziSHKeN2b387iOTNHRR2qq6sPeN9kuPjii63/H3HEESxZsoQTTjiBp556imOPPTarzwJ4+OGHOf/88/npT3/Kq171qglfl0xpihqNotqjx6m1gXSnScnMA9tKf/WrX3HrrbeyY8cOBgcHicfj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\n", - "text/plain": [ - "" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "exp_data.figure(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "7b14a270", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "AnalysisResult\n", - "- name: @Parameters_ErrorAmplificationAnalysis\n", - "- value: CurveFitResult:\n", - " - fitting method: least_squares\n", - " - number of sub-models: 1\n", - " * F_ping_pong(x) = amp / 2 * cos((d_theta + angle_per_gate) * x - phase_offset)...\n", - " - success: True\n", - " - number of function evals: 6\n", - " - degree of freedom: 13\n", - " - chi-square: 129.66478153568548\n", - " - reduced chi-square: 9.974213964283498\n", - " - Akaike info crit.: 36.35353473185864\n", - " - Bayesian info crit.: 37.76963513406306\n", - " - init params:\n", - " * amp = 1.0\n", - " * d_theta = 0.0551290748741386\n", - " * angle_per_gate = 3.141592653589793\n", - " * phase_offset = -1.5707963267948966\n", - " * base = 0.5037490627343164\n", - " - fit params:\n", - " * amp = 1.0 ± 0.0\n", - " * d_theta = -0.040472139117284534 ± 0.0005019078548224959\n", - " * angle_per_gate = 3.141592653589793 ± 0.0\n", - " * phase_offset = -1.5707963267948966 ± 0.0\n", - " * base = 0.4856279605000334 ± 0.0019244621149488855\n", - " - correlations:\n", - " * (d_theta, base) = 0.04624866542183945\n", - "- quality: bad\n", - "- device_components: ['Q0']\n", - "- verified: False\n" - ] - } - ], - "source": [ - "print(exp_data.analysis_results(0))" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "e994b6a6", - "metadata": {}, - "outputs": [], - "source": [ - "dhac = exp_data.analysis_results(\"d_hac\").value.nominal_value" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "id": "315fab21", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adjust the phase of 0.0 of the sx pulse by 0.020 rad.\n", - "The backend reports an angle of 0.021 for the sx pulse.\n" - ] - } - ], - "source": [ - "sx = backend.defaults().instruction_schedule_map.get('sx', (qubit,))\n", - "sx_amp = sx.instructions[0][1].pulse.amp\n", - "\n", - "print(f\"Adjust the phase of {np.angle(sx_pulse.amp)} of the sx pulse by {-dhac/2:.3f} rad.\")\n", - "print(f\"The backend reports an angle of {np.angle(sx_amp):.3f} for the sx pulse.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "id": "divided-messaging", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

This code is a part of Qiskit

© Copyright IBM 2017, 2022.

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.

" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import qiskit.tools.jupyter\n", - "%qiskit_copyright" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/tutorials/getting_started.rst b/docs/tutorials/getting_started.rst new file mode 100644 index 0000000000..15ada32f8c --- /dev/null +++ b/docs/tutorials/getting_started.rst @@ -0,0 +1,371 @@ +=============== +Getting Started +=============== + +Installation +============ + +Qiskit Experiments is built on top of Qiskit, so we recommend that you first install +Qiskit following its :external+qiskit:doc:`installation guide `. Qiskit +Experiments supports the same platforms and Python versions (currently 3.7+) as Qiskit +itself. + +Qiskit Experiments releases can be installed via the Python package manager ``pip``: + +.. jupyter-input:: + + python -m pip install qiskit-experiments + +If you want to run the most up-to-date version instead (may not be stable), you can +install the latest main branch: + +.. jupyter-input:: + + python -m pip install git+https://github.com/Qiskit/qiskit-experiments.git + +If you want to develop the package, you can install Qiskit Experiments from source by +cloning the repository: + +.. jupyter-input:: + + git clone https://github.com/Qiskit/qiskit-experiments.git + python -m pip install -e qiskit-experiments + +The ``-e`` option will keep your installed package up to date as you make or pull new +changes. + +Running your first experiment +============================= + +Let's run a :class:`.T1` Experiment, which estimates the characteristic relaxation time +of a qubit from the excited state to the ground state, also known as :math:`T_1`, by +measuring the excited state population after varying delays. First, we have to import +the experiment from the Qiskit Experiments library: + +.. jupyter-execute:: + + from qiskit_experiments.library import T1 + +Experiments must be run on a backend. We're going to use a simulator, +:class:`~qiskit.providers.fake_provider.FakeVigo`, for this example, but you can use any +IBM backend, real or simulated, that you can access through Qiskit. + +.. jupyter-execute:: + + from qiskit.providers.fake_provider import FakeVigo + from qiskit_aer import AerSimulator + from qiskit.providers.aer.noise import NoiseModel + import numpy as np + + # Create a pure relaxation noise model for AerSimulator + noise_model = NoiseModel.from_backend( + FakeVigo(), thermal_relaxation=True, gate_error=False, readout_error=False + ) + + backend = AerSimulator.from_backend(FakeVigo(), noise_model=noise_model) + +All experiments require a ``physical_qubits`` parameter as input that specifies which +physical qubit or qubits the circuits will be executed on. The qubits must be given as a +Python sequence (usually a tuple or a list). In addition, the :math:`T_1` experiment has +a second required parameter, ``delays``, which is a list of times in seconds at which to +measure the excited state population. In this example, we'll run the :math:`T_1` +experiment on qubit 0, and use the ``t1`` backend property of this qubit to give us a +good estimate for the sweep range of the delays. + +.. jupyter-execute:: + + qubit0_t1 = backend.properties().t1(0) + + delays = np.arange(1e-6, 3 * qubit0_t1, 3e-5) + exp = T1(physical_qubits=(0,), delays=delays) + +The circuits encapsulated by the experiment can be accessed using the experiment's +:meth:`~.BaseExperiment.circuits` method, which returns a list of circuits that can be +run on a backend. Let's print the range of delay times we're sweeping over and draw the +first and last circuits for our :math:`T_1` experiment: + +.. jupyter-execute:: + + print(delays) + exp.circuits()[0].draw(output='mpl') + +.. jupyter-execute:: + + exp.circuits()[-1].draw(output='mpl') + +As expected, the delay block spans the full range of time values that we specified. + +The :class:`.ExperimentData` class +================================== + +After instantiating the experiment, we run the experiment by calling +:meth:`~.BaseExperiment.run` with our backend of choice. This transpiles our experiment +circuits then packages them into jobs that are run on the backend. + +.. note:: + See the how-tos for :doc:`customizing job splitting ` when + running an experiment. + +This statement returns the :class:`.ExperimentData` class containing the results of the +experiment, so it's crucial that we assign the output to a data variable. We could have +also provided the backend at the instantiation of the experiment, but specifying the +backend at run time allows us to run the same exact experiment on different backends +should we choose to do so. + +.. jupyter-execute:: + + exp_data = exp.run(backend=backend).block_for_results() + +The :meth:`~.ExperimentData.block_for_results` method is optional and is used to block +execution of subsequent code until the experiment has fully completed execution and +analysis. If + +.. jupyter-input:: + + exp_data = exp.run(backend=backend) + +is executed instead, the statement will finish running as soon as the jobs are +submitted, but the analysis callback won't populate ``exp_data`` with results until the +entire process has finished. In this case, there are two useful methods in the +:class:`.ExperimentData`, :meth:`~.ExperimentData.job_status` and +:meth:`~.ExperimentData.analysis_status`, that return the current status of the job and +analysis, respectively: + +.. jupyter-execute:: + + print(exp_data.job_status()) + print(exp_data.analysis_status()) + +Once the analysis is complete, figures are retrieved using the +:meth:`~.ExperimentData.figure` method. See the :doc:`visualization module +` tutorial on how to customize figures for an experiment. For our +:math:`T_1` experiment, we have a single figure showing the raw data and fit to the +exponential decay model of the :math:`T_1` experiment: + +.. jupyter-execute:: + + display(exp_data.figure(0)) + +The fit results and associated parameters are accessed with +:meth:`~.ExperimentData.analysis_results`: + +.. jupyter-execute:: + + for result in exp_data.analysis_results(): + print(result) + +Results can be indexed numerically (starting from 0) or using their name. + +.. note:: + See the :meth:`~.ExperimentData.analysis_results` API documentation for more + advanced usage patterns to access subsets of analysis results. + +Each analysis +result value is a ``UFloat`` object from the ``uncertainties`` package. The nominal +value and standard deviation of each value can be accessed as follows: + +.. jupyter-execute:: + + print(exp_data.analysis_results("T1").value.nominal_value) + print(exp_data.analysis_results("T1").value.std_dev) + +For further documentation on how to work with UFloats, consult the ``uncertainties`` +:external+uncertainties:doc:`user_guide`. + +Raw circuit output data and its associated metadata can be accessed with the +:meth:`~.ExperimentData.data` property. Data is indexed by the circuit it corresponds +to. Depending on the measurement level set in the experiment, the raw data will either +be in the key ``counts`` (level 2) or ``memory`` (level 1 IQ data). + +.. note:: + See the :doc:`data processor tutorial ` for more + information on level 1 and level 2 data. + +Circuit metadata contains information set by the experiment on a circuit-by-circuit +basis; ``xval`` is used by the analysis to extract the x value for each circuit when +fitting the data. + +.. jupyter-execute:: + + print(exp_data.data(0)) + +Experiments also have global associated metadata accessed by the +:meth:`~.ExperimentData.metadata` property. + +.. jupyter-execute:: + + print(exp_data.metadata) + +The actual backend jobs that were executed for the experiment can be accessed with the +:meth:`~.ExperimentData.jobs` method. + +.. note:: + See the how-tos for :doc:`instantiating a new ExperimentData object ` + from an existing experiment that finished execution. + +Setting experiment options +========================== + +It's often insufficient to run an experiment with only its default options. There are +four types of options one can set for an experiment: + +Run options +----------- + +These options are passed to the experiment's :meth:`~.BaseExperiment.run` method and +then to the ``run()`` method of your specified backend. Any run option that your backend +supports can be set: + +.. jupyter-input:: + + exp.set_run_options(shots=1000, + meas_level=MeasLevel.CLASSIFIED, + meas_return="avg") + +Consult the documentation of :meth:`qiskit.execute_function` or the run method of your +specific backend type for valid options. + +Transpile options +----------------- +These options are passed to the Terra transpiler to transpile the experiment circuits +before execution: + +.. jupyter-input:: + + exp.set_transpile_options(scheduling_method='asap', + optimization_level=3, + basis_gates=["x", "sx", "rz"]) + +Consult the documentation of :func:`qiskit.compiler.transpile` for valid options. + +Experiment options +------------------ +These options are unique to each experiment class. Many experiment options can be set +upon experiment instantiation, but can also be explicitly set via +:meth:`~BaseExperiment.set_experiment_options`: + +.. jupyter-input:: + + exp = T1(physical_qubits=(i,), delays=delays) + exp.set_experiment_options(delays=new_delays) + +Consult the :doc:`API documentation ` for the options of each experiment +class. + +Analysis options +---------------- + +These options are unique to each analysis class. Unlike the other options, analyis +options are not directly set via the experiment object but use instead a method of the +associated ``analysis``: + +.. jupyter-execute:: + + from qiskit_experiments.library import StandardRB + + exp = StandardRB(physical_qubits=(0,), + lengths=list(range(1, 300, 30)), + seed=123, + backend=backend) + exp.analysis.set_options(gate_error_ratio=None) + +Consult the :doc:`API documentation ` for the options of each +experiment's analysis class. + +Running experiments on multiple qubits +====================================== + +To run experiments across many qubits of the same device, we use **composite +experiments**. A composite experiment is a parent object that contains one or more child +experiments, which may themselves be composite. There are two core types of composite +experiments: + +* **Parallel experiments** run across qubits simultaneously as set by the user. The + circuits of child experiments are combined into new circuits that map circuit gates + onto qubits in parallel. Therefore, the circuits in child experiments *cannot* overlap + in the ``physical_qubits`` parameter. The marginalization of measurement data for + analysis of each child experiment is handled automatically. +* **Batch experiments** run consecutively in time. These child circuits *can* overlap in + qubits used. + +Using parallel experiments, we can measure the :math:`T_1` of one qubit while doing a +standard Randomized Benchmarking :class:`.StandardRB` experiment on other qubits +simultaneously on the same device: + +.. jupyter-execute:: + + from qiskit_experiments.framework import ParallelExperiment + + child_exp1 = T1(physical_qubits=(2,), delays=delays) + child_exp2 = StandardRB(physical_qubits=(3,1), lengths=np.arange(1,100,10), num_samples=2) + parallel_exp = ParallelExperiment([child_exp1, child_exp2]) + +Note that when the transpile and run options are set for a composite experiment, the +child experiments's options are also set to the same options recursively. Let's examine +how the parallel experiment is constructed by visualizing child and parent circuits. The +child experiments can be accessed via the +:meth:`~.ParallelExperiment.component_experiment` method, which indexes from zero: + +.. jupyter-execute:: + + parallel_exp.component_experiment(0).circuits()[0].draw(output='mpl') + +.. jupyter-execute:: + + parallel_exp.component_experiment(1).circuits()[0].draw(output='mpl') + +The circuits of all experiments assume they're acting on virtual qubits starting from +index 0. In the case of a parallel experiment, the child experiment +circuits are composed together and then reassigned virtual qubit indices: + +.. jupyter-execute:: + + parallel_exp.circuits()[0].draw(output='mpl') + +During experiment transpilation, a mapping is performed to place these circuits on the +physical layout. We can see its effects by looking at the transpiled +circuit, which is accessed via the internal method ``_transpiled_circuits()``. After +transpilation, the :class:`.T1` experiment is correctly placed on physical qubit 2 +and the :class:`.StandardRB` experiment's gates are on physical qubits 3 and 1. + +.. jupyter-execute:: + + parallel_exp._transpiled_circuits()[0].draw(output='mpl') + +:class:`.ParallelExperiment` and :class:`.BatchExperiment` classes can also be nested +arbitrarily to make complex composite experiments. + +.. figure:: ./images/compositeexperiments.png + :align: center + +Viewing child experiment data +----------------------------- + +The experiment data returned from a composite experiment contains individual analysis +results for each child experiment that can be accessed using +:meth:`~.ExperimentData.child_data`. By default, the parent data object does not contain +analysis results. + +.. jupyter-execute:: + + parallel_data = parallel_exp.run(backend, seed_simulator=101).block_for_results() + + for i, sub_data in enumerate(parallel_data.child_data()): + print("Component experiment",i) + display(sub_data.figure(0)) + for result in sub_data.analysis_results(): + print(result) + +If you want the parent data object to contain the analysis results instead, you can set +the ``flatten_results`` flag to true to flatten the results of all component experiments +into one level: + +.. jupyter-execute:: + + parallel_exp = ParallelExperiment( + [T1(physical_qubits=(i,), delays=delays) for i in range(2)], flatten_results=True + ) + parallel_data = parallel_exp.run(backend, seed_simulator=101).block_for_results() + + for result in parallel_data.analysis_results(): + print(result) \ No newline at end of file diff --git a/docs/tutorials/images/compositeexperiments.png b/docs/tutorials/images/compositeexperiments.png new file mode 100644 index 0000000000..fe1fe776ef Binary files /dev/null and b/docs/tutorials/images/compositeexperiments.png differ diff --git a/docs/tutorials/images/experimentarch.png b/docs/tutorials/images/experimentarch.png new file mode 100644 index 0000000000..3942b57f62 Binary files /dev/null and b/docs/tutorials/images/experimentarch.png differ diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst index ebde368514..310c4fdfea 100644 --- a/docs/tutorials/index.rst +++ b/docs/tutorials/index.rst @@ -1,13 +1,39 @@ -##################### -Experiments Tutorials -##################### +Tutorials +========= +These tutorials assume some familiarity with Qiskit (on the level of the +:external+qiskit:doc:`introductory tutorials `) but no knowledge of Qiskit Experiments. +They're suitable for beginners who want to get started with the package. -.. nbgallery:: - :glob: +.. _basics: - * +The Basics +---------- +.. toctree:: + :maxdepth: 2 + + intro + getting_started + +Exploring Modules +----------------- + +.. toctree:: + :maxdepth: 1 + + calibrations + data_processor + curve_analysis + visualization + +Customizing Experiments +----------------------- + +.. toctree:: + :maxdepth: 1 + + custom_experiment .. Hiding - Indices and tables :ref:`genindex` diff --git a/docs/tutorials/intro.rst b/docs/tutorials/intro.rst new file mode 100644 index 0000000000..5886ab2665 --- /dev/null +++ b/docs/tutorials/intro.rst @@ -0,0 +1,55 @@ +============ +Introduction +============ + +What is Qiskit Experiments? +=========================== + +Qiskit Experiments is a package for running device characterization and calibration +experiments on top of the core functionality of Qiskit Terra. + +An **experiment** comprises a series of circuits and associated metadata. +Once the experiment circuits are executed on a quantum backend, either +real or simulated, analysis is run automatically on the jobs and results +in the form of data, fit parameters, and figures are generated. + +In addition to the experiment framework itself, Qiskit Experiments also has a rich +library of experiments for calibrating and characterizing qubits. + +What Qiskit Experiments can do +============================== + +* Run characterization and calibration experiments such as quantum + volume and randomized benchmarking +* Run built-in or customized experiments with all the options available in Qiskit Terra +* Specify fit series and parameters in the analysis +* Transform the data through the data processor +* Visualize data with support for custom drawing backends +* Save and retrieve timestamped calibration parameters for physical backends + +.. _primer: + +A quick primer +============== + +The Qiskit Experiments package consists of the experimental framework and the experiment +library. The framework itself consists of ``Experiment`` and ``Analysis`` classes, the +latter of which uses the Data Processor, Curve Analysis, and Visualization modules +to process the data, fit it to specified models, and plot the results, respectively. + +.. figure:: images/experimentarch.png + :width: 400 + :align: center + :class: no-scaled-link + + +Experiments start with an ``Experiment`` class, which instantiates the circuits that +will be run and also the metadata and options that will be used for the experiment, +transpilation, execution, and analysis. During execution, circuits are automatically +packaged into one or more jobs for the specified backend device. + +Each ``Experiment`` class is tied to its corresponding ``Analysis`` class. Once jobs +complete execution, the ``Analysis`` class processes and analyzes raw data to output +an ``ExperimentData`` class that contains +the resulting analysis results, figures, metadata, as well as the original raw data. + diff --git a/docs/tutorials/visualization.rst b/docs/tutorials/visualization.rst new file mode 100644 index 0000000000..cd32209d01 --- /dev/null +++ b/docs/tutorials/visualization.rst @@ -0,0 +1,304 @@ +Visualization: Creating figures +=============================== + +The Visualization module provides plotting functionality for creating figures from experiment and analysis results. +This includes ``plotter`` and ``drawer`` classes to plot data in :class:`.CurveAnalysis` and its subclasses. +Plotters define the kind of figures to plot, while drawers are backends that enable them to be visualized. + +How much you will interact directly with the visualization module depends on your use case: + +- **Running library experiments as-is:** You won't need to interact with the visualization module. +- **Running library experiments with custom styling for figures**: You will be setting figure options through the plotter. +- **Making plots using a plotting library other than Matplotlib**: You will need to define a custom drawer class. +- **Writing your own analysis class**: If you want to use the the default plotter and drawer settings, + you don't need to interact with the visualization module. Optionally, you can customize + your plotter and drawer. + +Plotters inherit from :class:`.BasePlotter` and define a type of figure that may be generated from +experiment or analysis data. For example, the results from :class:`.CurveAnalysis` --- or any other +experiment where results are plotted against a single parameter (i.e., :math:`x`) --- can be plotted +using the :class:`.CurvePlotter` class, which plots X-Y-like values. + +These plotter classes act as a bridge (from the common bridge pattern in software development) between +analysis classes (or even users) and plotting backends such as Matplotlib. Drawers are the backends, with +a common interface defined in :class:`.BaseDrawer`. Though Matplotlib is the only officially supported +plotting backend in Qiskit Experiments through :class:`.MplDrawer`, custom drawers can be +implemented by users to use alternative backends. As long as the backend is a subclass of +:class:`.BaseDrawer`, and implements all the necessary functionality, all plotters should be able to +generate figures with the alternative backend. + + + + +Generating and customizing a figure using a plotter +--------------------------------------------------- + +First, we display the default figure from a :class:`.Rabi` experiment as a starting point: + +.. jupyter-execute:: + + import numpy as np + + from qiskit import pulse + from qiskit.circuit import Parameter + + from qiskit_experiments.test.pulse_backend import SingleTransmonTestBackend + from qiskit_experiments.data_processing import DataProcessor, nodes + from qiskit_experiments.library import Rabi + + with pulse.build() as sched: + pulse.play( + pulse.Gaussian(160, Parameter("amp"), sigma=40), + pulse.DriveChannel(0) + ) + + backend = SingleTransmonTestBackend() + + rabi = Rabi( + qubit=0, + backend=backend, + schedule=sched, + amplitudes=np.linspace(-0.1, 0.1, 21) + ) + + rabi_data = rabi.run().block_for_results() + rabi_data.figure(0) + +This is the default figure generated by :class:`OscillationAnalysis`, the data analysis +class for the Rabi experiment. The fitted cosine is shown as a blue line, with the +individual measurements from the experiment shown as data points with error bars corresponding +to their uncertainties. We are also given a small fit report in the caption showing the +``rabi_rate``. + +The plotter that generated the figure can be accessed through the analysis instance, +and customizing the figure can be done by setting the plotter's options. We now modify +the color, symbols, and size of our plot, as well as change the axis labels for the amplitude units: + +.. jupyter-execute:: + :hide-code: + :hide-output: + + %matplotlib inline + +.. jupyter-execute:: + + # Retrieve the plotter from the analysis instance + plotter = rabi.analysis.plotter + + # Change the x-axis unit values + plotter.set_figure_options( + xval_unit="arb.", + xval_unit_scale=False # Don't scale the unit with SI prefixes + ) + + # Change the color and symbol for the cosine + plotter.figure_options.series_params.update( + {"cos": {"symbol": "x", "color": "r"}} + ) + + # Set figsize directly so we don't overwrite the entire style + plotter.options.style["figsize"] = (6,4) + + # Generate the new figure + plotter.figure() + +Plotters have two sets of options that customize their behavior and figure content: +``options``, which have class-specific parameters that define how an instance behaves, +and ``figure_options``, which have figure-specific parameters that control aspects of the +figure itself, such as axis labels and series colors. + +Here is a more complicated experiment in which we customize the figure of a DRAG +experiment before it's run, so that we don't need to regenerate the figure like in +the previous example. First, we run the experiment without customizing the options +to see what the default figure looks like: + +.. jupyter-execute:: + + from qiskit_experiments.library import RoughDrag + from qiskit_experiments.visualization import PlotStyle + from qiskit_experiments.test.mock_iq_helpers import MockIQDragHelper as DragHelper + from qiskit_experiments.test.mock_iq_backend import MockIQBackend + from qiskit.circuit import Parameter + from qiskit import pulse + from qiskit.pulse import DriveChannel, Drag + + + beta = Parameter("beta") + with pulse.build(name="xp") as xp: + pulse.play(pulse.Drag(64, 0.66, 16, beta), pulse.DriveChannel(0)) + + drag_experiment_helper = DragHelper(gate_name="Drag(xp)") + backend = MockIQBackend(drag_experiment_helper) + + drag = RoughDrag(0, xp, backend=backend) + + drag_data = drag.run().block_for_results() + drag_data.figure(0) + +Now we specify the figure options before running the experiment for a second time: + +.. jupyter-execute:: + + drag = RoughDrag(0, xp, backend=backend) + + # Set plotter options + plotter = drag.analysis.plotter + + # Update series parameters + plotter.figure_options.series_params.update( + { + "nrep=1": { + "color": (27/255, 158/255, 119/255), + "symbol": "^", + }, + "nrep=3": { + "color": (217/255, 95/255, 2/255), + "symbol": "s", + }, + "nrep=5": { + "color": (117/255, 112/255, 179/255), + "symbol": "o", + }, + } + ) + + # Set figure options + plotter.set_figure_options( + xval_unit="arb.", + xval_unit_scale=False, + figure_title="Rough DRAG Experiment on Qubit 0", + ) + + # Set style parameters + plotter.options.style["symbol_size"] = 10 + plotter.options.style["legend_loc"] = "upper center" + + drag_data = drag.run().block_for_results() + drag_data.figure(0) + +As can be seen in the figure, the different series generated by the experiment +were styled differently according to the ``series_params`` attribute of ``figure_options``. + + +Customizing plotting in your experiment +--------------------------------------- + +Plotters are easily integrated into custom analysis classes. To add a plotter instance +to such a class, we define a new ``plotter`` property, pass it relevant data in the +analysis class's ``_run_analysis`` method, and return the generated figure alongside our +analysis results. We use the :class:`.IQPlotter` class to illustrate how this is done for an +arbitrary analysis class. + +To ensure that we have an interface similar to existing analysis classes, we make our plotter +accessible as an ``analysis.plotter`` property and analysis.options.plotter option. +The code below accomplishes this for our example ``MyIQAnalysis`` analysis class. We +set the drawer to :class:`.MplDrawer` to use :mod:`matplotlib` by default. The plotter property of our +analysis class makes it easier to access the plotter instance; i.e., using ``self.plotter`` +and ``analysis.plotter``. We set default options and figure options in +``_default_options``, but you can still override them as we did above. + +The ``MyIQAnalysis`` class accepts single-shot level 1 IQ data, which consists of an +in-phase and quadrature measurement for each shot and circuit. ``_run_analysis`` is +passed an :class:`.ExperimentData` instance which contains IQ data as a list of dictionaries +(one per circuit) where their "memory" entries are lists of IQ values (one per shot). +Each dictionary has a "metadata" entry, with the name of a prepared state: "0", "1", +or "2". These are our series names. + +Our goal is to create a figure that displays the single-shot IQ values of each +prepared-state (one per circuit). We process the "memory" data passed to the +analysis class and set the points and centroid series data in the plotter. +This is accomplished in the code below, where we also train a discriminator +to label the IQ points as one of the three prepared states. :class:`.IQPlotter` supports +plotting a discriminator as optional supplementary data, which will show predicted +series over the axis area. + +.. jupyter-execute:: + + + drag_experiment_helper = DragHelper(gate_name="Drag(xp)") + backend = MockIQBackend(drag_experiment_helper) + with pulse.build(name="xp") as xp: + pulse.play(Drag(duration=160, amp=0.208519, sigma=40, beta=beta), DriveChannel(0)) + + x_plus = xp + drag = RoughDrag(1, x_plus) + + expdata = drag.run(backend) + + from qiskit_experiments.framework import BaseAnalysis, Options + from qiskit_experiments.visualization import ( + BasePlotter, + IQPlotter, + MplDrawer, + PlotStyle, + ) + + class MYIQAnalysis(BaseAnalysis): + @classmethod + def _default_options(cls) -> Options: + options = super()._default_options() + # We create the plotter and create an option for it. + options.plotter = IQPlotter(MplDrawer()) + options.plotter.set_figure_options( + xlabel="In-phase", + ylabel="Quadrature", + figure_title="My IQ Analysis Figure", + series_params={ + "0": {"label": "|0>"}, + "1": {"label": "|1>"}, + "2": {"label": "|2>"}, + }, + ) + return options + + @property + def plotter(self) -> BasePlotter: + return self.options.plotter + + def _run_analysis(self, experiment_data): + data = experiment_data.data() + analysis_results = [] + for datum in data: + # Analysis code + analysis_results.append(self._analysis_result(datum)) + + # Plotting code + series_name = datum["metadata"]["name"] + points = datum["memory"] + centroid = np.mean(points, axis=0) + self.plotter.set_series_data( + series_name, + points=points, + centroid=centroid, + ) + + # Add discriminator to IQPlotter + discriminator = self._train_discriminator(data) + self.plotter.set_supplementary_data(discriminator=discriminator) + + return analysis_results, [self.plotter.figure()] + +If we run the above analysis on some appropriate experiment data, as previously +described, our class will generate a figure showing IQ points and their centroids. + +Creating your own plotter +------------------------- + +You can create a custom figure plotter by subclassing :class:`.BasePlotter` and overriding +:meth:`~.BasePlotter.expected_series_data_keys`, +:meth:`~.BasePlotter.expected_supplementary_data_keys`, and +:meth:`~.BasePlotter._plot_figure`. + +The first two methods allow you to define a list of supported data-keys +as strings, which identify the different data to plot. The third method, +:meth:`~.BasePlotter._plot_figure`, must contain your code to generate a figure by calling methods +on the plotter's drawer instance (self.drawer). When ``plotter.figure()`` is called +by an analysis class, the plotter calls ``_plot_figure()`` and then returns your figure +object which is added to the experiment data instance. It is also good practice to +set default values for figure options, such as axis labels. You can do this by +overriding the :meth:`~.BasePlotter._default_figure_options` method in your plotter subclass. + +See also +-------- + +API documentation: :doc:`Visualization Module ` \ No newline at end of file diff --git a/qiskit_experiments/__init__.py b/qiskit_experiments/__init__.py index 783dee8caa..d0a56c54d1 100644 --- a/qiskit_experiments/__init__.py +++ b/qiskit_experiments/__init__.py @@ -21,8 +21,8 @@ This package is still under active development and it is very likely that there will be breaking API changes in future releases. - If you encounter any bugs please open an issue on - `Github `_ + If you encounter any bugs, please open an issue on + `GitHub `_. Qiskit Experiments provides both a general :mod:`~qiskit_experiments.framework` for creating and @@ -48,9 +48,8 @@ - Utility functions for curve fitting and analysis. * - :mod:`~qiskit_experiments.calibration_management` - Classes for managing calibration experiment result data. - * - :mod:`~qiskit_experiments.database_service` - - Classes for saving and retrieving experiment and analysis results - from a database. + * - :mod:`~qiskit_experiments.visualization` + - Classes for creating figures from experiment results. Certain experiments also have additional utilities contained which can be accessed by importing the following modules. @@ -70,3 +69,4 @@ from . import calibration_management from . import data_processing from . import database_service +from . import visualization diff --git a/qiskit_experiments/calibration_management/__init__.py b/qiskit_experiments/calibration_management/__init__.py index 7933903ab6..82be9ae50d 100644 --- a/qiskit_experiments/calibration_management/__init__.py +++ b/qiskit_experiments/calibration_management/__init__.py @@ -28,7 +28,7 @@ Furthermore, the resulting parameter values and schedules must be managed. The calibration management module in Qiskit experiments allows users to manage the resulting schedules and parameter values from obtained when running -calibration experiments from the :mod:`qiskit_experiments.library`. +calibration experiments from the :mod:`~qiskit_experiments.library`. Classes ======= @@ -47,7 +47,7 @@ Managing Calibration Data ========================= -Calibrations are managed by the :class:`Calibrations` class. This class stores schedules +Calibrations are managed by the :class:`.Calibrations` class. This class stores schedules which are intended to be fully parameterized, including the index of the channels. This class: @@ -89,25 +89,26 @@ Parametrized channel indices must be named according to a predefined pattern to properly identify the channels and control channels when assigning values to the parametric -channel indices. A channel must have a name that starts with `ch` followed by an integer. -For control channels this integer can be followed by a sequence `.integer`. -Optionally, the name can end with `$integer` to specify the index of a control channel +channel indices. A channel must have a name that starts with ``ch`` followed by an integer. +For control channels, this integer can be followed by a sequence ``.integer``. +Optionally, the name can end with ``$integer`` to specify the index of a control channel for the case when a set of qubits share multiple control channels. For example, -valid channel names include "ch0", "ch1", "ch0.1", "ch0$", "ch2$3", and "ch1.0.3$2". -The "." delimiter is used to specify the different qubits when looking for control +valid channel names include ``"ch0"``, ``"ch1"``, ``"ch0.1"``, ``"ch0$"``, ``"ch2$3"``, +and ``"ch1.0.3$2"``. +The ``.`` delimiter is used to specify the different qubits when looking for control channels. The optional $ delimiter is used to specify which control channel to use if several control channels work together on the same qubits. For example, if the -control channel configuration is {(3,2): [ControlChannel(3), ControlChannel(12)]} -then given qubits (2, 3) the name "ch1.0$1" will resolve to ControlChannel(12) while -"ch1.0$0" will resolve to ControlChannel(3). A channel can only have one parameter. +control channel configuration is ``{(3,2): [ControlChannel(3), ControlChannel(12)]}`` +then given qubits ``(2, 3)`` the name ``"ch1.0$1"`` will resolve to ``ControlChannel(12)`` while +``"ch1.0$0"`` will resolve to ``ControlChannel(3)``. A channel can only have one parameter. Parameter naming restriction **************************** Each parameter must have a unique name within each schedule. For example, it is -acceptable to have a parameter named 'amp' in the schedule 'xp' and a different -parameter instance named 'amp' in the schedule named 'xm'. It is not acceptable -to have two parameters named 'amp' in the same schedule. The naming restriction +acceptable to have a parameter named ``amp`` in the schedule ``xp`` and a different +parameter instance named ``amp`` in the schedule named ``xm``. It is not acceptable +to have two parameters named ``amp`` in the same schedule. The naming restriction only applies to parameters used in the immediate scope of the schedule. Schedules called by Call instructions have their own scope for Parameter names. diff --git a/qiskit_experiments/calibration_management/base_calibration_experiment.py b/qiskit_experiments/calibration_management/base_calibration_experiment.py index 74910963c3..242a0067d1 100644 --- a/qiskit_experiments/calibration_management/base_calibration_experiment.py +++ b/qiskit_experiments/calibration_management/base_calibration_experiment.py @@ -44,13 +44,13 @@ class BaseCalibrationExperiment(BaseExperiment, ABC): This abstract class extends a characterization experiment by turning it into a calibration experiment. Such experiments allow schedule management and updating of an - instance of :class:`Calibrations`. Furthermore, calibration experiments also specify + instance of :class:`.Calibrations`. Furthermore, calibration experiments also specify an auto_update variable which, by default, is set to True. If this variable, - is True then the run method of the experiment will call :meth:`block_for_results` + is True then the run method of the experiment will call :meth:`~.ExperimentData.block_for_results` and update the calibrations instance once the backend has returned the data. - This mixin class inherits from the :class:`BaseExperiment` class since calibration - experiments by default call :meth:`block_for_results`. This ensures that the next + This mixin class inherits from the :class:`.BaseExperiment` class since calibration + experiments by default call :meth:`~.ExperimentData.block_for_results`. This ensures that the next calibration experiment cannot proceed before the calibration parameters have been updated. Developers that wish to create a calibration experiment must subclass this base class and the characterization experiment. Therefore, developers that use this @@ -63,12 +63,12 @@ class should be this mixin and the second class should be the characterization RoughFrequency(BaseCalibrationExperiment, QubitSpectroscopy) - This ensures that the :meth:`run` method of :class:`RoughFrequency` will be the - run method of the :class:`BaseCalibrationExperiment` class. Furthermore, developers + This ensures that the :meth:`run` method of :class:`.RoughFrequency` will be the + run method of the :class:`.BaseCalibrationExperiment` class. Furthermore, developers must explicitly call the :meth:`__init__` methods of both parent classes. Developers should strive to follow the convention that the first two arguments of - a calibration experiment are the qubit(s) and the :class:`Calibration` instance. + a calibration experiment are the qubit(s) and the :class:`.Calibration` instance. If the experiment uses custom schedules, which is typically the case, then developers may chose to use the :meth:`get_schedules` method when creating the @@ -85,7 +85,7 @@ class should be this mixin and the second class should be the characterization These methods are called by :meth:`get_schedules`. The :meth:`update_calibrations` method is responsible for updating the values of the parameters - stored in the instance of :class:`Calibrations`. Here, :class:`BaseCalibrationExperiment` + stored in the instance of :class:`.Calibrations`. Here, :class:`BaseCalibrationExperiment` provides a default update methodology that subclasses can override if a more elaborate behaviour is needed. At the minimum the developer must set the variable :code:`_updater` which should have an :code:`update` method and can be chosen from the library @@ -213,13 +213,13 @@ def set_transpile_options(self, **fields): warnings.warn(f"Transpile options are not used in {self.__class__.__name__ }.") def update_calibrations(self, experiment_data: ExperimentData): - """Update parameter values in the :class:`Calibrations` instance. + """Update parameter values in the :class:`.Calibrations` instance. The default behaviour is to call the update method of the class variable :code:`__updater__` with simplistic options. Subclasses can override this - method to update the instance of :class:`Calibrations` if they require a - more sophisticated behaviour as is the case for the :class:`Rabi` and - :class:`FineAmplitude` calibration experiments. + method to update the instance of :class:`.Calibrations` if they require a + more sophisticated behaviour as is the case for the :class:`.Rabi` and + :class:`.FineAmplitude` calibration experiments. """ if self._updater is not None: self._updater.update( diff --git a/qiskit_experiments/calibration_management/basis_gate_library.py b/qiskit_experiments/calibration_management/basis_gate_library.py index d309d3d9e7..20f37026bf 100644 --- a/qiskit_experiments/calibration_management/basis_gate_library.py +++ b/qiskit_experiments/calibration_management/basis_gate_library.py @@ -121,7 +121,7 @@ def default_values(self) -> List[DefaultCalValue]: Returns A list of tuples is returned. These tuples are structured so that instances of - :class:`Calibrations` can call :meth:`add_parameter_value` on the tuples. + :class:`.Calibrations` can call :meth:`.add_parameter_value` on the tuples. """ @abstractmethod @@ -219,7 +219,7 @@ def __init__( default_values: Default values for the parameters this dictionary can contain the following keys: "duration", "amp", "β", and "σ". If "σ" is not provided this library will take one fourth of the pulse duration as default value. - link_parameters: if set to True then the amplitude and DRAG parameters of the + link_parameters: If set to True then the amplitude and DRAG parameters of the X and Y gates will be linked as well as those of the SX and SY gates. """ self._link_parameters = link_parameters @@ -287,7 +287,7 @@ def default_values(self) -> List[DefaultCalValue]: Returns A list of tuples is returned. These tuples are structured so that instances of - :class:`Calibrations` can call :meth:`add_parameter_value` on the tuples. + :class:`.Calibrations` can call :meth:`.add_parameter_value` on the tuples. """ defaults = [] for name, schedule in self.items(): @@ -325,7 +325,7 @@ class EchoedCrossResonance(BasisGateLibrary): - rzx: RZXGate built from the ecr as ``cr45p - x - cr45m - x``. Required gates: - - x: the x gate is defined outside of this library, see :class:`FixedFrequencyTransmon`. + - x: the x gate is defined outside of this library, see :class:`.FixedFrequencyTransmon`. Pulse parameters: - tgt_amp: The amplitude of the pulse applied to the target qubit. Default value: 0. diff --git a/qiskit_experiments/calibration_management/calibrations.py b/qiskit_experiments/calibration_management/calibrations.py index 2f9405f12f..8a91ce6182 100644 --- a/qiskit_experiments/calibration_management/calibrations.py +++ b/qiskit_experiments/calibration_management/calibrations.py @@ -80,7 +80,7 @@ def __init__( """Initialize the calibrations. Calibrations can be initialized from a list of basis gate libraries, i.e. a subclass of - :class:`BasisGateLibrary`. As example consider the following code: + :class:`.BasisGateLibrary`. As example consider the following code: .. code-block:: python @@ -490,7 +490,7 @@ def inst_map_add( schedule_name: The name of the schedule. If None is given then we assume that the schedule and the instruction have the same name. assign_params: An optional dict of parameter mappings to apply. See for instance - :meth:`get_schedule` of :class:`Calibrations`. + :meth:`.get_schedule` of :class:`.Calibrations`. """ schedule_name = schedule_name or instruction_name @@ -616,7 +616,7 @@ def get_template( The registered template schedule. Raises: - CalibrationError: if no template schedule for the given schedule name and qubits + CalibrationError: If no template schedule for the given schedule name and qubits was registered. """ key = ScheduleKey(schedule_name, self._to_tuple(qubits)) @@ -1367,7 +1367,7 @@ def save( default so that when saving to csv all values will be saved. Raises: - CalibrationError: if the files exist and overwrite is not set to True. + CalibrationError: If the files exist and overwrite is not set to True. """ warnings.warn("Schedules are only saved in text format. They cannot be re-loaded.") diff --git a/qiskit_experiments/calibration_management/update_library.py b/qiskit_experiments/calibration_management/update_library.py index 539831b9be..eac5e32d04 100644 --- a/qiskit_experiments/calibration_management/update_library.py +++ b/qiskit_experiments/calibration_management/update_library.py @@ -35,14 +35,14 @@ def __init__(self): """Updaters are not meant to be instantiated. Instead of instantiating updaters use them by calling the :meth:`update` class method. - For example, the :class:`Frequency` updater is called in the following way + For example, the :class:`.Frequency` updater is called in the following way .. code-block:: python Frequency.update(calibrations, spectroscopy_data) - Here, calibrations is an instance of :class:`Calibrations` and spectroscopy_data - is the result of a :class:`QubitSpectroscopy` experiment. + Here, calibrations is an instance of :class:`.Calibrations` and spectroscopy_data + is the result of a :class:`.QubitSpectroscopy` experiment. """ raise CalibrationError( "Calibration updaters are not meant to be instantiated. The intended usage" diff --git a/qiskit_experiments/curve_analysis/__init__.py b/qiskit_experiments/curve_analysis/__init__.py index 220c65ee5e..e0e3451c19 100644 --- a/qiskit_experiments/curve_analysis/__init__.py +++ b/qiskit_experiments/curve_analysis/__init__.py @@ -21,446 +21,6 @@ a single experimental parameter sweep. This analysis subclasses can override several class attributes to customize the behavior from data processing to post-processing, including providing systematic initial guess for parameters tailored to the experiment. -Here we describe how code developers can create new analysis inheriting from the base class. - - -.. _curve_analysis_overview: - -Curve Analysis Overview -======================= - -The base class :class:`CurveAnalysis` implements the multi-objective optimization on -different sets of experiment results. A single experiment can define sub-experiments -consisting of multiple circuits which are tagged with common metadata, -and curve analysis sorts the experiment results based on the circuit metadata. - -This is an example of showing the abstract data structure of typical curve analysis experiment: - -.. code-block:: none - :emphasize-lines: 1,10,19 - - "experiment" - - circuits[0] (x=x1_A, "series_A") - - circuits[1] (x=x1_B, "series_B") - - circuits[2] (x=x2_A, "series_A") - - circuits[3] (x=x2_B, "series_B") - - circuits[4] (x=x3_A, "series_A") - - circuits[5] (x=x3_B, "series_B") - - ... - - "experiment data" - - data[0] (y1_A, "series_A") - - data[1] (y1_B, "series_B") - - data[2] (y2_A, "series_A") - - data[3] (y2_B, "series_B") - - data[4] (y3_A, "series_A") - - data[5] (y3_B, "series_B") - - ... - - "analysis" - - "series_A": y_A = f_A(x_A; p0, p1, p2) - - "series_B": y_B = f_B(x_B; p0, p1, p2) - - fixed parameters {p1: v} - -Here the experiment runs two subset of experiments, namely, series A and series B. -The analysis defines corresponding fit models :math:`f_A(x_A)` and :math:`f_B(x_B)`. -Data extraction function in the analysis creates two datasets, :math:`(x_A, y_A)` -for the series A and :math:`(x_B, y_B)` for the series B, from the experiment data. -Optionally, the curve analysis can fix certain parameters during the fitting. -In this example, :math:`p_1 = v` remains unchanged during the fitting. - -The curve analysis aims at solving the following optimization problem: - -.. math:: - - \Theta_{\mbox{opt}} = \arg\min_{\Theta_{\rm fit}} \sigma^{-2} (F(X, \Theta)-Y)^2, - -where :math:`F` is the composite objective function defined on the full experiment data -:math:`(X, Y)`, where :math:`X = x_A \oplus x_B` and :math:`Y = y_A \oplus y_B`. -This objective function can be described by two fit functions as follows. - -.. math:: - - F(X, \Theta) = f_A(x_A, \theta_A) \oplus f_B(x_B, \theta_B). - -The solver conducts the least square curve fitting against this objective function -and returns the estimated parameters :math:`\Theta_{\mbox{opt}}` -that minimizes the reduced chi-squared value. -The parameters to be evaluated are :math:`\Theta = \Theta_{\rm fit} \cup \Theta_{\rm fix}`, -where :math:`\Theta_{\rm fit} = \theta_A \cup \theta_B`. -Since series A and B share the parameters in this example, :math:`\Theta_{\rm fit} = \{p_0, p_2\}`, -and the fixed parameters are :math:`\Theta_{\rm fix} = \{ p_1 \}` as mentioned. -Thus, :math:`\Theta = \{ p_0, p_1, p_2 \}`. - -Experiment for each series can perform individual parameter sweep for :math:`x_A` and :math:`x_B`, -and experiment data yield outcomes :math:`y_A` and :math:`y_B`, which might be different size. -Data processing function may also compute :math:`\sigma_A` and :math:`\sigma_B` which are -the uncertainty of outcomes arising from the sampling error or measurement error. - -More specifically, the curve analysis defines following data model. - -- Model: Definition of a single curve that is a function of reserved parameter "x". - -- Group: List of models. Fit functions defined under the same group must share the - fit parameters. Fit functions in the group are simultaneously fit to - generate a single fit result. - -Once the group is assigned, a curve analysis instance internally builds -a proper optimization routine. -Finally, the analysis outputs a set of :class:`AnalysisResultData` entries -for important fit outcomes along with a single Matplotlib figure of the fit curves -with the measured data points. - -With this baseclass a developer can avoid writing boilerplate code in -various curve analyses subclass and one can quickly write up -the analysis code for a particular experiment. - - -.. _curve_analysis_define_group: - -Defining New Group -================== - -The fit model is defined by the `LMFIT`_ ``Model``. -If you are familiar with this package, you can skip this section. -The LMFIT package manages complicated fit function and offers several algorithms -to solve non-linear least-square problems. -Basically the Qiskit curve analysis delegates the core fitting functionality to this package. - -You can intuitively write the definition of model, as shown below: - -.. code-block:: python3 - - import lmfit - - models = [ - lmfit.models.ExpressionModel( - expr="amp * exp(-alpha * x) + base", - name="exp_decay", - ) - ] - -Note that ``x`` is the reserved name to represent a parameter -that is scanned during the experiment. In above example, the fit function -consists of three parameters (``amp``, ``alpha``, ``base``), and ``exp`` indicates -a universal function in Python's math module. -Alternatively, you can take a callable to define the model object. - -.. code-block:: python3 - - import lmfit - import numpy as np - - def exp_decay(x, amp, alpha, base): - return amp * np.exp(-alpha * x) + base - - models = [lmfit.Model(func=exp_decay)] - -See `LMFIT`_ documentation for detailed user guide. They also provide preset models. - -If the :class:`.CurveAnalysis` is instantiated with multiple models, -it internally builds a cost function to simultaneously minimize the residuals of -all fit functions. -The names of the parameters in the fit function are important since they are used -in the analysis result, and potentially in your experiment database as a fit result. - -Here is another example how to implement multi-objective optimization task: - -.. code-block:: python3 - - import lmfit - - models = [ - lmfit.models.ExpressionModel( - expr="amp * exp(-alpha1 * x) + base", - name="my_experiment1", - ), - lmfit.models.ExpressionModel( - expr="amp * exp(-alpha2 * x) + base", - name="my_experiment2", - ), - ] - -In addition, you need to provide ``data_subfit_map`` analysis option, which may look like - -.. code-block:: python3 - - data_subfit_map = { - "my_experiment1": {"tag": 1}, - "my_experiment2": {"tag": 2}, - } - -This option specifies the metadata of your experiment circuit -that is tied to the fit model. If multiple models are provided without this option, -the curve fitter cannot prepare data to fit. -In this model, you have four parameters (``amp``, ``alpha1``, ``alpha2``, ``base``) -and the two curves share ``amp`` (``base``) for the amplitude (baseline) in -the exponential decay function. -Here one should expect the experiment data will have two classes of data with metadata -``"tag": 1`` and ``"tag": 2`` for ``my_experiment1`` and ``my_experiment2``, respectively. - -By using this model, one can flexibly set up your fit model. Here is another example: - -.. code-block:: python3 - - import lmfit - - models = [ - lmfit.models.ExpressionModel( - expr="amp * cos(2 * pi * freq * x + phi) + base", - name="my_experiment1", - ), - lmfit.models.ExpressionModel( - expr="amp * sin(2 * pi * freq * x + phi) + base", - name="my_experiment2", - ), - ] - -You have the same set of fit parameters in two models, but now you fit two datasets -with different trigonometric functions. - -.. _LMFIT: https://lmfit.github.io/lmfit-py/intro.html - -.. _curve_analysis_fixed_param: - -Fitting with Fixed Parameters -============================= - -You can also remain certain parameters unchanged during the fitting by specifying -the parameter names in the analysis option ``fixed_parameters``. -This feature is useful especially when you want to define a subclass of -a particular analysis class. - -.. code-block:: python3 - - class AnalysisA(CurveAnalysis): - - def __init__(self): - super().__init__( - models=[ - lmfit.models.ExpressionModel( - expr="amp * exp(-alpha * x) + base", name="my_model" - ) - ] - ) - - class AnalysisB(AnalysisA): - - @classmethod - def _default_options(cls) -> Options: - options = super()._default_options() - options.fixed_parameters = {"amp": 3.0} - - return options - -The parameter specified in ``fixed_parameters`` is excluded from the fitting. -This code will give you identical fit model to the one defined in the following class: - -.. code-block:: python3 - - class AnalysisB(CurveAnalysis): - - super().__init__( - models=[ - lmfit.models.ExpressionModel( - expr="3.0 * exp(-alpha * x) + base", name="my_model" - ) - ] - ) - -However, note that you can also inherit other features, e.g. the algorithm to -generate initial guesses for parameters, from the :class:`AnalysisA` in the first example. -On the other hand, in the latter case, you need to manually copy and paste -every logic defined in the :class:`AnalysisA`. - -.. _curve_analysis_workflow: - -Cureve Analysis Workflow -======================== - -Typically curve analysis performs fitting as follows. -This workflow is defined in the method :meth:`CurveAnalysis._run_analysis`. - -1. Initialization - -Curve analysis calls :meth:`_initialization` method where it initializes -some internal states and optionally populate analysis options -with the input experiment data. -In some case it may train the data processor with fresh outcomes, -or dynamically generate the fit models (``self._models``) with fresh analysis options. -A developer can override this method to perform initialization of analysis-specific variables. - -2. Data processing - -Curve analysis calls :meth:`_run_data_processing` method where -the data processor in the analysis option is internally called. -This consumes input experiment results and creates :class:`CurveData` dataclass. -Then :meth:`_format_data` method is called with the processed dataset to format it. -By default, the formatter takes average of the outcomes in the processed dataset -over the same x values, followed by the sorting in the ascending order of x values. -This allows the analysis to easily estimate the slope of the curves to -create algorithmic initial guess of fit parameters. -A developer can inject extra data processing, for example, filtering, smoothing, -or elimination of outliers for better fitting. - -3. Fitting - -Curve analysis calls :meth:`_run_curve_fit` method which is the core functionality of the fitting. -The another method :meth:`_generate_fit_guesses` is internally called to -prepare the initial guess and parameter boundary with respect to the formatted data. -A developer usually override this method to provide better initial guess -tailored to the defined fit model or type of the associated experiment. -See :ref:`curve_analysis_init_guess` for more details. -A developer can also override the entire :meth:`_run_curve_fit` method to apply -custom fitting algorithms. This method must return :class:`.CurveFitResult` dataclass. - -4. Post processing - -Curve analysis runs several postprocessing against to the fit outcome. -It calls :meth:`_create_analysis_results` to create :class:`AnalysisResultData` class -for the fitting parameters of interest. A developer can inject a custom code to -compute custom quantities based on the raw fit parameters. -See :ref:`curve_analysis_results` for details. -Afterwards, the analysis draws several curves in the Matplotlib figure. -Users can set a custom plotter in :class:`CurveAnalysis` classes, to customize -figures, by setting the :attr:`~CurveAnalysis.plotter` attribute. -Finally, it returns the list of created analysis results and Matplotlib figure. - - -.. _curve_analysis_init_guess: - -Providing Initial Guesses -========================= - -When fit is performed without any prior information of parameters, it usually -falls into unsatisfactory result. -User can provide initial guesses and boundaries for the fit parameters -through analysis options ``p0`` and ``bounds``. -These values are the dictionary keyed on the parameter name, -and one can get the list of parameters with the :attr:`CurveAnalysis.parameters`. -Each boundary value can be a tuple of float representing min and max value. - -Apart from user provided guesses, the analysis can systematically generate -those values with the method :meth:`_generate_fit_guesses` which is called with -:class:`CurveData` dataclass. If the analysis contains multiple models definitions, -we can get the subset of curve data with :meth:`CurveData.get_subset_of` with -the name of the series. -A developer can implement the algorithm to generate initial guesses and boundaries -by using this curve data object, which will be provided to the fitter. -Note that there are several common initial guess estimators available in -:mod:`qiskit_experiments.curve_analysis.guess`. - -The :meth:`_generate_fit_guesses` also receives :class:`FitOptions` instance ``user_opt``, -which contains user provided guesses and boundaries. -This is dictionary-like object consisting of sub-dictionaries for -initial guess ``.p0``, boundary ``.bounds``, and extra options for the fitter. -Note that :class:`CurveAnalysis` uses SciPy `curve_fit`_ as the least square solver. -See the API documentation for available options. - -The :class:`FitOptions` class implements convenient method :meth:`set_if_empty` to manage -conflict with user provided values, i.e. user provided values have higher priority, -thus systematically generated values cannot override user values. - -.. code-block:: python3 - - def _generate_fit_guesses(self, user_opt, curve_data): - - opt1 = user_opt.copy() - opt1.p0.set_if_empty(p1=3) - opt1.bounds = set_if_empty(p1=(0, 10)) - opt1.add_extra_options(method="lm") - - opt2 = user_opt.copy() - opt2.p0.set_if_empty(p1=4) - - return [opt1, opt2] - -Here you created two options with different ``p1`` values. -If multiple options are returned like this, the :meth:`_run_curve_fit` method -attempts to fit with all provided options and finds the best outcome with -the minimum reduced chi-square value. -When the fit model contains some parameter that cannot be easily estimated from the -curve data, you can create multiple options with varying the initial guess to -let the fitter find the most reasonable parameters to explain the model. -This allows you to avoid analysis failure with the poor initial guesses. - -.. _curve_fit: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html - - -.. _curve_analysis_quality: - -Evaluate Fit Quality -==================== - -A subclass can override :meth:`_evaluate_quality` method to -provide an algorithm to evaluate quality of the fitting. -This method is called with the :class:`.CurveFitResult` object which contains -fit parameters and the reduced chi-squared value, -in addition to the several statistics on the fitting. -Qiskit Experiments often uses the empirical criterion chi-squared < 3 as a good fitting. - - -.. _curve_analysis_results: - -Curve Analysis Results -====================== - -Once the best fit parameters are found, the :meth:`_create_analysis_results` method is -called with the same :class:`.CurveFitResult` object. - -If you want to create an analysis result entry for the particular parameter, -you can override the analysis options ``result_parameters``. -By using :class:`ParameterRepr` representation, you can rename the parameter in the entry. - -.. code-block:: python3 - - from qiskit_experiments.curve_analysis import ParameterRepr - - def _default_options(cls) -> Options: - options = super()._default_options() - options.result_parameters = [ParameterRepr("p0", "amp", "Hz")] - - return options - -Here the first argument ``p0`` is the target parameter defined in the series definition, -``amp`` is the representation of ``p0`` in the result entry, -and ``Hz`` is the optional string for the unit of the value if available. - -Not only returning the fit parameters, you can also compute new quantities -by combining multiple fit parameters. -This can be done by overriding the :meth:`_create_analysis_results` method. - -.. code-block:: python3 - - from qiskit_experiments.framework import AnalysisResultData - - def _create_analysis_results(self, fit_data, quality, **metadata): - - outcomes = super()._create_analysis_results(fit_data, **metadata) - - p0 = fit_data.ufloat_params["p0"] - p1 = fit_data.ufloat_params["p1"] - - extra_entry = AnalysisResultData( - name="p01", - value=p0 * p1, - quality=quality, - extra=metadata, - ) - outcomes.append(extra_entry) - - return outcomes - -Note that both ``p0`` and ``p1`` are `UFloat`_ object consisting of -a nominal value and an error value which assumes the standard deviation. -Since this object natively supports error propagation, -you don't need to manually recompute the error of new value. - -.. _ufloat: https://pythonhosted.org/uncertainties/user_guide.html - - -If there is any missing feature, you can write a feature request as an issue in our -`GitHub `_. Base Classes diff --git a/qiskit_experiments/curve_analysis/base_curve_analysis.py b/qiskit_experiments/curve_analysis/base_curve_analysis.py index 21389aed95..fcc90cfbd7 100644 --- a/qiskit_experiments/curve_analysis/base_curve_analysis.py +++ b/qiskit_experiments/curve_analysis/base_curve_analysis.py @@ -158,7 +158,7 @@ def _default_options(cls) -> Options: return_data_points (bool): Set ``True`` to include in the analysis result the formatted data points given to the fitter. Default to ``False``. data_processor (Callable): A callback function to format experiment data. - This can be a :class:`~qiskit_experiments.data_processing.DataProcessor` + This can be a :class:`.DataProcessor` instance that defines the `self.__call__` method. normalization (bool) : Set ``True`` to normalize y values within range [-1, 1]. Default to ``False``. diff --git a/qiskit_experiments/curve_analysis/curve_analysis.py b/qiskit_experiments/curve_analysis/curve_analysis.py index d04d4fc4a1..bce1fc1866 100644 --- a/qiskit_experiments/curve_analysis/curve_analysis.py +++ b/qiskit_experiments/curve_analysis/curve_analysis.py @@ -41,7 +41,7 @@ class CurveAnalysis(BaseCurveAnalysis): .. rubric:: _run_data_processing This method performs data processing and returns the processed dataset. - By default, it internally calls the :class:`DataProcessor` instance from + By default, it internally calls the :class:`.DataProcessor` instance from the `data_processor` analysis option and processes the experiment data payload to create Y data with uncertainty. X data and other metadata are generated within this method by inspecting the diff --git a/qiskit_experiments/curve_analysis/curve_fit.py b/qiskit_experiments/curve_analysis/curve_fit.py index 9cceeb78bb..a8c1459232 100644 --- a/qiskit_experiments/curve_analysis/curve_fit.py +++ b/qiskit_experiments/curve_analysis/curve_fit.py @@ -219,7 +219,7 @@ def multi_curve_fit( ``xrange`` the range of xdata values used for fit. Raises: - AnalysisError: if the number of degrees of freedom of the fit is + AnalysisError: If the number of degrees of freedom of the fit is less than 1, or the curve fitting fails. .. note:: diff --git a/qiskit_experiments/curve_analysis/data_processing.py b/qiskit_experiments/curve_analysis/data_processing.py index f07e7f059e..e191d667c9 100644 --- a/qiskit_experiments/curve_analysis/data_processing.py +++ b/qiskit_experiments/curve_analysis/data_processing.py @@ -92,7 +92,7 @@ def mean_xy_data( duplicated x value entries. Raises: - QiskitError: if "ivw" method is used without providing a sigma. + QiskitError: If "ivw" method is used without providing a sigma. """ x_means = np.unique(xdata, axis=0) y_means = np.zeros(x_means.size) @@ -185,7 +185,7 @@ def multi_mean_xy_data( Tuple of (series, xdata, ydata, sigma, shots) See also: - :py:func:`~qiskit_experiments.curve_analysis.data_processing.mean_xy_data` + :func:`~.data_processing.mean_xy_data` """ series_vals = np.unique(series) diff --git a/qiskit_experiments/curve_analysis/guess.py b/qiskit_experiments/curve_analysis/guess.py index fbfc7f981e..ddf2617bba 100644 --- a/qiskit_experiments/curve_analysis/guess.py +++ b/qiskit_experiments/curve_analysis/guess.py @@ -213,7 +213,7 @@ def oscillation_exp_decay( This function first applies a Savitzky-Golay filter to y value, then run scipy peak search to extract peak positions. If ``freq_guess`` is provided, the search function will be robust to fake peaks due to noise. - This function calls :py:func:`exp_decay` function for extracted x and y values at peaks. + This function calls :func:`exp_decay` function for extracted x and y values at peaks. .. note:: diff --git a/qiskit_experiments/curve_analysis/standard_analysis/bloch_trajectory.py b/qiskit_experiments/curve_analysis/standard_analysis/bloch_trajectory.py index b0425404e6..9e4885ba9b 100644 --- a/qiskit_experiments/curve_analysis/standard_analysis/bloch_trajectory.py +++ b/qiskit_experiments/curve_analysis/standard_analysis/bloch_trajectory.py @@ -74,8 +74,8 @@ class BlochTrajectoryAnalysis(curve.CurveAnalysis): a flat-topped Gaussian, two Gaussian edges may become an offset duration. init_guess: Computed as :math:`N \sqrt{2 \pi} \sigma` where the :math:`N` is number of pulses and :math:`\sigma` is Gaussian sigma of rising and falling edges. - Note that this implicitly assumes the :py:class:`~qiskit.pulse.library\ - .parametric_pulses.GaussianSquare` pulse envelope. + Note that this implicitly assumes the :class:`~qiskit.pulse.library\ + .GaussianSquare` pulse envelope. bounds: [0, None] defpar p_x: diff --git a/qiskit_experiments/curve_analysis/standard_analysis/decay.py b/qiskit_experiments/curve_analysis/standard_analysis/decay.py index 276ac26296..1ff1daaf58 100644 --- a/qiskit_experiments/curve_analysis/standard_analysis/decay.py +++ b/qiskit_experiments/curve_analysis/standard_analysis/decay.py @@ -33,7 +33,7 @@ class DecayAnalysis(curve.CurveAnalysis): defpar \rm amp: desc: Height of the decay curve. - init_guess: Determined by :py:func:`~qiskit_experiments.curve_analysis.guess.min_height`. + init_guess: Determined by :func:`~qiskit_experiments.curve_analysis.guess.min_height`. bounds: None defpar \rm base: @@ -43,7 +43,7 @@ class DecayAnalysis(curve.CurveAnalysis): defpar \tau: desc: This is the fit parameter of main interest. - init_guess: Determined by :py:func:`~qiskit_experiments.curve_analysis.guess.exp_decay`. + init_guess: Determined by :func:`~qiskit_experiments.curve_analysis.guess.exp_decay`. bounds: None """ diff --git a/qiskit_experiments/curve_analysis/standard_analysis/oscillation.py b/qiskit_experiments/curve_analysis/standard_analysis/oscillation.py index 393b16b6f8..68155340ea 100644 --- a/qiskit_experiments/curve_analysis/standard_analysis/oscillation.py +++ b/qiskit_experiments/curve_analysis/standard_analysis/oscillation.py @@ -152,19 +152,19 @@ class DampedOscillationAnalysis(curve.CurveAnalysis): defpar \rm base: desc: Offset. Base line of the decay curve. - init_guess: Determined by :py:func:`~qiskit_experiments.curve_analysis.\ + init_guess: Determined by :func:`~qiskit_experiments.curve_analysis.\ guess.constant_sinusoidal_offset` bounds: [0, 1.5] defpar \tau: desc: Represents the rate of decay. - init_guess: Determined by :py:func:`~qiskit_experiments.curve_analysis.\ + init_guess: Determined by :func:`~qiskit_experiments.curve_analysis.\ guess.oscillation_exp_decay` bounds: [0, None] defpar \rm freq: desc: Oscillation frequency. - init_guess: Determined by :py:func:`~qiskit_experiments.curve_analysis.guess.frequency` + init_guess: Determined by :func:`~qiskit_experiments.curve_analysis.guess.frequency` bounds: [0, 10 freq] defpar \phi: diff --git a/qiskit_experiments/curve_analysis/visualization/curves.py b/qiskit_experiments/curve_analysis/visualization/curves.py index d03e8d1dcf..9985958e15 100644 --- a/qiskit_experiments/curve_analysis/visualization/curves.py +++ b/qiskit_experiments/curve_analysis/visualization/curves.py @@ -55,7 +55,7 @@ def plot_curve_fit( matplotlib.axes.Axes: the matplotlib axes containing the plot. Raises: - ImportError: if matplotlib is not installed. + ImportError: If matplotlib is not installed. """ if ax is None: ax = get_non_gui_ax() diff --git a/qiskit_experiments/data_processing/data_action.py b/qiskit_experiments/data_processing/data_action.py index a6491f2d1e..1c17388772 100644 --- a/qiskit_experiments/data_processing/data_action.py +++ b/qiskit_experiments/data_processing/data_action.py @@ -105,14 +105,14 @@ class TrainableDataAction(DataAction): .. note:: The parameters of trainable nodes computed during training should be listed - in the class method :meth:`._default_parameters`. These parameters - are initialized at construction time and serialized together with the - constructor arguments. All parameters defined in - :meth:`._default_parameters` should be assigned a `None` value to - indicate that the node has not been trained. + in the class method :meth:`.TrainableDataAction._default_parameters`. + These parameters are initialized at construction time and serialized + together with the constructor arguments. All parameters defined in + :meth:`.TrainableDataAction._default_parameters` should be assigned a + `None` value to indicate that the node has not been trained. Parameter values can be updated with the :meth:`.set_parameters` method - and refer to using the :meth:`.parameters` method. + and refer to using the :meth:`.TrainableDataAction.parameters` method. This is required to correctly JSON serialize and deserialize a trainable node with parameters set during training. """ diff --git a/qiskit_experiments/data_processing/data_processor.py b/qiskit_experiments/data_processing/data_processor.py index 69ff99862a..a606e91209 100644 --- a/qiskit_experiments/data_processing/data_processor.py +++ b/qiskit_experiments/data_processing/data_processor.py @@ -143,7 +143,7 @@ def _call_internal( Args: data: The data, typically from ExperimentData.data(...), that needs to be processed. This dict or list of dicts also contains the metadata of each experiment. - with_history: if True the history is returned otherwise it is not. + with_history: If True the history is returned otherwise it is not. history_nodes: The nodes, specified by index in the data processing chain, to include in the history. If None is given then all nodes will be included in the history. diff --git a/qiskit_experiments/data_processing/processor_library.py b/qiskit_experiments/data_processing/processor_library.py index 0cc4443bb9..2c5da80196 100644 --- a/qiskit_experiments/data_processing/processor_library.py +++ b/qiskit_experiments/data_processing/processor_library.py @@ -44,7 +44,7 @@ def get_kerneled_processor( the corresponding job. Raises: - DataProcessorError: if the wrong dimensionality reduction for kerneled data + DataProcessorError: If the wrong dimensionality reduction for kerneled data is specified. """ @@ -104,7 +104,7 @@ def get_processor(experiment_data: ExperimentData, analysis_options: Options) -> classified data if it was not given in the analysis options. Raises: - DataProcessorError: if the measurement level is not supported. + DataProcessorError: If the measurement level is not supported. """ metadata = experiment_data.metadata if "job_metadata" in metadata: diff --git a/qiskit_experiments/data_processing/sklearn_discriminators.py b/qiskit_experiments/data_processing/sklearn_discriminators.py index 49d3072004..24fca162ad 100644 --- a/qiskit_experiments/data_processing/sklearn_discriminators.py +++ b/qiskit_experiments/data_processing/sklearn_discriminators.py @@ -38,7 +38,7 @@ def __init__(self, lda: "LinearDiscriminantAnalysis"): untrained discriminator. Raises: - DataProcessorError: if SKlearn could not be imported. + DataProcessorError: If SKlearn could not be imported. """ self._lda = lda self.attributes = [ @@ -112,7 +112,7 @@ def __init__(self, qda: "QuadraticDiscriminantAnalysis"): untrained discriminator. Raises: - DataProcessorError: if SKlearn could not be imported. + DataProcessorError: If SKlearn could not be imported. """ self._qda = qda self.attributes = [ diff --git a/qiskit_experiments/framework/__init__.py b/qiskit_experiments/framework/__init__.py index db697b6b1b..e25b1db496 100644 --- a/qiskit_experiments/framework/__init__.py +++ b/qiskit_experiments/framework/__init__.py @@ -17,20 +17,15 @@ .. currentmodule:: qiskit_experiments.framework -.. note:: - - This page provides useful information for developers to implement new - experiments. - Overview ======== -The experiment framework broadly defines an experiment as the execution of 1 or more +The experiment framework broadly defines an experiment as the execution of one or more circuits on a device, and analysis of the resulting measurement data -to return 1 or more derived results. +to return one or more derived results. The interface for running an experiment is through the *Experiment* classes, -such as those contained in the :mod:`qiskit_experiments.library` +such as those contained in the :mod:`~qiskit_experiments.library`. The following pseudo-code illustrates the typical workflow in Qiskit Experiments for @@ -45,7 +40,7 @@ from qiskit_experiments.library import SomeExperiment # Initialize with desired qubits and options - exp = SomeExperiment(qubits, **options) + exp = SomeExperiment(physical_qubits, **options) # Run on a backend exp_data = exp.run(backend) @@ -78,134 +73,12 @@ for the experiment itself can be added via :meth:`ExperimentData.metadata`. -Analysis/plotting is done in a separate child thread, so it doesn't block the -main thread. Since matplotlib doesn't support GUI mode in a child threads, the -figures generated during analysis need to use a non-GUI canvas. The default is -:class:`~matplotlib.backends.backend_svg.FigureCanvasSVG`, but you can change it to a different -`non-interactive backend -`_ -by setting the ``qiskit_experiments.framework.matplotlib.default_figure_canvas`` -attribute. For example, you can set ``default_figure_canvas`` to -:class:`~matplotlib.backends.backend_agg.FigureCanvasAgg` to use the -``AGG`` backend. - -For experiments run through a compatible provider such as the -`IBMQ provider `_ -the :class:`ExperimentData` object can be saved to an online experiment -database by calling the :meth:`ExperimentData.save` method. This data can -later be retrieved by its unique :attr:`~ExperimentData.experiment_id`* string -using :meth:`ExperimentData.load`. - - -Composite Experiments -===================== - -The experiment classes :class:`ParallelExperiment` and :class:`BatchExperiment` -provide a way of combining separate component experiments for execution as a -single composite experiment. - -- A :class:`ParallelExperiment` combines all the sub experiment circuits - into circuits which run the component gates in parallel on the - respective qubits. The marginalization of measurement data for analysis - of each sub-experiment is handled automatically. To run as a parallel - experiment each sub experiment must be defined on a independent subset - of device qubits. - -- A :class:`BatchExperiment` combines the sub-experiment circuits into a - single large job that runs all the circuits for each experiment in series. - Filtering the batch result data for analysis for each sub-experiment is - handled automatically. - - -Creating Custom Experiments -=========================== - -Qiskit experiments provides a framework for creating custom experiments which -can be through Qiskit and stored in the online database when run through the IBMQ -provider. You may use this framework to release your own module of experiments -subject to the requirements of the Apache 2.0 license. - -Creating a custom experiment is done by subclassing the -:class:`BaseExperiment` and :class:`BaseAnalysis` classes. - -- The *experiment* class generates the list of circuits to be executed on the - backend and any corresponding metadata that is required for the analysis - of measurement results. - -- The *analysis* class performs post-processing of the measurement results - after execution. Analysis classes can be re-used between experiments so - you can either use one of the included analysis classes if appropriate or - implement your own. - -Experiment Subclasses -********************* - -To create an experiment subclass - -- Implement the abstract :meth:`BaseExperiment.circuits` method. - This should return a list of ``QuantumCircuit`` objects defining - the experiment payload. - -- Call the :meth:`BaseExperiment.__init__` method during the subclass - constructor with a list of physical qubits. The length of this list must - be equal to the number of qubits in each circuit and is used to map these - circuits to this layout during execution. - Arguments in the constructor can be overridden so that a subclass can - be initialized with some experiment configuration. - -Optionally the following methods can also be overridden in the subclass to -allow configuring various experiment and execution options - -- :meth:`BaseExperiment._default_experiment_options` - to set default values for configurable option parameters for the experiment. - -- :meth:`BaseExperiment._default_transpile_options` - to set custom default values for the ``qiskit.transpile`` used to - transpile the generated circuits before execution. - -- :meth:`BaseExperiment._default_run_options` - to set default backend options for running the transpiled circuits on a backend. - -- :meth:`BaseExperiment._default_analysis_options` - to set default values for configurable options for the experiments analysis class. - Note that these should generally be set by overriding the :class:`BaseAnalysis` - method :meth:`BaseAnalysis._default_options` instead of this method except in the - case where the experiment requires different defaults to the used analysis class. - -- :meth:`BaseExperiment._transpiled_circuits` - to override the default transpilation of circuits before execution. - -- :meth:`BaseExperiment._metadata` - to add any experiment metadata to the result data. - -Furthermore, some characterization and calibration experiments can be run with restless -measurements, i.e. measurements where the qubits are not reset and circuits are executed -immediately after the previous measurement. Here, the :class:`.RestlessMixin` can help -to set the appropriate run options and data processing chain. - -Analysis Subclasses -******************* - -To create an analysis subclass one only needs to implement the abstract -:meth:`BaseAnalysis._run_analysis` method. This method takes a -:class:`ExperimentData` container and kwarg analysis options. If any -kwargs are used the :meth:`BaseAnalysis._default_options` method should be -overriden to define default values for these options. - -The :meth:`BaseAnalysis._run_analysis` method should return a pair -``(results, figures)`` where ``results`` is a list of -:class:`AnalysisResultData` and ``figures`` is a list of -:class:`matplotlib.figure.Figure`. - -The :mod:`qiskit_experiments.data_processing` module contains classes for -building data processor workflows to help with advanced analysis of -experiment data. - Classes ======= Experiment Data Classes *********************** + .. autosummary:: :toctree: ../stubs/ @@ -224,6 +97,7 @@ Composite Experiment Classes **************************** + .. autosummary:: :toctree: ../stubs/ @@ -241,7 +115,7 @@ BaseAnalysis Experiment Configuration Helper Classes -******* +*************************************** .. autosummary:: :toctree: ../stubs/ @@ -250,7 +124,6 @@ BackendTiming RestlessMixin -.. _create-experiment: """ from qiskit.providers.options import Options from qiskit_experiments.framework.backend_data import BackendData diff --git a/qiskit_experiments/framework/backend_data.py b/qiskit_experiments/framework/backend_data.py index 9c242247db..f80d2962e0 100644 --- a/qiskit_experiments/framework/backend_data.py +++ b/qiskit_experiments/framework/backend_data.py @@ -246,8 +246,10 @@ def num_qubits(self): @property def is_simulator(self): """Returns True given an indication the backend is a simulator + .. note:: - Note: for `BackendV2` we sometimes cannot be sure, because it lacks + + For `BackendV2` we sometimes cannot be sure, because it lacks a `simulator` field, as was present in `BackendV1`'s configuration. We still check whether the backend inherits `FakeBackendV2`, for either of its existing implementations in Terra. diff --git a/qiskit_experiments/framework/base_analysis.py b/qiskit_experiments/framework/base_analysis.py index 08d8de0129..bc2a9a9b55 100644 --- a/qiskit_experiments/framework/base_analysis.py +++ b/qiskit_experiments/framework/base_analysis.py @@ -118,7 +118,7 @@ def run( Args: experiment_data: the experiment data to analyze. - replace_results: if True clear any existing analysis results and + replace_results: If True clear any existing analysis results and figures in the experiment data and replace with new results. See note for additional information. options: additional analysis options. See class documentation for @@ -128,7 +128,7 @@ def run( An experiment data object containing the analysis results and figures. Raises: - QiskitError: if experiment_data container is not valid for analysis. + QiskitError: If experiment_data container is not valid for analysis. .. note:: **Updating Results** @@ -230,7 +230,7 @@ def _run_analysis( is a list of any figures for the experiment. Raises: - AnalysisError: if the analysis fails. + AnalysisError: If the analysis fails. """ # NOTE: passing kwarg options to _run_analysis should be removed once pass diff --git a/qiskit_experiments/framework/base_experiment.py b/qiskit_experiments/framework/base_experiment.py index b79602db27..f261ff0066 100644 --- a/qiskit_experiments/framework/base_experiment.py +++ b/qiskit_experiments/framework/base_experiment.py @@ -51,7 +51,7 @@ def __init__( experiment_type: Optional, the experiment type string. Raises: - QiskitError: if qubits contains duplicates. + QiskitError: If qubits contains duplicates. """ # Experiment identification metadata self._type = experiment_type if experiment_type else type(self).__name__ @@ -212,7 +212,7 @@ def run( The experiment data object. Raises: - QiskitError: if experiment is run with an incompatible existing + QiskitError: If experiment is run with an incompatible existing ExperimentData container. """ @@ -377,7 +377,7 @@ def set_transpile_options(self, **fields): fields: The fields to update the options Raises: - QiskitError: if `initial_layout` is one of the fields. + QiskitError: If `initial_layout` is one of the fields. """ if "initial_layout" in fields: raise QiskitError( diff --git a/qiskit_experiments/framework/composite/composite_analysis.py b/qiskit_experiments/framework/composite/composite_analysis.py index 6336800865..2860449b11 100644 --- a/qiskit_experiments/framework/composite/composite_analysis.py +++ b/qiskit_experiments/framework/composite/composite_analysis.py @@ -144,7 +144,7 @@ def _component_experiment_data(self, experiment_data: ExperimentData) -> List[Ex component experiment. Raises: - AnalysisError: if the component experiment data cannot be extracted. + AnalysisError: If the component experiment data cannot be extracted. """ if not self._flatten_results: # Retrieve child data for component experiments for updating diff --git a/qiskit_experiments/framework/composite/composite_experiment.py b/qiskit_experiments/framework/composite/composite_experiment.py index a7c7fad109..babf505b9a 100644 --- a/qiskit_experiments/framework/composite/composite_experiment.py +++ b/qiskit_experiments/framework/composite/composite_experiment.py @@ -54,7 +54,7 @@ def __init__( supplied experiments. Raises: - QiskitError: if the provided analysis class is not a CompositeAnalysis + QiskitError: If the provided analysis class is not a CompositeAnalysis instance. """ self._experiments = experiments diff --git a/qiskit_experiments/framework/configs.py b/qiskit_experiments/framework/configs.py index 07e84c037f..d1941b50c8 100644 --- a/qiskit_experiments/framework/configs.py +++ b/qiskit_experiments/framework/configs.py @@ -48,7 +48,7 @@ def experiment(self): BaseExperiment: The experiment reconstructed from the config. Raises: - QiskitError: if the experiment class is not stored, + QiskitError: If the experiment class is not stored, was not successful deserialized, or reconstruction of the experiment fails. """ @@ -99,7 +99,7 @@ def analysis(self): BaseAnalysis: The analysis reconstructed from the config. Raises: - QiskitError: if the analysis class is not stored, + QiskitError: If the analysis class is not stored, was not successful deserialized, or reconstruction of the analysis class fails. """ diff --git a/qiskit_experiments/framework/experiment_data.py b/qiskit_experiments/framework/experiment_data.py index 477018d3d8..1ecc4a471d 100644 --- a/qiskit_experiments/framework/experiment_data.py +++ b/qiskit_experiments/framework/experiment_data.py @@ -143,16 +143,18 @@ def _repr_svg_(self): class ExperimentData: - """Qiskit Experiments Data container class. + """Experiment data container class. This class handles the following: - 1. Storing the data related to an experiment - the experiment's metadata, - the analysis results and the figures + 1. Storing the data related to an experiment: raw data, metadata, analysis results, + and figures 2. Managing jobs and adding data from jobs automatically - 3. Saving/Loading data from the result database + 3. Saving and loading data from the database service - The field `db_data` is a dataclass (`ExperimentDataclass`) containing + | + + The field ``db_data`` is a dataclass (``ExperimentDataclass``) containing all the data that can be stored in the database and loaded from it, and as such is subject to strict conventions. @@ -1854,7 +1856,7 @@ def child_data( The requested single or list of child experiment data. Raises: - QiskitError: if the index or ID of the child experiment data + QiskitError: If the index or ID of the child experiment data cannot be found. """ if index is None: diff --git a/qiskit_experiments/framework/json.py b/qiskit_experiments/framework/json.py index 6f7b091da3..01e44f8dcd 100644 --- a/qiskit_experiments/framework/json.py +++ b/qiskit_experiments/framework/json.py @@ -194,7 +194,7 @@ def _decode_and_deserialize(value: Dict, deserializer: Callable, name: Optional[ Deserialized data. Raises: - ValueError: if deserialization fails. + ValueError: If deserialization fails. """ try: with io.BytesIO() as buff: @@ -294,7 +294,7 @@ def _serialize_object(obj: Any, settings: Optional[Dict] = None, safe_float: boo Args: obj: The object to be serialized. settings: Optional, settings for reconstructing the object from kwargs. - safe_float: if True check float values for NaN, inf and -inf + safe_float: If True check float values for NaN, inf and -inf and cast to strings during serialization. Returns: diff --git a/qiskit_experiments/framework/restless_mixin.py b/qiskit_experiments/framework/restless_mixin.py index b3d23d43f2..e8a17ea4ec 100644 --- a/qiskit_experiments/framework/restless_mixin.py +++ b/qiskit_experiments/framework/restless_mixin.py @@ -31,27 +31,28 @@ class RestlessMixin: """A mixin to facilitate restless experiments. - This class defines the following methods + This class defines the following methods: - - :meth:`enable_restless` - - :meth:`_get_restless_processor` - - :meth:`_t1_check` + - :meth:`~.RestlessMixin.enable_restless` + - :meth:`~.RestlessMixin._get_restless_processor` + - :meth:`~.RestlessMixin._t1_check` A restless enabled experiment is an experiment that can be run in a restless measurement setting. In restless measurements, the qubit is not reset after each measurement. Instead, the outcome of the previous quantum non-demolition measurement is the initial state for the current circuit. Restless measurements therefore require special data processing which is provided by sub-classes of - the :code:`RestlessNode`. Restless experiments are a fast alternative for + the :class:`.RestlessNode`. Restless experiments are a fast alternative for several calibration and characterization tasks, for details see https://arxiv.org/pdf/2202.06981.pdf. - This class makes it possible for users to enter a restless run-mode without having + + This class makes it possible for users to enter a restless run mode without having to manually set all the required run options and the data processor. The required options are ``rep_delay``, ``init_qubits``, ``memory``, and ``meas_level``. Furthermore, subclasses can override the :meth:`_get_restless_processor` method if they require more complex restless data processing such as two-qubit calibrations. In addition, this class makes it easy to determine if restless measurements are supported for a given - experiments. + experiment. """ analysis: BaseAnalysis @@ -84,12 +85,12 @@ def enable_restless( be logged as restless measurements may have a large amount of noise. Raises: - DataProcessorError: if the attribute rep_delay_range is not defined for the backend. - DataProcessorError: if a data processor has already been set but + DataProcessorError: If the attribute rep_delay_range is not defined for the backend. + DataProcessorError: If a data processor has already been set but override_processor_by_restless is True. - DataProcessorError: if the experiment analysis does not have the data_processor + DataProcessorError: If the experiment analysis does not have the data_processor option. - DataProcessorError: if the rep_delay is equal to or greater than the + DataProcessorError: If the rep_delay is equal to or greater than the T1 time of one of the physical qubits in the experiment and the flag ``ignore_t1_check`` is False. """ @@ -194,7 +195,7 @@ def _t1_check(self, rep_delay: float) -> bool: True if the repetition delay is smaller than the qubit T1 times. Raises: - DataProcessorError: if the T1 values are not defined for the qubits of + DataProcessorError: If the T1 values are not defined for the qubits of the used backend. """ diff --git a/qiskit_experiments/library/__init__.py b/qiskit_experiments/library/__init__.py index 5f4b9cb000..9ba3f37f39 100644 --- a/qiskit_experiments/library/__init__.py +++ b/qiskit_experiments/library/__init__.py @@ -42,13 +42,13 @@ ~tomography.MitigatedProcessTomography ~quantum_volume.QuantumVolume -.. _characterization: +.. _characterization single qubit: -Characterization Experiments -============================ +Characterization Experiments: Single Qubit +========================================== -Experiments for characterization of qubits and quantum device properties. -Some experiments may be also used for gate calibration. +Experiments for characterization of properties of individual qubits. +Some experiments also have a calibration experiment version. .. autosummary:: :toctree: ../stubs/ @@ -60,12 +60,6 @@ ~characterization.Tphi ~characterization.QubitSpectroscopy ~characterization.EFSpectroscopy - ~characterization.CrossResonanceHamiltonian - ~characterization.EchoedCrossResonanceHamiltonian - ~characterization.RoughDrag - ~characterization.FineDrag - ~characterization.FineXDrag - ~characterization.FineSXDrag ~characterization.HalfAngle ~characterization.FineAmplitude ~characterization.FineXAmplitude @@ -76,12 +70,41 @@ ~characterization.RamseyXY ~characterization.FineFrequency ~characterization.ReadoutAngle - ~characterization.LocalReadoutError - ~characterization.CorrelatedReadoutError ~characterization.ResonatorSpectroscopy - ~characterization.ZZRamsey + ~characterization.RoughDrag + ~characterization.FineDrag + ~characterization.FineXDrag + ~characterization.FineSXDrag ~characterization.MultiStateDiscrimination +.. _characterization two qubits: + +Characterization Experiments: Two Qubits +======================================== + +Experiments for characterization of properties of two qubit interactions. + +.. autosummary:: + :toctree: ../stubs/ + :template: autosummary/experiment.rst + + ~characterization.CrossResonanceHamiltonian + ~characterization.EchoedCrossResonanceHamiltonian + ~characterization.ZZRamsey + +.. _characterization-mitigation: + +Characterization Experiments: Mitigation +======================================== + +Experiments for characterizing and mitigating readout error. + +.. autosummary:: + :toctree: ../stubs/ + :template: autosummary/experiment.rst + + ~characterization.LocalReadoutError + ~characterization.CorrelatedReadoutError .. _calibration: @@ -90,9 +113,9 @@ Experiments for pulse level calibration of quantum gates. These experiments are usually run with a -:py:class:`~qiskit_experiments.calibration_management.Calibrations` +:class:`~qiskit_experiments.calibration_management.Calibrations` class instance to manage parameters and pulse schedules. -See :doc:`/tutorials/calibrating_real_device` for example. +See :doc:`/tutorials/calibrations` for examples. .. autosummary:: :toctree: ../stubs/ diff --git a/qiskit_experiments/library/calibration/__init__.py b/qiskit_experiments/library/calibration/__init__.py index 2d7d33ed0a..e281ae839f 100644 --- a/qiskit_experiments/library/calibration/__init__.py +++ b/qiskit_experiments/library/calibration/__init__.py @@ -30,9 +30,9 @@ experiments and manage the resulting schedules and parameter values. The following experiments are designed to calibrate parameter values. Some experiments such -as :class:`QubitSpectroscopy` can both be seen as characterization and calibrations +as :class:`.QubitSpectroscopy` can both be seen as characterization and calibrations experiments. Such experiments can be found in the -:mod:`qiskit_experiments.library.characterization` +:mod:`~qiskit_experiments.library.characterization` module. .. autosummary:: @@ -56,7 +56,7 @@ Calibrations management ======================= -See :mod:`qiskit_experiments.calibration_management`. +See :mod:`.calibration_management`. """ from .rough_frequency import RoughFrequencyCal diff --git a/qiskit_experiments/library/calibration/fine_amplitude.py b/qiskit_experiments/library/calibration/fine_amplitude.py index 119787d1af..dc1dbb184d 100644 --- a/qiskit_experiments/library/calibration/fine_amplitude.py +++ b/qiskit_experiments/library/calibration/fine_amplitude.py @@ -29,16 +29,16 @@ class FineAmplitudeCal(BaseCalibrationExperiment, FineAmplitude): - r"""A calibration version of the :class:`FineAmplitude` experiment. + r"""A calibration version of the :class:`.FineAmplitude` experiment. # section: overview - :class:`FineAmplitudeCal` is a subclass of :class:`FineAmplitude`. In the calibration + :class:`FineAmplitudeCal` is a subclass of :class:`.FineAmplitude`. In the calibration experiment the circuits that are run have a custom gate with the pulse schedule attached to it through the calibrations. # section: see_also - qiskit_experiments.library.characterization.fine_amplitude.FineAmplitude + :class:`.FineAmplitude` """ @@ -54,7 +54,7 @@ def __init__( gate: Optional[Gate] = None, measurement_qubits: Sequence[int] = None, ): - """see class :class:`FineAmplitude` for details. + """See class :class:`FineAmplitude` for details. Args: physical_qubits: Sequence containing the qubit(s) for which to run @@ -164,7 +164,7 @@ class FineXAmplitudeCal(FineAmplitudeCal): """A calibration experiment to calibrate the amplitude of the X schedule. # section: see_also - qiskit_experiments.library.characterization.fine_amplitude.FineAmplitude + :class:`.FineAmplitude` """ @qubit_deprecate() @@ -217,7 +217,7 @@ class FineSXAmplitudeCal(FineAmplitudeCal): """A calibration experiment to calibrate the amplitude of the SX schedule. # section: see_also - qiskit_experiments.library.characterization.fine_amplitude.FineAmplitude + :class:`.FineAmplitude` """ @qubit_deprecate() diff --git a/qiskit_experiments/library/calibration/fine_drag_cal.py b/qiskit_experiments/library/calibration/fine_drag_cal.py index 9009f3e4ec..83d0a352bb 100644 --- a/qiskit_experiments/library/calibration/fine_drag_cal.py +++ b/qiskit_experiments/library/calibration/fine_drag_cal.py @@ -34,7 +34,7 @@ class FineDragCal(BaseCalibrationExperiment, FineDrag): """A calibration version of the fine drag experiment. # section: see_also - qiskit_experiments.library.characterization.fine_drag.FineDrag + :class:`.FineDrag` """ @qubit_deprecate() @@ -47,7 +47,7 @@ def __init__( cal_parameter_name: Optional[str] = "β", auto_update: bool = True, ): - r"""see class :class:`FineDrag` for details. + r"""See class :class:`FineDrag` for details. Note that this class implicitly assumes that the target angle of the gate is :math:`\pi` as seen from the default experiment options. @@ -153,7 +153,7 @@ class FineXDragCal(FineDragCal): """Fine drag calibration of X gate. # section: see_also - qiskit_experiments.library.characterization.fine_drag.FineDrag + :class:`.FineDrag` """ @qubit_deprecate() @@ -190,7 +190,7 @@ class FineSXDragCal(FineDragCal): """Fine drag calibration of X gate. # section: see_also - qiskit_experiments.library.characterization.fine_drag.FineDrag + :class:`.FineDrag` """ @qubit_deprecate() diff --git a/qiskit_experiments/library/calibration/fine_frequency_cal.py b/qiskit_experiments/library/calibration/fine_frequency_cal.py index 6012da5afb..f7cb8c8333 100644 --- a/qiskit_experiments/library/calibration/fine_frequency_cal.py +++ b/qiskit_experiments/library/calibration/fine_frequency_cal.py @@ -32,7 +32,7 @@ class FineFrequencyCal(BaseCalibrationExperiment, FineFrequency): """A calibration version of the fine frequency experiment. # section: see_also - :py:class:`FineFrequency` + :class:`.FineFrequency` """ @qubit_deprecate() @@ -46,7 +46,7 @@ def __init__( auto_update: bool = True, gate_name: str = "sx", ): - r"""see class :class:`FineFrequency` for details. + r"""See class :class:`.FineFrequency` for details. Note that this class implicitly assumes that the target angle of the gate is :math:`\pi/2` as seen from the default analysis options. This experiment diff --git a/qiskit_experiments/library/calibration/frequency_cal.py b/qiskit_experiments/library/calibration/frequency_cal.py index 29864b92be..f7ba2696b0 100644 --- a/qiskit_experiments/library/calibration/frequency_cal.py +++ b/qiskit_experiments/library/calibration/frequency_cal.py @@ -31,7 +31,7 @@ class FrequencyCal(BaseCalibrationExperiment, RamseyXY): """A qubit frequency calibration experiment based on the Ramsey XY experiment. # section: see_also - qiskit_experiments.library.characterization.ramsey_xy.RamseyXY + :class:`.RamseyXY` """ @qubit_deprecate() diff --git a/qiskit_experiments/library/calibration/half_angle_cal.py b/qiskit_experiments/library/calibration/half_angle_cal.py index 6d2ad28cc2..f78a88a8d1 100644 --- a/qiskit_experiments/library/calibration/half_angle_cal.py +++ b/qiskit_experiments/library/calibration/half_angle_cal.py @@ -32,7 +32,7 @@ class HalfAngleCal(BaseCalibrationExperiment, HalfAngle): """Calibration version of the half-angle experiment. # section: see_also - qiskit_experiments.library.characterization.half_angle.HalfAngle + :class:`.HalfAngle` """ @qubit_deprecate() diff --git a/qiskit_experiments/library/calibration/rough_amplitude_cal.py b/qiskit_experiments/library/calibration/rough_amplitude_cal.py index e7db08ae25..518b335d8d 100644 --- a/qiskit_experiments/library/calibration/rough_amplitude_cal.py +++ b/qiskit_experiments/library/calibration/rough_amplitude_cal.py @@ -35,7 +35,7 @@ class RoughAmplitudeCal(BaseCalibrationExperiment, Rabi): """A calibration version of the Rabi experiment. # section: see_also - qiskit_experiments.library.characterization.rabi.Rabi + :class:`.Rabi` """ @qubit_deprecate() @@ -197,7 +197,7 @@ class RoughXSXAmplitudeCal(RoughAmplitudeCal): """A rough amplitude calibration of x and sx gates. # section: see_also - qiskit_experiments.library.characterization.rabi.Rabi + :class:`.Rabi`, :class:`.RoughAmplitudeCal` """ @qubit_deprecate() @@ -231,7 +231,7 @@ class EFRoughXSXAmplitudeCal(RoughAmplitudeCal): """A rough amplitude calibration of x and sx gates on the 1<->2 transition. # section: see_also - qiskit_experiments.library.characterization.rabi.Rabi + :class:`.Rabi`, :class:`.RoughAmplitudeCal` """ __outcome__ = "rabi_rate_12" diff --git a/qiskit_experiments/library/calibration/rough_drag_cal.py b/qiskit_experiments/library/calibration/rough_drag_cal.py index 3d3f277412..aa95365056 100644 --- a/qiskit_experiments/library/calibration/rough_drag_cal.py +++ b/qiskit_experiments/library/calibration/rough_drag_cal.py @@ -31,7 +31,11 @@ class RoughDragCal(BaseCalibrationExperiment, RoughDrag): """A calibration version of the Drag experiment. # section: see_also - qiskit_experiments.library.characterization.rough_drag.RoughDrag + :class:`.RoughDrag` + + # section: manual + :ref:`DRAG Calibration` + """ @qubit_deprecate() diff --git a/qiskit_experiments/library/calibration/rough_frequency.py b/qiskit_experiments/library/calibration/rough_frequency.py index 1719f10854..4902b02e49 100644 --- a/qiskit_experiments/library/calibration/rough_frequency.py +++ b/qiskit_experiments/library/calibration/rough_frequency.py @@ -31,7 +31,7 @@ class RoughFrequencyCal(BaseCalibrationExperiment, QubitSpectroscopy): """A calibration experiment that runs QubitSpectroscopy. # section: see_also - qiskit_experiments.library.characterization.qubit_spectroscopy.QubitSpectroscopy + :class:`.QubitSpectroscopy` """ @qubit_deprecate() @@ -58,7 +58,7 @@ def __init__( qubit frequency in the backend. Raises: - QiskitError: if there are less than three frequency shifts. + QiskitError: If there are less than three frequency shifts. """ super().__init__( @@ -80,7 +80,7 @@ class RoughEFFrequencyCal(BaseCalibrationExperiment, EFSpectroscopy): """A calibration experiment that runs QubitSpectroscopy. # section: see_also - qiskit_experiments.library.characterization.ef_spectroscopy.EFSpectroscopy + :class:`.EFSpectroscopy` """ __updater__ = Frequency @@ -107,7 +107,7 @@ def __init__( qubit frequency in the backend. Raises: - QiskitError: if there are less than three frequency shifts. + QiskitError: If there are less than three frequency shifts. """ super().__init__( diff --git a/qiskit_experiments/library/characterization/analysis/correlated_readout_error_analysis.py b/qiskit_experiments/library/characterization/analysis/correlated_readout_error_analysis.py index 6d33e57031..6e9f31b239 100644 --- a/qiskit_experiments/library/characterization/analysis/correlated_readout_error_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/correlated_readout_error_analysis.py @@ -22,8 +22,7 @@ class CorrelatedReadoutErrorAnalysis(BaseAnalysis): - r""" - Correlated readout error characterization analysis + r"""An analysis to characterize correlated readout error. # section: overview @@ -104,9 +103,9 @@ def _assignment_matrix_visualization( The generated plot of the assignment matrix Raises: - QiskitError: if _cal_matrices was not set. + QiskitError: If _cal_matrices was not set. - ImportError: if matplotlib was not installed. + ImportError: If matplotlib was not installed. """ diff --git a/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py b/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py index 62831f3a8e..1fd248fcf5 100644 --- a/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/cr_hamiltonian_analysis.py @@ -43,8 +43,7 @@ class CrossResonanceHamiltonianAnalysis(curve.CompositeCurveAnalysis): for the projection axis :math:`\beta` with the control qubit state :math:`|j\rangle`. # section: see_also - - qiskit_experiments.curve_analysis.standard_analysis.BlochTrajectoryAnalysis + :class:`.BlochTrajectoryAnalysis` """ diff --git a/qiskit_experiments/library/characterization/analysis/t1_analysis.py b/qiskit_experiments/library/characterization/analysis/t1_analysis.py index 91a69cc2a5..c1584bfe6f 100644 --- a/qiskit_experiments/library/characterization/analysis/t1_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/t1_analysis.py @@ -26,7 +26,7 @@ class T1Analysis(curve.DecayAnalysis): r"""A class to analyze T1 experiments. # section: see_also - qiskit_experiments.curve_analysis.standard_analysis.decay.DecayAnalysis + :class:`.DecayAnalysis` """ @@ -77,7 +77,7 @@ class T1KerneledAnalysis(curve.DecayAnalysis): r"""A class to analyze T1 experiments with kerneled data. # section: see_also - qiskit_experiments.curve_analysis.standard_analysis.decay.DecayAnalysis + :class:`.DecayAnalysis` """ diff --git a/qiskit_experiments/library/characterization/analysis/t2hahn_analysis.py b/qiskit_experiments/library/characterization/analysis/t2hahn_analysis.py index fa1f3c958e..b9f13b251b 100644 --- a/qiskit_experiments/library/characterization/analysis/t2hahn_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/t2hahn_analysis.py @@ -26,7 +26,7 @@ class T2HahnAnalysis(curve.DecayAnalysis): r"""A class to analyze T2Hahn experiments. # section: see_also - qiskit_experiments.curve_analysis.standard_analysis.decay.DecayAnalysis + :class:`.DecayAnalysis` """ diff --git a/qiskit_experiments/library/characterization/analysis/t2ramsey_analysis.py b/qiskit_experiments/library/characterization/analysis/t2ramsey_analysis.py index d33d60a478..5375c3a59c 100644 --- a/qiskit_experiments/library/characterization/analysis/t2ramsey_analysis.py +++ b/qiskit_experiments/library/characterization/analysis/t2ramsey_analysis.py @@ -21,7 +21,7 @@ class T2RamseyAnalysis(curve.DampedOscillationAnalysis): """T2 Ramsey result analysis class. # section: see_also - qiskit_experiments.curve_analysis.standard_analysis.oscillation.DampedOscillationAnalysis + :class:`.DampedOscillationAnalysis` """ diff --git a/qiskit_experiments/library/characterization/correlated_readout_error.py b/qiskit_experiments/library/characterization/correlated_readout_error.py index 6ec7e6ff83..d9ed961803 100644 --- a/qiskit_experiments/library/characterization/correlated_readout_error.py +++ b/qiskit_experiments/library/characterization/correlated_readout_error.py @@ -40,7 +40,8 @@ def calibration_circuit(num_qubits: int, state_label: str) -> QuantumCircuit: class CorrelatedReadoutError(BaseExperiment): - r"""Class for correlated readout error characterization experiment + r"""Correlated readout error characterization experiment. + # section: overview This class constructs the a :class:`~qiskit.result.CorrelatedReadoutMitigator` containing the full assignment matrix :math:`A` characterizing the readout error @@ -71,7 +72,7 @@ class CorrelatedReadoutError(BaseExperiment): documentation for additional information on correlated readout error experiment analysis. # section: analysis_ref - :py:class:`CorrelatedReadoutErrorAnalysis` + :class:`CorrelatedReadoutErrorAnalysis` # section: reference .. ref_arxiv:: 1 2006.14044 @@ -92,7 +93,7 @@ def __init__( backend: Optional, the backend to characterize. Raises: - QiskitError: if args are not valid. + QiskitError: If args are not valid. """ if physical_qubits is None: if backend is None: diff --git a/qiskit_experiments/library/characterization/cr_hamiltonian.py b/qiskit_experiments/library/characterization/cr_hamiltonian.py index 29864a766f..d46e84232b 100644 --- a/qiskit_experiments/library/characterization/cr_hamiltonian.py +++ b/qiskit_experiments/library/characterization/cr_hamiltonian.py @@ -95,11 +95,11 @@ class CrossResonanceHamiltonian(BaseExperiment): Here ``cr_tone`` is implemented by a single cross resonance tone driving the control qubit at the frequency of the target qubit. The pulse envelope might be a flat-topped Gaussian implemented by the parametric pulse - :py:class:`~qiskit.pulse.library.parametric_pulses.GaussianSquare`. + :class:`~qiskit.pulse.library.parametric_pulses.GaussianSquare`. This experiment scans the total duration of the cross resonance pulse including the pulse ramps at both edges. The pulse shape is defined by the - :py:class:`~qiskit.pulse.library.parametric_pulses.GaussianSquare`, and + :class:`~qiskit.pulse.library.parametric_pulses.GaussianSquare`, and an effective length of these Gaussian ramps with :math:`\sigma` can be computed by .. math:: @@ -117,12 +117,12 @@ class CrossResonanceHamiltonian(BaseExperiment): interaction rates. # section: analysis_ref - :py:class:`CrossResonanceHamiltonianAnalysis` + :class:`CrossResonanceHamiltonianAnalysis` # section: reference .. ref_arxiv:: 1 1603.04821 - # section: tutorial + # section: manual .. ref_website:: Qiskit Textbook 6.7, https://qiskit.org/textbook/ch-quantum-hardware/hamiltonian-tomography.html """ @@ -505,7 +505,7 @@ class EchoedCrossResonanceHamiltonian(CrossResonanceHamiltonian): # section: overview - This is a variant of :py:class:`CrossResonanceHamiltonian` + This is a variant of :class:`CrossResonanceHamiltonian` for which the experiment framework is identical but the cross resonance operation is realized as an echoed sequence to remove unwanted single qubit rotations. The cross resonance @@ -519,7 +519,7 @@ class EchoedCrossResonanceHamiltonian(CrossResonanceHamiltonian): q_1: ┤1 ├┤ Rz(π) ├┤1 ├┤ Rz(-π) ├ └────────────────────┘└───────┘└────────────────────┘└────────┘ - Here two ``cr_tone``s are applied where the latter one is with the + Here two ``cr_tone`` are applied, where the latter one is with the control qubit state flipped and with a phase flip of the target qubit frame. This operation is equivalent to applying the ``cr_tone`` with a negative amplitude. The Hamiltonian for this decomposition has no IX and ZI interactions, diff --git a/qiskit_experiments/library/characterization/drag.py b/qiskit_experiments/library/characterization/drag.py index 8c190f22bf..be34588f24 100644 --- a/qiskit_experiments/library/characterization/drag.py +++ b/qiskit_experiments/library/characterization/drag.py @@ -63,15 +63,15 @@ class RoughDrag(BaseExperiment, RestlessMixin): Note that the analysis class requires this experiment to run with three repetition numbers. # section: analysis_ref - :py:class:`DragCalAnalysis` + :class:`DragCalAnalysis` # section: reference .. ref_arxiv:: 1 1011.1949 .. ref_arxiv:: 2 0901.0534 .. ref_arxiv:: 3 1509.05470 - # section: tutorial - :doc:`/tutorials/calibrating_real_device` + # section: manual + :ref:`DRAG Calibration` """ @@ -113,7 +113,7 @@ def __init__( backend: Optional, the backend to run the experiment on. Raises: - QiskitError: if the schedule does not have a free parameter. + QiskitError: If the schedule does not have a free parameter. """ # Create analysis in finalize to reflect user change to reps @@ -141,13 +141,13 @@ def circuits(self) -> List[QuantumCircuit]: circuits: The circuits that will run the Drag calibration. Raises: - QiskitError: if the number of different repetition series is not three. + QiskitError: If the number of different repetition series is not three. """ schedule = self.experiment_options.schedule beta = next(iter(schedule.parameters)) - # Note: if the pulse has a reserved name, e.g. x, which does not have parameters + # Note: If the pulse has a reserved name, e.g. x, which does not have parameters # then we cannot directly call the gate x and attach a schedule to it. Doing so # would results in QObj errors. drag_gate = Gate(name="Drag(" + schedule.name + ")", num_qubits=1, params=[beta]) diff --git a/qiskit_experiments/library/characterization/ef_spectroscopy.py b/qiskit_experiments/library/characterization/ef_spectroscopy.py index 4a36684de5..ab5795269d 100644 --- a/qiskit_experiments/library/characterization/ef_spectroscopy.py +++ b/qiskit_experiments/library/characterization/ef_spectroscopy.py @@ -23,7 +23,7 @@ class EFSpectroscopy(QubitSpectroscopy): - """Class that runs spectroscopy on the e-f transition by scanning the frequency. + """A spectroscopy experiment to obtain a frequency sweep of the qubit's e-f transition. # section: overview The circuits produced by spectroscopy, i.e. diff --git a/qiskit_experiments/library/characterization/fine_amplitude.py b/qiskit_experiments/library/characterization/fine_amplitude.py index 4580392771..dd25cd0347 100644 --- a/qiskit_experiments/library/characterization/fine_amplitude.py +++ b/qiskit_experiments/library/characterization/fine_amplitude.py @@ -27,11 +27,11 @@ class FineAmplitude(BaseExperiment, RestlessMixin): - r"""Error amplifying fine amplitude calibration experiment. + r"""An experiment to determine the optimal pulse amplitude by amplifying gate errors. # section: overview - The :class:`FineAmplitude` calibration experiment repeats N times a gate with a pulse + The :class:`FineAmplitude` experiment repeats N times a gate with a pulse to amplify the under-/over-rotations in the gate to determine the optimal amplitude. The circuits are therefore of the form: @@ -46,7 +46,7 @@ class FineAmplitude(BaseExperiment, RestlessMixin): Here, Gate is the name of the gate which will be repeated. The user can optionally add a square-root of X pulse before the gates are repeated. This square-root of X pulse allows the analysis to differentiate between over rotations and under rotations in the case of - pi-pulses. Importantly, the resulting data is analyzed by a fit to a cosine function in + :math:`\pi`-pulses. Importantly, the resulting data is analyzed by a fit to a cosine function in which we try to determine the over/under rotation given an intended rotation angle per gate which must also be specified by the user. @@ -54,7 +54,7 @@ class FineAmplitude(BaseExperiment, RestlessMixin): the equator of the Bloch sphere. This is why users should insert a square-root of X pulse before running calibrations for :math:`\pm\pi` rotations. When all data points are close to the equator, it is difficult for a fitter to infer the overall scale of the error. When - calibrating a :math:`pi` rotation, one can use ``add_xp_circuit = True`` to insert one + calibrating a :math:`\pi` rotation, one can use ``add_xp_circuit = True`` to insert one circuit that puts the qubit in the excited state to set the scale for the other circuits. Furthermore, when running calibrations for :math:`\pm\pi/2` rotations users are advised to use an odd number of repetitions, e.g. [1, 2, 3, 5, 7, ...] to ensure that the ideal @@ -72,22 +72,21 @@ class FineAmplitude(BaseExperiment, RestlessMixin): amp_cal = FineAmplitude([qubit], SXGate()) amp_cal.set_experiment_options( angle_per_gate=np.pi/2, - add_xp_circuit=False, - add_sx=False + phase_offset=np.pi ) amp_cal.run(backend) Note that there are subclasses of :class:`FineAmplitude` such as :class:`FineSXAmplitude` - that set the appropriate options by default. + that set the appropriate options for specific gates by default. # section: analysis_ref - :py:class:`FineAmplitudeAnalysis` + :class:`FineAmplitudeAnalysis` # section: reference .. ref_arxiv:: 1 1504.06597 - # section: tutorial - :doc:`/tutorials/fine_calibrations` + # section: manual + :ref:`fine-amplitude-cal` """ @@ -346,10 +345,10 @@ class FineZXAmplitude(FineAmplitude): # section: example - To run this experiment the user will have to provide the instruction schedule + To run this experiment, the user will have to provide the instruction schedule map in the transpile options that contains the schedule for the experiment. - ..code-block:: python + .. code-block:: python qubits = (1, 2) inst_map = InstructionScheduleMap() diff --git a/qiskit_experiments/library/characterization/fine_drag.py b/qiskit_experiments/library/characterization/fine_drag.py index 295a0d74db..0bc93dd5e2 100644 --- a/qiskit_experiments/library/characterization/fine_drag.py +++ b/qiskit_experiments/library/characterization/fine_drag.py @@ -26,11 +26,11 @@ class FineDrag(BaseExperiment, RestlessMixin): - r"""Fine DRAG experiment. + r"""An experiment that performs fine characterizations of DRAG pulse coefficients. # section: overview - :class:`FineDrag` runs fine DRAG characterization experiments (see :class:`DragCal` + :class:`FineDrag` runs fine DRAG characterization experiments (see :class:`.DragCal` for the definition of DRAG pulses). Fine DRAG proceeds by iterating the gate sequence Rp - Rm where Rp is a rotation around an axis and Rm is the same rotation but in the opposite direction and is implemented by the gates Rz - Rp - Rz where the Rz gates @@ -44,7 +44,7 @@ class FineDrag(BaseExperiment, RestlessMixin): meas: 1/══════════════════════════════════════════════════════╩═ 0 - Here, Pre and Post designate gates that may be pre-appended and and post-appended, + Here, "Pre" and "Post" designate gates that may be pre-appended and and post-appended, respectively, to the repeated sequence of Rp - Rz - Rp - Rz gates. When calibrating a pulse with a target rotation angle of π the Pre and Post gates are Id and RYGate(π/2), respectively. When calibrating a pulse with a target rotation angle of π/2 the Pre and @@ -126,10 +126,10 @@ class FineDrag(BaseExperiment, RestlessMixin): This is the correction formula in the FineDRAG Updater. # section: analysis_ref - :py:class:`~qiskit_experiments.curve_analysis.ErrorAmplificationAnalysis` + :class:`.ErrorAmplificationAnalysis` # section: see_also - qiskit_experiments.library.calibration.drag.DragCal + :class:`.DragCal` # section: reference .. ref_arxiv:: 1 1612.00858 @@ -248,7 +248,7 @@ class FineXDrag(FineDrag): """Class to fine characterize the DRAG parameter of an X gate. # section: see_also - qiskit_experiments.library.characterization.fine_drag.FineDrag + :class:`.FineDrag` """ @qubit_deprecate() @@ -278,7 +278,7 @@ class FineSXDrag(FineDrag): """Class to fine characterize the DRAG parameter of an SX gate. # section: see_also - qiskit_experiments.library.characterization.fine_drag.FineDrag + :class:`.FineDrag` """ @qubit_deprecate() diff --git a/qiskit_experiments/library/characterization/fine_frequency.py b/qiskit_experiments/library/characterization/fine_frequency.py index fd022d0846..b970d7c49e 100644 --- a/qiskit_experiments/library/characterization/fine_frequency.py +++ b/qiskit_experiments/library/characterization/fine_frequency.py @@ -48,7 +48,7 @@ class FineFrequency(BaseExperiment): meas: 1/══════════════════════════════════════════════╩═ 0 # section: analysis_ref - :py:class:`~qiskit_experiments.curve_analysis.ErrorAmplificationAnalysis` + :class:`~qiskit_experiments.curve_analysis.ErrorAmplificationAnalysis` """ @qubit_deprecate() diff --git a/qiskit_experiments/library/characterization/half_angle.py b/qiskit_experiments/library/characterization/half_angle.py index 98f82f393a..7a3b84bf8b 100644 --- a/qiskit_experiments/library/characterization/half_angle.py +++ b/qiskit_experiments/library/characterization/half_angle.py @@ -49,7 +49,7 @@ class HalfAngle(BaseExperiment): be different from the :math:`\pi` pulse. # section: analysis_ref - :py:class:`.ErrorAmplificationAnalysis` + :class:`.ErrorAmplificationAnalysis` # section: reference .. ref_arxiv:: 1 1504.06597 diff --git a/qiskit_experiments/library/characterization/local_readout_error.py b/qiskit_experiments/library/characterization/local_readout_error.py index ce109b8e7a..be875e1995 100644 --- a/qiskit_experiments/library/characterization/local_readout_error.py +++ b/qiskit_experiments/library/characterization/local_readout_error.py @@ -25,10 +25,11 @@ class LocalReadoutError(BaseExperiment): - r"""Class for local readout error characterization experiment + r"""An experiment for characterizing local readout error. + # section: overview - This class constructs the a :class:`~qiskit.result.LocalReadoutMitigator` containing sequence + This class constructs a :class:`~qiskit.result.LocalReadoutMitigator` containing a sequence of assignment matrices :math:`A` characterizing the readout error for the given qubits from the experiment results. The full assignment matrix is accessible via the :meth:`~qiskit.result.LocalReadoutMitigator.assignment_matrix` method. @@ -60,7 +61,7 @@ class LocalReadoutError(BaseExperiment): documentation for additional information on local readout error experiment analysis. # section: analysis_ref - :py:class:`LocalReadoutErrorAnalysis` + :class:`LocalReadoutErrorAnalysis` # section: reference .. ref_arxiv:: 1 2006.14044 @@ -81,7 +82,7 @@ def __init__( backend: Optional, the backend to characterize. Raises: - QiskitError: if args are not valid. + QiskitError: If args are not valid. """ if physical_qubits is None: if backend is None: diff --git a/qiskit_experiments/library/characterization/multi_state_discrimination.py b/qiskit_experiments/library/characterization/multi_state_discrimination.py index 90634f75a2..9950e92914 100644 --- a/qiskit_experiments/library/characterization/multi_state_discrimination.py +++ b/qiskit_experiments/library/characterization/multi_state_discrimination.py @@ -52,7 +52,7 @@ class MultiStateDiscrimination(BaseExperiment): meas: ═══════════════════════╩═ # section: analysis_ref - :py:class:`MultiStateDiscriminationAnalysis` + :class:`MultiStateDiscriminationAnalysis` # section: reference `Qiskit Textbook `_ for the pulse level programming of a Rabi experiment. # section: analysis_ref - :py:class:`~qiskit_experiments.curve_analysis.OscillationAnalysis` + :class:`~qiskit_experiments.curve_analysis.OscillationAnalysis` """ __gate_name__ = "Rabi" diff --git a/qiskit_experiments/library/characterization/ramsey_xy.py b/qiskit_experiments/library/characterization/ramsey_xy.py index 0571b6e9f3..db5a390f79 100644 --- a/qiskit_experiments/library/characterization/ramsey_xy.py +++ b/qiskit_experiments/library/characterization/ramsey_xy.py @@ -27,7 +27,7 @@ class RamseyXY(BaseExperiment, RestlessMixin): - r"""Ramsey XY experiment to measure the frequency of a qubit. + r"""A sign-sensitive experiment to measure the frequency of a qubit. # section: overview @@ -82,7 +82,7 @@ class RamseyXY(BaseExperiment, RestlessMixin): circuit above it appears as the delay-dependent angle θ(τ). # section: analysis_ref - :py:class:`RamseyXYAnalysis` + :class:`RamseyXYAnalysis` """ @classmethod diff --git a/qiskit_experiments/library/characterization/readout_angle.py b/qiskit_experiments/library/characterization/readout_angle.py index 32c0ca5b01..860a7bbd43 100644 --- a/qiskit_experiments/library/characterization/readout_angle.py +++ b/qiskit_experiments/library/characterization/readout_angle.py @@ -28,7 +28,7 @@ class ReadoutAngle(BaseExperiment): r""" - Readout angle experiment class + An experiment to measure the angle between ground and excited state IQ clusters. # section: overview @@ -40,17 +40,17 @@ class ReadoutAngle(BaseExperiment): Each experiment consists of the following steps: 1. Circuits generation: two circuits, the first circuit measures the qubit - in the ground state, the second circuit sets the qubit in the excited state - and measures it. Measurements are in level 1 (kerneled). - + in the ground state, the second circuit sets the qubit in the excited state + and measures it. Measurements are in level 1 (kerneled). 2. Backend execution: actually running the circuits on the device - (or a simulator that supports level 1 measurements). The backend returns - the cluster centers of the ground and excited states. - + (or a simulator that supports level 1 measurements). The backend returns + the cluster centers of the ground and excited states. 3. Analysis of results: return the average of the angles of the two centers. + | + # section: analysis_ref - :py:class:`ReadoutAngleAnalysis` + :class:`ReadoutAngleAnalysis` """ @classmethod diff --git a/qiskit_experiments/library/characterization/resonator_spectroscopy.py b/qiskit_experiments/library/characterization/resonator_spectroscopy.py index 35322e5d14..8f863e9e93 100644 --- a/qiskit_experiments/library/characterization/resonator_spectroscopy.py +++ b/qiskit_experiments/library/characterization/resonator_spectroscopy.py @@ -28,7 +28,7 @@ class ResonatorSpectroscopy(Spectroscopy): - """Perform spectroscopy on the readout resonator. + """An experiment to perform frequency spectroscopy of the readout resonator. # section: overview This experiment does spectroscopy on the readout resonator. It applies the following @@ -96,10 +96,10 @@ class ResonatorSpectroscopy(Spectroscopy): as well as the kappa, i.e. the line width, of the resonator. # section: analysis_ref - :py:class:`ResonatorSpectroscopyAnalysis` + :class:`ResonatorSpectroscopyAnalysis` # section: see_also - qiskit_experiments.library.characterization.qubit_spectroscopy.QubitSpectroscopy + :class:`.QubitSpectroscopy` """ @classmethod @@ -177,7 +177,7 @@ def __init__( experiment_options: Key word arguments used to set the experiment options. Raises: - QiskitError: if no frequencies are given and absolute frequencies are desired and + QiskitError: If no frequencies are given and absolute frequencies are desired and no backend is given. """ analysis = ResonatorSpectroscopyAnalysis() diff --git a/qiskit_experiments/library/characterization/spectroscopy.py b/qiskit_experiments/library/characterization/spectroscopy.py index 2eae5f5b73..21a9bf6f7c 100644 --- a/qiskit_experiments/library/characterization/spectroscopy.py +++ b/qiskit_experiments/library/characterization/spectroscopy.py @@ -84,7 +84,7 @@ def __init__( experiment_options: Key word arguments used to set the experiment options. Raises: - QiskitError: if there are less than three frequency shifts. + QiskitError: If there are less than three frequency shifts. """ analysis = analysis or ResonanceAnalysis() diff --git a/qiskit_experiments/library/characterization/t1.py b/qiskit_experiments/library/characterization/t1.py index 8e02193b8d..3deb734982 100644 --- a/qiskit_experiments/library/characterization/t1.py +++ b/qiskit_experiments/library/characterization/t1.py @@ -24,26 +24,22 @@ class T1(BaseExperiment): - r""" - T1 experiment class + r"""An experiment to measure the qubit relaxation time. # section: overview - Design and analyze experiments for estimating T\ :sub:`1` relaxation time of the qubit. + This experiment estimates the :math:`T_1` relaxation time of the qubit by + generating a series of circuits that excite the qubit then wait for different + intervals before measurement. The resulting data of excited population versus + wait time is fitted to an exponential curve to obtain an estimate for + :math:`T_1`. - Each experiment consists of the following steps: - - 1. Circuits generation: the circuits set the qubit in the excited state, - wait different time intervals, then measure the qubit. - - 2. Backend execution: actually running the circuits on the device - (or simulator). + # section: analysis_ref + :class:`.T1Analysis` - 3. Analysis of results: deduction of T\ :sub:`1`\ , based on the outcomes, - by fitting to an exponential curve. + # section: manual + :doc:`/manuals/characterization/t1` - # section: analysis_ref - :py:class:`T1Analysis` """ @classmethod @@ -65,16 +61,16 @@ def __init__( backend: Optional[Backend] = None, ): """ - Initialize the T1 experiment class + Initialize the T1 experiment class. Args: physical_qubits: a single-element sequence containing the qubit whose T1 is to be - estimated - delays: delay times of the experiments in seconds + estimated. + delays: Delay times of the experiments in seconds. backend: Optional, the backend to run the experiment on. Raises: - ValueError: if the number of delays is smaller than 3 + ValueError: If the number of delays is smaller than 3 """ # Initialize base experiment super().__init__(physical_qubits, analysis=T1Analysis(), backend=backend) diff --git a/qiskit_experiments/library/characterization/t2hahn.py b/qiskit_experiments/library/characterization/t2hahn.py index 5556a03ba1..a86f2095b0 100644 --- a/qiskit_experiments/library/characterization/t2hahn.py +++ b/qiskit_experiments/library/characterization/t2hahn.py @@ -26,15 +26,16 @@ class T2Hahn(BaseExperiment): - r"""T2 Hahn Echo Experiment. + r"""An experiment to measure the dephasing time insensitive to inhomogeneous + broadening using Hahn echos. # section: overview - This experiment is used to estimate T2 noise of a single qubit. - - See `Qiskit Textbook `_ for a more detailed explanation on - these properties. + This experiment is used to estimate the :math:`T_2` time of a single qubit. + :math:`T_2` is the dephasing time or the transverse relaxation time of the qubit + on the Bloch sphere as a result of both energy relaxation and pure dephasing in + the transverse plane. Unlike :math:`T_2^*`, which is measured by + :class:`.T2Ramsey`, :math:`T_2` is insensitive to inhomogenous broadening. This experiment consists of a series of circuits of the form @@ -53,11 +54,14 @@ class T2Hahn(BaseExperiment): the delay in the metadata is the total delay which is delay * (num_echoes +1) The circuits are run on the device or on a simulator backend. - # section: tutorial - :doc:`/tutorials/t2hahn_characterization` + # section: manual + :doc:`/manuals/characterization/t2hahn` # section: analysis_ref - :py:class:`T2HahnAnalysis` + :class:`T2HahnAnalysis` + + # section: reference + .. ref_arxiv:: 1 1904.06560 """ @classmethod diff --git a/qiskit_experiments/library/characterization/t2ramsey.py b/qiskit_experiments/library/characterization/t2ramsey.py index 68606294dd..75c5ae635c 100644 --- a/qiskit_experiments/library/characterization/t2ramsey.py +++ b/qiskit_experiments/library/characterization/t2ramsey.py @@ -27,16 +27,17 @@ class T2Ramsey(BaseExperiment): - r"""T2 Ramsey Experiment. + r"""An experiment to measure the Ramsey frequency and the qubit dephasing time + sensitive to inhomogeneous broadening. # section: overview This experiment is used to estimate two properties for a single qubit: - T2* and Ramsey frequency. - - See `Qiskit Textbook `_ for a more detailed explanation on - these properties. + :math:`T_2^*` and Ramsey frequency. :math:`T_2^*` is the dephasing time + or the transverse relaxation time of the qubit on the Bloch sphere as a result + of both energy relaxation and pure dephasing in the transverse plane. Unlike + :math:`T_2`, which is measured by :class:`.T2Hahn`, :math:`T_2^*` is sensitive + to inhomogenous broadening. This experiment consists of a series of circuits of the form @@ -53,11 +54,14 @@ class T2Ramsey(BaseExperiment): and the delays are specified by the user. The circuits are run on the device or on a simulator backend. - # section: tutorial - :doc:`/tutorials/t2ramsey_characterization` + # section: manual + :doc:`/manuals/characterization/t2ramsey` # section: analysis_ref - :py:class:`T2RamseyAnalysis` + :class:`T2RamseyAnalysis` + + # section: reference + .. ref_arxiv:: 1 1904.06560 """ @classmethod diff --git a/qiskit_experiments/library/characterization/tphi.py b/qiskit_experiments/library/characterization/tphi.py index 58ee9e60fd..9d38ab64cb 100644 --- a/qiskit_experiments/library/characterization/tphi.py +++ b/qiskit_experiments/library/characterization/tphi.py @@ -29,33 +29,33 @@ class Tphi(BatchExperiment): - r"""Tphi Experiment Class + r"""An experiment to measure the qubit dephasing rate in the :math:`x - y` plane. # section: overview - :math:`T_\varphi`, or :math:`1/\Gamma_\varphi`, is the pure dephasing time in - the :math:`x - y` plane of the Bloch sphere. We compute :math:`\Gamma_\varphi` - by computing :math:`\Gamma_2`, the transverse relaxation rate, and subtracting - :math:`\Gamma_1`, the longitudinal relaxation rate. It follows that + :math:`T_\varphi`, or :math:`1/\Gamma_\varphi`, is the pure dephasing time in + the :math:`x - y` plane of the Bloch sphere. We compute :math:`\Gamma_\varphi` + by computing :math:`\Gamma_2`, the transverse relaxation rate, and subtracting + :math:`\Gamma_1`, the longitudinal relaxation rate. It follows that - :math:`1/T_\varphi = 1/T_2 - 1/2T_1`. + :math:`1/T_\varphi = 1/T_2 - 1/2T_1`. - The transverse relaxation rate can be estimated by either :math:`T_2` or - :math:`T_2^*` experiments. In superconducting qubits, :math:`T_2^*` tends to be - significantly smaller than :math:`T_1`, so :math:`T_2` is usually used. + The transverse relaxation rate can be estimated by either :math:`T_2` or + :math:`T_2^*` experiments. In superconducting qubits, :math:`T_2^*` tends to be + significantly smaller than :math:`T_1`, so :math:`T_2` is usually used. - .. note:: - In 0.5.0, this experiment changed from using :math:`T_2^*` as the default - to :math:`T_2`. + .. note:: + In 0.5.0, this experiment changed from using :math:`T_2^*` as the default + to :math:`T_2`. # section: analysis_ref - :py:class:`TphiAnalysis` + :class:`.TPhiAnalysis` # section: reference .. ref_arxiv:: 1 1904.06560 - # section: tutorial - :doc:`/tutorials/tphi_characterization` + # section: manual + :doc:`/manuals/characterization/tphi` # section: see_also qiskit_experiments.library.characterization.t1 diff --git a/qiskit_experiments/library/characterization/zz_ramsey.py b/qiskit_experiments/library/characterization/zz_ramsey.py index 5042263279..0554153cd0 100644 --- a/qiskit_experiments/library/characterization/zz_ramsey.py +++ b/qiskit_experiments/library/characterization/zz_ramsey.py @@ -27,7 +27,7 @@ class ZZRamsey(BaseExperiment): - r"""Experiment to characterize the static :math:`ZZ` interaction for a qubit pair + r"""An experiment to characterize the static :math:`ZZ` interaction for a qubit pair. # section: overview @@ -124,7 +124,7 @@ class ZZRamsey(BaseExperiment): # section: analysis_ref - :py:class:`ZZRamseyAnalysis` + :class:`ZZRamseyAnalysis` """ @deprecate_arguments({"qubits": "physical_qubits"}, "0.5") diff --git a/qiskit_experiments/library/quantum_volume/qv_experiment.py b/qiskit_experiments/library/quantum_volume/qv_experiment.py index e56a3b8df2..37ed9a3971 100644 --- a/qiskit_experiments/library/quantum_volume/qv_experiment.py +++ b/qiskit_experiments/library/quantum_volume/qv_experiment.py @@ -34,7 +34,7 @@ class QuantumVolume(BaseExperiment): - """Quantum Volume Experiment class. + """An experiment to measure the largest random square circuit that can be run on a processor. # section: overview Quantum Volume (QV) is a single-number metric that can be measured using a concrete protocol @@ -63,7 +63,7 @@ class QuantumVolume(BaseExperiment): information on QV experiment analysis. # section: analysis_ref - :py:class:`QuantumVolumeAnalysis` + :class:`QuantumVolumeAnalysis` # section: reference .. ref_arxiv:: 1 1811.12926 diff --git a/qiskit_experiments/library/randomized_benchmarking/clifford_utils.py b/qiskit_experiments/library/randomized_benchmarking/clifford_utils.py index 99a1edd9c7..a63b91459c 100644 --- a/qiskit_experiments/library/randomized_benchmarking/clifford_utils.py +++ b/qiskit_experiments/library/randomized_benchmarking/clifford_utils.py @@ -375,8 +375,8 @@ def _num_from_1q_gate(op: Instruction) -> int: An integer representing a Clifford consisting of a single operation. Raises: - QiskitError: if the input instruction is not a Clifford instruction. - QiskitError: if rz is given with a angle that is not Clifford. + QiskitError: If the input instruction is not a Clifford instruction. + QiskitError: If rz is given with a angle that is not Clifford. """ if op.name in {"delay", "barrier"}: return 0 @@ -454,8 +454,8 @@ def _num_from_2q_gate( An integer representing a Clifford consisting of a single operation. Raises: - QiskitError: if the input instruction is not a Clifford instruction. - QiskitError: if rz is given with a angle that is not Clifford. + QiskitError: If the input instruction is not a Clifford instruction. + QiskitError: If rz is given with a angle that is not Clifford. """ if op.name in {"delay", "barrier"}: return 0 diff --git a/qiskit_experiments/library/randomized_benchmarking/interleaved_rb_experiment.py b/qiskit_experiments/library/randomized_benchmarking/interleaved_rb_experiment.py index a16086979f..fb41a133a5 100644 --- a/qiskit_experiments/library/randomized_benchmarking/interleaved_rb_experiment.py +++ b/qiskit_experiments/library/randomized_benchmarking/interleaved_rb_experiment.py @@ -33,7 +33,7 @@ class InterleavedRB(StandardRB): - """Interleaved randomized benchmarking experiment. + """An experiment to characterize the error rate of a specific gate on a device. # section: overview Interleaved Randomized Benchmarking (RB) is a method @@ -46,7 +46,7 @@ class InterleavedRB(StandardRB): the interleaved gate error. See Ref. [1] for details. # section: analysis_ref - :py:class:`InterleavedRBAnalysis` + :class:`InterleavedRBAnalysis` # section: reference .. ref_arxiv:: 1 1203.4550 diff --git a/qiskit_experiments/library/randomized_benchmarking/rb_experiment.py b/qiskit_experiments/library/randomized_benchmarking/rb_experiment.py index f329436bd8..3daf4e2038 100644 --- a/qiskit_experiments/library/randomized_benchmarking/rb_experiment.py +++ b/qiskit_experiments/library/randomized_benchmarking/rb_experiment.py @@ -54,11 +54,11 @@ class StandardRB(BaseExperiment, RestlessMixin): - """Standard randomized benchmarking experiment. + """An experiment to characterize the error rate of a gate set on a device. # section: overview Randomized Benchmarking (RB) is an efficient and robust method - for estimating the average error-rate of a set of quantum gate operations. + for estimating the average error rate of a set of quantum gate operations. See `Qiskit Textbook `_ for an explanation on the RB method. @@ -70,7 +70,7 @@ class StandardRB(BaseExperiment, RestlessMixin): the Error Per Clifford (EPC), as described in Refs. [1, 2]. # section: analysis_ref - :py:class:`RBAnalysis` + :class:`RBAnalysis` # section: reference .. ref_arxiv:: 1 1009.3639 @@ -91,7 +91,7 @@ def __init__( """Initialize a standard randomized benchmarking experiment. Args: - physical_qubits: list of physical qubits for the experiment. + physical_qubits: List of physical qubits for the experiment. lengths: A list of RB sequences lengths. backend: The backend to run the experiment on. num_samples: Number of samples to generate for each sequence length. @@ -104,7 +104,7 @@ def __init__( The default is False. Raises: - QiskitError: if any invalid argument is supplied. + QiskitError: If any invalid argument is supplied. """ # Initialize base experiment super().__init__(physical_qubits, analysis=RBAnalysis(), backend=backend) diff --git a/qiskit_experiments/library/randomized_benchmarking/rb_utils.py b/qiskit_experiments/library/randomized_benchmarking/rb_utils.py index b86c77be2c..cae8a1d858 100644 --- a/qiskit_experiments/library/randomized_benchmarking/rb_utils.py +++ b/qiskit_experiments/library/randomized_benchmarking/rb_utils.py @@ -34,7 +34,7 @@ def coherence_limit(nQ=2, T1_list=None, T2_list=None, gatelen=0.1): Returns: float: coherence limited error per gate. Raises: - ValueError: if there are invalid inputs + ValueError: If there are invalid inputs """ # pylint: disable = invalid-name diff --git a/qiskit_experiments/library/tomography/basis/base_basis.py b/qiskit_experiments/library/tomography/basis/base_basis.py index cd4e73837a..0717d3db7d 100644 --- a/qiskit_experiments/library/tomography/basis/base_basis.py +++ b/qiskit_experiments/library/tomography/basis/base_basis.py @@ -100,7 +100,7 @@ class PreparationBasis(BaseBasis): @abstractmethod def matrix_shape(self, qubits: Sequence[int]) -> Tuple[int, ...]: - """Return the shape of subsystem dimensions of the state :py:attr:`~matrix`. + """Return the shape of subsystem dimensions of the state attr:`~matrix`. Args: qubits: the physical qubit subsystems. @@ -170,7 +170,7 @@ def outcome_shape(self, qubits: Sequence[int]) -> Tuple[int, ...]: @abstractmethod def matrix_shape(self, qubits: Sequence[int]) -> Tuple[int, ...]: - """Return the shape of subsystem dimensions of a POVM :py:attr:`~matrix`. + """Return the shape of subsystem dimensions of a POVM attr:`~matrix`. Args: qubits: the physical qubit subsystems. diff --git a/qiskit_experiments/library/tomography/basis/local_basis.py b/qiskit_experiments/library/tomography/basis/local_basis.py index 47abde58ba..ae921b7e21 100644 --- a/qiskit_experiments/library/tomography/basis/local_basis.py +++ b/qiskit_experiments/library/tomography/basis/local_basis.py @@ -59,7 +59,7 @@ def __init__( qubits not specified in this dict. Raises: - QiskitError: if input states or instructions are not valid, or no + QiskitError: If input states or instructions are not valid, or no instructions or states are provided. """ if instructions is None and default_states is None and qubit_states is None: @@ -283,7 +283,7 @@ def __init__( not specified in this dict. Raises: - QiskitError: if the input instructions or POVMs are not valid, or if no + QiskitError: If the input instructions or POVMs are not valid, or if no instructions or POVMs are provided. """ if instructions is None and default_povms is None and qubit_povms is None: diff --git a/qiskit_experiments/library/tomography/fitters/cvxpy_utils.py b/qiskit_experiments/library/tomography/fitters/cvxpy_utils.py index 3b03bba2ad..2e32bfe6b9 100644 --- a/qiskit_experiments/library/tomography/fitters/cvxpy_utils.py +++ b/qiskit_experiments/library/tomography/fitters/cvxpy_utils.py @@ -184,7 +184,7 @@ def trace_constraint( A list of constraints on the real and imaginary parts. Raises: - TypeError: if input variables are not valid. + TypeError: If input variables are not valid. """ if isinstance(mat_r, (list, tuple)): arg_r = cvxpy.sum(mat_r) @@ -225,7 +225,7 @@ def partial_trace_constaint( A list of constraints on the real and imaginary parts. Raises: - TypeError: if input variables are not valid. + TypeError: If input variables are not valid. """ sdim = mat_r.shape[0] output_dim = constraint.shape[0] @@ -258,7 +258,7 @@ def trace_preserving_constaint( A list of constraints on the real and imaginary parts. Raises: - TypeError: if input variables are not valid. + TypeError: If input variables are not valid. """ if isinstance(mat_r, (tuple, list)): sdim = mat_r[0].shape[0] diff --git a/qiskit_experiments/library/tomography/mit_qpt_experiment.py b/qiskit_experiments/library/tomography/mit_qpt_experiment.py index 403a7f9b1e..d477a3a004 100644 --- a/qiskit_experiments/library/tomography/mit_qpt_experiment.py +++ b/qiskit_experiments/library/tomography/mit_qpt_experiment.py @@ -25,7 +25,8 @@ class MitigatedProcessTomography(BatchExperiment): - """Readout error mitigated quantum process tomography experiment. + """A batched experiment to characterize readout error then perform process tomography + for doing readout error mitigated process tomography. # section: overview Readout error mitigated Quantum process tomography is a batch diff --git a/qiskit_experiments/library/tomography/mit_qst_experiment.py b/qiskit_experiments/library/tomography/mit_qst_experiment.py index 44629f8252..1a64eefb83 100644 --- a/qiskit_experiments/library/tomography/mit_qst_experiment.py +++ b/qiskit_experiments/library/tomography/mit_qst_experiment.py @@ -25,7 +25,8 @@ class MitigatedStateTomography(BatchExperiment): - """Readout error mitigated quantum state tomography experiment. + """A batched experiment to characterize readout error then perform state tomography + for doing readout error mitigated state tomography. # section: overview Readout error mitigated quantum state tomography is a batch diff --git a/qiskit_experiments/library/tomography/qpt_analysis.py b/qiskit_experiments/library/tomography/qpt_analysis.py index 2d1d792616..1a364c82e9 100644 --- a/qiskit_experiments/library/tomography/qpt_analysis.py +++ b/qiskit_experiments/library/tomography/qpt_analysis.py @@ -60,7 +60,7 @@ class ProcessTomographyAnalysis(TomographyAnalysis): .. ref_arxiv:: 1 1106.5458 # section: see_also - qiskit_experiments.library.tomography.tomography_analysis.TomographyAnalysis + :class:`.TomographyAnalysis` """ diff --git a/qiskit_experiments/library/tomography/qpt_experiment.py b/qiskit_experiments/library/tomography/qpt_experiment.py index 4d00cf47e4..125e13e8ad 100644 --- a/qiskit_experiments/library/tomography/qpt_experiment.py +++ b/qiskit_experiments/library/tomography/qpt_experiment.py @@ -28,7 +28,7 @@ class ProcessTomography(TomographyExperiment): - """Quantum process tomography experiment. + """An experiment to reconstruct the quantum channel from measurement data. # section: overview Quantum process tomography (QPT) is a method for experimentally @@ -45,10 +45,10 @@ class ProcessTomography(TomographyExperiment): preparation and measurement bases. # section: analysis_ref - :py:class:`ProcessTomographyAnalysis` + :class:`ProcessTomographyAnalysis` # section: see_also - qiskit_experiments.library.tomography.tomography_experiment.TomographyExperiment + :class:`.TomographyExperiment` """ diff --git a/qiskit_experiments/library/tomography/qst_analysis.py b/qiskit_experiments/library/tomography/qst_analysis.py index 43754a3f56..d64982886a 100644 --- a/qiskit_experiments/library/tomography/qst_analysis.py +++ b/qiskit_experiments/library/tomography/qst_analysis.py @@ -59,7 +59,7 @@ class StateTomographyAnalysis(TomographyAnalysis): .. ref_arxiv:: 1 1106.5458 # section: see_also - qiskit_experiments.library.tomography.tomography_analysis.TomographyAnalysis + :class:`.TomographyAnalysis` """ diff --git a/qiskit_experiments/library/tomography/qst_experiment.py b/qiskit_experiments/library/tomography/qst_experiment.py index 005b0d19f3..24e31f2b1f 100644 --- a/qiskit_experiments/library/tomography/qst_experiment.py +++ b/qiskit_experiments/library/tomography/qst_experiment.py @@ -27,7 +27,7 @@ class StateTomography(TomographyExperiment): - """Quantum state tomography experiment. + """An experiment to reconstruct the quantum state from measurement data. # section: overview Quantum state tomography (QST) is a method for experimentally @@ -43,10 +43,10 @@ class StateTomography(TomographyExperiment): measurement basis. # section: analysis_ref - :py:class:`StateTomographyAnalysis` + :class:`StateTomographyAnalysis` # section: see_also - qiskit_experiments.library.tomography.tomography_experiment.TomographyExperiment + :class:`.TomographyExperiment` """ diff --git a/qiskit_experiments/library/tomography/tomography_experiment.py b/qiskit_experiments/library/tomography/tomography_experiment.py index 015f7fa1df..ff96ae4aad 100644 --- a/qiskit_experiments/library/tomography/tomography_experiment.py +++ b/qiskit_experiments/library/tomography/tomography_experiment.py @@ -31,7 +31,7 @@ class TomographyExperiment(BaseExperiment): """Base experiment for quantum state and process tomography. # section: analysis_ref - :py:class:`TomographyAnalysis` + :class:`TomographyAnalysis` """ @classmethod @@ -100,7 +100,7 @@ def __init__( instance will be set. Raises: - QiskitError: if input params are invalid. + QiskitError: If input params are invalid. """ # Initialize BaseExperiment if physical_qubits is None: diff --git a/qiskit_experiments/test/__init__.py b/qiskit_experiments/test/__init__.py index 9d48bbc1c8..651bd96e45 100644 --- a/qiskit_experiments/test/__init__.py +++ b/qiskit_experiments/test/__init__.py @@ -11,9 +11,9 @@ # that they have been altered from the originals. """ -================================================================= -Qiskit Experiments Test Utilities (:mod:`qiskit_experiments.test`) -================================================================= +=============================================== +Test Utilities (:mod:`qiskit_experiments.test`) +=============================================== .. currentmodule:: qiskit_experiments.test diff --git a/qiskit_experiments/test/mock_iq_backend.py b/qiskit_experiments/test/mock_iq_backend.py index 3ffdc03968..aa46a0049b 100644 --- a/qiskit_experiments/test/mock_iq_backend.py +++ b/qiskit_experiments/test/mock_iq_backend.py @@ -244,7 +244,7 @@ def _get_normal_samples_for_shot( """ Produce a list in the size of num_qubits. Each entry value is produced from normal distribution with expected value of '0' and standard deviation of 1. The intention is that these samples are - scaled by :py:func:`_scale_samples_for_widths` for various circuits, experiments, and their IQ + scaled by :func:`_scale_samples_for_widths` for various circuits, experiments, and their IQ widths; removing the need to query a RNG for each new width list. Example: diff --git a/qiskit_experiments/test/mock_iq_helpers.py b/qiskit_experiments/test/mock_iq_helpers.py index c44b7df054..8b626aaf50 100644 --- a/qiskit_experiments/test/mock_iq_helpers.py +++ b/qiskit_experiments/test/mock_iq_helpers.py @@ -40,9 +40,9 @@ def __init__( """Create a MockIQBackend helper object to define how the backend functions. `iq_cluster_centers` and `iq_cluster_width` define the base IQ cluster centers and - standard-deviations for each qubit in a :py:class:`MockIQBackend` instance. These are used by - :py:meth:`iq_clusters` by default. Subclasses can override :py:meth:`iq_clusters` to return a - modified version of :py:attr:`iq_cluster_centers` and :py:attr:`iq_cluster_width`. + standard-deviations for each qubit in a :class:`MockIQBackend` instance. These are used by + :meth:`iq_clusters` by default. Subclasses can override :meth:`iq_clusters` to return a + modified version of attr:`iq_cluster_centers` and attr:`iq_cluster_width`. `iq_cluster_centers` is a list of tuples. For a given qubit `i_qbt` and computational state `i_state` (either `0` or `1`), the centers of the IQ clusters are found by indexing `iq_cluster_centers` as follows: @@ -182,17 +182,17 @@ def iq_clusters( """Returns circuit-specific IQ cluster centers and widths in the IQ plane. Subclasses can override this function to modify the centers and widths of IQ clusters based on - the circuits being simulated by a :py:class:`MockIQBackend`. The base centers and widths are - stored internally within the helper object, and can be set in :py:meth:`__init__` or by modifying - :py:attr:`iq_cluster_centers` and :py:attr:`iq_cluster_width`. The default behaviour for - :py:meth:`iq_clusters` is to return the centers and widths unmodified for each circuit in + the circuits being simulated by a :class:`MockIQBackend`. The base centers and widths are + stored internally within the helper object, and can be set in :meth:`__init__` or by modifying + attr:`iq_cluster_centers` and attr:`iq_cluster_width`. The default behaviour for + :meth:`iq_clusters` is to return the centers and widths unmodified for each circuit in `circuits`. Subclasses may return different centers and widths based on the circuits provided. The returned list contains a tuple per circuit. Each tuple contains the IQ centers and widths in - the same format as :py:attr:`iq_cluster_centers` and :py:attr:`iq_cluster_width`, passed as - arguments to :py:meth:`__init__`. The format of the centers and widths lists, in the argument + the same format as attr:`iq_cluster_centers` and attr:`iq_cluster_width`, passed as + arguments to :meth:`__init__`. The format of the centers and widths lists, in the argument list and in the returned tuples, must match the format of `iq_cluster_centers` and - `iq_cluster_width` in :py:func:`qiskit_experiments.test.MockIQExperimentHelper.__init__`. + `iq_cluster_width` in :func:`qiskit_experiments.test.MockIQExperimentHelper.__init__`. Args: circuits: The quantum circuits for which the clusters should be modified. @@ -216,14 +216,14 @@ def __init__( Parallel Experiment Helper initializer. The class assumes `exp_helper_list` is ordered to match the corresponding experiment in `exp_list`. - Note that :py:meth:`__init__` does not have `iq_cluster_centers` and `iq_cluster_width` as in - :py:func:`MockIQExperimentHelper.__init__`. This is because the centers and widths for - :py:class:`MockIQParallelBackend` are stored in multiple experiment helpers in the list + Note that :meth:`__init__` does not have `iq_cluster_centers` and `iq_cluster_width` as in + :func:`MockIQExperimentHelper.__init__`. This is because the centers and widths for + :class:`MockIQParallelBackend` are stored in multiple experiment helpers in the list `exp_helper_list`. Args: exp_list(List): List of experiments. - exp_helper_list(List): Ordered list of `MockIQExperimentHelper` corresponding to the + exp_helper_list(List): Ordered list of :class:`.MockIQExperimentHelper` corresponding to the experiments in `exp_list`. Nested parallel experiment aren't supported currently. Raises: @@ -494,7 +494,7 @@ def __init__( are different centers for different logical values of the qubit. iq_cluster_width: A list of standard deviation values for the sampling of each qubit. Raises: - ValueError: if probability value is not valid. + ValueError: If probability value is not valid. """ super().__init__(iq_cluster_centers, iq_cluster_width) if max_probability + offset_probability > 1: diff --git a/qiskit_experiments/test/t2hahn_backend.py b/qiskit_experiments/test/t2hahn_backend.py index 80918f9a69..8d93cfa85f 100644 --- a/qiskit_experiments/test/t2hahn_backend.py +++ b/qiskit_experiments/test/t2hahn_backend.py @@ -183,7 +183,7 @@ def _rx_gate(self, qubit_state: dict, angle: float) -> dict: dict: The state of the qubit after operating the gate. Raises: - QiskitError: if angle is not ±π/2 or ±π. Those are the only supported angles. + QiskitError: If angle is not ±π/2 or ±π. Those are the only supported angles. """ if qubit_state["XY plane"]: diff --git a/qiskit_experiments/visualization/__init__.py b/qiskit_experiments/visualization/__init__.py index 7c7eb4cda4..682f77bcb1 100644 --- a/qiskit_experiments/visualization/__init__.py +++ b/qiskit_experiments/visualization/__init__.py @@ -16,13 +16,13 @@ .. currentmodule:: qiskit_experiments.visualization -Visualization provides plotting functionality for creating figures from experiment and -analysis results. This includes plotter and drawer classes to plot data in -:py:class:`CurveAnalysis` and its subclasses. Plotters inherit from :class:`BasePlotter` -and define a type of figure that may be generated from experiment or analysis data. For -example, the results from :class:`CurveAnalysis` --- or any other experiment where -results are plotted against a single parameter (i.e., :math:`x`) --- can be plotted -using the :class:`CurvePlotter` class, which plots X-Y-like values. +The visualization module provides plotting functionality for creating figures from +experiment and analysis results. This includes plotter and drawer classes to plot data +in :class:`.CurveAnalysis` and its subclasses. Plotters inherit from +:class:`BasePlotter` and define a type of figure that may be generated from experiment +or analysis data. For example, the results from :class:`CurveAnalysis`---or any other +experiment where results are plotted against a single parameter (i.e., :math:`x`)---can +be plotted using the :class:`CurvePlotter` class, which plots X-Y-like values. These plotter classes act as a bridge (from the common bridge pattern in software development) between analysis classes (or even users) and plotting backends such as diff --git a/qiskit_experiments/visualization/drawers/base_drawer.py b/qiskit_experiments/visualization/drawers/base_drawer.py index bc3109100e..e5b7a5e962 100644 --- a/qiskit_experiments/visualization/drawers/base_drawer.py +++ b/qiskit_experiments/visualization/drawers/base_drawer.py @@ -103,13 +103,15 @@ class BaseDrawer(ABC): The recommended way to customize the legend entries is as follows: - 1. Set the labels in the ``series_params`` option, keyed on the series names. - 2. Initialize the canvas. - 3. Call relevant drawing methods to create the figure. When calling the drawing - method that creates the graphic you would like to use in the legend, set - ``legend=True``. For example, ``drawer.scatter(...,legend=True)`` would use - the scatter points as the legend graphics for the given series. - 4. Format the canvas and call :meth:`figure` to get the figure. + 1. Set the labels in the ``series_params`` option, keyed on the series names. + 2. Initialize the canvas. + 3. Call relevant drawing methods to create the figure. When calling the drawing + method that creates the graphic you would like to use in the legend, set + ``legend=True``. For example, ``drawer.scatter(...,legend=True)`` would use + the scatter points as the legend graphics for the given series. + 4. Format the canvas and call :meth:`figure` to get the figure. + + | .. rubric:: Options and Figure Options @@ -245,7 +247,7 @@ def set_options(self, **fields): fields: The fields to update the options Raises: - AttributeError: if an unknown options is encountered. + AttributeError: If an unknown options is encountered. """ for field in fields: if not hasattr(self._options, field): @@ -263,7 +265,7 @@ def set_figure_options(self, **fields): fields: The fields to update the figure options Raises: - AttributeError: if an unknown figure option is encountered. + AttributeError: If an unknown figure option is encountered. """ for field in fields: if not hasattr(self._figure_options, field): diff --git a/qiskit_experiments/visualization/plotters/base_plotter.py b/qiskit_experiments/visualization/plotters/base_plotter.py index 30688f3f9c..a069bd1371 100644 --- a/qiskit_experiments/visualization/plotters/base_plotter.py +++ b/qiskit_experiments/visualization/plotters/base_plotter.py @@ -122,6 +122,9 @@ class BasePlotter(ABC): # plotter.drawer.figure_options.unknown_variable # Raises an error as it # does not exist in # `drawer.figure_options`. + + Attributes: + drawer (BaseDrawer): The drawer to use when plotting. """ def __init__(self, drawer: BaseDrawer): @@ -145,9 +148,7 @@ def __init__(self, drawer: BaseDrawer): # Figure options that have changed, for serialization. self._set_figure_options = set() - # The drawer backend to use for plotting. Docstring provided as drawer is not a @property. self.drawer: BaseDrawer = drawer - """The drawer to use when plotting.""" @property def supplementary_data(self) -> Dict[str, Any]: @@ -474,7 +475,7 @@ def set_options(self, **fields): fields: The fields to update in options. Raises: - AttributeError: if an unknown option is encountered. + AttributeError: If an unknown option is encountered. """ for field in fields: if not hasattr(self._options, field): @@ -502,9 +503,10 @@ def _configure_drawer(self): """Configures :attr:`drawer` before plotting. The following actions are taken: - 1. ``axis``, ``subplots``, and ``style`` are passed to :attr:`drawer`. - 2. ``figure_options`` in :attr:`drawer` are updated based on values set in - the plotter :attr:`figure_options` + + 1. ``axis``, ``subplots``, and ``style`` are passed to :attr:`drawer`. + 2. ``figure_options`` in :attr:`drawer` are updated based on values set in + the plotter :attr:`figure_options` These steps are different as all figure options could be passed to :attr:`drawer`, if the drawer already has a figure option with the same name. diff --git a/qiskit_experiments/visualization/plotters/curve_plotter.py b/qiskit_experiments/visualization/plotters/curve_plotter.py index cf793972ca..033ba81a54 100644 --- a/qiskit_experiments/visualization/plotters/curve_plotter.py +++ b/qiskit_experiments/visualization/plotters/curve_plotter.py @@ -9,7 +9,7 @@ # 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. -"""Plotter for curve fits, specifically from :class:`CurveAnalysis`.""" +"""Plotter for curve fits, specifically from :class:`.CurveAnalysis`.""" from typing import List from uncertainties import UFloat @@ -21,7 +21,7 @@ class CurvePlotter(BasePlotter): - """A plotter class to plot results from :class:`CurveAnalysis`. + """A plotter class to plot results from :class:`.CurveAnalysis`. ``CurvePlotter`` plots results from curve fits, which includes diff --git a/qiskit_experiments/visualization/plotters/iq_plotter.py b/qiskit_experiments/visualization/plotters/iq_plotter.py index 9058f18809..4917dc5e51 100644 --- a/qiskit_experiments/visualization/plotters/iq_plotter.py +++ b/qiskit_experiments/visualization/plotters/iq_plotter.py @@ -26,13 +26,13 @@ class IQPlotter(BasePlotter): """A plotter class to plot IQ data. - :class:`IQPlotter` plots results from experiments which used measurement-level 1, + :class:`.IQPlotter` plots results from experiments which used measurement-level 1, i.e. IQ data. This class also supports plotting predictions from a discriminator - (subclass of :class:`BaseDiscriminator`), which is used to classify IQ results into + (subclass of :class:`.BaseDiscriminator`), which is used to classify IQ results into labels. The discriminator labels are matched with the series names to generate an image of the predictions. Points that are misclassified by the discriminator are flagged in the figure (see ``flag_misclassified`` :attr:`option`). A canonical - application of :class:`IQPlotter` is for classification of single-qubit readout for + application of :class:`.IQPlotter` is for classification of single-qubit readout for different prepared states. Example: @@ -97,7 +97,7 @@ def expected_supplementary_data_keys(cls) -> List[str]: outcome. The predictions are assumed to be series names (``Union[str, int, float]``). The generated image allows viewers to see how well the discriminator classifies the provided series data. Must be a subclass of - :class:`BaseDiscriminator`. See :attr:`options` for ways to control the + :class:`.BaseDiscriminator`. See :attr:`options` for ways to control the generation of the discriminator prediction image. fidelity: A float representing the fidelity of the discrimination. """ diff --git a/qiskit_experiments/visualization/utils.py b/qiskit_experiments/visualization/utils.py index ba0b5c4267..b832ccafcf 100644 --- a/qiskit_experiments/visualization/utils.py +++ b/qiskit_experiments/visualization/utils.py @@ -31,14 +31,15 @@ class DataExtentCalculator: Data is registered with a :class:`DataExtentCalculator` so that the computed extent covers all values in the data array. The extent tuple is computed as follows: - 1. The maximum and minimum values for input data is stored whenever new data - arrays are registered. This is the data-extent: the minimum-area bounding box - that contains all registered data. - 2. The data-extent is enlarged/shrunk by scaling its width and height by - :attr:`multiplier`. - 3. If :attr:`aspect_ratio` is not ``None``, the scaled extent tuple is extended - in one of the dimensions so that the output extent tuple is larger and the - target aspect ratio is achieved. + + 1. The maximum and minimum values for input data is stored whenever new data + arrays are registered. This is the data-extent: the minimum-area bounding box + that contains all registered data. + 2. The data-extent is enlarged/shrunk by scaling its width and height by + :attr:`multiplier`. + 3. If :attr:`aspect_ratio` is not ``None``, the scaled extent tuple is extended + in one of the dimensions so that the output extent tuple is larger and the + target aspect ratio is achieved. """ def __init__(self, multiplier: float = 1.0, aspect_ratio: Optional[float] = 1.0): @@ -93,10 +94,10 @@ def register_data(self, data: Union[List, np.ndarray], dim: Optional[int] = None Defaults to None. Raises: - QiskitError: if the data is not two-dimensional and ``dim`` is not set. - QiskitError: if the data does not contain one-dimensional values when + QiskitError: If the data is not two-dimensional and ``dim`` is not set. + QiskitError: If the data does not contain one-dimensional values when ``dim`` is set. - QiskitError: if ``dim`` is not an index for two-dimensions: i.e., + QiskitError: If ``dim`` is not an index for two-dimensions: i.e., :math:`0\leq{}\text{dim}<2`. """ data = np.asarray(data) @@ -237,7 +238,7 @@ def extent(self) -> ExtentTuple: """An extent array for the registered data, multiplier, and aspect ratio. Raises: - QiskitError: if the resulting extent tuple is not finite. This can occur if + QiskitError: If the resulting extent tuple is not finite. This can occur if no data was registered before calling :meth:`extent`. Returns: diff --git a/releasenotes/notes/0.4/restless_enable_option-3486b0b0d89c1cd7.yaml b/releasenotes/notes/0.4/restless_enable_option-3486b0b0d89c1cd7.yaml index a982bdc8ff..966285cff0 100644 --- a/releasenotes/notes/0.4/restless_enable_option-3486b0b0d89c1cd7.yaml +++ b/releasenotes/notes/0.4/restless_enable_option-3486b0b0d89c1cd7.yaml @@ -1,7 +1,7 @@ --- fixes: - | - The :meth:`.enable_restless` method of the :class:`.RestlessMixin` class now has + The :meth:`~.RestlessMixin.enable_restless` method of the :class:`.RestlessMixin` class now has the non-default option to supress errors when T1 values are lower than the repetition dely. This allows users to accomodate cases when backends report erronous T1 values. diff --git a/releasenotes/notes/docs-refactoring-9f46f6539f57e8bd.yaml b/releasenotes/notes/docs-refactoring-9f46f6539f57e8bd.yaml new file mode 100644 index 0000000000..d0f6cf3d8b --- /dev/null +++ b/releasenotes/notes/docs-refactoring-9f46f6539f57e8bd.yaml @@ -0,0 +1,6 @@ +--- +other: + - | + The package documentation has been updated with introductory tutorials and how-tos + for solving specific problems. It is now refactored into four sections: learning + tutorials, how-to guides, experiment manuals, and the API references. \ No newline at end of file diff --git a/releasenotes/notes/tomography-b091ce13d6983bc1.yaml b/releasenotes/notes/tomography-b091ce13d6983bc1.yaml index 1cd2dd6e7c..c42789dde3 100644 --- a/releasenotes/notes/tomography-b091ce13d6983bc1.yaml +++ b/releasenotes/notes/tomography-b091ce13d6983bc1.yaml @@ -90,7 +90,7 @@ upgrade: deprecations: - | Renames the ``qubits``, ``measurement_qubits``, and ``preparation_qubits`` - init kwargs of :class:`~.StateTomography`, + init kwargs of :class:`~.StateTomography`, :class:`~.ProcessTomography`, and :class:`~.TomographyExperiment` have been deprecated. They have been replaced with kwargs ``physical_qubits``, ``measurement_indices`` and ``preparation_indices`` respectively. The diff --git a/requirements-dev.txt b/requirements-dev.txt index d294ea041f..48296535bc 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,12 +3,13 @@ stestr astroid==2.5 pylint==2.7.1 jinja2==3.0.3 -Sphinx>=1.8.3 -qiskit-sphinx-theme>=1.6 +sphinx~=5.0 +jupyter-sphinx>=0.4.0 +qiskit-sphinx-theme==1.11.0rc1 sphinx-autodoc-typehints<=1.20.2 +sphinx-design==0.3.0 pygments>=2.4 reno>=3.4.0 -sphinx-panels nbsphinx arxiv ddt>=1.6.0 @@ -18,4 +19,5 @@ cvxpy>=1.1.15 pylatexenc # Pin `importlib-metadata` because of a bug relating to version 5.0.0. See #931 for more. importlib-metadata==4.13.0;python_version<'3.8' -scikit-learn \ No newline at end of file +scikit-learn +sphinx-copybutton diff --git a/test/visualization/mock_plotter.py b/test/visualization/mock_plotter.py index b4d03cf295..3834eac1ba 100644 --- a/test/visualization/mock_plotter.py +++ b/test/visualization/mock_plotter.py @@ -22,8 +22,8 @@ class MockPlotter(BasePlotter): """Mock plotter for visualization tests. - If :attr:`plotting_enabled` is true, :class:`MockPlotter` will plot formatted data. - :attr:`plotting_enabled` defaults to false as most test usage of the class uses :class:`MockDrawer`, + If :attr:`plotting_enabled` is true, :class:`.MockPlotter` will plot formatted data. + :attr:`plotting_enabled` defaults to false as most test usage of the class uses :class:`.MockDrawer`, which doesn't generate a useful figure. """ diff --git a/test/visualization/test_iq_plotter.py b/test/visualization/test_iq_plotter.py index 5fa5f8362d..e39b6f6a09 100644 --- a/test/visualization/test_iq_plotter.py +++ b/test/visualization/test_iq_plotter.py @@ -26,7 +26,7 @@ class MockDiscriminatorNotTrainedException(Exception): """Mock exception to be raised when :meth:`MockDiscriminator.predict` is called on an untrained - :class:`MockDiscriminator`.""" + :class:`.MockDiscriminator`.""" pass @@ -89,14 +89,14 @@ def _dummy_data( Args: is_trained: Whether the discriminator should be trained or not. Defaults to True. n_series: The number of series to generate dummy data for. Defaults to 3. - raise_predict_not_trained: Passed to the discriminator :class:`MockDiscriminator` class. + raise_predict_not_trained: Passed to the discriminator :class:`.MockDiscriminator` class. factor: A scaler factor by which to multipl all data. Returns: tuple: the tuple ``(points, names, discrim)`` where ``points`` is a list of NumPy arrays of IQ points, ``names`` is a list of series names (one for each NumPy array), and - ``discrim`` is a :class:`MockDiscriminator` instance. + ``discrim`` is a :class:`.MockDiscriminator` instance. """ points = [] labels = [] diff --git a/tox.ini b/tox.ini index 2e22ce4bc3..f499f46cba 100644 --- a/tox.ini +++ b/tox.ini @@ -9,9 +9,7 @@ install_command = pip install -U {opts} {packages} setenv = VIRTUAL_ENV={envdir} QISKIT_SUPPRESS_PACKAGING_WARNINGS=Y -deps = - git+https://github.com/jupyter/jupyter-sphinx - -r{toxinidir}/requirements-dev.txt +deps = -r{toxinidir}/requirements-dev.txt passenv = OMP_NUM_THREADS QISKIT_PARALLEL @@ -26,7 +24,6 @@ setenv = VIRTUAL_ENV={envdir} QISKIT_SUPPRESS_PACKAGING_WARNINGS=Y deps = - git+https://github.com/jupyter/jupyter-sphinx git+https://github.com/Qiskit/qiskit-terra -r{toxinidir}/requirements-dev.txt passenv = @@ -61,14 +58,19 @@ commands = black {posargs} qiskit_experiments test tools setup.py [testenv:docs] passenv = EXPERIMENTS_DEV_DOCS commands = - sphinx-build -b html {posargs} docs/ docs/_build/html + sphinx-build -T --keep-going -b html {posargs} docs/ docs/_build/html + +[testenv:docs-parallel] +passenv = EXPERIMENTS_DEV_DOCS +commands = + sphinx-build -j auto -T --keep-going -b html {posargs} docs/ docs/_build/html -[testenv:docsnorst] +[testenv:docs-minimal] passenv = EXPERIMENTS_DEV_DOCS setenv = - QISKIT_DOCS_SKIP_RST = 1 + QISKIT_DOCS_SKIP_EXECUTE = 1 commands = - sphinx-build -b html {posargs} docs/ docs/_build/html + sphinx-build -T --keep-going -b html {posargs} docs/ docs/_build/html [pycodestyle] max-line-length = 100