code: def CNOT(control, target):
      
      return Gate(name="CNOT", params=[], qubits=[unpack_qubit(q) for q in (control, target)])
docs: Produces a controlled-NOT (controlled-X) gate::
  
          CNOT = [[1, 0, 0, 0],
                  [0, 1, 0, 0],
                  [0, 0, 0, 1],
                  [0, 0, 1, 0]]
  
      This gate applies to two qubit arguments to produce the controlled-not gate instruction.
  
      :param control: The control qubit.
      :param target: The target qubit. The target qubit has an X-gate applied to it if the control
          qubit is in the ``|1>`` state.
      :returns: A Gate object.