Exemple #1
0
    def _format_qobj_str(self, qobj, backend_options, noise_model):
        """Format qobj string for qiskit aer controller"""
        # Save original qobj config so we can revert our modification
        # after execution
        original_config = qobj.config
        # Convert to dictionary and add new parameters
        # from noise model and backend options
        config = original_config.as_dict()
        if backend_options is not None:
            for key, val in backend_options.items():
                config[key] = val
        if "max_memory_mb" not in config:
            max_memory_mb = int(local_hardware_info()['memory'] * 1024 / 2)
            config['max_memory_mb'] = max_memory_mb
        # Add noise model
        if noise_model is not None:
            config["noise_model"] = noise_model

        # Add runtime config
        config['library_dir'] = self.configuration().library_dir
        qobj.config = QasmQobjConfig.from_dict(config)
        # Get the JSON serialized string
        output = json.dumps(qobj, cls=AerJSONEncoder).encode('UTF-8')
        # Revert original qobj
        qobj.config = original_config
        # Return output
        return output
Exemple #2
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