diff --git a/docs/molham.rst b/docs/molham.rst new file mode 100644 index 0000000..d51428c --- /dev/null +++ b/docs/molham.rst @@ -0,0 +1,8 @@ +Molecular Hamiltonian +===================== +MolHam class +----------------- +... autoclass:: moha.molkit.hamiltonians.MolHam + :members: + + .. automethod:: __init__ \ No newline at end of file diff --git a/examples/molkit.ipynb b/examples/molkit.ipynb index dfe756d..cfd32cd 100644 --- a/examples/molkit.ipynb +++ b/examples/molkit.ipynb @@ -26,15 +26,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n" + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "/workspaces/ModelHamiltonian/moha/molkit/hamiltonians.py:179: UserWarning: Duplicate entries in the FCIDUMP file are ignored\n", - " data = load_fcidump(open(path, 'r'))\n" + "/Users/valeriichuiko/Desktop/projects/ModelHamiltonian/moha/molkit/hamiltonians.py:176: UserWarning: Duplicate entries in the FCIDUMP file are ignored\n", + " data = load_fcidump(open(path))\n" ] } ], @@ -42,6 +42,7 @@ "import numpy as np\n", "from moha import HamHeisenberg\n", "from moha.molkit.hamiltonians import MolHam\n", + "from moha.molkit.utils.tools import to_geminal\n", "\n", "# load a hamiltonian from the fcidump file\n", "hami = MolHam()\n", @@ -78,554 +79,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "One-body integrals (spin basis):\n", - " [[-1.13831275e+00 4.44089210e-16 9.23269847e-02 8.32667268e-17\n", - " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", - " [ 4.44089210e-16 -1.04621069e+00 2.77555756e-16 7.41183629e-02\n", - " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", - " [ 9.23269847e-02 2.77555756e-16 -9.82637700e-01 -1.38777878e-16\n", - " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", - " [ 8.32667268e-17 7.41183629e-02 -1.38777878e-16 -9.72184231e-01\n", - " 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", - " -1.13831275e+00 4.44089210e-16 9.23269847e-02 8.32667268e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", - " 4.44089210e-16 -1.04621069e+00 2.77555756e-16 7.41183629e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", - " 9.23269847e-02 2.77555756e-16 -9.82637700e-01 -1.38777878e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00\n", - " 8.32667268e-17 7.41183629e-02 -1.38777878e-16 -9.72184231e-01]]\n", - "Two-body integrals (spin basis):\n", - " [[[[ 3.49974212e-01 -2.91433544e-16 -5.76085753e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-2.91433544e-16 1.64265418e-01 -6.24500451e-17 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-5.76085753e-02 -6.24500451e-17 1.27619481e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[-2.91433544e-16 3.18734202e-01 -1.31838984e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.64265418e-01 1.38777878e-17 6.98132857e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-6.24500451e-17 1.75474384e-02 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[-5.76085753e-02 -1.31838984e-16 3.22024071e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-6.24500451e-17 6.98132857e-02 2.08166817e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.27619481e-01 1.66533454e-16 1.81604262e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " ...\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 3.18734202e-01\n", - " -1.31838984e-16 -5.99199501e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.38777878e-17\n", - " 6.98132857e-02 8.32667268e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.75474384e-02\n", - " 1.66533454e-16 1.29061413e-01]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -1.31838984e-16\n", - " 3.22024071e-01 -2.08166817e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 6.98132857e-02\n", - " 2.08166817e-16 1.68393804e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 1.81604262e-02 -3.74700271e-16]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -5.99199501e-02\n", - " -2.08166817e-17 3.62156186e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 8.32667268e-17\n", - " 1.68393804e-01 -4.99600361e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.29061413e-01\n", - " -3.74700271e-16 -6.01544349e-02]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]]\n", - "\n", - "\n", - " [[[-2.91433544e-16 1.64265418e-01 -6.24500451e-17 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 3.18734202e-01 1.38777878e-17 1.75474384e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-1.31838984e-16 6.98132857e-02 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 1.64265418e-01 1.38777878e-17 6.98132857e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.38777878e-17 3.32316870e-01 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 6.98132857e-02 1.66533454e-16 1.46071836e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[-6.24500451e-17 6.98132857e-02 2.08166817e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.75474384e-02 1.66533454e-16 3.35356211e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.66533454e-16 1.46071836e-01 -1.11022302e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " ...\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.38777878e-17\n", - " 6.98132857e-02 8.32667268e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 3.32316870e-01\n", - " 1.66533454e-16 1.52359077e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 1.46071836e-01 4.85722573e-17]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 6.98132857e-02\n", - " 2.08166817e-16 1.68393804e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 3.35356211e-01 1.31838984e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.46071836e-01\n", - " -1.11022302e-16 7.29178274e-02]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 8.32667268e-17\n", - " 1.68393804e-01 -4.99600361e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.52359077e-02\n", - " 1.31838984e-16 3.30604577e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 4.85722573e-17\n", - " 7.29178274e-02 -3.05311332e-16]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]]\n", - "\n", - "\n", - " [[[-5.76085753e-02 -6.24500451e-17 1.27619481e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-1.31838984e-16 6.98132857e-02 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 3.22024071e-01 2.08166817e-16 1.81604262e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[-6.24500451e-17 1.75474384e-02 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 6.98132857e-02 1.66533454e-16 1.46071836e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 2.08166817e-16 3.35356211e-01 -1.11022302e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 1.27619481e-01 1.66533454e-16 1.81604262e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.66533454e-16 1.46071836e-01 -1.11022302e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.81604262e-02 -1.11022302e-16 3.42057681e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " ...\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.75474384e-02\n", - " 1.66533454e-16 1.29061413e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 1.46071836e-01 4.85722573e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 3.35356211e-01\n", - " -1.11022302e-16 1.78424099e-02]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 1.81604262e-02 -3.74700271e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.46071836e-01\n", - " -1.11022302e-16 7.29178274e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -1.11022302e-16\n", - " 3.42057681e-01 2.84494650e-16]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.29061413e-01\n", - " -3.74700271e-16 -6.01544349e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 4.85722573e-17\n", - " 7.29178274e-02 -3.05311332e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.78424099e-02\n", - " 2.84494650e-16 3.35192040e-01]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]]\n", - "\n", - "\n", - " ...\n", - "\n", - "\n", - " [[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 3.18734202e-01 1.38777878e-17 1.75474384e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-1.31838984e-16 6.98132857e-02 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-5.99199501e-02 8.32667268e-17 1.29061413e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 1.38777878e-17 3.32316870e-01 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 6.98132857e-02 1.66533454e-16 1.46071836e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 8.32667268e-17 1.52359077e-02 4.85722573e-17 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 1.75474384e-02 1.66533454e-16 3.35356211e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.66533454e-16 1.46071836e-01 -1.11022302e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.29061413e-01 4.85722573e-17 1.78424099e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " ...\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 3.32316870e-01\n", - " 1.66533454e-16 1.52359077e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 1.46071836e-01 4.85722573e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.52359077e-02\n", - " 4.85722573e-17 1.32179395e-01]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 3.35356211e-01 1.31838984e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.46071836e-01\n", - " -1.11022302e-16 7.29178274e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 4.85722573e-17\n", - " 1.78424099e-02 -2.49800181e-16]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.52359077e-02\n", - " 1.31838984e-16 3.30604577e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 4.85722573e-17\n", - " 7.29178274e-02 -3.05311332e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.32179395e-01\n", - " -2.49800181e-16 -6.33638455e-02]]]\n", - "\n", - "\n", - " [[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [-1.31838984e-16 6.98132857e-02 1.66533454e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 3.22024071e-01 2.08166817e-16 1.81604262e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-2.08166817e-17 1.68393804e-01 -3.74700271e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 6.98132857e-02 1.66533454e-16 1.46071836e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 2.08166817e-16 3.35356211e-01 -1.11022302e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.68393804e-01 1.31838984e-16 7.29178274e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 1.66533454e-16 1.46071836e-01 -1.11022302e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.81604262e-02 -1.11022302e-16 3.42057681e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-3.74700271e-16 7.29178274e-02 2.84494650e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " ...\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.66533454e-16\n", - " 1.46071836e-01 4.85722573e-17]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 3.35356211e-01\n", - " -1.11022302e-16 1.78424099e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.31838984e-16\n", - " 7.29178274e-02 -2.49800181e-16]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.46071836e-01\n", - " -1.11022302e-16 7.29178274e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -1.11022302e-16\n", - " 3.42057681e-01 2.84494650e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 7.29178274e-02\n", - " 2.84494650e-16 1.75364226e-01]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 4.85722573e-17\n", - " 7.29178274e-02 -3.05311332e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.78424099e-02\n", - " 2.84494650e-16 3.35192040e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -2.49800181e-16\n", - " 1.75364226e-01 -2.49800181e-16]]]\n", - "\n", - "\n", - " [[[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [-5.99199501e-02 8.32667268e-17 1.29061413e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-2.08166817e-17 1.68393804e-01 -3.74700271e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 3.62156186e-01 -4.99600361e-16 -6.01544349e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 8.32667268e-17 1.52359077e-02 4.85722573e-17 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 1.68393804e-01 1.31838984e-16 7.29178274e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-4.99600361e-16 3.30604577e-01 -3.05311332e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 1.29061413e-01 4.85722573e-17 1.78424099e-02 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-3.74700271e-16 7.29178274e-02 2.84494650e-16 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [-6.01544349e-02 -3.05311332e-16 3.35192040e-01 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]]\n", - "\n", - " ...\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.52359077e-02\n", - " 4.85722573e-17 1.32179395e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.31838984e-16\n", - " 7.29178274e-02 -2.49800181e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 3.30604577e-01\n", - " -3.05311332e-16 -6.33638455e-02]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 4.85722573e-17\n", - " 1.78424099e-02 -2.49800181e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 7.29178274e-02\n", - " 2.84494650e-16 1.75364226e-01]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -3.05311332e-16\n", - " 3.35192040e-01 -2.49800181e-16]]\n", - "\n", - " [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00\n", - " 0.00000000e+00 0.00000000e+00]\n", - " ...\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... 1.32179395e-01\n", - " -2.49800181e-16 -6.33638455e-02]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -2.49800181e-16\n", - " 1.75364226e-01 -2.49800181e-16]\n", - " [ 0.00000000e+00 0.00000000e+00 0.00000000e+00 ... -6.33638455e-02\n", - " -2.49800181e-16 3.79154904e-01]]]]\n" + "Shape of one-body integrals (spin basis):\n", + " (8, 8)\n", + "Shape of two-body integrals (spin basis):\n", + " (8, 8, 8, 8)\n" ] } ], "source": [ "one_body_spin, two_body_spin = hami.spinize_H()\n", - "print(\"One-body integrals (spin basis):\\n\", one_body_spin)\n", - "print(\"Two-body integrals (spin basis):\\n\", two_body_spin)" + "print(\"Shape of one-body integrals (spin basis):\\n\", one_body_spin.shape)\n", + "print(\"Shape of two-body integrals (spin basis):\\n\", two_body_spin.shape)" ] }, { @@ -644,9 +108,33 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Elements 0, 1, 0, 1 and 1, 0, 0, 1 of aaaa part:\n", + " 0.1544687847893533 -0.1544687847893533\n", + "--------------------\n", + "Elements 0, 1, 0, 1 and 1, 0, 0, 1 of abab part:\n", + " 0.3187342023639616 0.1642654175746083\n", + "--------------------\n", + "Elements 0, 0, 1, 1 for aaaa and abab parts:\n", + " 0.0 0.1642654175746083\n" + ] + } + ], "source": [ - "hami.antisymmetrize()" + "hami.antisymmetrize()\n", + "hami.two_body_spin[0, 1, 0, 1]\n", + "two_body_aaaa = hami.get_spin_blocks()['aaaa']\n", + "two_body_abab = hami.get_spin_blocks()['abab']\n", + "\n", + "print(\"Elements 0, 1, 0, 1 and 1, 0, 0, 1 of aaaa part:\\n\", two_body_aaaa[0, 1, 0, 1], two_body_aaaa[1, 0, 0, 1])\n", + "print(\"--\"*10)\n", + "print(\"Elements 0, 1, 0, 1 and 1, 0, 0, 1 of abab part:\\n\", two_body_abab[0, 1, 0, 1], two_body_abab[1, 0, 0, 1])\n", + "print(\"--\"*10)\n", + "print(\"Elements 0, 0, 1, 1 for aaaa and abab parts:\\n\", two_body_aaaa[0, 0, 1, 1], two_body_abab[0, 0, 1, 1])" ] }, { @@ -655,8 +143,8 @@ "source": [ "### 4. Converting the Two-Body Term to the Geminal Basis\n", "\n", - "The `to_geminal` method converts the two-body term from the spin-orbital basis to the geminal basis. \n", - "You can specify the type of two-body term: `'rdm2'` (two-body reduced density matrix) or `'h2'` (two-body Hamiltonian).\n", + "The `to_geminal` function in the utils module converts the two-body term from the spin-orbital basis to the geminal basis. \n", + "You can specify the type of two-body term: `'h2'` (Hamiltonian) ; we also added conversion to the geminal basis for reduced density matrices: `'rdm2'`.\n", "\n", "The Hamiltonian in the geminal basis is obtained by the following formula:\n", "$V_{A B} =\\frac{1}{2}\\left(V_{p q r s}-V_{q p r s}-V_{p q r s}+V_{qprs}\\right)$\n" @@ -666,21 +154,9 @@ "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'MolHam' object has no attribute 'to_geminal'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m geminal = \u001b[43mhami\u001b[49m\u001b[43m.\u001b[49m\u001b[43mto_geminal\u001b[49m(two_body_spin, \u001b[38;5;28mtype\u001b[39m=\u001b[33m'\u001b[39m\u001b[33mh2\u001b[39m\u001b[33m'\u001b[39m)\n", - "\u001b[31mAttributeError\u001b[39m: 'MolHam' object has no attribute 'to_geminal'" - ] - } - ], + "outputs": [], "source": [ - "geminal = hami.to_geminal(two_body_spin, type='h2')" + "geminal = to_geminal(two_body_spin, type='h2')" ] }, { @@ -705,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -732,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -763,15 +239,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "E_spin-orbital : -4.121211958837992\n", - "E_geminal : -4.121211958837991\n" + "E_spin-orbital : -3.0622781536522004\n", + "E_geminal : -3.0622781536522012\n", + "FCI energy : -3.062278153652201\n" ] } ], @@ -787,7 +264,7 @@ "N_ELEC, norb = 4, hami.n_spatial\n", "\n", "# Perform Full CI calculation\n", - "e_fci, ci_vec = fci.direct_spin1.kernel(h1, h2, norb, N_ELEC, ecore=core_energy)\n", + "e_fci, ci_vec = fci.direct_spin1.kernel(h1, np.einsum('pqrs -> prqs', h2), norb, N_ELEC, ecore=core_energy, tol=1e-12)\n", "rdm1s, rdm2s = fci.direct_spin1.make_rdm12s(ci_vec, norb, N_ELEC)\n", "\n", "# construct 2-rdm\n", @@ -815,16 +292,18 @@ "# Energy from geminal formulation\n", "E_gem = np.einsum('pq,pq', H_gem, rdm_gem)\n", "\n", - "# Print the energies from both formulations\n", + "# Print the energies from all formulations\n", "print(\"E_spin-orbital :\", E_spin)\n", "print(\"E_geminal :\", E_gem)\n", - "assert np.allclose(E_spin, E_gem), \"Energies do not match!\"" + "print(\"FCI energy :\", e_fci - core_energy)\n", + "assert np.allclose(E_spin, E_gem), \"Energies do not match!\"\n", + "assert np.allclose(E_spin, e_fci - core_energy), \"Energies do not match!\"" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "base", "language": "python", "name": "python3" }, @@ -838,7 +317,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.1" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/moha/molkit/hamiltonians.py b/moha/molkit/hamiltonians.py index 1d1df5c..db314eb 100644 --- a/moha/molkit/hamiltonians.py +++ b/moha/molkit/hamiltonians.py @@ -42,7 +42,11 @@ def __init__(self, one_body=None, two_body=None, zero_body=0): def antisymmetrize(self): """Apply proper antisymmetrization to two-electron integrals.""" - self.two_body = antisymmetrize_two_body(self.two_body, inplace=True) + if not hasattr(self, "two_body_spin"): + raise RuntimeError( + "Call .spinize_H() first to compute spin-orbital form.") + self.two_body_spin = antisymmetrize_two_body(self.two_body_spin, + inplace=True) def get_spin_blocks(self): """Return the main spin blocks of the two-body spin-orbital tensor. diff --git a/moha/molkit/utils/spinops.py b/moha/molkit/utils/spinops.py index 0f38f2f..c4de044 100644 --- a/moha/molkit/utils/spinops.py +++ b/moha/molkit/utils/spinops.py @@ -20,7 +20,7 @@ def antisymmetrize_two_body( Returns ------- np.ndarray - Antisymmetrised tensor obeying + Antisymmetrised tensor obeys .. math:: @@ -32,18 +32,28 @@ def antisymmetrize_two_body( Notes ----- - The operation applied is + https://vergil.chemistry.gatech.edu/static/content/permsymm.pdf + + The input tensor obbeys the following 8-fold symmetry .. math:: - V^{\\sigma\\sigma\\sigma\\sigma}_{pqrs} - \\;\\;\\leftarrow\\;\\; - \\tfrac12\\,\\bigl(V^{\\sigma\\sigma\\sigma\\sigma}_{pqrs} - -V^{\\sigma\\sigma\\sigma\\sigma}_{pqsr}\\bigr), + V_{ijkl} = V_{jilk} + = V_{klij} + = V_{lkji} + = V_{kjjl} + = V_{lijk} + = V_{ilkj} + = V_{jklj} + + The operation applied is - for ``σ = α`` and ``σ = β``. All other spin sectors are returned - untouched. + .. math:: + \langle ij\| kl\rangle= + \langle ij\mid kl\rangle-\langle ij\mid lk\rangle + Keep in mind, that such operation produces terms of the form + abba, baab, that are not present in the original tensor. """ if not inplace: tensor = tensor.copy() @@ -54,15 +64,7 @@ def antisymmetrize_two_body( n = nspin // 2 # number of spatial orbitals - # αααα block - aa = tensor[:n, :n, :n, :n] - aa -= np.swapaxes(aa, 2, 3) - aa *= 0.5 - - # ββββ block - bb = tensor[n:, n:, n:, n:] - bb -= np.swapaxes(bb, 2, 3) - bb *= 0.5 + tensor = tensor - np.einsum('pqrs->pqsr', tensor) return tensor diff --git a/moha/molkit/utils/tests/__init__.py b/moha/molkit/utils/tests/__init__.py deleted file mode 100644 index 4befe01..0000000 --- a/moha/molkit/utils/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -r"""Tests Molkit Module.""" diff --git a/moha/molkit/utils/tests/test_spinops.py b/moha/molkit/utils/tests/test_spinops.py deleted file mode 100644 index e69de29..0000000 diff --git a/moha/molkit/utils/tools.py b/moha/molkit/utils/tools.py index fad250f..a06211d 100644 --- a/moha/molkit/utils/tools.py +++ b/moha/molkit/utils/tools.py @@ -55,16 +55,14 @@ def to_geminal(two_body=None, type='h2'): for s in range(r + 1, n): if type == 'rdm2': two_body_gem.append( - 0.5 * 4 * two_body[p, q, r, s] + two_body[p, q, r, s] ) elif type == 'h2': two_body_gem.append( - 0.5 * ( two_body[p, q, r, s] - two_body[q, p, r, s] - two_body[p, q, s, r] + two_body[q, p, s, r] - ) ) n_gem = n * (n - 1) // 2 diff --git a/moha/test/test_molham.py b/moha/test/test_molham.py new file mode 100644 index 0000000..e65255a --- /dev/null +++ b/moha/test/test_molham.py @@ -0,0 +1,70 @@ +"""Testing the MolHam class.""" + +import numpy as np +from numpy.testing import assert_allclose, assert_equal +from moha.molkit import utils +from moha.molkit.hamiltonians import MolHam + + +def test_antisymmetrize(): + """Test antisymmetrization of two-electron integrals.""" + one_body = np.eye(2) + two_body = np.zeros((2, 2, 2, 2)) + two_body[0, 0, 1, 1] = 1.0 + two_body[1, 1, 0, 0] = 1.0 + + mol_ham = MolHam(one_body=one_body, two_body=two_body) + mol_ham.spinize_H() + mol_ham.antisymmetrize() + + expected_two_body_aa = np.zeros((2, 2, 2, 2)) + expected_two_body_aa[0, 0, 1, 1] = 1 + expected_two_body_aa[1, 1, 0, 0] = 1 + expected_two_body_aa[0, 1, 0, 1] = 0 + expected_two_body_aa[1, 0, 1, 0] = 0 + + assert_allclose(mol_ham.two_body[:2, :2, :2, :2], expected_two_body_aa) + + +def test_to_geminal(): + """Test conversion to geminal basis.""" + n_orb = 4 + two_body = np.zeros((2, 2, 2, 2)) + two_body[0, 0, 1, 1] = 1.0 + two_body[1, 1, 0, 0] = 1.0 + two_body[1, 0, 0, 1] = 1.0 + two_body[0, 1, 1, 0] = 1.0 + + geminal_true = np.array([ + [-2.0] + ]) + geminal = utils.tools.to_geminal(two_body, type='h2') + assert_equal(geminal.shape, (1, 1)) + assert_allclose(geminal, geminal_true) + + +def test_to_reduced_ham(): + """Test conversion to reduced Hamiltonian.""" + n_orb = 2 + one_body = np.eye(n_orb) + two_body = np.zeros((n_orb, n_orb, n_orb, n_orb)) + two_body[0, 0, 1, 1] = 1.0 + two_body[1, 1, 0, 0] = 1.0 + + mol_ham = MolHam(one_body=one_body, two_body=two_body) + reduced_ham = mol_ham.to_reduced(n_elec=2) + + # sum over the spin-orbital indices + reduced_ham = reduced_ham[:2, :2, :2, :2] +\ + reduced_ham[2:, 2:, 2:, 2:] +\ + reduced_ham[:2, 2:, :2, 2:] +\ + reduced_ham[2:, :2, 2:, :2] + reduced_ham *= 0.25 + + reduced_ham_true = 0.5 * two_body + reduced_ham_true[0, 0, 0, 0] = 1 + reduced_ham_true[1, 1, 1, 1] = 1 + reduced_ham_true[0, 1, 0, 1] = 1 + reduced_ham_true[1, 0, 1, 0] = 1 + + assert_allclose(reduced_ham, reduced_ham_true) diff --git a/website/_toc.yml b/website/_toc.yml index efd8511..b236314 100644 --- a/website/_toc.yml +++ b/website/_toc.yml @@ -12,6 +12,7 @@ parts: - file: examples/mohagpt.ipynb - file: examples/gui.ipynb - file: examples/RG.ipynb + - file: examples/molkit.ipynb - caption: API chapters: