From c6f68c81eb4ea87ecc9ff8ede87e86df7b64a904 Mon Sep 17 00:00:00 2001 From: "Diego M. Rodriguez" Date: Tue, 15 Jan 2019 10:21:19 +0100 Subject: [PATCH 1/5] Remove mockutils, using qiskit.test.mock instead --- test/ibmq/test_ibmq_job_states.py | 2 +- test/mockutils.py | 68 ------------------------------- 2 files changed, 1 insertion(+), 69 deletions(-) delete mode 100644 test/mockutils.py diff --git a/test/ibmq/test_ibmq_job_states.py b/test/ibmq/test_ibmq_job_states.py index a15da238f..ed83da09b 100644 --- a/test/ibmq/test_ibmq_job_states.py +++ b/test/ibmq/test_ibmq_job_states.py @@ -13,12 +13,12 @@ import unittest from contextlib import suppress +from qiskit.test.mock import FakeBackend, new_fake_qobj from qiskit.providers import JobError, JobTimeoutError from qiskit.providers.ibmq.api import ApiError from qiskit.providers.ibmq.ibmqjob import API_FINAL_STATES, IBMQJob, IBMQJobPreQobj from qiskit.providers.jobstatus import JobStatus from ..jobtestcase import JobTestCase -from ..mockutils import FakeBackend, new_fake_qobj class TestIBMQJobStates(JobTestCase): diff --git a/test/mockutils.py b/test/mockutils.py deleted file mode 100644 index 0671f37fc..000000000 --- a/test/mockutils.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright 2018, IBM. -# -# This source code is licensed under the Apache License, Version 2.0 found in -# the LICENSE.txt file in the root directory of this source tree. - -"""Supporting fake, stubs and mocking classes. - -The module includes, among other, a dummy backend simulator. The purpose of -this class is to create a Simulator that we can trick for testing purposes: -testing local timeouts, arbitrary responses or behavior, etc. -""" - -import logging - -from qiskit.providers.models import BackendConfiguration -from qiskit.providers.models.backendconfiguration import GateConfig -from qiskit.qobj import Qobj, QobjConfig, QobjHeader, QobjInstruction, QobjItem -from qiskit.qobj import QobjExperiment, QobjExperimentHeader - -logger = logging.getLogger(__name__) - - -def new_fake_qobj(): - """Create fake `Qobj` and backend instances.""" - backend = FakeBackend() - return Qobj( - qobj_id='test-id', - config=QobjConfig(shots=1024, memory_slots=1, max_credits=100), - header=QobjHeader(backend_name=backend.name()), - experiments=[QobjExperiment( - instructions=[ - QobjInstruction(name='barrier', qubits=[1]) - ], - header=QobjExperimentHeader(compiled_circuit_qasm='fake-code'), - config=QobjItem(seed=123456) - )] - ) - - -class FakeBackend: - """A fake backend.""" - - def name(self): - """Name of fake backend""" - return 'qiskit_is_cool' - - def configuration(self): - """Return a make up configuration for a fake device.""" - qx5_cmap = [[1, 0], [1, 2], [2, 3], [3, 4], [3, 14], [5, 4], [6, 5], - [6, 7], [6, 11], [7, 10], [8, 7], [9, 8], [9, 10], [11, 10], - [12, 5], [12, 11], [12, 13], [13, 4], [13, 14], [15, 0], - [15, 2], [15, 14]] - return BackendConfiguration( - backend_name='fake', - backend_version='0.0.0', - n_qubits=16, - basis_gates=['u1', 'u2', 'u3', 'cx', 'id'], - simulator=False, - local=True, - conditional=False, - open_pulse=False, - memory=False, - max_shots=65536, - gates=[GateConfig(name='TODO', parameters=[], qasm_def='TODO')], - coupling_map=qx5_cmap, - ) From 4d4e6093ee340fd6cd68112a4fe3f6b02c9dafae Mon Sep 17 00:00:00 2001 From: "Diego M. Rodriguez" Date: Tue, 15 Jan 2019 10:25:09 +0100 Subject: [PATCH 2/5] Update tests with changes from terra 1673 --- test/ibmq/test_ibmq_backends.py | 20 ++++++++++++++++++++ test/ibmq/test_ibmq_job.py | 8 ++++---- test/ibmq/test_ibmq_job_states.py | 21 +++------------------ 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/test/ibmq/test_ibmq_backends.py b/test/ibmq/test_ibmq_backends.py index b81002488..840fbf1b1 100644 --- a/test/ibmq/test_ibmq_backends.py +++ b/test/ibmq/test_ibmq_backends.py @@ -9,6 +9,7 @@ """Tests for all IBMQ backends.""" from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister +from qiskit.providers.exceptions import QiskitBackendNotFoundError from qiskit.providers.ibmq import IBMQ from qiskit.qobj import QobjHeader from qiskit.test import QiskitTestCase, requires_qe_access, slow_test @@ -116,3 +117,22 @@ def test_qobj_headers_in_result_devices(self, qe_token, qe_url): self.assertEqual(result.header.to_dict(), custom_qobj_header) self.assertEqual(result.results[0].header.some_field, 'extra info') + + @requires_qe_access + def test_aliases(self, qe_token, qe_url): + """Test that display names of devices map the regular names.""" + IBMQ.enable_account(qe_token, qe_url) + aliased_names = IBMQ._aliased_backend_names() + + for display_name, backend_name in aliased_names.items(): + with self.subTest(display_name=display_name, + backend_name=backend_name): + try: + backend_by_name = IBMQ.get_backend(backend_name) + except QiskitBackendNotFoundError: + # The real name of the backend might not exist + pass + else: + backend_by_display_name = IBMQ.get_backend(display_name) + self.assertEqual(backend_by_name, backend_by_display_name) + self.assertEqual(backend_by_display_name.name(), backend_name) diff --git a/test/ibmq/test_ibmq_job.py b/test/ibmq/test_ibmq_job.py index 8e3a29a89..8fe4b02c9 100644 --- a/test/ibmq/test_ibmq_job.py +++ b/test/ibmq/test_ibmq_job.py @@ -341,8 +341,8 @@ def test_double_submit_fails(self, qe_token, qe_url): @unittest.skip('Temporarily disabled, see #1162') -class TestQObjectBasedIBMQJob(JobTestCase): - """Test jobs supporting QObject.""" +class TestQobjBasedIBMQJob(JobTestCase): + """Test jobs supporting Qobj.""" def setUp(self): super().setUp() @@ -358,13 +358,13 @@ def setUp(self): self._qc = _bell_circuit() - def test_qobject_enabled_job(self): + def test_qobj_enabled_job(self): """Job should be an instance of IBMQJob.""" qobj = compile(self._qc, self._backend) job = self._backend.run(qobj) self.assertIsInstance(job, IBMQJob) - def test_qobject_result(self): + def test_qobj_enabled_result(self): """Jobs can be retrieved.""" qobj = compile(self._qc, self._backend) job = self._backend.run(qobj) diff --git a/test/ibmq/test_ibmq_job_states.py b/test/ibmq/test_ibmq_job_states.py index ed83da09b..fa260cacb 100644 --- a/test/ibmq/test_ibmq_job_states.py +++ b/test/ibmq/test_ibmq_job_states.py @@ -13,10 +13,10 @@ import unittest from contextlib import suppress -from qiskit.test.mock import FakeBackend, new_fake_qobj +from qiskit.test.mock import new_fake_qobj, FakeRueschlikon from qiskit.providers import JobError, JobTimeoutError from qiskit.providers.ibmq.api import ApiError -from qiskit.providers.ibmq.ibmqjob import API_FINAL_STATES, IBMQJob, IBMQJobPreQobj +from qiskit.providers.ibmq.ibmqjob import API_FINAL_STATES, IBMQJobPreQobj from qiskit.providers.jobstatus import JobStatus from ..jobtestcase import JobTestCase @@ -247,26 +247,11 @@ def test_only_final_states_cause_datailed_request(self): else: self.assertFalse(self._current_api.get_job.called) - # TODO: Once qobj results come by default from all the simulator - # backends, move to integration tests in test_result.py - def test_qobj_result(self): - job = self.run_with_api(QObjResultAPI(), job_class=IBMQJob) - - self.wait_for_initialization(job) - self._current_api.progress() - result = job.result() - self.assertEqual(result.success, True) - self.assertEqual(result.get_counts('Bell state'), - {'00': 480, '11': 490, '01': 20, '10': 34}) - self.assertEqual(result.get_counts('Bell state XY'), - {'00': 29, '11': 15, '01': 510, '10': 480}) - self.assertEqual(len(result.results), 2) - def run_with_api(self, api, job_class=IBMQJobPreQobj): """Creates a new ``IBMQJobPreQobj`` instance running with the provided API object. """ - backend = FakeBackend() + backend = FakeRueschlikon() self._current_api = api self._current_qjob = job_class(backend, None, api, False, qobj=new_fake_qobj()) self._current_qjob.submit() From efc69e6cc1cc0ad81301556b0b2dd990bf56ed46 Mon Sep 17 00:00:00 2001 From: "Diego M. Rodriguez" Date: Tue, 15 Jan 2019 10:26:39 +0100 Subject: [PATCH 3/5] Update tests with changes from terra 1674 --- test/ibmq/test_ibmq_job.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/ibmq/test_ibmq_job.py b/test/ibmq/test_ibmq_job.py index 8fe4b02c9..0efcd616f 100644 --- a/test/ibmq/test_ibmq_job.py +++ b/test/ibmq/test_ibmq_job.py @@ -288,8 +288,7 @@ def test_get_jobs_filter_job_status(self, qe_token, qe_url): job_list = backend.jobs(limit=5, skip=0, status=JobStatus.DONE) self.log.info('found %s matching jobs', len(job_list)) - for i, job in enumerate(job_list): - self.log.info('match #%d: %s', i, job.result().status) + for job in job_list: self.assertTrue(job.status() is JobStatus.DONE) @requires_qe_access From 1c5d4358c92a024b0806ca2a110a15f9661c7ae6 Mon Sep 17 00:00:00 2001 From: "Diego M. Rodriguez" Date: Mon, 14 Jan 2019 11:11:30 +0100 Subject: [PATCH 4/5] Fix unused imports in tests --- test/ibmq/test_ibmq_connector.py | 1 - test/ibmq/test_ibmq_integration.py | 2 -- test/ibmq/test_ibmq_job_states.py | 1 - test/ibmq/test_ibmq_qobj.py | 1 - 4 files changed, 5 deletions(-) diff --git a/test/ibmq/test_ibmq_connector.py b/test/ibmq/test_ibmq_connector.py index 382e58cf1..fff5f5ec6 100644 --- a/test/ibmq/test_ibmq_connector.py +++ b/test/ibmq/test_ibmq_connector.py @@ -8,7 +8,6 @@ """Test IBMQConnector.""" import re -import unittest from qiskit.providers.ibmq.api import (ApiError, BadBackendError, IBMQConnector, RegisterSizeError) diff --git a/test/ibmq/test_ibmq_integration.py b/test/ibmq/test_ibmq_integration.py index 7a8e0fd0d..a50010e4e 100644 --- a/test/ibmq/test_ibmq_integration.py +++ b/test/ibmq/test_ibmq_integration.py @@ -7,8 +7,6 @@ """IBMQ provider integration tests (compile and run).""" -import unittest - from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister from qiskit.providers.ibmq import IBMQ, least_busy from qiskit.result import Result diff --git a/test/ibmq/test_ibmq_job_states.py b/test/ibmq/test_ibmq_job_states.py index fa260cacb..a7d006bc2 100644 --- a/test/ibmq/test_ibmq_job_states.py +++ b/test/ibmq/test_ibmq_job_states.py @@ -10,7 +10,6 @@ """IBMQJob states test-suite.""" import time -import unittest from contextlib import suppress from qiskit.test.mock import new_fake_qobj, FakeRueschlikon diff --git a/test/ibmq/test_ibmq_qobj.py b/test/ibmq/test_ibmq_qobj.py index f8c554bae..1a15d1d7c 100644 --- a/test/ibmq/test_ibmq_qobj.py +++ b/test/ibmq/test_ibmq_qobj.py @@ -8,7 +8,6 @@ """IBMQ Remote Backend Qobj Tests.""" import os -import unittest from qiskit import (BasicAer, ClassicalRegister, QuantumCircuit, QuantumRegister) From 430d5c24e1f85599a09ef1900120b66c5d3a4e90 Mon Sep 17 00:00:00 2001 From: "Diego M. Rodriguez" Date: Mon, 14 Jan 2019 10:52:59 +0100 Subject: [PATCH 5/5] Travis: clone via https instead of git --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8f39f5c57..92ce3df90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,7 @@ stage_generic: &stage_generic # Install step for jobs that require compilation and qa. # TODO: until the split is complete, install a terra branch. # - pip install -U -r requirements.txt - - git clone --single-branch --branch feature/remove-ibmq git@github.com:diego-plan9/qiskit-sdk-py.git + - git clone --single-branch --branch feature/remove-ibmq https://github.com/diego-plan9/qiskit-sdk-py.git - pip install -e qiskit-sdk-py - pip install "requests>=2.19" - pip install "requests-ntlm>=1.1.0"