Skip to content

tgag17/qiskit-neko

 
 

Repository files navigation

qiskit-neko

License

This repository contains integration tests for Qiskit. These tests are used for primarily for two purposes as backwards compatibility testing for Qiskit to validate that changes proposed to any Qiskit project do not break functionality from previous release and to validate that functionality works as expected with different providers. A provider in Qiskit is a package that provides backend objects that provide an interface to Quantum hardware or a simulator.

Installing qiskit-neko

Currently qiskit-neko is not designed to run as a standalone package and you need to checkout the git source repository to run it. This is done to simplify the execution of the tests as qiskit-neko leverages the stestr for the execution of its tests. To install qiskit-neko you need to first clone it with git:

git clone https://github.com/Qiskit/qiskit-neko.git

then you can install it using pip into your python environment

pip install .

Eventually a mode with a standalone package might be added, but for now this is how you need to install qiskit-neko.

Running tests

The simplest way to run the qiskit-neko test suite is to leverage tox. The neko tox job is configured to install qiskit-neko and then run the full test suite. After installing tox (typically done with pip install tox) you can simply run:

tox -e neko

and this will install qiskit-neko into an isolated virtual environment and then run tests.

If you don't wish to use tox to run tests. You can leverage stestr directly to execute tests. Simply running:

stestr run

from the root of repository after installing qiskit-neko in your python environment.

Qiskit Version compatibility

Due to its use for backwards compatibility testing there are strict requirements on how we run CI for qiskit-neko. The qiskit-neko repository itself will only run CI on released versions of upstream dependencies. This includes Qiskit itself and other qiskit projects that are included in the tests here. A test can not be added to qiskit-neko unless it will work with a released version of a Qiskit component. All Qiskit components that contain tests in qiskit-neko must run qiskit-neko in their CI (only the subset of tests which use that component) using the proposed dev versions. A cron job running from either stable branches or releases is recommend as well to ensure that nothing bit rots on code that doesn't change as frequently.

If qiskit or any qiskit component starts supporting more than one release series at a time. Additional CI jobs should be added to qiskit-neko to ensure we have coverage of those multiple releases to ensure that functionality continues to work across all supported releases.

This is done to ensure that backwards compatibility is maintained. Since qiskit-neko is an external project to the rest of qiskit, to make a change to the tests you must push a pull request to qiskit-neko and qiskit-neko will only run CI from released version we validate the current functionality works. Then since all projects tested by qiskit-neko are required to run qiskit-neko on proposed changes we are checking that all the functionality we doesn't regress with the proposed change applied.

Downstream usage in testing

The expecation is for any qiskit project that includes tests in qiskit-neko that they run in CI agains their main branch with a pre-merge CI job, while all other qiskit components are using released versions published on pypi. This for two reasons primarily. First it is done to ensure we're actually testing what users actually run and that any potential compatibility issues between released versions and a potential change are caught prior to a release. The API stabililty guarantees provided by Qiskit projects only apply at release and for an integration test suite we only are concerned that we do not break compatibility with what users will be running and that there is an upgrade path for each project. Secondly, this is necessary because of limitations in the publically available CI systems on github. We do not have mechanisms in CI to enable co-gating or testing a PR with more than one proposed change applied (to 1 or more repository) so if we were to enable bidirectional ci (where an upstream project is run from main at the same time as the project under test and vice versa) there is a high probability of having the job broken on both sides without a way to unblock it without merging a PR that does not have passing CI.

Intentional API changes

As many qiskit projects don't strictly adhere to the use of public APIs exposed by the upstream qiskit projects there are situations that come up where an intentional api change to fix a bug or other scenario results in a break of a downstream project. In such situations a careful procedure needs to be followed to acknowledge the change and ensure it's clearly documented both in the upstream project's release documentation as well as for the downstream projects effected. The following procedure should be used to ensure this happens:

  1. Propose a PR to the upstream project that is failing qiskit-neko CI and has the appropriate release note. This will need an acknowledgement by a core team member that it is an acceptable change.
  2. Propose a PR to the downstream projects effected by the change proposed in #1 that makes the necessary updates to account for #1. This PR will likely also fail the qiskit-neko job which is expected until #1 is included in a new release of the upstream project.
  3. Propose a PR and tracking issue to qiskit-neko that adds a skip on the test with a skip message that refers to the tracking issue. This skip will remain in place until #1 and #2 are included in a release. 3a. If a test change is necessary propose that change along with the skip.
  4. When #1 and #2 are both released with the fix propose a PR removing the skip from qiskit-neko that closes the tracking issue.

License

Apache License 2.0

About

An integration test suite for Qiskit

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.1%
  • Shell 1.9%