Пример #1
0
def disable_ibmq_account(url, token, proxies):
    """Disable IBMQ account."""
    if not has_ibmq():
        return
    try:
        url = url or ''
        token = token or ''
        proxies = proxies or {}
        if url != '' and token != '':
            # pylint: disable=no-name-in-module, import-error
            from qiskit import IBMQ
            if IBMQ._v1_provider._accounts:
                from qiskit.providers.ibmq.credentials import Credentials
                credentials = Credentials(token, url, proxies=proxies)
                unique_id = credentials.unique_id()
                if unique_id in IBMQ._v1_provider._accounts:
                    del IBMQ._v1_provider._accounts[unique_id]
                    logger.info("Disabled IBMQ v1 account. Url:'{}' "
                                "Token:'{}' Proxies:'{}'".format(url, token, proxies))
                else:
                    logger.info("IBMQ v1 account is not active. Not disabled. "
                                "Url:'{}' Token:'{}' Proxies:'{}'".format(url, token, proxies))
            elif IBMQ._credentials:
                enabled_credentials = IBMQ._credentials
                if enabled_credentials.url == url and enabled_credentials.token == token and enabled_credentials.proxies == proxies:
                    IBMQ.disable_account()
                else:
                    logger.info("IBMQ v2 account is not active. Not disabled. "
                                "Url:'{}' Token:'{}' Proxies:'{}'".format(url, token, proxies))
    except Exception as e:
        logger.warning("Failed to disable IBMQ account. Url:'{}' "
                       "Token:'{}' Proxies:'{}' :{}".format(url, token, proxies, str(e)))
Пример #2
0
def token():
    t = os.getenv("IBMQX_TOKEN", None)

    if t is None:
        pytest.skip("Skipping test, no IBMQ token available")

    yield t
    IBMQ.disable_account()
Пример #3
0
def backend(account, backend_id):
    token = utils.accounts()[account]["token"]
    try:
        IBMQ.disable_account()
    except:
        pass
    provider = IBMQ.enable_account(token)
    return provider.get_backend(backend_id)
Пример #4
0
def token():
    """Get the IBMQX test token."""
    t = os.getenv("IBMQX_TOKEN_TEST", None)

    if t is None:
        pytest.skip("Skipping test, no IBMQ token available")

    yield t
    IBMQ.disable_account()
Пример #5
0
def _refresh_ibmq_account():
    """
    Refresh IBMQ account by enabling or disabling it depending on preferences stored values
    """
    preferences = Preferences().ibmq_credentials_preferences
    token = preferences.token or ''
    proxies = preferences.proxies or {}
    hub = preferences.hub
    group = preferences.group
    project = preferences.project
    provider = None
    try:
        # pylint: disable=no-name-in-module, import-error
        from qiskit import IBMQ
        providers = IBMQ.providers()
        if token != '':
            # check if there was a previous account that needs to be disabled first
            disable_account = False
            enable_account = True
            for provider in providers:
                if provider.credentials.token == token and provider.credentials.proxies == proxies:
                    enable_account = False
                else:
                    disable_account = True

            if disable_account:
                IBMQ.disable_account()
                logger.info('Disabled IBMQ account.')

            if enable_account:
                IBMQ.enable_account(token, proxies=proxies)
                logger.info('Enabled IBMQ account.')

            providers = IBMQ.providers(hub=hub, group=group, project=project)
            provider = providers[0] if providers else None
            if provider is None:
                logger.info(
                    "No Provider found for IBMQ account. "
                    "Hub/Group/Project: '%s/%s/%s' Proxies:'%s'", hub, group,
                    project, proxies)
        else:
            if providers:
                IBMQ.disable_account()
                logger.info('Disabled IBMQ account.')
    except Exception as ex:  # pylint: disable=broad-except
        logger.warning(
            "IBMQ account Account Failure. "
            "Hub/Group/Project: '%s/%s/%s' "
            "Proxies:'%s' :%s", hub, group, project, proxies, str(ex))

    return provider
