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`.
code: def __init__(
      self, *operands: Operator, id=None
  ):  # pylint: disable=super-init-not-called
      self._id = id
      self.queue_idx = None
      self._name = self.__class__.__name__
  
      if len(operands) < 2:
          raise ValueError(
              f"Require at least two operators to combine; got {len(operands)}"
          )
  
      self.operands = tuple(convert_to_opmath(op) for op in operands)
      self._wires = qml.wires.Wires.all_wires(
          [op.wires for op in operands]
      )
      self._hash = None
      self._has_overlapping_wires = None
      self._overlapping_ops = None
      self._pauli_rep = self._build_pauli_rep()
      self.queue()
      self._batch_size = _UNSET_BATCH_SIZE
  
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 3 to create a new CompositeOp object from inherited base classes: Operator with example: obj = CompositeOp()