Go to file
Matthew Treinish 01ded73d1d
Add support for attachments to test execution (#3982)
* Add support for attachments to test execution

By default in CI and with tox locally we run all the tests in parallel.
However, this makes things like printing to stdout, warnings on stderr,
or logging during tests difficult to deal with. This is because we'll
have multiple writers to the output streams simultaneously and no way
to figure out which text goes to which test. Luckily stestr and the
subunit protocl it uses internally has a method for adding attachments
to test results to handle this kind of case. Using this each output
stream is associated with the test which generated it and will get
displayed as such. The only issue with this is that the stdlib unittest
doesn't know how to write attachments to it's result stream. There is a
unittest extension library testtools[1] that provides this functionality
in a strictly compatible manner with unittest, however the current state
of the library needs some work before it can work well with more modern
features of stdlib unittest from python>3.5 so we either have to change
the tests to not use these features or come up with an alternative
solution for test attachments.

This commit ports the necessary result streaming functionality from
testtools into the QiskitTestCase base test class and then sets up the
appropriate fixtures to attach output streams from each test. This works
around the current limitation with testtools (I'm slowly working on
fixing this in testtools) but still provides the functionality. When
testtools is at the point it can be a drop in replacement for unittest
as terra is using it we can drop this code.

As part of this change all the test classes that define a setUp have a
missing super() call added. This framework does not work without setUp
in the base class being defined since that's what is used to setup the
stream capture. Moving forward the base test class actually enforces
that super() is called, otherwise the tests will fail.

[1] https://github.com/testing-cabal/testtools

* Fix lint

* Update contributing doc

* Fix copy paste error

* Add missing super calls from new tests

* Add missing super() calls and fix skip message

* Fix lint

Co-authored-by: Luciano Bello <luciano.bello@ibm.com>
2020-09-09 23:01:54 +00:00
.github Remove broken github actions workflow (#4673) 2020-07-09 11:56:27 -04:00
docs Remove coding: utf-8 per PEP 3120 (#4914) 2020-08-12 08:29:16 -04:00
examples Remove coding: utf-8 per PEP 3120 (#4914) 2020-08-12 08:29:16 -04:00
qiskit Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00
releasenotes monospaced_output magic for a nicer print(circuit) (#5030) 2020-09-09 17:07:37 +00:00
test Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00
tools Remove python2-isms (#4918) 2020-08-14 18:21:14 +00:00
.gitignore Polish the MPL tester (#4604) 2020-06-30 19:12:37 +00:00
.mailmap Fix name and Email Patrick Neuweiler (#3712) 2020-01-13 10:43:25 -05:00
.mergify.yml Bump version strings post release (#4884) 2020-08-06 16:01:16 -04:00
.pylintrc Add U and Phase gate (#4765) 2020-08-04 17:48:25 +00:00
.stestr.conf Switch to stestr for test runner (#737) 2018-11-06 17:43:03 +00:00
.travis.yml Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00
CODE_OF_CONDUCT.md Move CONTRIBUTING.rst to top level (#2359) 2019-06-07 14:53:10 -04:00
CONTRIBUTING.md Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00
LICENSE.txt Consistent license across all the project (#550) 2018-06-08 15:00:58 +02:00
MANIFEST.in Include license in sdist (#3759) 2020-01-29 08:40:07 -03:00
Make.bat Fix typo under qiskit directory (#3659) 2020-01-09 17:23:54 -05:00
Makefile Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00
README.md Update example in README.md to use transpiler. (#4954) 2020-08-19 18:31:59 -04:00
azure-pipelines.yml Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00
constraints.txt Revert "Pin numpy version < 1.19.0 to unblock CI (#4599)" (#4656) 2020-07-12 18:40:05 -04:00
postBuild Stop forcing mathtext mode for all strings (#4669) 2020-07-28 22:41:09 +00:00
pyproject.toml Add pyproject.toml to declare cython build requirement (#2278) 2019-05-13 22:13:38 -04:00
requirements-dev.txt Explicity set encoding of release notes via reno config (#5013) 2020-09-01 20:41:58 -04:00
requirements.txt Drop support for python 3.5 (#4926) 2020-09-01 12:12:49 -04:00
setup.py Drop support for python 3.5 (#4926) 2020-09-01 12:12:49 -04:00
tox.ini Add support for attachments to test execution (#3982) 2020-09-09 23:01:54 +00:00

README.md

Qiskit Terra

LicenseBuild StatusCoverage Status

Qiskit is an open-source framework for working with noisy quantum computers at the level of pulses, circuits, and algorithms.

Qiskit is made up of elements that work together to enable quantum computing. This element is Terra and is the foundation on which the rest of Qiskit is built.

Installation

We encourage installing Qiskit via the pip tool (a python package manager), which installs all Qiskit elements, including Terra.

pip install qiskit

PIP will handle all dependencies automatically and you will always install the latest (and well-tested) version.

To install from source, follow the instructions in the documentation.

Creating Your First Quantum Program in Qiskit Terra

Now that Qiskit is installed, it's time to begin working with Terra.

We are ready to try out a quantum circuit example, which is simulated locally using the Qiskit BasicAer element. This is a simple example that makes an entangled state.

$ python
>>> from qiskit import *
>>> qc = QuantumCircuit(2, 2)
>>> qc.h(0)
>>> qc.cx(0, 1)
>>> qc.measure([0,1], [0,1])
>>> backend_sim = BasicAer.get_backend('qasm_simulator')
>>> transpiled_qc = transpile(qc, backend_sim)
>>> result = backend_sim.run(assemble(transpiled_qc)).result()
>>> print(result.get_counts(qc))

In this case, the output will be:

{'00': 513, '11': 511}

A script is available here, where we also show how to run the same program on a real quantum computer via IBMQ.

Executing your code on a real quantum chip

You can also use Qiskit to execute your code on a real quantum chip. In order to do so, you need to configure Qiskit for using the credentials in your IBM Q account:

Configure your IBMQ credentials

  1. Create an IBM Q > Account if you haven't already done so.

  2. Get an API token from the IBM Q website under My Account > API Token and the URL for the account.

  3. Take your token and url from step 2, here called MY_API_TOKEN, MY_URL, and run:

    >>> from qiskit import IBMQ
    >>> IBMQ.save_account('MY_API_TOKEN', 'MY_URL')
    

After calling IBMQ.save_account(), your credentials will be stored on disk. Once they are stored, at any point in the future you can load and use them in your program simply via:

>>> from qiskit import IBMQ
>>> IBMQ.load_account()

Those who do not want to save their credentials to disk should use instead:

>>> from qiskit import IBMQ
>>> IBMQ.enable_account('MY_API_TOKEN')

and the token will only be active for the session. For examples using Terra with real devices we have provided a set of examples in examples/python and we suggest starting with using_qiskit_terra_level_0.py and working up in the levels.

Contribution Guidelines

If you'd like to contribute to Qiskit Terra, please take a look at our contribution guidelines. This project adheres to Qiskit's code of conduct. By participating, you are expected to uphold this code.

We use GitHub issues for tracking requests and bugs. Please join the Qiskit Slack community and use our Qiskit Slack channel for discussion and simple questions. For questions that are more suited for a forum we use the Qiskit tag in the Stack Exchange.

Next Steps

Now you're set up and ready to check out some of the other examples from our Qiskit Tutorials repository.

Authors and Citation

Qiskit Terra is the work of many people who contribute to the project at different levels. If you use Qiskit, please cite as per the included BibTeX file.

Changelog and Release Notes

The changelog for a particular release is dynamically generated and gets written to the release page on Github for each release. For example, you can find the page for the 0.9.0 release here:

https://github.com/Qiskit/qiskit-terra/releases/tag/0.9.0

The changelog for the current release can be found in the releases tab: The changelog provides a quick overview of noteble changes for a given release.

Additionally, as part of each release detailed release notes are written to document in detail what has changed as part of a release. This includes any documentation on potential breaking changes on upgrade and new features. For example, You can find the release notes for the 0.9.0 release in the Qiskit documentation here:

https://qiskit.org/documentation/release_notes.html#terra-0-9

License

Apache License 2.0