def __init__(
        self,
        gate: type[raw_types.Gate] | raw_types.Gate,
        *,
        name: str | None = None,
        description: str | None = None,
        max_parallel_allowed: int | None = None,
    ) -> None:
        """Inits ParallelGateFamily

        Args:
            gate: The gate which can act in parallel. It can be a python `type` inheriting from
                `cirq.Gate` or a non-parameterized instance of a `cirq.Gate`. If an instance of
                `cirq.ParallelGate` is passed, then the corresponding `gate.sub_gate` is used.
            name: The name of the gate family.
            description: Human readable description of the gate family.
            max_parallel_allowed: The maximum number of qubits on which a given gate `g`
            can act on. If None, then any number of qubits are allowed.
        """
        if isinstance(gate, parallel_gate.ParallelGate):
            if not max_parallel_allowed:
                max_parallel_allowed = protocols.num_qubits(gate)
            gate = gate.sub_gate
        self._max_parallel_allowed = max_parallel_allowed
        super().__init__(gate, name=name, description=description)
Inits ParallelGateFamily

        Args:
            gate: The gate which can act in parallel. It can be a python `type` inheriting from
                `cirq.Gate` or a non-parameterized instance of a `cirq.Gate`. If an instance of
                `cirq.ParallelGate` is passed, then the corresponding `gate.sub_gate` is used.
            name: The name of the gate family.
            description: Human readable description of the gate family.
            max_parallel_allowed: The maximum number of qubits on which a given gate `g`
            can act on. If None, then any number of qubits are allowed.
        
cirq-core/cirq/ops/common_gate_families.py