qiskit/dagcircuit/dagcircuit.py
def compose_back(self, input_circuit, edge_map=None):
        """Apply the input circuit to the output of this circuit.

        The two bases must be "compatible" or an exception occurs.
        A subset of input qubits of the input circuit are mapped
        to a subset of output qubits of this circuit.

        Args:
            input_circuit (DAGCircuit): circuit to append
            edge_map (dict): map {(Register, int): (Register, int)}
                from the output wires of input_circuit to input wires
                of self.

        Raises:
            DAGCircuitError: if missing, duplicate or incosistent wire
        """
        edge_map = edge_map or {}

        # Check the wire map for duplicate values
        if len(set(edge_map.values())) != len(edge_map):
            raise DAGCircuitError("duplicates in wire_map")

        add_qregs = self._check_edgemap_registers(edge_map,
                                                  input_circuit.qregs,
                                                  self.qregs)
        for qreg in add_qregs:
            self.add_qreg(qreg)

        add_cregs = self._check_edgemap_registers(edge_map,
                                                  input_circuit.cregs,
                                                  self.cregs)
        for creg in add_cregs:
            self.add_creg(creg)

        self._check_wiremap_validity(edge_map, input_circuit.input_map,
                                     self.output_map)

        # Compose
        for nd in input_circuit.topological_nodes():
            if nd.type == "in":
                # if in wire_map, get new name, else use existing name
                m_wire = edge_map.get(nd.wire, nd.wire)
                # the mapped wire should already exist
                if m_wire not in self.output_map:
                    raise DAGCircuitError("wire %s[%d] not in self" % (m_wire[0].name, m_wire[1]))

                if nd.wire not in input_circuit.wires:
                    raise DAGCircuitError("inconsistent wire type for %s[%d] in input_circuit"
                                          % (nd.wire[0].name, nd.wire[1]))

            elif nd.type == "out":
                # ignore output nodes
                pass
            elif nd.type == "op":
                condition = self._map_condition(edge_map, nd.condition)
                self._check_condition(nd.name, condition)
                m_qargs = list(map(lambda x: edge_map.get(x, x), nd.qargs))
                m_cargs = list(map(lambda x: edge_map.get(x, x), nd.cargs))
                self.apply_operation_back(nd.op, m_qargs, m_cargs, condition)
            else:
                raise DAGCircuitError("bad node type %s" % nd.type)
def compose_back(self, input_circuit, edge_map=None):
        edge_map = edge_map or {}

        # Check the wire map for duplicate values
        if len(set(edge_map.values())) != len(edge_map):
            raise DAGCircuitError("duplicates in wire_map")

        add_qregs = self._check_edgemap_registers(edge_map,
                                                  input_circuit.qregs,
                                                  self.qregs)
        for qreg in add_qregs:
            self.add_qreg(qreg)

        add_cregs = self._check_edgemap_registers(edge_map,
                                                  input_circuit.cregs,
                                                  self.cregs)
        for creg in add_cregs:
            self.add_creg(creg)

        self._check_wiremap_validity(edge_map, input_circuit.input_map,
                                     self.output_map)

        # Compose
        for nd in input_circuit.topological_nodes():
            if nd.type == "in":
                # if in wire_map, get new name, else use existing name
                m_wire = edge_map.get(nd.wire, nd.wire)
                # the mapped wire should already exist
                if m_wire not in self.output_map:
                    raise DAGCircuitError("wire %s[%d] not in self" % (m_wire[0].name, m_wire[1]))

                if nd.wire not in input_circuit.wires:
                    raise DAGCircuitError("inconsistent wire type for %s[%d] in input_circuit"
                                          % (nd.wire[0].name, nd.wire[1]))

            elif nd.type == "out":
                # ignore output nodes
                pass
            elif nd.type == "op":
                condition = self._map_condition(edge_map, nd.condition)
                self._check_condition(nd.name, condition)
                m_qargs = list(map(lambda x: edge_map.get(x, x), nd.qargs))
                m_cargs = list(map(lambda x: edge_map.get(x, x), nd.cargs))
                self.apply_operation_back(nd.op, m_qargs, m_cargs, condition)
            else:
                raise DAGCircuitError("bad node type %s" % nd.type)
def compose_back ( self , input_circuit , edge_map = None ) : edge_map = edge_map or { } # Check the wire map for duplicate values if len ( set ( edge_map . values ( ) ) ) != len ( edge_map ) : raise DAGCircuitError ( "duplicates in wire_map" ) add_qregs = self . _check_edgemap_registers ( edge_map , input_circuit . qregs , self . qregs ) for qreg in add_qregs : self . add_qreg ( qreg ) add_cregs = self . _check_edgemap_registers ( edge_map , input_circuit . cregs , self . cregs ) for creg in add_cregs : self . add_creg ( creg ) self . _check_wiremap_validity ( edge_map , input_circuit . input_map , self . output_map ) # Compose for nd in input_circuit . topological_nodes ( ) : if nd . type == "in" : # if in wire_map, get new name, else use existing name m_wire = edge_map . get ( nd . wire , nd . wire ) # the mapped wire should already exist if m_wire not in self . output_map : raise DAGCircuitError ( "wire %s[%d] not in self" % ( m_wire [ 0 ] . name , m_wire [ 1 ] ) ) if nd . wire not in input_circuit . wires : raise DAGCircuitError ( "inconsistent wire type for %s[%d] in input_circuit" % ( nd . wire [ 0 ] . name , nd . wire [ 1 ] ) ) elif nd . type == "out" : # ignore output nodes pass elif nd . type == "op" : condition = self . _map_condition ( edge_map , nd . condition ) self . _check_condition ( nd . name , condition ) m_qargs = list ( map ( lambda x : edge_map . get ( x , x ) , nd . qargs ) ) m_cargs = list ( map ( lambda x : edge_map . get ( x , x ) , nd . cargs ) ) self . apply_operation_back ( nd . op , m_qargs , m_cargs , condition ) else : raise DAGCircuitError ( "bad node type %s" % nd . type )
Apply the input circuit to the output of this circuit.

        The two bases must be "compatible" or an exception occurs.
        A subset of input qubits of the input circuit are mapped
        to a subset of output qubits of this circuit.

        Args:
            input_circuit (DAGCircuit): circuit to append
            edge_map (dict): map {(Register, int): (Register, int)}
                from the output wires of input_circuit to input wires
                of self.

        Raises:
            DAGCircuitError: if missing, duplicate or incosistent wire
Apply the input circuit to the output of this circuit .