Ejemplo n.º 1
0
def int_to_spatial(I, noa, nob, nva, nvb):
    vvvv = I.vvvv[:nva, :nva, :nva, :nva]
    vvvo = I.vvvo[:nva, :nva, :nva, :noa]
    vovv = I.vovv[:nva, :noa, :nva, :nva]
    vvoo = I.vvoo[:nva, :nva, :noa, :noa]
    vovo = I.vovo[:nva, :noa, :nva, :noa]
    oovv = I.oovv[:noa, :noa, :nva, :nva]
    vooo = I.vooo[:nva, :noa, :noa, :noa]
    ooov = I.ooov[:noa, :noa, :noa, :nva]
    oooo = I.oooo[:noa, :noa, :noa, :noa]
    Ia = two_e_blocks(vvvv=vvvv,
                      vvvo=vvvo,
                      vovv=vovv,
                      vvoo=vvoo,
                      vovo=vovo,
                      oovv=oovv,
                      vooo=vooo,
                      ooov=ooov,
                      oooo=oooo)

    vvvv = I.vvvv[nva:, nva:, nva:, nva:]
    vvvo = I.vvvo[nva:, nva:, nva:, noa:]
    vovv = I.vovv[nva:, noa:, nva:, nva:]
    vvoo = I.vvoo[nva:, nva:, noa:, noa:]
    vovo = I.vovo[nva:, noa:, nva:, noa:]
    oovv = I.oovv[noa:, noa:, nva:, nva:]
    vooo = I.vooo[nva:, noa:, noa:, noa:]
    ooov = I.ooov[noa:, noa:, noa:, nva:]
    oooo = I.oooo[noa:, noa:, noa:, noa:]
    Ib = two_e_blocks(vvvv=vvvv,
                      vvvo=vvvo,
                      vovv=vovv,
                      vvoo=vvoo,
                      vovo=vovo,
                      oovv=oovv,
                      vooo=vooo,
                      ooov=ooov,
                      oooo=oooo)

    vvvv = I.vvvv[:nva, nva:, :nva, nva:]
    vvvo = I.vvvo[:nva, nva:, :nva, noa:]
    vvov = -I.vvvo[:nva, nva:, nva:, :noa].transpose((0, 1, 3, 2))
    vovv = I.vovv[:nva, noa:, :nva, nva:]
    ovvv = -I.vovv[nva:, :noa, :nva, nva:].transpose((1, 0, 2, 3))
    vvoo = I.vvoo[:nva, nva:, :noa, noa:]
    vovo = I.vovo[:nva, noa:, :nva, noa:]
    voov = -I.vovo[:nva, noa:, nva:, :noa].transpose((0, 1, 3, 2))
    ovov = I.vovo[nva:, :noa, nva:, :noa].transpose((1, 0, 3, 2))
    ovvo = -I.vovo[nva:, :noa, :nva, noa:].transpose((1, 0, 2, 3))
    oovv = I.oovv[:noa, noa:, :nva, nva:]
    vooo = I.vooo[:nva, noa:, :noa, noa:]
    ovoo = -I.vooo[nva:, :noa, :noa, noa:].transpose((1, 0, 2, 3))
    ooov = I.ooov[:noa, noa:, :noa, nva:]
    oovo = -I.ooov[:noa, noa:, noa:, :nva].transpose((0, 1, 3, 2))
    oooo = I.oooo[:noa, noa:, :noa, noa:]
    Iabab = two_e_blocks_full(vvvv=vvvv,
                              vvvo=vvvo,
                              vvov=vvov,
                              vovv=vovv,
                              ovvv=ovvv,
                              vvoo=vvoo,
                              vovo=vovo,
                              ovvo=ovvo,
                              voov=voov,
                              ovov=ovov,
                              oovv=oovv,
                              vooo=vooo,
                              ovoo=ovoo,
                              oovo=oovo,
                              ooov=ooov,
                              oooo=oooo)

    return Ia, Ib, Iabab
