class_docstr: A base class for operators that are composed of other operators.
  
  Args:
      operands: (tuple[~.operation.Operator]): a tuple of operators which will be combined.
  
  Keyword Args:
      id (str or None): id for the operator. Default is None.
  
  The child composite operator should define the `_op_symbol` property
  during initialization and define any relevant representations, such as
  :meth:`~.operation.Operator.matrix` and :meth:`~.operation.Operator.decomposition`.
docstr: How the composite operator is represented in diagrams and drawings.
  
  Args:
      decimals (int): If ``None``, no parameters are included. Else,
          how to round the parameters. Defaults to ``None``.
      base_label (Iterable[str]): Overwrite the non-parameter component of the label.
          Must be same length as ``operands`` attribute. Defaults to ``None``.
      cache (dict): Dictionary that carries information between label calls
          in the same drawing. Defaults to ``None``.
  
  Returns:
      str: label to use in drawings
  
  **Example (using the Sum composite operator)**
  
  >>> op = qml.S(0) + qml.PauliX(0) + qml.Rot(1,2,3, wires=[1])
  >>> op.label()
  '(S+X)+Rot'
  >>> op.label(decimals=2, base_label=[["my_s", "my_x"], "inc_rot"])
  '(my_s+my_x)+inc_rot\n(1.00,\n2.00,\n3.00)'
docstr_tok: ["How","the","composite","operator","is","represented","in","diagrams","and","drawings",".","Args",":","decimals","(","int",")",":","If","``","None","``",",","no","parameters","are","included",".","Else",",","how","to","round","the","parameters",".","Defaults","to","``","None","``",".","base_label","(","Iterable","[","str","]",")",":","Overwrite","the","non-parameter","component","of","the","label",".","Must","be","same","length","as","``","operands","``","attribute",".","Defaults","to","``","None","``",".","cache","(","dict",")",":","Dictionary","that","carries","information","between","label","calls","in","the","same","drawing",".","Defaults","to","``","None","``",".","Returns",":","str",":","label","to","use","in","drawings","*","*","Example","(","using","the","Sum","composite","operator",")","*","*",">",">",">","op","=","qml.S","(","0",")","+","qml.PauliX","(","0",")","+","qml.Rot","(","1,2,3",",","wires=","[","1","]",")",">",">",">","op.label","(",")","'","(","S+X",")","+Rot'",">",">",">","op.label","(","decimals=2",",","base_label=","[","[","``","my_s","''",",","``","my_x","''","]",",","``","inc_rot","''","]",")","'","(","my_s+my_x",")","+inc_rot\\n","(","1.00",",","\\n2.00",",","\\n3.00",")","'"]
code: def label(self, decimals=None, base_label=None, cache=None):
      r"""How the composite operator is represented in diagrams and drawings.
  
      Args:
          decimals (int): If ``None``, no parameters are included. Else,
              how to round the parameters. Defaults to ``None``.
          base_label (Iterable[str]): Overwrite the non-parameter component of the label.
              Must be same length as ``operands`` attribute. Defaults to ``None``.
          cache (dict): Dictionary that carries information between label calls
              in the same drawing. Defaults to ``None``.
  
      Returns:
          str: label to use in drawings
  
      **Example (using the Sum composite operator)**
  
      >>> op = qml.S(0) + qml.PauliX(0) + qml.Rot(1,2,3, wires=[1])
      >>> op.label()
      '(S+X)+Rot'
      >>> op.label(decimals=2, base_label=[["my_s", "my_x"], "inc_rot"])
      '(my_s+my_x)+inc_rot\n(1.00,\n2.00,\n3.00)'
  
      """
  
      def _label(op, decimals, base_label, cache):
          sub_label = op.label(decimals, base_label, cache)
          return (
              f"({sub_label})" if op.arithmetic_depth > 0 else sub_label
          )
  
      if base_label is not None:
          if isinstance(base_label, str) or len(base_label) != len(
              self
          ):
              raise ValueError(
                  "Composite operator labels require ``base_label`` keyword to be same length as operands."
              )
          return self._op_symbol.join(
              _label(op, decimals, lbl, cache)
              for op, lbl in zip(self, base_label)
          )
  
      return self._op_symbol.join(
          _label(op, decimals, None, cache) for op in self
      )
  
imports: import abc
  from typing import Callable, List
  import copy
  import numpy
  import pennylane
  from pennylane import math
  from pennylane.operation import Operator, convert_to_opmath, _UNSET_BATCH_SIZE
  from pennylane.wires import Wires
label_desc: Use image node_id 24 for calling the CompositeOp obj's underlying member method code with example usage: obj.label(decimals, base_label, cache) and returns: self, unknown, self