def METHOD_NAME(self):
    frozen = ([[2], [0,]],
              [[0,1,3,4], [0,2]])
    mo_occ = [[np.array([1, 1, 1, 0, 0]),np.array([1, 1, 0, 0, 0]),],
              [np.array([1, 0, 0, 0, 0]),np.array([1, 1, 1, 0, 0]),]]
    mp = fake_ump(frozen=frozen, mo_occ=mo_occ, nkpts=2)
    nocc = get_nocc(mp)
    nmo = get_nmo(mp)
    self.assertAlmostEqual(nocc, (2, 1))
    self.assertAlmostEqual(nmo, (5, 3))  # Take the max occ and max vir from kpoints -
                                         # spin0: 2 occ (from first kpoint), 3 vir (from second kpoint)
                                         # spin1: 1 occ (from second kpoint),2 vir (from second kpoint)
    nocc = get_nocc(mp, per_kpoint=True)
    nmo = get_nmo(mp, per_kpoint=True)
    self.assertAlmostEqual(nocc, ([2, 1], [0, 1]))
    self.assertAlmostEqual(nmo, ([4, 4], [1, 3]))
    #  Using `O` and `V` as occupied and virtual and `-` as a padded/frozen orbital,
    #  we will have the following orbital list
    #
    #        alpha spin      |  beta spin
    #  k1 :  O O | - V V     |  - | - V
    #  k2 :  O - | V V V     |  O | V V
    split_idx = padding_k_idx(mp, kind='split')
    outa = [[y for x in split_idx[0][idx] for y in x] for idx in range(2)]  # Flatten the list for ease-of-use
    outb = [[y for x in split_idx[1][idx] for y in x] for idx in range(2)]
    expecteda = [[0, 1, 0], [1, 2, 0, 1, 2]]  # [occ_idx, vir_idx] for alpha
    expectedb = [[0], [1, 0, 1]]              # [occ_idx, vir_idx] for beta
    self.assertAlmostEqual(outa, expecteda)
    self.assertAlmostEqual(outb, expectedb)
    outa, outb = padding_k_idx(mp, kind='joint')
    outa = [y for x in outa for y in x]
    outb = [y for x in outb for y in x]
    expecteda = [0,1,3,4,0,2,3,4]  # [occa_idx_k1, occa_idx_k2]
    expectedb = [2,0,1,2]
    self.assertAlmostEqual(outa, expecteda)
    self.assertAlmostEqual(outb, expectedb)