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
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