Example #1
0
 def test_target_too_small_for_circuit(self):
     """Test error is raised when target is too small for circuit."""
     target = Target()
     target.add_instruction(
         CXGate(),
         {edge: None
          for edge in CouplingMap.from_line(3).get_edges()})
     dag = circuit_to_dag(QuantumCircuit(5))
     layout_pass = DenseLayout(target=target)
     with self.assertRaises(TranspilerError):
         layout_pass.run(dag)
Example #2
0
 def test_ideal_target_no_coupling(self):
     """Test pass fails as expected if a target without edge constraints exists."""
     qr = QuantumRegister(5, "q")
     circuit = QuantumCircuit(qr)
     circuit.cx(qr[0], qr[3])
     circuit.cx(qr[3], qr[4])
     circuit.cx(qr[3], qr[1])
     circuit.cx(qr[0], qr[2])
     dag = circuit_to_dag(circuit)
     target = Target(num_qubits=19)
     target.add_instruction(CXGate())
     layout_pass = DenseLayout(target=target)
     with self.assertRaises(TranspilerError):
         layout_pass.run(dag)
Example #3
0
 def test_5q_circuit_19q_target_with_noise(self):
     """Test layout works finds a dense 5q subgraph in a 19q heavy hex target."""
     qr = QuantumRegister(5, "q")
     circuit = QuantumCircuit(qr)
     circuit.cx(qr[0], qr[3])
     circuit.cx(qr[3], qr[4])
     circuit.cx(qr[3], qr[1])
     circuit.cx(qr[0], qr[2])
     dag = circuit_to_dag(circuit)
     pass_ = DenseLayout(target=self.target_19)
     pass_.run(dag)
     layout = pass_.property_set["layout"]
     self.assertEqual(layout[qr[0]], 9)
     self.assertEqual(layout[qr[1]], 3)
     self.assertEqual(layout[qr[2]], 11)
     self.assertEqual(layout[qr[3]], 15)
     self.assertEqual(layout[qr[4]], 4)
Example #4
0
    def test_6q_circuit_20q_coupling(self):
        """Test finds dense 5q corner in 20q coupling map."""
        qr0 = QuantumRegister(3, "q0")
        qr1 = QuantumRegister(3, "q1")
        circuit = QuantumCircuit(qr0, qr1)
        circuit.cx(qr0[0], qr1[2])
        circuit.cx(qr1[1], qr0[2])

        dag = circuit_to_dag(circuit)
        pass_ = DenseLayout(CouplingMap(self.cmap20))
        pass_.run(dag)

        layout = pass_.property_set["layout"]
        self.assertEqual(layout[qr0[0]], 11)
        self.assertEqual(layout[qr0[1]], 10)
        self.assertEqual(layout[qr0[2]], 6)
        self.assertEqual(layout[qr1[0]], 5)
        self.assertEqual(layout[qr1[1]], 1)
        self.assertEqual(layout[qr1[2]], 0)
Example #5
0
    def test_5q_circuit_20q_coupling(self):
        """Test finds dense 5q corner in 20q coupling map."""
        qr = QuantumRegister(5, "q")
        circuit = QuantumCircuit(qr)
        circuit.cx(qr[0], qr[3])
        circuit.cx(qr[3], qr[4])
        circuit.cx(qr[3], qr[1])
        circuit.cx(qr[0], qr[2])

        dag = circuit_to_dag(circuit)
        pass_ = DenseLayout(CouplingMap(self.cmap20))
        pass_.run(dag)

        layout = pass_.property_set["layout"]
        self.assertEqual(layout[qr[0]], 11)
        self.assertEqual(layout[qr[1]], 10)
        self.assertEqual(layout[qr[2]], 6)
        self.assertEqual(layout[qr[3]], 5)
        self.assertEqual(layout[qr[4]], 0)
Example #6
0
 def test_5q_circuit_19q_target_without_noise(self):
     """Test layout works finds a dense 5q subgraph in a 19q heavy hex target with no noise."""
     qr = QuantumRegister(5, "q")
     circuit = QuantumCircuit(qr)
     circuit.cx(qr[0], qr[3])
     circuit.cx(qr[3], qr[4])
     circuit.cx(qr[3], qr[1])
     circuit.cx(qr[0], qr[2])
     dag = circuit_to_dag(circuit)
     instruction_props = {
         edge: None
         for edge in CouplingMap.from_heavy_hex(3).get_edges()
     }
     noiseless_target = Target()
     noiseless_target.add_instruction(CXGate, instruction_props)
     pass_ = DenseLayout(target=noiseless_target)
     pass_.run(dag)
     layout = pass_.property_set["layout"]
     self.assertEqual(layout[qr[0]], 1)
     self.assertEqual(layout[qr[1]], 13)
     self.assertEqual(layout[qr[2]], 0)
     self.assertEqual(layout[qr[3]], 9)
     self.assertEqual(layout[qr[4]], 3)