def test_apply_operation_back_conditional(self): """Test consistency of apply_operation_back with condition set.""" # Single qubit gate conditional: qc.h(qr[2]).c_if(cr, 3) h_gate = HGate() h_gate.condition = self.condition h_node = self.dag.apply_operation_back(h_gate, [self.qubit2], [], h_gate.condition) self.assertEqual(h_node.qargs, [self.qubit2]) self.assertEqual(h_node.cargs, []) self.assertEqual(h_node.condition, h_gate.condition) self.assertEqual( sorted(self.dag._get_multi_graph_in_edges(h_node._node_id)), sorted([ (self.dag.input_map[self.qubit2]._node_id, h_node._node_id, { 'wire': self.qubit2, 'name': 'qr[2]' }), (self.dag.input_map[self.clbit0]._node_id, h_node._node_id, { 'wire': self.clbit0, 'name': 'cr[0]' }), (self.dag.input_map[self.clbit1]._node_id, h_node._node_id, { 'wire': self.clbit1, 'name': 'cr[1]' }), ])) self.assertEqual( sorted(self.dag._get_multi_graph_out_edges(h_node._node_id)), sorted([ (h_node._node_id, self.dag.output_map[self.qubit2]._node_id, { 'wire': self.qubit2, 'name': 'qr[2]' }), (h_node._node_id, self.dag.output_map[self.clbit0]._node_id, { 'wire': self.clbit0, 'name': 'cr[0]' }), (h_node._node_id, self.dag.output_map[self.clbit1]._node_id, { 'wire': self.clbit1, 'name': 'cr[1]' }), ])) if self.dag._USE_RX: self.assertTrue(rx.is_directed_acyclic_graph( self.dag._multi_graph)) else: self.assertTrue(nx.is_directed_acyclic_graph( self.dag._multi_graph))
def test_dag_collect_runs_conditional_in_middle(self): """Test collect_runs with a conditional in the middle of a run.""" h_gate = HGate() h_gate.condition = self.condition self.dag.apply_operation_back(HGate(), [self.qubit0]) self.dag.apply_operation_back(h_gate, [self.qubit0]) self.dag.apply_operation_back(HGate(), [self.qubit0]) collected_runs = self.dag.collect_runs(['h']) # Should return 2 single h gate runs (1 before condition, 1 after) self.assertEqual(len(collected_runs), 2) for run in collected_runs: self.assertEqual(len(run), 1) self.assertEqual(['h'], [x.name for x in run]) self.assertEqual([[self.qubit0]], [x.qargs for x in run])
def test_dag_collect_runs_start_with_conditional(self): """Test collect runs with a conditional at the start of the run.""" h_gate = HGate() h_gate.condition = self.condition self.dag.apply_operation_back(h_gate, [self.qubit0]) self.dag.apply_operation_back(HGate(), [self.qubit0]) self.dag.apply_operation_back(HGate(), [self.qubit0]) collected_runs = self.dag.collect_runs(['h']) self.assertEqual(len(collected_runs), 1) run = collected_runs.pop() self.assertEqual(len(run), 2) self.assertEqual(['h', 'h'], [x.name for x in run]) self.assertEqual([[self.qubit0], [self.qubit0]], [x.qargs for x in run])