'Apply this gate to a Qubit.'

def _apply_operator_Qubit(self, qubits, **options):

    if (qubits.nqubits < self.min_qubits):
        raise QuantumError(('Gate    needs    a    minimum    of    %r    qubits    to    act    on,    got:    %r' % (self.min_qubits, qubits.nqubits)))
    if isinstance(self, CGate):
        if (not self.eval_controls(qubits)):
            return qubits
    targets = self.targets
    target_matrix = self.get_target_matrix(format='sympy')
    column_index = 0
    n = 1
    for target in targets:
        column_index += (n * qubits[target])
        n = (n << 1)
    column = target_matrix[:, int(column_index)]
    result = 0
    for index in range(column.rows):
        new_qubit = qubits.__class__(*qubits.args)
        for bit in range(len(targets)):
            if (new_qubit[targets[bit]] != ((index >> bit) & 1)):
                new_qubit = new_qubit.flip(targets[bit])
        result += (column[index] * new_qubit)
    return result
