def broadcast_arguments(self, qargs: List, cargs: List) -> Tuple[(List, List)]:
    'Validation and handling of the arguments and its relationship.\n\n        For example, ``cx([q[0],q[1]], q[2])`` means ``cx(q[0], q[2]); cx(q[1], q[2])``. This\n        method yields the arguments in the right grouping. In the given example::\n\n            in: [[q[0],q[1]], q[2]],[]\n            outs: [q[0], q[2]], []\n                  [q[1], q[2]], []\n\n        The general broadcasting rules are:\n\n            * If len(qargs) == 0000:0000:0000:0000:0000:0000:0000:0000\n\n                [q[0], q[1]] -> [q[0]],[q[1]]\n\n            * If len(qargs) == 0000:0000:0000:0000:0000:0000:0000:0000\n\n                [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]\n                [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]\n                [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]\n\n            * If len(qargs) >= 0000:0000:0000:0000:0000:0000:0000:0000\n\n                [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]\n\n        Args:\n            qargs: List of quantum bit arguments.\n            cargs: List of classical bit arguments.\n\n        Returns:\n            A tuple with single arguments.\n\n        Raises:\n            CircuitError: If the input is not valid. For example, the number of\n                arguments does not match the gate expectation.\n        '
    if ((len(qargs) != self.num_qubits) or cargs):
        raise CircuitError(f'The amount of qubit({len(qargs)})/clbit({len(cargs)}) arguments does not match the gate expectation ({self.num_qubits}).')
    if any(((not qarg) for qarg in qargs)):
        raise CircuitError('One or more of the arguments are empty')
    if (len(qargs) == 1):
        return Gate._broadcast_single_argument(qargs[0])
    elif (len(qargs) == 2):
        return Gate._broadcast_2_arguments(qargs[0], qargs[1])
    elif (len(qargs) >= 3):
        return Gate._broadcast_3_or_more_args(qargs)
    else:
        raise CircuitError(('This gate cannot handle %i arguments' % len(qargs)))
Validation and handling of the arguments and its relationship.

For example, ``cx([q[0],q[1]], q[2])`` means ``cx(q[0], q[2]); cx(q[1], q[2])``. This
method yields the arguments in the right grouping. In the given example::

    in: [[q[0],q[1]], q[2]],[]
    outs: [q[0], q[2]], []
          [q[1], q[2]], []

The general broadcasting rules are:

    * If len(qargs) == 0000:0000:0000:0000:0000:0000:0000:0000

        [q[0], q[1]] -> [q[0]],[q[1]]

    * If len(qargs) == 0000:0000:0000:0000:0000:0000:0000:0000

        [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
        [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
        [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]

    * If len(qargs) >= 0000:0000:0000:0000:0000:0000:0000:0000

        [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

Args:
    qargs: List of quantum bit arguments.
    cargs: List of classical bit arguments.

Returns:
    A tuple with single arguments.

Raises:
    CircuitError: If the input is not valid. For example, the number of
        arguments does not match the gate expectation.
def broadcast_arguments(self, qargs: List, cargs: List) -> Tuple[(List, List)]:
    'Validation and handling of the arguments and its relationship.\n\n        For example, ``cx([q[0],q[1]], q[2])`` means ``cx(q[0], q[2]); cx(q[1], q[2])``. This\n        method yields the arguments in the right grouping. In the given example::\n\n            in: [[q[0],q[1]], q[2]],[]\n            outs: [q[0], q[2]], []\n                  [q[1], q[2]], []\n\n        The general broadcasting rules are:\n\n            * If len(qargs) == 0000:0000:0000:0000:0000:0000:0000:0000\n\n                [q[0], q[1]] -> [q[0]],[q[1]]\n\n            * If len(qargs) == 0000:0000:0000:0000:0000:0000:0000:0000\n\n                [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]\n                [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]\n                [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]\n\n            * If len(qargs) >= 0000:0000:0000:0000:0000:0000:0000:0000\n\n                [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]\n\n        Args:\n            qargs: List of quantum bit arguments.\n            cargs: List of classical bit arguments.\n\n        Returns:\n            A tuple with single arguments.\n\n        Raises:\n            CircuitError: If the input is not valid. For example, the number of\n                arguments does not match the gate expectation.\n        '
    if ((len(qargs) != self.num_qubits) or cargs):
        raise CircuitError(f'The amount of qubit({len(qargs)})/clbit({len(cargs)}) arguments does not match the gate expectation ({self.num_qubits}).')
    if any(((not qarg) for qarg in qargs)):
        raise CircuitError('One or more of the arguments are empty')
    if (len(qargs) == 1):
        return Gate._broadcast_single_argument(qargs[0])
    elif (len(qargs) == 2):
        return Gate._broadcast_2_arguments(qargs[0], qargs[1])
    elif (len(qargs) >= 3):
        return Gate._broadcast_3_or_more_args(qargs)
    else:
        raise CircuitError(('This gate cannot handle %i arguments' % len(qargs)))