예제 #1
0
    def test_final_measurement_barrier_for_simulators(self, mock_pass):
        """Verify BarrierBeforeFinalMeasurements pass is in default pipeline for simulators."""
        circ = QuantumCircuit.from_qasm_file(self._get_resource_path('example.qasm', Path.QASMS))
        dag_circuit = circuit_to_dag(circ)
        transpile_dag(dag_circuit)

        self.assertTrue(mock_pass.called)
예제 #2
0
    def test_final_measurement_barrier_for_devices(self, mock_pass):
        """Verify BarrierBeforeFinalMeasurements pass is called in default pipeline for devices."""

        circ = QuantumCircuit.from_qasm_file(self._get_resource_path('example.qasm', Path.QASMS))
        dag_circuit = circuit_to_dag(circ)
        transpile_dag(dag_circuit, coupling_map=FakeRueschlikon().configuration().coupling_map)

        self.assertTrue(mock_pass.called)
예제 #3
0
    def test_move_measurements(self):
        """Measurements applied AFTER swap mapping.
        """
        backend = FakeQX5BackEnd()
        cmap = backend.configuration().coupling_map
        circ = QuantumCircuit.from_qasm_file(
            self._get_resource_path('qasm/move_measurements.qasm'))

        dag_circuit = DAGCircuit.fromQuantumCircuit(circ)
        lay = {
            ('qa', 0): ('q', 0),
            ('qa', 1): ('q', 1),
            ('qb', 0): ('q', 15),
            ('qb', 1): ('q', 2),
            ('qb', 2): ('q', 14),
            ('qN', 0): ('q', 3),
            ('qN', 1): ('q', 13),
            ('qN', 2): ('q', 4),
            ('qc', 0): ('q', 12),
            ('qNt', 0): ('q', 5),
            ('qNt', 1): ('q', 11),
            ('qt', 0): ('q', 6)
        }
        out_dag = transpile_dag(dag_circuit,
                                initial_layout=lay,
                                coupling_map=cmap,
                                format='dag')
        moved_meas = remove_last_measurements(out_dag, perform_remove=False)
        meas_nodes = out_dag.get_named_nodes('measure')
        self.assertEqual(len(moved_meas), len(meas_nodes))
예제 #4
0
    def test_move_measurements(self):
        """Measurements applied AFTER swap mapping.
        """
        backend = FakeRueschlikon()
        cmap = backend.configuration().coupling_map
        circ = QuantumCircuit.from_qasm_file(
            self._get_resource_path('move_measurements.qasm', Path.QASMS))

        dag_circuit = circuit_to_dag(circ)
        lay = {
            ('qa', 0): ('q', 0),
            ('qa', 1): ('q', 1),
            ('qb', 0): ('q', 15),
            ('qb', 1): ('q', 2),
            ('qb', 2): ('q', 14),
            ('qN', 0): ('q', 3),
            ('qN', 1): ('q', 13),
            ('qN', 2): ('q', 4),
            ('qc', 0): ('q', 12),
            ('qNt', 0): ('q', 5),
            ('qNt', 1): ('q', 11),
            ('qt', 0): ('q', 6)
        }
        out_dag = transpile_dag(dag_circuit,
                                initial_layout=lay,
                                coupling_map=cmap)
        meas_nodes = out_dag.get_named_nodes('measure')
        for n in meas_nodes:
            is_last_measure = all([
                after_measure in out_dag.output_map.values()
                for after_measure in out_dag.quantum_successors(n)
            ])
            self.assertTrue(is_last_measure)