def METHOD_NAME(
    self, num_spatial_orbitals: int, num_particles: tuple[int, int]
) -> list[tuple[tuple[int, ...], tuple[int, ...]]]:
    """Generates the excitations for the PUCCD Ansatz.
    Args:
        num_spatial_orbitals: the number of spatial orbitals.
        num_particles: the number of alpha and beta electrons. Note, these must be identical for
        this class.
    Raises:
        QiskitNatureError: if the number of alpha and beta electrons is not equal.
    Returns:
        The list of excitations encoded as tuples of tuples. Each tuple in the list is a pair of
        tuples. The first tuple contains the occupied spin orbital indices whereas the second
        one contains the indices of the unoccupied spin orbitals.
    """
    self._validate_num_particles(num_particles)
    excitations: list[tuple[tuple[int, ...], tuple[int, ...]]] = []
    excitations.extend(
        generate_fermionic_excitations(
            1,
            num_spatial_orbitals,
            num_particles,
            alpha_spin=self.include_singles[0],
            beta_spin=self.include_singles[1],
        )
    )
    num_electrons = num_particles[0]
    beta_index_shift = num_spatial_orbitals
    # generate alpha-spin orbital indices for occupied and unoccupied ones
    alpha_excitations = get_alpha_excitations(
        num_spatial_orbitals, num_electrons, generalized=self._generalized
    )
    logger.debug("Generated list of single alpha excitations: %s", alpha_excitations)
    for alpha_exc in alpha_excitations:
        # create the beta-spin excitation by shifting into the upper block-spin orbital indices
        beta_exc = (
            alpha_exc[0] + beta_index_shift,
            alpha_exc[1] + beta_index_shift,
        )
        # add the excitation tuple
        occ: tuple[int, ...]
        unocc: tuple[int, ...]
        occ, unocc = zip(alpha_exc, beta_exc)
        exc_tuple = (occ, unocc)
        excitations.append(exc_tuple)
        logger.debug("Added the excitation: %s", exc_tuple)
    return excitations