def test_snapshot_instruction_from_dict(self): """Test snapshot instruction from dict.""" expected_qobj = QasmQobj( qobj_id='12345', header=QobjHeader(), config=QasmQobjConfig(shots=1024, memory_slots=2, max_credits=10), experiments=[ QasmQobjExperiment(instructions=[ QasmQobjInstruction(name='u1', qubits=[1], params=[0.4]), QasmQobjInstruction(name='u2', qubits=[1], params=[0.4, 0.2]), QasmQobjInstruction(name='snapshot', qubits=[1], snapshot_type='statevector', label='my_snap') ]) ] ) qobj_dict = { 'qobj_id': '12345', 'type': 'QASM', 'schema_version': '1.1.0', 'header': {}, 'config': {'max_credits': 10, 'memory_slots': 2, 'shots': 1024}, 'experiments': [ {'instructions': [ {'name': 'u1', 'params': [0.4], 'qubits': [1]}, {'name': 'u2', 'params': [0.4, 0.2], 'qubits': [1]}, {'name': 'snapshot', 'qubits': [1], 'snapshot_type': 'statevector', 'label': 'my_snap'} ]} ], } self.assertEqual(expected_qobj, QasmQobj.from_dict(qobj_dict))
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)
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)
def test_snapshot_instruction_from_dict(self): """Test snapshot instruction from dict.""" expected_qobj = QasmQobj( qobj_id="12345", header=QobjHeader(), config=QasmQobjConfig(shots=1024, memory_slots=2, max_credits=10), experiments=[ QasmQobjExperiment(instructions=[ QasmQobjInstruction(name="u1", qubits=[1], params=[0.4]), QasmQobjInstruction( name="u2", qubits=[1], params=[0.4, 0.2]), QasmQobjInstruction( name="snapshot", qubits=[1], snapshot_type="statevector", label="my_snap", ), ]) ], ) qobj_dict = { "qobj_id": "12345", "type": "QASM", "schema_version": "1.2.0", "header": {}, "config": { "max_credits": 10, "memory_slots": 2, "shots": 1024 }, "experiments": [{ "instructions": [ { "name": "u1", "params": [0.4], "qubits": [1] }, { "name": "u2", "params": [0.4, 0.2], "qubits": [1] }, { "name": "snapshot", "qubits": [1], "snapshot_type": "statevector", "label": "my_snap", }, ] }], } self.assertEqual(expected_qobj, QasmQobj.from_dict(qobj_dict))
def dict_to_qobj(qobj_dict: Dict) -> Union[QasmQobj, PulseQobj]: """Convert a Qobj in dictionary format to an instance. Args: qobj_dict: Qobj in dictionary format. Returns: The corresponding QasmQobj or PulseQobj instance. """ if qobj_dict['type'] == 'PULSE': _decode_pulse_qobj(qobj_dict) # Convert to proper types. return PulseQobj.from_dict(qobj_dict) return QasmQobj.from_dict(qobj_dict)
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())
def test_valid_non_fsp_measurement_qubit_to_classical(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 = [{ 'name': 'h', 'qubits': [0] }, { 'name': 'h', 'qubits': [2] }, { 'memory': [0], 'name': 'measure', 'qubits': [1] }, { 'memory': [1], 'name': 'measure', 'qubits': [0] }, { 'mask': '0x2', 'name': 'bfunc', 'register': 7, 'relation': '==', 'val': '0x2' }, { 'conditional': 7, 'name': 'h', 'qubits': [1] }, { 'memory': [1], 'name': 'measure', 'qubits': [0] }, { 'memory': [0], 'name': 'measure', 'qubits': [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())
def _load_job_data_s3(self, job_id: str, s3_bucket: Optional[str] = None) -> Tuple[QasmQobj, dict]: used_s3_bucket = s3_bucket or self._provider.get_default_bucket() s3_client = self._provider.get_s3_client() file = f'{self._get_job_data_s3_folder(job_id=job_id)}/qiskit_qobj_data.json' if not AWSBackend._exists_file(s3_client, used_s3_bucket, file): raise ValueError(f"An object '{file}' does not exist in the bucket {used_s3_bucket}") result: dict = s3_client.get_object(Bucket=used_s3_bucket, Key=file) # TODO: error handling streaming_body: StreamingBody = result['Body'] data: bytes = streaming_body.read() stored_experiment_data = json.loads(data.decode()) assert 'qobj' in stored_experiment_data qobj_raw = stored_experiment_data['qobj'] qobj = QasmQobj.from_dict(qobj_raw) extra_data = stored_experiment_data.get('extra_data', {}) return qobj, extra_data
def dict_to_circuit(dict_: dict) -> QuantumCircuit: qobj = QasmQobj.from_dict(dict_) return disassemble(qobj)[0][0]