def controlled_by(
        self,
        *control_qubits: cirq.Qid,
        control_values: cv.AbstractControlValues | Sequence[int | Collection[int]] | None = None,
    ) -> cirq.Operation:
        """Returns a controlled version of this operation. If no control_qubits
           are specified, returns self.

        Args:
            *control_qubits: Qubits to control the operation by. Required.
            control_values: For which control qubit values to apply the
                operation.  A sequence of the same length as `control_qubits`
                where each entry is an integer (or set of integers)
                corresponding to the qubit value (or set of possible values)
                where that control is enabled.  When all controls are enabled,
                the operation is applied.  If unspecified, control values
                default to 1.
        """
        if len(control_qubits) == 0:
            return self
        return ops.controlled_operation.ControlledOperation(control_qubits, self, control_values)
Returns a controlled version of this operation. If no control_qubits
           are specified, returns self.

        Args:
            *control_qubits: Qubits to control the operation by. Required.
            control_values: For which control qubit values to apply the
                operation.  A sequence of the same length as `control_qubits`
                where each entry is an integer (or set of integers)
                corresponding to the qubit value (or set of possible values)
                where that control is enabled.  When all controls are enabled,
                the operation is applied.  If unspecified, control values
                default to 1.
        
cirq-core/cirq/ops/raw_types.py