Ejemplo n.º 2
0
def int_to_spin2(I_aaaa, I_bbbb, I_abab, noa, nva, nob, nvb):

    # vvvv
    aaaa = I_aaaa.vvvv
    bbbb = I_bbbb.vvvv
    abab = I_abab.vvvv
    baba = I_abab.vvvv.transpose((1, 0, 3, 2))
    abba = -I_abab.vvvv.transpose((0, 1, 3, 2))
    baab = -I_abab.vvvv.transpose((1, 0, 2, 3))
    Ivvvv = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, nva, nva,
                              nva, nva, nvb, nvb, nvb, nvb)

    # vvvo
    aaaa = I_aaaa.vvvo
    bbbb = I_bbbb.vvvo
    abab = I_abab.vvvo
    baba = I_abab.vvov.transpose((1, 0, 3, 2))
    abba = -I_abab.vvov.transpose((0, 1, 3, 2))
    baab = -I_abab.vvvo.transpose((1, 0, 2, 3))
    Ivvvo = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, nva, nva,
                              nva, noa, nvb, nvb, nvb, nob)

    # vovv
    aaaa = I_aaaa.vovv
    bbbb = I_bbbb.vovv
    abab = I_abab.vovv
    baba = I_abab.ovvv.transpose((1, 0, 3, 2))
    abba = -I_abab.vovv.transpose((0, 1, 3, 2))
    baab = -I_abab.ovvv.transpose((1, 0, 2, 3))
    Ivovv = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, nva, noa,
                              nva, nva, nvb, nob, nvb, nvb)

    # vvoo
    aaaa = I_aaaa.vvoo
    bbbb = I_bbbb.vvoo
    abab = I_abab.vvoo
    baba = I_abab.vvoo.transpose((1, 0, 3, 2))
    abba = -I_abab.vvoo.transpose((0, 1, 3, 2))
    baab = -I_abab.vvoo.transpose((1, 0, 2, 3))
    Ivvoo = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, nva, nva,
                              noa, noa, nvb, nvb, nob, nob)

    # vovo
    aaaa = I_aaaa.vovo
    bbbb = I_bbbb.vovo
    abab = I_abab.vovo
    baba = I_abab.ovov.transpose((1, 0, 3, 2))
    abba = -I_abab.voov.transpose((0, 1, 3, 2))
    baab = -I_abab.ovvo.transpose((1, 0, 2, 3))
    Ivovo = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, nva, noa,
                              nva, noa, nvb, nob, nvb, nob)

    # oovv
    aaaa = I_aaaa.oovv
    bbbb = I_bbbb.oovv
    abab = I_abab.oovv
    baba = I_abab.oovv.transpose((1, 0, 3, 2))
    abba = -I_abab.oovv.transpose((0, 1, 3, 2))
    baab = -I_abab.oovv.transpose((1, 0, 2, 3))
    Ioovv = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, noa, noa,
                              nva, nva, nob, nob, nvb, nvb)

    # vooo
    aaaa = I_aaaa.vooo
    bbbb = I_bbbb.vooo
    abab = I_abab.vooo
    baba = I_abab.ovoo.transpose((1, 0, 3, 2))
    abba = -I_abab.vooo.transpose((0, 1, 3, 2))
    baab = -I_abab.ovoo.transpose((1, 0, 2, 3))
    Ivooo = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, nva, noa,
                              noa, noa, nvb, nob, nob, nob)

    # ooov
    aaaa = I_aaaa.ooov
    bbbb = I_bbbb.ooov
    abab = I_abab.ooov
    baba = I_abab.oovo.transpose((1, 0, 3, 2))
    abba = -I_abab.oovo.transpose((0, 1, 3, 2))
    baab = -I_abab.ooov.transpose((1, 0, 2, 3))
    Iooov = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, noa, noa,
                              noa, nva, nob, nob, nob, nvb)

    # oooo
    aaaa = I_aaaa.oooo
    bbbb = I_bbbb.oooo
    abab = I_abab.oooo
    baba = I_abab.oooo.transpose((1, 0, 3, 2))
    abba = -I_abab.oooo.transpose((0, 1, 3, 2))
    baab = -I_abab.oooo.transpose((1, 0, 2, 3))
    Ioooo = int_to_spin_block(aaaa, bbbb, abab, baba, abba, baab, noa, noa,
                              noa, noa, nob, nob, nob, nob)

    return two_e_blocks(vvvv=Ivvvv,
                        vvvo=Ivvvo,
                        vovv=Ivovv,
                        vvoo=Ivvoo,
                        vovo=Ivovo,
                        oovv=Ioovv,
                        vooo=Ivooo,
                        ooov=Iooov,
                        oooo=Ioooo)