Esempio n. 1
0
 def _generate_cqasm_from_circuit(circuit, full_state_projection=True):
     run_config_dict = {'shots': 25, 'memory': True}
     backend = QuantumInspireBackend(Mock(), Mock())
     qobj = assemble(circuit, backend, **run_config_dict)
     experiment = qobj.experiments[0]
     simulator = QuantumInspireBackend(Mock(), Mock())
     result = simulator._generate_cqasm(experiment, full_state_projection)
     return result
Esempio n. 2
0
 def test_for_fsp_no_measurements(self):
     with patch.object(QuantumInspireBackend,
                       "_submit_experiment",
                       return_value=Mock()) as result_experiment:
         api = Mock()
         project = {'id': 42}
         api.create_project.return_value = project
         api.get_jobs_from_project.return_value = []
         api.execute_qasm_async.return_value = 42
         simulator = QuantumInspireBackend(api, Mock())
         instructions = [{
             'name': 'cx',
             'qubits': [0, 1]
         }, {
             'name': 'x',
             'qubits': [0]
         }]
         experiment = self._basic_experiment_dictionary
         experiment['instructions'] = instructions
         qjob_dict = self._basic_qobj_dictionary
         qjob_dict['experiments'][0] = experiment
         qobj = QasmQobj.from_dict(qjob_dict)
         experiment = qobj.experiments[0]
         simulator.run(qobj)
     result_experiment.assert_called_once_with(experiment,
                                               25,
                                               project=project,
                                               full_state_projection=True)
Esempio n. 3
0
 def test_measurement_2_qubits_to_1_classical_bit(self):
     with patch.object(QuantumInspireBackend,
                       "_submit_experiment",
                       return_value=Mock()):
         api = Mock()
         project = {'id': 42}
         api.create_project.return_value = project
         api.get_jobs_from_project.return_value = []
         api.execute_qasm_async.return_value = 42
         simulator = QuantumInspireBackend(api, Mock())
         instructions = [{
             'name': 'cx',
             'qubits': [0, 1]
         }, {
             'memory': [0],
             'name': 'measure',
             'qubits': [0]
         }, {
             'name': 'x',
             'qubits': [0]
         }, {
             'memory': [0],
             'name': 'measure',
             'qubits': [1]
         }]
         experiment = self._basic_experiment_dictionary
         experiment['instructions'] = instructions
         qjob_dict = self._basic_qobj_dictionary
         qjob_dict['experiments'][0] = experiment
         qobj = QasmQobj.from_dict(qjob_dict)
         self.assertRaisesRegex(
             QisKitBackendError,
             'Measurement of different qubits to the same classical '
             'register 0 is not supported', simulator.run, qobj)
Esempio n. 4
0
 def test_retrieve_job_with_error(self):
     api = Mock(side_effect=ErrorMessage(error='404'))
     api.get_project.side_effect = ErrorMessage(error='404')
     backend = QuantumInspireBackend(api, QuantumInspireProvider())
     with self.assertRaises(QisKitBackendError) as error:
         backend.retrieve_job('wrong')
     self.assertEqual(("Could not retrieve job with job_id 'wrong' ",), error.exception.args)
Esempio n. 5
0
 def test_validate_nr_classical_qubits_less_than_nr_qubits_conditional_gate(
         self):
     api = Mock()
     api.create_project.return_value = {'id': 42}
     api.get_jobs_from_project.return_value = []
     api.execute_qasm_async.return_value = 42
     simulator = QuantumInspireBackend(api, Mock())
     instructions = [{
         'mask': '0xF',
         'name': 'bfunc',
         'register': 2,
         'relation': '==',
         'val': '0x1'
     }, {
         'conditional': 2,
         'name': 'cx',
         'qubits': [0, 1]
     }, {
         'memory': [1],
         'name': 'measure',
         'qubits': [0]
     }]
     qobj_dict = self._basic_qobj_dictionary
     job_dict = self._basic_qobj_dictionary
     qobj_dict['experiments'][0]['instructions'] = instructions
     job_dict['experiments'][0]['header']['memory_slots'] = 3
     job = qiskit.qobj.Qobj.from_dict(job_dict)
     self.assertRaisesRegex(
         QisKitBackendError,
         'Number of classical bits must be less than or equal to the'
         ' number of qubits when using conditional gate operations',
         simulator.run, job)
Esempio n. 6
0
 def test_get_experiment_results_returns_correct_value(self):
     number_of_shots = 100
     instructions = [{'name': 'h', 'qubits': [0]},
                     {'name': 'cx', 'qubits': [0, 1]},
                     {'name': 'measure', 'qubits': [1], 'memory': [1]},
                     {'name': 'measure', 'qubits': [0], 'memory': [0]}]
     experiment = self._instructions_to_two_qubit_experiment(instructions)
     api = Mock()
     api.get_result_from_job.return_value = {'id': 1, 'histogram': {'1': 0.6, '3': 0.4},
                                             'execution_time_in_seconds': 2.1, 'number_of_qubits': 2,
                                             'raw_data_url': 'http://saevar-qutech-nginx/api/results/24/raw-data/'}
     api.get_raw_data_from_result.return_value = [1] * 60 + [3] * 40
     jobs = self._basic_job_dictionary
     measurements = QuantumInspireBackend._collect_measurements(experiment)
     user_data = {'name': 'name', 'memory_slots': 2,
                  'creg_sizes': [['c1', 2]], 'measurements': measurements}
     jobs['user_data'] = json.dumps(user_data)
     api.get_jobs_from_project.return_value = [jobs]
     job = QIJob('backend', '42', api)
     simulator = QuantumInspireBackend(api, Mock())
     experiment_result = simulator.get_experiment_results(job)[0]
     self.assertEqual(experiment_result.data.counts['0x1'], 60)
     self.assertEqual(experiment_result.data.counts['0x3'], 40)
     self.assertEqual(experiment_result.data.probabilities['0x1'], 0.6)
     self.assertEqual(experiment_result.data.probabilities['0x3'], 0.4)
     self.assertEqual(len(experiment_result.data.memory), 100)
     self.assertEqual(experiment_result.data.memory.count('0x1'), 60)
     self.assertEqual(experiment_result.data.memory.count('0x3'), 40)
     self.assertEqual(experiment_result.name, 'circuit0')
     self.assertEqual(experiment_result.shots, number_of_shots)
