class_docstr: Applies specific input operations depending on the state of
  the designated control qubits.
  
  .. math:: Select|i\rangle \otimes |\psi\rangle = |i\rangle \otimes U_i |\psi\rangle
  
  .. figure:: ../../../doc/_static/templates/subroutines/select.png
                  :align: center
                  :width: 60%
                  :target: javascript:void(0);
  
  Args:
      ops (list[Operator]): operations to apply
      control (Sequence[int]): the wires controlling which operation is applied
      id (str or None): String representing the operation (optional)
  
  .. note::
      The position of the operation in the list determines which qubit state implements that operation.
      For example, when the qubit register is in the state :math:`|00\rangle`, we will apply ``ops[0]``.
      When the qubit register is in the state :math:`|10\rangle`, we will apply ``ops[2]``. To obtain the
      binary bitstring representing the state for list position ``index`` we can use the following relationship:
      ``index = int(state_string, 2)``. For example, ``2 = int('10', 2)``.
  
  **Example**
  
  >>> dev = qml.device('default.qubit', wires=4)
  >>> ops = [qml.PauliX(wires=2), qml.PauliX(wires=3), qml.PauliY(wires=2), qml.SWAP([2,3])]
  >>> @qml.qnode(dev)
  >>> def circuit():
  >>>     qml.Select(ops, control=[0,1])
  >>>     return qml.state()
  ...
  >>> print(qml.draw(circuit, expansion_strategy='device')())
  0: ─╭○─╭○─╭●─╭●────┤  State
  1: ─├○─├●─├○─├●────┤  State
  2: ─╰X─│──╰Y─├SWAP─┤  State
  3: ────╰X────╰SWAP─┤  State
class_docstr_tok: ["Applies","specific","input","operations","depending","on","the","state","of","the","designated","control","qubits",".","..","math",":",":","Select|i\\rangle","\\otimes","|\\psi\\rangle","=","|i\\rangle","\\otimes","U_i","|\\psi\\rangle","..","figure",":",":","..","\/","..","\/","..","\/doc\/_static\/templates\/subroutines\/select.png",":","align",":","center",":","width",":","60","%",":","target",":","javascript",":","void","(","0",")",";","Args",":","ops","(","list","[","Operator","]",")",":","operations","to","apply","control","(","Sequence","[","int","]",")",":","the","wires","controlling","which","operation","is","applied","id","(","str","or","None",")",":","String","representing","the","operation","(","optional",")","..","note",":",":","The","position","of","the","operation","in","the","list","determines","which","qubit","state","implements","that","operation",".","For","example",",","when","the","qubit","register","is","in","the","state",":","math",":","`","|00\\rangle","`",",","we","will","apply","``","ops","[","0","]","``",".","When","the","qubit","register","is","in","the","state",":","math",":","`","|10\\rangle","`",",","we","will","apply","``","ops","[","2","]","``",".","To","obtain","the","binary","bitstring","representing","the","state","for","list","position","``","index","``","we","can","use","the","following","relationship",":","``","index","=","int","(","state_string",",","2",")","``",".","For","example",",","``","2","=","int","(","'10","'",",","2",")","``",".","*","*","Example","*","*",">",">",">","dev","=","qml.device","(","'default.qubit","'",",","wires=4",")",">",">",">","ops","=","[","qml.PauliX","(","wires=2",")",",","qml.PauliX","(","wires=3",")",",","qml.PauliY","(","wires=2",")",",","qml.SWAP","(","[","2,3","]",")","]",">",">",">","@","qml.qnode","(","dev",")",">",">",">","def","circuit","(",")",":",">",">",">","qml.Select","(","ops",",","control=","[","0,1","]",")",">",">",">","return","qml.state","(",")","...",">",">",">","print","(","qml.draw","(","circuit",",","expansion_strategy='device","'",")","(",")",")","0",":","\u2500\u256d\u25cb\u2500\u256d\u25cb\u2500\u256d\u25cf\u2500\u256d\u25cf\u2500\u2500\u2500\u2500\u2524","State","1",":","\u2500\u251c\u25cb\u2500\u251c\u25cf\u2500\u251c\u25cb\u2500\u251c\u25cf\u2500\u2500\u2500\u2500\u2524","State","2",":","\u2500\u2570X\u2500\u2502\u2500\u2500\u2570Y\u2500\u251cSWAP\u2500\u2524","State","3",":","\u2500\u2500\u2500\u2500\u2570X\u2500\u2500\u2500\u2500\u2570SWAP\u2500\u2524","State"]
docstr: Copy this op
docstr_tok: ["Copy","this","op"]
code: def __copy__(self):
      """Copy this op"""
      cls = self.__class__
      copied_op = cls.__new__(cls)
  
      new_data = copy.copy(self.data)
  
      for attr, value in vars(self).items():
          if attr != "data":
              setattr(copied_op, attr, value)
  
      copied_op.data = new_data
  
      return copied_op
  
imports: import copy
  import itertools
  import pennylane
  from pennylane.operation import Operation
  from pennylane import math
label_desc: Use image node_id 6 for calling the Select obj's underlying member method code with example usage: obj.__copy__() and returns: copied_op