Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
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)
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
 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))
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
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())
Ejemplo n.º 7
0
 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
Ejemplo n.º 9
0
def dict_to_circuit(dict_: dict) -> QuantumCircuit:
    qobj = QasmQobj.from_dict(dict_)
    return disassemble(qobj)[0][0]