Пример #1
0
def run_on_backend(backend,
                   qobj,
                   backend_options=None,
                   noise_config=None,
                   skip_qobj_validation=False):
    if skip_qobj_validation:
        job_id = str(uuid.uuid4())
        if is_aer_provider(backend):
            from qiskit.providers.aer.aerjob import AerJob
            temp_backend_options = backend_options[
                'backend_options'] if backend_options != {} else None
            temp_noise_config = noise_config[
                'noise_model'] if noise_config != {} else None
            job = AerJob(backend, job_id, backend._run_job, qobj,
                         temp_backend_options, temp_noise_config, False)
            job._future = job._executor.submit(job._fn, job._job_id, job._qobj,
                                               *job._args)
        elif is_basicaer_provider(backend):
            backend._set_options(qobj_config=qobj.config, **backend_options)
            job = BasicAerJob(backend, job_id, backend._run_job, qobj)
            job._future = job._executor.submit(job._fn, job._job_id, job._qobj)
        elif is_ibmq_provider(backend):
            # TODO: IBMQJob performs validation during the constructor. the following lines does not
            # skip validation but run as is.
            from qiskit.providers.ibmq.ibmqjob import IBMQJob
            job = IBMQJob(backend, None, backend._api, qobj=qobj)
            job._future = job._executor.submit(job._submit_callback)
        else:
            logger.info(
                "Can't skip qobj validation for the third-party provider.")
            job = backend.run(qobj, **backend_options, **noise_config)
        return job
    else:
        job = backend.run(qobj, **backend_options, **noise_config)
        return job
Пример #2
0
def run_on_backend(backend: Union[Backend, BaseBackend],
                   qobj: QasmQobj,
                   backend_options: Optional[Dict] = None,
                   noise_config: Optional[Dict] = None,
                   skip_qobj_validation: bool = False) -> BaseJob:
    """ run on backend """
    if skip_qobj_validation:
        if is_aer_provider(backend) or is_basicaer_provider(backend):
            if backend_options is not None:
                for option, value in backend_options.items():
                    if option == 'backend_options':
                        for key, val in value.items():
                            setattr(qobj.config, key, val)
                    else:
                        setattr(qobj.config, option, value)
            if is_aer_provider(backend) and \
                    noise_config is not None and \
                    'noise_model' in noise_config:
                qobj.config.noise_model = noise_config['noise_model']
            job = backend.run(qobj, validate=False)
        else:
            logger.info("Can't skip qobj validation for the %s provider.",
                        backend.provider().__class__.__name__)
            job = backend.run(qobj, **backend_options, **noise_config)
        return job
    else:
        job = backend.run(qobj, **backend_options, **noise_config)
        return job
Пример #3
0
def run_on_backend(backend, qobj, backend_options=None,
                   noise_config=None, skip_qobj_validation=False):
    """ run on backend """
    if skip_qobj_validation:
        job_id = str(uuid.uuid4())
        if is_aer_provider(backend):
            from qiskit.providers.aer.aerjob import AerJob
            temp_backend_options = \
                backend_options['backend_options'] if backend_options != {} else None
            temp_noise_config = noise_config['noise_model'] if noise_config != {} else None
            job = AerJob(backend, job_id,
                         backend._run_job, qobj, temp_backend_options, temp_noise_config, False)
            job._future = job._executor.submit(job._fn, job._job_id, job._qobj, *job._args)
        elif is_basicaer_provider(backend):
            backend._set_options(qobj_config=qobj.config, **backend_options)
            job = BasicAerJob(backend, job_id, backend._run_job, qobj)
            job._future = job._executor.submit(job._fn, job._job_id, job._qobj)
        else:
            logger.info(
                "Can't skip qobj validation for the %s provider.",
                backend.provider().__class__.__name__)
            job = backend.run(qobj, **backend_options, **noise_config)
        return job
    else:
        job = backend.run(qobj, **backend_options, **noise_config)
        return job
Пример #4
0
def run_on_backend(backend,
                   qobj,
                   backend_options=None,
                   noise_config=None,
                   skip_qobj_validation=False):
    """ run on backend """
    if skip_qobj_validation:
        if is_aer_provider(backend):
            if backend_options is not None:
                for option, value in backend_options.items():
                    if option == 'backend_options':
                        for key, val in value.items():
                            setattr(qobj.config, key, val)
                    else:
                        setattr(qobj.config, option, value)
            if noise_config is not None and 'noise_model' in noise_config:
                qobj.config.noise_model = noise_config['noise_model']
            job = backend.run(qobj, validate=False)
        elif is_basicaer_provider(backend):
            job_id = str(uuid.uuid4())
            backend._set_options(qobj_config=qobj.config, **backend_options)
            job = BasicAerJob(backend, job_id, backend._run_job, qobj)
            job._future = job._executor.submit(job._fn, job._job_id, job._qobj)
        else:
            logger.info("Can't skip qobj validation for the %s provider.",
                        backend.provider().__class__.__name__)
            job = backend.run(qobj, **backend_options, **noise_config)
        return job
    else:
        job = backend.run(qobj, **backend_options, **noise_config)
        return job
Пример #5
0
def run_on_backend(backend,
                   qobj,
                   backend_options=None,
                   noise_config=None,
                   skip_qobj_validation=False):
    """ run on backend """
    if skip_qobj_validation:
        job_id = str(uuid.uuid4())
        if is_aer_provider(backend):
            # pylint: disable=import-outside-toplevel
            try:
                from qiskit.providers.aer.aerjob import AerJob
            except ImportError as ex:
                raise MissingOptionalLibraryError(
                    libname='qiskit-aer',
                    name='run_on_backend',
                    pip_install='pip install qiskit-aer') from ex
            temp_backend_options = \
                backend_options['backend_options'] if backend_options != {} else None
            temp_noise_config = noise_config[
                'noise_model'] if noise_config != {} else None

            # Add new options
            if temp_backend_options is not None or temp_noise_config is not None:
                config = qobj.config.to_dict()
                if temp_backend_options is not None:
                    for key, val in temp_backend_options.items():
                        config[key] = val if not hasattr(
                            val, 'to_dict') else val.to_dict()
                if temp_noise_config is not None:
                    config['noise_model'] = temp_noise_config
                qobj.config = QasmQobjConfig.from_dict(config)

            job = AerJob(backend, job_id, backend._run, qobj)
            job.submit()
        elif is_basicaer_provider(backend):
            backend._set_options(qobj_config=qobj.config, **backend_options)
            job = BasicAerJob(backend, job_id, backend._run_job, qobj)
            job._future = job._executor.submit(job._fn, job._job_id, job._qobj)
        else:
            logger.info("Can't skip qobj validation for the %s provider.",
                        backend.provider().__class__.__name__)
            job = backend.run(qobj, **backend_options, **noise_config)
        return job
    else:
        job = backend.run(qobj, **backend_options, **noise_config)
        return job