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
示例#4
0
 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)
示例#11
0
 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