def test_mix_local_remote_jobs(self, QE_TOKEN, QE_URL): """test mixing local and remote jobs Internally local jobs execute in seperate processes since they are CPU bound and remote jobs execute in seperate threads since they are I/O bound. The module gets results from potentially both kinds in one list. Test that this works. """ provider = IBMQProvider(QE_TOKEN, QE_URL) remote_backend = provider.available_backends({'simulator': True})[0] local_backend = get_backend('local_qasm_simulator') njobs = 6 job_list = [] backend_type = [local_backend, remote_backend] i = 0 for circuit in self.rqg.get_circuits(format_='QuantumCircuit')[:njobs]: compiled_circuit = compile_circuit(circuit) backend = backend_type[i % len(backend_type)] self.log.info(backend) quantum_job = QuantumJob(compiled_circuit, backend=backend) job_list.append(quantum_job) i += 1 jp = jobprocessor.JobProcessor(job_list, max_workers=None, callback=None) jp.submit()
def test_mix_local_remote_jobs(self): """test mixing local and remote jobs Internally local jobs execute in seperate processes since they are CPU bound and remote jobs execute in seperate threads since they are I/O bound. The module gets results from potentially both kinds in one list. Test that this works. """ njobs = 6 job_list = [] basis = 'u1,u2,u3,cx' backend_type = ['local_qasm_simulator', 'ibmqx_qasm_simulator'] i = 0 for circuit in self.rqg.get_circuits(format='QuantumCircuit')[:njobs]: compiled_circuit = openquantumcompiler.compile(circuit.qasm()) backend = backend_type[i % len(backend_type)] self.log.info(backend) quantum_job = QuantumJob(compiled_circuit, backend=backend) job_list.append(quantum_job) i += 1 jp = jobprocessor.JobProcessor(job_list, max_workers=None, token=self.QE_TOKEN, url=self.QE_URL, callback=None) jp.submit(silent=True)
def test_run_job_processor_local_parallel(self): def job_done_callback(results): try: self.log.info(pprint.pformat(results)) for result in results: self.assertTrue(result.get_status() == 'COMPLETED') except Exception as e: self.job_processor_exception = e finally: self.job_processor_finished = True njobs = 20 job_list = [] for i in range(njobs): compiled_circuit = openquantumcompiler.compile(self.qc.qasm()) quantum_job = QuantumJob(compiled_circuit, backend='local_qasm_simulator') job_list.append(quantum_job) self.job_processor_finished = False self.job_processor_exception = None jp = jobprocessor.JobProcessor(job_list, max_workers=None, callback=job_done_callback) jp.submit(silent=True) while not self.job_processor_finished: # Wait until the job_done_callback is invoked and completed. pass if self.job_processor_exception: raise self.job_processor_exception
def test_compile_job(self): """Test compilation as part of job""" backend = QasmSimulator() quantum_job = QuantumJob(self.qasm_circ, do_compile=True, backend=backend) jp = jobprocessor.JobProcessor([quantum_job], callback=None) jp.submit()
def test_compile_job(self): """Test compilation as part of job""" quantum_job = QuantumJob(self.qasm_text, do_compile=True, backend='local_qasm_simulator') jp = jobprocessor.JobProcessor([quantum_job], callback=None) jp.submit(silent=True)
def test_run_job_processor_local_parallel(self): def job_done_callback(results): try: self.log.info(pprint.pformat(results)) for result in results: self.assertTrue(result.get_status() == 'COMPLETED') except Exception as e: self.job_processor_exception = e finally: self.job_processor_finished = True njobs = 20 job_list = [] # TODO: make this run on `local_qasm_simulator` after `do_compile` # is fixed in _quantumjob. backend = get_backend('local_qasm_simulator_py') for _ in range(njobs): compiled_circuit = compile_circuit(self.qc) quantum_job = QuantumJob(compiled_circuit, backend=backend) job_list.append(quantum_job) self.job_processor_finished = False self.job_processor_exception = None jp = jobprocessor.JobProcessor(job_list, max_workers=None, callback=job_done_callback) jp.submit() while not self.job_processor_finished: # Wait until the job_done_callback is invoked and completed. pass if self.job_processor_exception: raise self.job_processor_exception
def test_init_job_processor(self): njobs = 5 job_list = [] for i in range(njobs): quantum_job = QuantumJob(self.qc, do_compile=False) job_list.append(quantum_job) jp = jobprocessor.JobProcessor(job_list, callback=None)
def test_init_job_processor(self): njobs = 5 job_list = [] backend = get_backend('local_qasm_simulator') for _ in range(njobs): quantum_job = QuantumJob(self.qc, backend, do_compile=False) job_list.append(quantum_job) _ = jobprocessor.JobProcessor(job_list, callback=None)
def test_run_job_processor_online(self): njobs = 1 job_list = [] for _ in range(njobs): compiled_circuit = openquantumcompiler.compile(self.qc.qasm()) quantum_job = QuantumJob(compiled_circuit, backend='ibmqx_qasm_simulator') job_list.append(quantum_job) jp = jobprocessor.JobProcessor(job_list, callback=None) jp.submit()
def test_run_job_processor_local(self): njobs = 5 job_list = [] for i in range(njobs): compiled_circuit = openquantumcompiler.compile(self.qc.qasm()) quantum_job = QuantumJob(compiled_circuit, backend='local_qasm_simulator', do_compile=False) job_list.append(quantum_job) jp = jobprocessor.JobProcessor(job_list, callback=None) jp.submit(silent=True)
def test_random_local(self): """test randomly generated circuits on local_qasm_simulator""" njobs = 5 job_list = [] backend = 'local_qasm_simulator' for circuit in self.rqg.get_circuits(format_='QuantumCircuit')[:njobs]: compiled_circuit = openquantumcompiler.compile(circuit.qasm()) quantum_job = QuantumJob(compiled_circuit, backend=backend) job_list.append(quantum_job) jp = jobprocessor.JobProcessor(job_list, max_workers=1, callback=None) jp.submit()
def test_run_job_processor_online(self, QE_TOKEN, QE_URL): provider = IBMQProvider(QE_TOKEN, QE_URL) backend = provider.available_backends({'simulator': True})[0] njobs = 1 job_list = [] for _ in range(njobs): compiled_circuit = compile_circuit(self.qc) quantum_job = QuantumJob(compiled_circuit, backend=backend) job_list.append(quantum_job) jp = jobprocessor.JobProcessor(job_list, callback=None) jp.submit()
def test_run_job_processor_local(self): njobs = 5 job_list = [] backend = get_backend('local_qasm_simulator') for _ in range(njobs): compiled_circuit = compile_circuit(self.qc) quantum_job = QuantumJob(compiled_circuit, backend=backend, do_compile=False) job_list.append(quantum_job) jp = jobprocessor.JobProcessor(job_list, callback=None) jp.submit()
def test_run_job_processor_online(self): njobs = 1 job_list = [] for i in range(njobs): compiled_circuit = openquantumcompiler.compile(self.qc.qasm()) qjob = jobp.QuantumJob(compiled_circuit, backend='ibmqx_qasm_simulator') job_list.append(qjob) jp = jobp.JobProcessor(job_list, token=self.QE_TOKEN, url=self.QE_URL, callback=None) jp.submit(silent=True)
def test_run_job_processor_local_parallel(self): njobs = 20 job_list = [] for i in range(njobs): compiled_circuit = openquantumcompiler.compile(self.qc.qasm()) qjob = jobp.QuantumJob(compiled_circuit, backend='local_qasm_simulator') job_list.append(qjob) def job_done_callback(results): self.log.info(pprint.pformat(results)) for result, _ in results: self.assertTrue(result['result'][0]['status'] == 'DONE') jp = jobp.JobProcessor(job_list, max_workers=None, callback=job_done_callback) jp.submit(silent=True)
def test_error_in_job(self): njobs = 5 job_list = [] for i in range(njobs): compiled_circuit = openquantumcompiler.compile(self.qc.qasm()) qjob = jobp.QuantumJob(compiled_circuit, backend='local_qasm_simulator') job_list.append(qjob) def job_done_callback(results): for result, _ in results: self.log.info(pprint.pformat(result)) self.assertTrue(result['status'] == 'ERROR') jp = jobp.JobProcessor(job_list, max_workers=None, callback=job_done_callback) tmp = jobp.run_local_simulator jobp.run_local_simulator = mock_run_local_simulator jp.submit(silent=True) jobp.run_local_simulator = tmp
def test_error_in_job(self): def job_done_callback(results): try: for result in results: self.log.info(pprint.pformat(result)) self.assertTrue(result.get_status() == 'ERROR') except Exception as e: self.job_processor_exception = e finally: self.job_processor_finished = True njobs = 5 job_list = [] backend = get_backend('local_qasm_simulator') for _ in range(njobs): compiled_circuit = compile_circuit(self.qc) quantum_job = QuantumJob(compiled_circuit, backend=backend) job_list.append(quantum_job) self.job_processor_finished = False self.job_processor_exception = None jp = jobprocessor.JobProcessor(job_list, max_workers=None, callback=job_done_callback) tmp = jobprocessor.run_backend jobprocessor.run_backend = mock_run_local_backend jp.submit() jobprocessor.run_backend = tmp while not self.job_processor_finished: # Wait until the job_done_callback is invoked and completed. pass if self.job_processor_exception: raise self.job_processor_exception