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: Representation of the operator as a product of other operators.
  
  .. math:: O = O_1 O_2 \dots O_n
  
  A ``DecompositionUndefinedError`` is raised if no representation by decomposition is defined.
  
  .. seealso:: :meth:`~.Operator.compute_decomposition`.
  
  Returns:
      list[Operator]: decomposition of the operator
  
  **Example**
  
  >>> ops = [qml.PauliX(wires=2), qml.PauliX(wires=3), qml.PauliY(wires=2), qml.SWAP([2,3])]
  >>> op = qml.Select(ops, control=[0,1])
  >>> op.decomposition()
  [MultiControlledX(wires=[0, 1, 2], control_values="00"),
   MultiControlledX(wires=[0, 1, 3], control_values="01"),
   Controlled(PauliY(wires=[2]), control_wires=[0, 1], control_values=[True, False]),
   Controlled(SWAP(wires=[2, 3]), control_wires=[0, 1])]
docstr_tok: ["Representation","of","the","operator","as","a","product","of","other","operators",".","..","math",":",":","O","=","O_1","O_2","\\dots","O_n","A","``","DecompositionUndefinedError","``","is","raised","if","no","representation","by","decomposition","is","defined",".","..","seealso",":",":",":","meth",":","`","~.Operator.compute_decomposition","`",".","Returns",":","list","[","Operator","]",":","decomposition","of","the","operator","*","*","Example","*","*",">",">",">","ops","=","[","qml.PauliX","(","wires=2",")",",","qml.PauliX","(","wires=3",")",",","qml.PauliY","(","wires=2",")",",","qml.SWAP","(","[","2,3","]",")","]",">",">",">","op","=","qml.Select","(","ops",",","control=","[","0,1","]",")",">",">",">","op.decomposition","(",")","[","MultiControlledX","(","wires=","[","0",",","1",",","2","]",",","control_values=","''","00","''",")",",","MultiControlledX","(","wires=","[","0",",","1",",","3","]",",","control_values=","''","01","''",")",",","Controlled","(","PauliY","(","wires=","[","2","]",")",",","control_wires=","[","0",",","1","]",",","control_values=","[","True",",","False","]",")",",","Controlled","(","SWAP","(","wires=","[","2",",","3","]",")",",","control_wires=","[","0",",","1","]",")","]"]
code: def decomposition(self):
      r"""Representation of the operator as a product of other operators.
  
      .. math:: O = O_1 O_2 \dots O_n
  
      A ``DecompositionUndefinedError`` is raised if no representation by decomposition is defined.
  
      .. seealso:: :meth:`~.Operator.compute_decomposition`.
  
      Returns:
          list[Operator]: decomposition of the operator
  
      **Example**
  
      >>> ops = [qml.PauliX(wires=2), qml.PauliX(wires=3), qml.PauliY(wires=2), qml.SWAP([2,3])]
      >>> op = qml.Select(ops, control=[0,1])
      >>> op.decomposition()
      [MultiControlledX(wires=[0, 1, 2], control_values="00"),
       MultiControlledX(wires=[0, 1, 3], control_values="01"),
       Controlled(PauliY(wires=[2]), control_wires=[0, 1], control_values=[True, False]),
       Controlled(SWAP(wires=[2, 3]), control_wires=[0, 1])]
      """
      return self.compute_decomposition(self.ops, control=self.control)
  
imports: import copy
  import itertools
  import pennylane
  from pennylane.operation import Operation
  from pennylane import math
label_desc: Use image node_id 9 for calling the Select obj's underlying member method code with example usage: obj.decomposition() and returns: self