Ejemplo n.º 1
0
def get_unique_backends():
    """Gets the unique backends that are available.

    Returns:
        list: Unique available backends.

    Raises:
        QiskitError: No backends available.
        MissingOptionalLibraryError: If qiskit-ibmq-provider is not installed
    """
    try:
        from qiskit.providers.ibmq import IBMQ
    except ImportError as ex:
        raise MissingOptionalLibraryError(
            libname="qiskit-ibmq-provider",
            name="get_unique_backends",
            pip_install="pip install qiskit-ibmq-provider",
        ) from ex
    backends = []
    for provider in IBMQ.providers():
        for backend in provider.backends():
            backends.append(backend)
    unique_hardware_backends = []
    unique_names = []
    for back in backends:
        if back.name() not in unique_names and not back.configuration().simulator:
            unique_hardware_backends.append(back)
            unique_names.append(back.name())
    if not unique_hardware_backends:
        raise QiskitError("No backends available.")
    return unique_hardware_backends
Ejemplo n.º 2
0
def get_unique_backends():
    """Gets the unique backends that are available.

    Returns:
        list: Unique available backends.

    Raises:
        QiskitError: No backends available.
        ImportError: If qiskit-ibmq-provider is not installed
    """
    try:
        from qiskit.providers.ibmq import IBMQ
    except ImportError:
        raise ImportError("The IBMQ provider is necessary for this function "
                          " to work. Please ensure it's installed before "
                          "using this function")
    backends = []
    for provider in IBMQ.providers():
        for backend in provider.backends():
            backends.append(backend)
    unique_hardware_backends = []
    unique_names = []
    for back in backends:
        if back.name(
        ) not in unique_names and not back.configuration().simulator:
            unique_hardware_backends.append(back)
            unique_names.append(back.name())
    if not unique_hardware_backends:
        raise QiskitError('No backends available.')
    return unique_hardware_backends
Ejemplo n.º 3
0
    def _wrapper(obj, *args, **kwargs):

        qe_token = kwargs.pop('qe_token')
        qe_url = kwargs.pop('qe_url')
        if not IBMQ.active_account():
            IBMQ.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) or list(
            IBMQ._providers.values())[0]

        if backend_name:
            # Put desired provider as the first in the list.
            providers = [provider] + IBMQ.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 a suitable backend.')

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

        return func(obj, *args, **kwargs)
Ejemplo n.º 4
0
    def __init__(self, device=DEFAULT_DEVICE, **config):
        """
        Initialize an IBMQ provider. Uses Qiskit to run programs on IBMQ quantum computers.

        If you need to access the Qiskit provider directly for any reason, use `.provider`

        :param device: Initialize with a specific device, defaults to qasm_simulator. See `devices` to list options
        :param config: Additional Qiskit provider configuration. Passed along as key word arguments to Qiskit's IBMQ provider
        """

        IBMQ._try_login_saved_account()
        provider = QiskitIBMQ.providers()[0] if QiskitIBMQ.providers() else Aer

        config["provider"] = provider

        if "backend" in config:
            if not isinstance(config["backend"], str):
                config["backend"] = provider.get_backend(DEFAULT_DEVICE) if provider and provider.backends() else None

        super().__init__(**config)
Ejemplo n.º 5
0
 def test_experiments(self):
     """Test retrieving experiments."""
     self.assertTrue(self.experiments, "No experiments found.")
     providers = ['/'.join([provider.credentials.hub, provider.credentials.group,
                            provider.credentials.project]) for provider in IBMQ.providers()]
     for exp in self.experiments:
         self.assertTrue(isinstance(exp, Experiment))
         self.assertTrue(exp.uuid, "{} does not have an uuid!".format(exp))
         for dt_attr in ['start_datetime', 'creation_datetime',
                         'end_datetime', 'updated_datetime']:
             if getattr(exp, dt_attr):
                 self.assertTrue(getattr(exp, dt_attr).tzinfo)
         if exp.share_level is not ExperimentShareLevel.PUBLIC:
             self.assertIn('/'.join([exp.hub, exp.group, exp.project]),
                           providers)
Ejemplo n.º 6
0
def get_unique_backends():
    """Gets the unique backends that are available.

    Returns:
        list: Unique available backends.

    Raises:
        QiskitError: No backends available.
    """
    backends = []
    for provider in IBMQ.providers():
        for backend in provider.backends():
            backends.append(backend)
    unique_hardware_backends = []
    unique_names = []
    for back in backends:
        if back.name(
        ) not in unique_names and not back.configuration().simulator:
            unique_hardware_backends.append(back)
            unique_names.append(back.name())
    if not unique_hardware_backends:
        raise QiskitError('No backends available.')
    return unique_hardware_backends
Ejemplo n.º 7
0
def _get_backend(qe_token, qe_url, backend_name):
    """Get the specified backend."""
    _enable_account(qe_token, qe_url)

    _backend = None
    provider = _get_custom_provider(IBMQ) or list(IBMQ._providers.values())[0]

    if backend_name:
        # Put desired provider as the first in the list.
        providers = [provider] + IBMQ.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, min_num_qubits=5))

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

    return _backend