class TestIBMQFactoryProvider(IBMQTestCase):
    """Tests for IBMQFactory provider related methods."""
    @requires_qe_access
    def _get_provider(self, qe_token=None, qe_url=None):
        """Return default provider."""
        return self.factory.enable_account(qe_token, qe_url)

    def setUp(self):
        """Initial test setup."""
        super().setUp()

        self.factory = IBMQFactory()
        self.provider = self._get_provider()
        self.credentials = self.provider.credentials

    def test_get_provider(self):
        """Test get single provider."""
        provider = self.factory.get_provider(hub=self.credentials.hub,
                                             group=self.credentials.group,
                                             project=self.credentials.project)
        self.assertEqual(self.provider, provider)

    def test_providers_with_filter(self):
        """Test providers() with a filter."""
        provider = self.factory.providers(hub=self.credentials.hub,
                                          group=self.credentials.group,
                                          project=self.credentials.project)[0]
        self.assertEqual(self.provider, provider)

    def test_providers_no_filter(self):
        """Test providers() without a filter."""
        providers = self.factory.providers()
        self.assertIn(self.provider, providers)
示例#2
0
def get_provider(ibmq_factory: IBMQFactory,
                 qe_token: str,
                 qe_url: str,
                 default: bool = True) -> AccountProvider:
    """Return a provider for the account.

    Args:
        ibmq_factory: An `IBMQFactory` instance.
        qe_token: IBM Quantum Experience token.
        qe_url: IBM Quantum Experience auth URL.
        default: If `True`, the default open access project provider is returned.
            Otherwise, a non open access project provider is returned.

    Returns:
        A provider, as specified by `default`.
    """
    provider_to_return = ibmq_factory.enable_account(
        qe_token, url=qe_url)  # Default provider.
    if not default:
        # Get a non default provider (i.e.not the default open access project).
        providers = ibmq_factory.providers()
        for provider in providers:
            if provider != provider_to_return:
                provider_to_return = provider
                break
    ibmq_factory.disable_account()

    return provider_to_return
    def test_pulse_job(self, qe_token, qe_url):
        """Test running a pulse job."""

        factory = IBMQFactory()
        factory.enable_account(qe_token, qe_url)

        backend = None
        for provider in factory.providers():
            backends = provider.backends(open_pulse=True)
            if backends:
                backend = least_busy(backends)
                break

        self.assertIsNotNone(backend)
        config = backend.configuration()
        defaults = backend.defaults()
        cmd_def = defaults.build_cmd_def()

        # Run 2 experiments - 1 with x pulse and 1 without
        x = cmd_def.get('x', 0)
        measure = cmd_def.get('measure', range(config.n_qubits)) << x.duration
        ground_sched = measure
        excited_sched = x | measure
        schedules = [ground_sched, excited_sched]

        qobj = assemble(schedules, backend, meas_level=1, shots=256)
        job = backend.run(qobj)
        _ = job.result()
    def _wrapper(obj, *args, **kwargs):

        if get_test_options()['skip_online']:
            raise SkipTest('Skipping online tests')

        if os.getenv('USE_STAGING_CREDENTIALS', ''):
            credentials = Credentials(os.getenv('QE_STAGING_TOKEN'), os.getenv('QE_STAGING_URL'))
            backend_name = os.getenv('QE_STAGING_DEVICE', None)
        else:
            if not get_test_options()['run_slow']:
                raise SkipTest('Skipping slow tests')
            credentials = _get_credentials()
            backend_name = os.getenv('QE_DEVICE', None)

        obj.using_ibmq_credentials = credentials.is_ibmq()
        ibmq_factory = IBMQFactory()
        provider = ibmq_factory.enable_account(credentials.token, credentials.url)

        _backend = None
        if backend_name:
            for provider in ibmq_factory.providers():
                backends = provider.backends(name=backend_name)
                if backends:
                    _backend = backends[0]
                    break
        else:
            _backend = least_busy(provider.backends(simulator=False))

        if not _backend:
            raise Exception("Unable to find suitable backend.")

        kwargs.update({'provider': provider})
        kwargs.update({'backend': _backend})

        return func(obj, *args, **kwargs)
    def _wrapper(obj, *args, **kwargs):

        ibmq_factory = IBMQFactory()
        qe_token = kwargs.pop('qe_token')
        qe_url = kwargs.pop('qe_url')
        provider = ibmq_factory.enable_account(qe_token, qe_url)

        backend_name = os.getenv('QE_STAGING_DEVICE', None) if \
            os.getenv('USE_STAGING_CREDENTIALS', '') else os.getenv('QE_DEVICE', None)

        _backend = None
        provider = _get_custom_provider(ibmq_factory) or provider

        if backend_name:
            # Put desired provider as the first in the list.
            providers = [provider] + ibmq_factory.providers()
            for provider in providers:
                backends = provider.backends(name=backend_name)
                if backends:
                    _backend = backends[0]
                    break
        else:
            _backend = least_busy(provider.backends(
                simulator=False, filters=lambda b: b.configuration().n_qubits >= 5))

        if not _backend:
            raise Exception("Unable to find suitable backend.")

        kwargs.update({'backend': _backend})

        return func(obj, *args, **kwargs)