def METHOD_NAME(
    excitation: tuple[tuple[int, ...], tuple[int, ...]],
    num_spatial_orbitals: int,
    qubit_mapper: QubitMapper,
) -> tuple[SparsePauliOp, list[bool]]:
    label = []
    for occ in excitation[0]:
        label.append(f"+_{occ}")
    for unocc in excitation[1]:
        label.append(f"-_{unocc}")
    fer_op = FermionicOp({" ".join(label): 1.0}, num_spin_orbitals=2 * num_spatial_orbitals)
    if isinstance(qubit_mapper, TaperedQubitMapper):
        qubit_op = qubit_mapper.map_clifford(fer_op)
        # Because the clifford conversion was already done, the commutativity information are based
        # on the single qubit pauli objects.
        symmetries_for_commutativity = qubit_mapper.z2symmetries.sq_paulis
    else:
        qubit_op = qubit_mapper.map(fer_op)
        symmetries_for_commutativity = []
    commutativities = []
    if not len(symmetries_for_commutativity) == 0:
        for symmetry in symmetries_for_commutativity:
            symmetry_op = SparsePauliOp.from_list([(symmetry.to_label(), 1.0)])
            paulis = qubit_op.paulis
            len_paulis = len(paulis)
            commuting = len(paulis.commutes_with_all(symmetry_op.paulis)) == len_paulis
            anticommuting = len(paulis.anticommutes_with_all(symmetry_op.paulis)) == len_paulis
            if commuting != anticommuting:  # only one of them is True
                if commuting:
                    commutativities.append(True)
                elif anticommuting:
                    commutativities.append(False)
            else:
                raise QiskitNatureError(
                    f"Symmetry {symmetry.to_label()} neither commutes nor anti-commutes "
                    "with excitation operator."
                )
    return qubit_op, commutativities