Пример #6
0
def connect(kwargs):
    """Function that allows connection to IBMQ.

    Args:
        kwargs(dict): dictionary that contains the token and the url"""

    token = kwargs.get("ibmqx_token", None) or os.getenv("IBMQX_TOKEN")
    url = kwargs.get("ibmqx_url", None) or os.getenv("IBMQX_URL")

    # TODO: remove "no cover" when #173 is resolved
    if token is not None:  # pragma: no cover
        # token was provided by the user, so attempt to enable an
        # IBM Q account manually
        def login():
            ibmq_kwargs = {"url": url} if url is not None else {}
            IBMQ.enable_account(token, **ibmq_kwargs)

        active_account = IBMQ.active_account()
        if active_account is None:
            login()
        else:
            # There is already an active account:
            # If the token is the same, do nothing.
            # If the token is different, authenticate with the new account.
            if active_account["token"] != token:
                IBMQ.disable_account()
                login()
    else:
        # check if an IBM Q account is already active.
        #
        # * IBMQ v2 credentials stored in active_account().
        #   If no accounts are active, it returns None.

        if IBMQ.active_account() is None:
            # no active account
            try:
                # attempt to load a v2 account stored on disk
                IBMQ.load_account()
            except IBMQAccountError:
                # attempt to enable an account manually using
                # a provided token
                raise IBMQAccountError(
                    "No active IBM Q account, and no IBM Q token provided."
                ) from None
Пример #7
0
def enable_ibmq_account(url, token, proxies):
    """
    Enable IBMQ account, if not alreay enabled.
    """
    provider = None
    if not has_ibmq():
        return provider
    try:
        url = url or ''
        token = token or ''
        proxies = proxies or {}
        if url != '' and token != '':
            # pylint: disable=no-name-in-module, import-error
            from qiskit import IBMQ
            from qiskit.providers.ibmq.credentials import Credentials
            credentials = Credentials(token, url, proxies=proxies)
            unique_id = credentials.unique_id()
            if IBMQ._v1_provider._accounts:
                if unique_id in IBMQ._v1_provider._accounts:
                    # disable first any existent previous account with same unique_id and different properties
                    enabled_credentials = IBMQ._v1_provider._accounts[unique_id].credentials
                    if enabled_credentials.url != url or enabled_credentials.token != token or enabled_credentials.proxies != proxies:
                        del IBMQ._v1_provider._accounts[unique_id]
                    else:
                        return IBMQ._v1_provider
            elif IBMQ._credentials:
                enabled_credentials = IBMQ._credentials
                # disable first any existent previous account with same unique_id and different properties
                if enabled_credentials.url != url or enabled_credentials.token != token or enabled_credentials.proxies != proxies:
                    IBMQ.disable_account()
                else:
                    providers = IBMQ.providers(hub=unique_id.hub, group=unique_id.group, project=unique_id.project)
                    return providers[0] if providers else None

            provider = IBMQ.enable_account(token, url=url, proxies=proxies)
            logger.info("Enabled IBMQ account. Url:'{}' Token:'{}' "
                        "Proxies:'{}'".format(url, token, proxies))
    except Exception as e:
        logger.warning("Failed to enable IBMQ account. Url:'{}' Token:'{}' "
                       "Proxies:'{}' :{}".format(url, token, proxies, str(e)))

    return provider
def get_qc_actual_results(circuit, sim_count=1024):
    token = open(r"<path to token file>\ibm_token.txt",
                 mode='r').read()  # or just copy the token here
    # In case you do not want to save credential on disk, just enable & disable them as required
    provider = IBMQ.enable_account(token)
    provider = IBMQ.get_provider()

    # for keeping the credentioal on disk, just save once& then use laod
    # IBMQ.save_account(token)
    # provider = IBMQ.load_account()

    # Load IBM Q account and get the least busy backend device
    device = least_busy(provider.backends(simulator=False))
    print("Running on current least busy device: ", device)

    # Run our circuit on the least busy backend. Monitor the execution of the job in the queue
    job = execute(circuit, backend=device, shots=sim_count, max_credits=10)
    job_monitor(job, interval=2)

    # Get the results from the computation, job.result() will wait untill your program is finished
    results = job.result()
    IBMQ.disable_account()
    return results