Esempio n. 7
0
 def test_get_experiment_results_raises_simulation_error_when_no_histogram(self):
     api = Mock()
     api.get_jobs_from_project.return_value = [{'id': 42, 'results': '{}'}]
     api.get_result_from_job.return_value = {'histogram': [], 'raw_text': 'Error'}
     job = Mock()
     job.job_id.return_value = '42'
     simulator = QuantumInspireBackend(api, Mock())
     with self.assertRaises(QisKitBackendError) as error:
         simulator.get_experiment_results(job)
     self.assertEqual(('Result from backend contains no histogram data!\nError',), error.exception.args)
Esempio n. 8
0
 def test_validate_shot_count_zero(self):
     simulator = QuantumInspireBackend(Mock(), Mock())
     job_dict = self._basic_qobj_dictionary
     job_dict['config'][
         'shots'] = 1  # first set shots to 1 to satisfy qiskit model validation
     job = qiskit.qobj.QasmQobj.from_dict(
         job_dict)  # qiskit validation is satisfied
     job.config.shots = 0  # now set the number of shots to 0 to trigger our validation
     self.assertRaisesRegex(QisKitBackendError,
                            "Invalid shots \(number_of_shots=0\)",
                            simulator.run, job)
Esempio n. 9
0
 def _generate_cqasm_from_instructions(instructions, number_of_qubits=2):
     experiment_dict = {'instructions': instructions,
                        'header': {'n_qubits': number_of_qubits,
                                   'number_of_clbits': number_of_qubits,
                                   'compiled_circuit_qasm': ''},
                        'config': {'coupling_map': 'all-to-all',
                                   'basis_gates': 'x,y,z,h,rx,ry,rz,s,cx,ccx,u1,u2,u3,id,snapshot',
                                   'n_qubits': number_of_qubits}}
     experiment = qiskit.qobj.QobjExperiment.from_dict(experiment_dict)
     simulator = QuantumInspireBackend(Mock(), Mock())
     result = simulator._generate_cqasm(experiment)
     return result
Esempio n. 10
0
 def test_validate_no_classical_qubits(self):
     api = Mock()
     api.create_project.return_value = {'id': 42}
     api.get_jobs_from_project.return_value = []
     api.execute_qasm_async.return_value = 42
     simulator = QuantumInspireBackend(api, Mock())
     job_dict = self._basic_qobj_dictionary
     job_dict['experiments'][0]['instructions'] = []
     job_dict['experiments'][0]['header']['memory_slots'] = 0
     job = qiskit.qobj.Qobj.from_dict(job_dict)
     self.assertRaisesRegex(QisKitBackendError,
                            'Invalid amount of classical bits \(0\)!',
                            simulator.run, job)
Esempio n. 11
0
    def test_validate_shot_count(self):
        api = Mock()
        api.create_project.return_value = {'id': 42}
        api.get_jobs_from_project.return_value = []
        api.execute_qasm_async.return_value = 42
        api.get_backend_type_by_name.return_value = {'max_number_of_shots': 4096}
        simulator = QuantumInspireBackend(api, Mock())

        job_dict = self._basic_qobj_dictionary
        job_dict['config']['shots'] = 1                 # first set shots to 1 to satisfy qiskit model validation
        job = qiskit.qobj.QasmQobj.from_dict(job_dict)  # qiskit validation is satisfied
        job.config.shots = 0                            # now set the number of shots to 0 to trigger our validation
        self.assertRaisesRegex(QisKitBackendError, "Invalid shots \(number_of_shots=0\)", simulator.run, job)
        job.config.shots = 4097                         # now set the number of shots to a too high value
        self.assertRaisesRegex(QisKitBackendError, "Invalid shots \(number_of_shots=4097\)", simulator.run, job)
Esempio n. 12
0
    def test_run_returns_correct_result(self):
        api = Mock()
        api.create_project.return_value = {'id': 42}
        api.get_jobs_from_project.return_value = []
        api.execute_qasm_async.return_value = 42
        api.get_backend_type_by_name.return_value = {'max_number_of_shots': 4096}
        simulator = QuantumInspireBackend(api, Mock())
        instructions = [{'name': 'cx', 'qubits': [0, 1], 'memory': [0, 1]},
                        {'name': 'measure', 'qubits': [0], 'memory': [1]}]
        qobj_dict = self._basic_qobj_dictionary
        qobj_dict['experiments'][0]['instructions'] = instructions
        qobj = QasmQobj.from_dict(qobj_dict)

        job = simulator.run(qobj)
        self.assertEqual('42', job.job_id())