From 94ff745cda30333002d2521e0c87e0f43e43154f Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:15:23 +0000 Subject: [PATCH 01/31] Adding and computing d3 and d4 matrices for the 3rdm --- pyci/src/rdm.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 44cc4c7..712405f 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -17,7 +17,7 @@ namespace pyci { -void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2) { +void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4) { // prepare working vectors AlignedVector v_det(wfn.nword); AlignedVector v_occs(wfn.nocc_up); @@ -30,8 +30,14 @@ void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double * d0[j] = 0; d2[j++] = 0; } + i=wfn.nbasis * wfn.nbasis * wfn.nbasis; + j = 0; + while (j < i) { + d3[j]=0; + d4[j++]=0; + } // iterate over determinants - for (long idet = 0, jdet, k, l; idet < wfn.ndet; ++idet) { + for (long idet = 0, jdet, mdet, k, l, m, n; idet < wfn.ndet; ++idet) { double val1, val2; // fill working vectors wfn.copy_det(idet, det); @@ -46,6 +52,41 @@ void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double * l = occs[j]; d2[wfn.nbasis * k + l] += val1; d2[wfn.nbasis * l + k] += val1; + for (m= j + 1; m < wfn.nocc_up; ++m){ + n=occs[m]; + d3[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*l + n]+=val1; + d3[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*n + l]+=val1; + d3[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*k + n]+=val1; + d3[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*n + k]+=val1; + d3[(wfn.nbasis*wfn.nbasis)*n + wfn.nbasis*k + l]+=val1; + d3[(wfn.nbasis*wfn.nbasis)*n + wfn.nbasis*l + k]+=val1; + } + // pair excitation elements 3rdm j>i + for (m = 0; m < wfn.nvir_up; ++m) { + n = virs[m]; + excite_det(l, n, det); + mdet = wfn.index_det(det); + excite_det(n, l, det); + // check if excited determinant is in wfn + if (mdet > idet) { + val2 = coeffs[mdet] * coeffs[idet]; + d4[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*l + n]+=val2; + d4[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*n + l]+=val2; + } + } //pair excitation elements 3rdm i>j + for (m = 0; m < wfn.nvir_up; ++m) { + n = virs[m]; + excite_det(k, n, det); + mdet = wfn.index_det(det); + excite_det(n, k, det); + // check if excited determinant is in wfn + if (mdet > idet) { + val2 = coeffs[mdet] * coeffs[idet]; + d4[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*k + n]+=val2; + d4[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*n + k]+=val2; + } + } + } // pair excitation elements for (j = 0; j < wfn.nvir_up; ++j) { From bd91d4bcf0d5673918ae229c08e63fb2a4b6a34c Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:17:41 +0000 Subject: [PATCH 02/31] Updatind python binding in rmd.cpp --- pyci/src/rdm.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 712405f..551a3a5 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -850,10 +850,14 @@ void compute_transition_rdms(const GenCIWfn &wfn1, const GenCIWfn &wfn2, const d pybind11::tuple py_compute_rdms_doci(const DOCIWfn &wfn, const Array coeffs) { Array d0({wfn.nbasis, wfn.nbasis}); Array d2({wfn.nbasis, wfn.nbasis}); + Array d3({wfn.nbasis, wfn.nbasis, wfn.nbasis}); + Array d4({wfn.nbasis, wfn.nbasis, wfn.nbasis}); compute_rdms(wfn, reinterpret_cast(coeffs.request().ptr), reinterpret_cast(d0.request().ptr), - reinterpret_cast(d2.request().ptr)); - return pybind11::make_tuple(d0, d2); + reinterpret_cast(d2.request().ptr), + reinterpret_cast(d3.request().ptr), + reinterpret_cast(d4.request().ptr)); + return pybind11::make_tuple(d0, d2, d3, d4); } pybind11::tuple py_compute_rdms_fullci(const FullCIWfn &wfn, const Array coeffs) { From 5fe3111abc1d9d5416cacd7c6ac20a6b69513593 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:22:55 +0000 Subject: [PATCH 03/31] Updating pyci.h --- pyci/include/pyci.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyci/include/pyci.h b/pyci/include/pyci.h index 881c2bb..9ef3651 100644 --- a/pyci/include/pyci.h +++ b/pyci/include/pyci.h @@ -219,7 +219,7 @@ void setbit_det(const long, ulong *); void clearbit_det(const long, ulong *); -void compute_rdms(const DOCIWfn &, const double *, double *, double *); +void compute_rdms(const DOCIWfn &, const double *, double *, double *, double *, double *); void compute_rdms(const FullCIWfn &, const double *, double *, double *); From af06c92d3437ff26835f22fcbc01de0f762cd934 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:50:26 +0000 Subject: [PATCH 04/31] Updating spinze_rdms to compute DOCI 3rdm --- pyci/utility.py | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/pyci/utility.py b/pyci/utility.py index 1ecaff9..42c1dbd 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -92,7 +92,7 @@ def reduce_senzero_integrals(h, v, w, nocc): return rv, rw -def spinize_rdms(d1, d2): +def spinize_rdms(d1, d2, d3=None, d4=None): r""" Convert the DOCI matrices or FullCI RDM spin-blocks to full, generalized RDMs. @@ -102,19 +102,24 @@ def spinize_rdms(d1, d2): :math:`D_0` matrix or FullCI 1-RDM spin-blocks. d2 : numpy.ndarray :math:`D_2` matrix or FullCI 2-RDM spin-blocks. - + d3 : numpy.ndarray + :math `D_3` matrix for 3-RDM spin-blocks + d4 : numpy.ndarray + :math `D_4` matrix for 3-RDM spin-blocks Returns ------- rdm1 : numpy.ndarray Generalized one-particle RDM. rdm2 : numpy.ndarray Generalized two-particle RDM. - + rdm3 : numpy.ndarray + Generalized three-particle RDM. """ nbasis = d1.shape[1] nspin = nbasis * 2 rdm1 = np.zeros((nspin, nspin), dtype=np.double) rdm2 = np.zeros((nspin, nspin, nspin, nspin), dtype=np.double) + rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -123,6 +128,10 @@ def spinize_rdms(d1, d2): baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] abba = rdm2[:nbasis, nbasis:, nbasis:, :nbasis] baab = rdm2[nbasis:, :nbasis, :nbasis, nbasis:] + aaaaaa= rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] + bbbbbb= rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] + bbabba= rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] + aabaab= rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] if d1.ndim == 2: # DOCI matrices for p in range(nbasis): @@ -135,9 +144,29 @@ def spinize_rdms(d1, d2): bbbb[p, q, p, q] += d2[p, q] abab[p, q, p, q] += d2[p, q] baba[p, q, p, q] += d2[p, q] + bbabba[p, q, q, p, q, q] += 2.0*d2[p, q] + aabaab[p, q, q, p, q, q] += 2.0*d2[p, q] + for r in range(nbasis): + bbabba[p, q, q, p, r, r] += 2.0*d4[p, q, r] + aabaab[p, q, q, p, r, r] += 2.0*d4[p, q, r] + aaaaaa[p, q, r, p, q, r] += d3[p, q, r] + bbbbbb[p, q, r, p, q, r] += d3[p, q, r] + bbabba[p, q, r, p, q, r] += d3[p, q, r] + aabaab[p, q, r, p, q, r] += d3[p, q, r] rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 + rdm3 += np.einsum('ijklmn -> ijknlm',rdm3)+\ + np.einsum('ijklmn -> ijkmnl',rdm3) + rdm3*=1 + rdm3-=np.einsum('ijklmn -> ijkmln',rdm3) + rdm3 +=np.einsum('ijklmn -> kijlmn',rdm3)+\ + np.einsum('ijklmn -> jkilmn',rdm3) + aaaaaa *=1/3 + bbbbbb *=1/3 + rdm3-=np.einsum('ijklmn -> jiklmn',rdm3) + rdm3 *= 0.5 + return rdm1, rdm2, rdm3 else: # FullCI RDM spin-blocks aa += d1[0] # +aa @@ -148,7 +177,7 @@ def spinize_rdms(d1, d2): baba += np.swapaxes(np.swapaxes(d2[2], 0, 1), 2, 3) # +abab abba -= np.swapaxes(d2[2], 2, 3) # -abab baab -= np.swapaxes(d2[2], 0, 1) # -abab - return rdm1, rdm2 + return rdm1, rdm2 def odometer_one_spin(wfn, cost, t, qmax): From 453e6b3cd1bbe9b0363aecbce6883931bf9c78ee Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Wed, 4 Dec 2024 19:46:14 +0000 Subject: [PATCH 05/31] Adding spin_free_rdms function --- pyci/utility.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/pyci/utility.py b/pyci/utility.py index 42c1dbd..e795d15 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -179,6 +179,63 @@ def spinize_rdms(d1, d2, d3=None, d4=None): baab -= np.swapaxes(d2[2], 0, 1) # -abab return rdm1, rdm2 +def spin_free_rdms(d1, d2, d3=None, d4=None): + r""" + + Wrapper of spinze_rdms function that sums over the spin degree of freedom + to obtain spinless rdms. + + Parameters + ---------- + d1 : numpy.ndarray + :math:`D_0` matrix or FullCI 1-RDM spin-blocks. + d2 : numpy.ndarray + :math:`D_2` matrix or FullCI 2-RDM spin-blocks. + d3 : numpy.ndarray + :math `D_3` matrix for 3-RDM spin-blocks + d4 : numpy.ndarray + :math `D_4` matrix for 3-RDM spin-blocks + + Returns + ------- + rdm1 : numpy.ndarray + Spin traced one-particle RDM. + rdm2 : numpy.ndarray + Spin traced two-particle RDM. + rdm3 : numpy.ndarray + Spin traced three-particle RDM. + """ + nbasis = d1.shape[1] + rdm1,rdm2,rdm3=spinize_rdms(d1,d2,d3,d4) + rdm1_sf=np.zeros((nbasis, nbasis), dtype=np.double) + rdm2_sf=np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis,nbasis,nbasis), dtype=np.double) + aa = rdm1[:nbasis, :nbasis] + bb = rdm1[nbasis:, nbasis:] + aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] + bbbb = rdm2[nbasis:, nbasis:, nbasis:, nbasis:] + abab = rdm2[:nbasis, nbasis:, :nbasis, nbasis:] + baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] + if d1.ndim == 2: + # DOCI matrices + rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis,nbasis,nbasis), dtype=np.double) + aaaaaa= rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] + bbbbbb= rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] + bbabba= rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] + abbabb= rdm3[:nbasis,nbasis:,nbasis:,:nbasis,nbasis:,nbasis:] + babbab=rdm3[nbasis:,:nbasis,nbasis:,nbasis:,:nbasis,nbasis:] + aabaab= rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] + abaaba=rdm3[:nbasis,nbasis:,:nbasis,:nbasis,nbasis:,:nbasis] + baabaa=rdm3[nbasis:,:nbasis,:nbasis,nbasis:,:nbasis,:nbasis] + rdm1_sf=aa+bb + rdm2_sf=aaaa+abab+baba+bbbb + rdm3_sf=aaaaaa+bbbbbb+aabaab+abaaba+baabaa+bbabba+babbab+abbabb + return (rdm1_sf,rdm2_sf,rdm3_sf) + else: + # FullCI RDM spin-blocks + rdm1_sf=aa+bb + rdm2_sf=aaaa+abab+baba+bbbb + return (rdm1_sf,rdm2_sf) def odometer_one_spin(wfn, cost, t, qmax): r""" From 5403be915a22bc46b6d9027702071683c0eb12df Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Wed, 4 Dec 2024 19:47:08 +0000 Subject: [PATCH 06/31] Updating __init__.py to include spin_free_rdms function --- pyci/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyci/__init__.py b/pyci/__init__.py index 241b08c..d998e7a 100644 --- a/pyci/__init__.py +++ b/pyci/__init__.py @@ -22,7 +22,7 @@ from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms from pyci._pyci import add_hci, compute_enpt2 -from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms +from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spin_free_rdms from pyci.utility import odometer_one_spin, odometer_two_spin from pyci.excitation_ci import add_excitations From a719ae51ebed5e6becc496096fb61be8e3a1ab25 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:39:57 +0000 Subject: [PATCH 07/31] Separating the previous function compute_rdms from the new compute_rdms_34 --- pyci/src/rdm.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 551a3a5..090226b 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -17,7 +17,55 @@ namespace pyci { -void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4) { +void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2) { + // prepare working vectors + AlignedVector v_det(wfn.nword); + AlignedVector v_occs(wfn.nocc_up); + AlignedVector v_virs(wfn.nvir_up); + ulong *det = &v_det[0]; + long *occs = &v_occs[0], *virs = &v_virs[0]; + // fill rdms with zeros + long i = wfn.nbasis * wfn.nbasis, j = 0; + while (j < i) { + d0[j] = 0; + d2[j++] = 0; + } + // iterate over determinants + for (long idet = 0, jdet, k, l; idet < wfn.ndet; ++idet) { + double val1, val2; + // fill working vectors + wfn.copy_det(idet, det); + fill_occs(wfn.nword, det, occs); + fill_virs(wfn.nword, wfn.nbasis, det, virs); + // diagonal elements + val1 = coeffs[idet] * coeffs[idet]; + for (i = 0; i < wfn.nocc_up; ++i) { + k = occs[i]; + d0[k * (wfn.nbasis + 1)] += val1; + for (j = i + 1; j < wfn.nocc_up; ++j) { + l = occs[j]; + d2[wfn.nbasis * k + l] += val1; + d2[wfn.nbasis * l + k] += val1; + } + // pair excitation elements + for (j = 0; j < wfn.nvir_up; ++j) { + l = virs[j]; + excite_det(k, l, det); + jdet = wfn.index_det(det); + excite_det(l, k, det); + // check if excited determinant is in wfn + if (jdet > idet) { + val2 = coeffs[idet] * coeffs[jdet]; + d0[wfn.nbasis * k + l] += val2; + d0[wfn.nbasis * l + k] += val2; + } + } + } + } +} + + +void compute_rdms_34(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4) { // prepare working vectors AlignedVector v_det(wfn.nword); AlignedVector v_occs(wfn.nocc_up); @@ -848,6 +896,15 @@ void compute_transition_rdms(const GenCIWfn &wfn1, const GenCIWfn &wfn2, const d } pybind11::tuple py_compute_rdms_doci(const DOCIWfn &wfn, const Array coeffs) { + Array d0({wfn.nbasis, wfn.nbasis}); + Array d2({wfn.nbasis, wfn.nbasis}); + compute_rdms(wfn, reinterpret_cast(coeffs.request().ptr), + reinterpret_cast(d0.request().ptr), + reinterpret_cast(d2.request().ptr)); + return pybind11::make_tuple(d0, d2); +} + +pybind11::tuple py_compute_rdms_34_doci(const DOCIWfn &wfn, const Array coeffs) { Array d0({wfn.nbasis, wfn.nbasis}); Array d2({wfn.nbasis, wfn.nbasis}); Array d3({wfn.nbasis, wfn.nbasis, wfn.nbasis}); From 4e5be154d2b9882e999b46d991a3dd11b2945a75 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:45:11 +0000 Subject: [PATCH 08/31] Updating bindings --- pyci/src/binding.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/pyci/src/binding.cpp b/pyci/src/binding.cpp index 9310542..04d1bdd 100644 --- a/pyci/src/binding.cpp +++ b/pyci/src/binding.cpp @@ -1246,6 +1246,46 @@ For Generalized CI wave functions, ``rdm1`` and ``rdm2`` are the full 1-RDM and )""", py::arg("wfn"), py::arg("coeffs")); +m.def("compute_rdms_34", &py_compute_rdms_34_doci, R"""( +Compute the one-, two-, three-, and four-particle(not implemented yet) reduced density matrices (RDMs) of a wave function. + +Parameters +---------- +wfn : pyci.wavefunction + Wave function. +coeffs : numpy.ndarray + Coefficient vector. + +Returns +------- +For DOCI wave functions, this method returns two nbasis-by-nbasis matrices and two nbasis-by-nbasis-by-nbasis, + which include the unique seniority-zero and seniority-two terms from the full 2-RDMs: + +.. math:: + + D_0 = \left + +.. math:: + + D_2 = \left + +.. math:: + + D_3 = \left + +.. math:: + + D_4 = \left + + +Notes +----- +This method calculates all RDMs from 1-RDM to 4-RDM (so far implemented only to 3RDM) for a given DOCI wave function. + +)""", + py::arg("wfn"), py::arg("coeffs")); + + m.def("compute_rdms", &py_compute_rdms_fullci, py::arg("wfn"), py::arg("coeffs")); m.def("compute_rdms", &py_compute_rdms_genci, py::arg("wfn"), py::arg("coeffs")); From 17e31bcdebe46f1b1e2e773090337feb1614f1f9 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:03:13 +0000 Subject: [PATCH 09/31] Correcting typo in rdm.cpp --- pyci/src/rdm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 090226b..282ad06 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -909,7 +909,7 @@ pybind11::tuple py_compute_rdms_34_doci(const DOCIWfn &wfn, const Array Array d2({wfn.nbasis, wfn.nbasis}); Array d3({wfn.nbasis, wfn.nbasis, wfn.nbasis}); Array d4({wfn.nbasis, wfn.nbasis, wfn.nbasis}); - compute_rdms(wfn, reinterpret_cast(coeffs.request().ptr), + compute_rdms_34(wfn, reinterpret_cast(coeffs.request().ptr), reinterpret_cast(d0.request().ptr), reinterpret_cast(d2.request().ptr), reinterpret_cast(d3.request().ptr), From 34ac07ce4c552485628b1ff682bccc80e76e285e Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:03:41 +0000 Subject: [PATCH 10/31] updating pyci.h to include compute_rdms_34 function --- pyci/include/pyci.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyci/include/pyci.h b/pyci/include/pyci.h index 9ef3651..bddb89a 100644 --- a/pyci/include/pyci.h +++ b/pyci/include/pyci.h @@ -219,7 +219,9 @@ void setbit_det(const long, ulong *); void clearbit_det(const long, ulong *); -void compute_rdms(const DOCIWfn &, const double *, double *, double *, double *, double *); +void compute_rdms(const DOCIWfn &, const double *, double *, double *); + +void compute_rdms_34(const DOCIWfn &, const double *, double *, double *, double *, double *); void compute_rdms(const FullCIWfn &, const double *, double *, double *); @@ -252,6 +254,8 @@ long py_ctz(const Array); pybind11::tuple py_compute_rdms_doci(const DOCIWfn &, const Array); +pybind11::tuple py_compute_rdms_34_doci(const DOCIWfn &, const Array); + pybind11::tuple py_compute_rdms_fullci(const FullCIWfn &, const Array); pybind11::tuple py_compute_rdms_genci(const GenCIWfn &, const Array); From 6bdb6a6bf2382f64c8cf0f873e70b7a1a9d0b0bc Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 16:08:58 +0000 Subject: [PATCH 11/31] Including function compute_rdms_34 in __init__.py --- pyci/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyci/__init__.py b/pyci/__init__.py index d998e7a..c95a6df 100644 --- a/pyci/__init__.py +++ b/pyci/__init__.py @@ -19,7 +19,7 @@ from pyci._pyci import secondquant_op, wavefunction, one_spin_wfn, two_spin_wfn from pyci._pyci import doci_wfn, fullci_wfn, genci_wfn, sparse_op from pyci._pyci import get_num_threads, set_num_threads, popcnt, ctz -from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms +from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms,compute_rdms_34 from pyci._pyci import add_hci, compute_enpt2 from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spin_free_rdms From 998e0bdaf5d61728752c710c796ef900d63df007 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 21:09:03 +0000 Subject: [PATCH 12/31] Separating functions spinize_rdms and spinize_rdms_34 --- pyci/__init__.py | 2 +- pyci/utility.py | 117 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 83 insertions(+), 36 deletions(-) diff --git a/pyci/__init__.py b/pyci/__init__.py index c95a6df..c97e513 100644 --- a/pyci/__init__.py +++ b/pyci/__init__.py @@ -22,7 +22,7 @@ from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms,compute_rdms_34 from pyci._pyci import add_hci, compute_enpt2 -from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spin_free_rdms +from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spinize_rdms_34,spin_free_rdms from pyci.utility import odometer_one_spin, odometer_two_spin from pyci.excitation_ci import add_excitations diff --git a/pyci/utility.py b/pyci/utility.py index e795d15..eda96ce 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -91,8 +91,7 @@ def reduce_senzero_integrals(h, v, w, nocc): rw += w return rv, rw - -def spinize_rdms(d1, d2, d3=None, d4=None): +def spinize_rdms(d1, d2): r""" Convert the DOCI matrices or FullCI RDM spin-blocks to full, generalized RDMs. @@ -102,24 +101,19 @@ def spinize_rdms(d1, d2, d3=None, d4=None): :math:`D_0` matrix or FullCI 1-RDM spin-blocks. d2 : numpy.ndarray :math:`D_2` matrix or FullCI 2-RDM spin-blocks. - d3 : numpy.ndarray - :math `D_3` matrix for 3-RDM spin-blocks - d4 : numpy.ndarray - :math `D_4` matrix for 3-RDM spin-blocks + Returns ------- rdm1 : numpy.ndarray Generalized one-particle RDM. rdm2 : numpy.ndarray Generalized two-particle RDM. - rdm3 : numpy.ndarray - Generalized three-particle RDM. + """ nbasis = d1.shape[1] nspin = nbasis * 2 rdm1 = np.zeros((nspin, nspin), dtype=np.double) rdm2 = np.zeros((nspin, nspin, nspin, nspin), dtype=np.double) - rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -128,10 +122,6 @@ def spinize_rdms(d1, d2, d3=None, d4=None): baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] abba = rdm2[:nbasis, nbasis:, nbasis:, :nbasis] baab = rdm2[nbasis:, :nbasis, :nbasis, nbasis:] - aaaaaa= rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] - bbbbbb= rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] - bbabba= rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] - aabaab= rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] if d1.ndim == 2: # DOCI matrices for p in range(nbasis): @@ -144,29 +134,9 @@ def spinize_rdms(d1, d2, d3=None, d4=None): bbbb[p, q, p, q] += d2[p, q] abab[p, q, p, q] += d2[p, q] baba[p, q, p, q] += d2[p, q] - bbabba[p, q, q, p, q, q] += 2.0*d2[p, q] - aabaab[p, q, q, p, q, q] += 2.0*d2[p, q] - for r in range(nbasis): - bbabba[p, q, q, p, r, r] += 2.0*d4[p, q, r] - aabaab[p, q, q, p, r, r] += 2.0*d4[p, q, r] - aaaaaa[p, q, r, p, q, r] += d3[p, q, r] - bbbbbb[p, q, r, p, q, r] += d3[p, q, r] - bbabba[p, q, r, p, q, r] += d3[p, q, r] - aabaab[p, q, r, p, q, r] += d3[p, q, r] rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 - rdm3 += np.einsum('ijklmn -> ijknlm',rdm3)+\ - np.einsum('ijklmn -> ijkmnl',rdm3) - rdm3*=1 - rdm3-=np.einsum('ijklmn -> ijkmln',rdm3) - rdm3 +=np.einsum('ijklmn -> kijlmn',rdm3)+\ - np.einsum('ijklmn -> jkilmn',rdm3) - aaaaaa *=1/3 - bbbbbb *=1/3 - rdm3-=np.einsum('ijklmn -> jiklmn',rdm3) - rdm3 *= 0.5 - return rdm1, rdm2, rdm3 else: # FullCI RDM spin-blocks aa += d1[0] # +aa @@ -177,7 +147,84 @@ def spinize_rdms(d1, d2, d3=None, d4=None): baba += np.swapaxes(np.swapaxes(d2[2], 0, 1), 2, 3) # +abab abba -= np.swapaxes(d2[2], 2, 3) # -abab baab -= np.swapaxes(d2[2], 0, 1) # -abab - return rdm1, rdm2 + return rdm1, rdm2 + + +def spinize_rdms_34(d1, d2, d3, d4): + r""" + Convert the DOCI matrices or FullCI RDM spin-blocks to full, generalized RDMs. + + Parameters + ---------- + .. math:: + d_0 = \left + .. math:: + d_2 = \left + .. math:: + d_3 = \left + .. math:: + d_4 = \left + Returns + ------- + rdm1 : numpy.ndarray + Generalized one-particle RDM. + rdm2 : numpy.ndarray + Generalized two-particle RDM. + rdm3 : numpy.ndarray + Generalized three-particle RDM. + """ + if d1.ndim != 2: + raise TypeError('wfn must be a DOCI') + nbasis = d1.shape[1] + nspin = nbasis * 2 + rdm1 = np.zeros((nspin, nspin), dtype=np.double) + rdm2 = np.zeros((nspin, nspin, nspin, nspin), dtype=np.double) + rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) + aa = rdm1[:nbasis, :nbasis] + bb = rdm1[nbasis:, nbasis:] + aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] + bbbb = rdm2[nbasis:, nbasis:, nbasis:, nbasis:] + abab = rdm2[:nbasis, nbasis:, :nbasis, nbasis:] + baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] + abba = rdm2[:nbasis, nbasis:, nbasis:, :nbasis] + baab = rdm2[nbasis:, :nbasis, :nbasis, nbasis:] + aaaaaa= rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] + bbbbbb= rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] + bbabba= rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] + aabaab= rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] + for p in range(nbasis): + aa[p, p] = d1[p, p] + bb[p, p] = d1[p, p] + for q in range(nbasis): + abab[p, p, q, q] += d1[p, q] + baba[p, p, q, q] += d1[p, q] + aaaa[p, q, p, q] += d2[p, q] + bbbb[p, q, p, q] += d2[p, q] + abab[p, q, p, q] += d2[p, q] + baba[p, q, p, q] += d2[p, q] + bbabba[p, q, q, p, q, q] += 2.0*d2[p, q] + aabaab[p, q, q, p, q, q] += 2.0*d2[p, q] + for r in range(nbasis): + bbabba[p, q, q, p, r, r] += 2.0*d4[p, q, r] + aabaab[p, q, q, p, r, r] += 2.0*d4[p, q, r] + aaaaaa[p, q, r, p, q, r] += d3[p, q, r] + bbbbbb[p, q, r, p, q, r] += d3[p, q, r] + bbabba[p, q, r, p, q, r] += d3[p, q, r] + aabaab[p, q, r, p, q, r] += d3[p, q, r] + rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) + rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) + rdm2 *= 0.5 + rdm3 += np.einsum('ijklmn -> ijknlm',rdm3)+\ + np.einsum('ijklmn -> ijkmnl',rdm3) + rdm3*=1 + rdm3-=np.einsum('ijklmn -> ijkmln',rdm3) + rdm3 +=np.einsum('ijklmn -> kijlmn',rdm3)+\ + np.einsum('ijklmn -> jkilmn',rdm3) + aaaaaa *=1/3 + bbbbbb *=1/3 + rdm3-=np.einsum('ijklmn -> jiklmn',rdm3) + rdm3 *= 0.5 + return rdm1, rdm2, rdm3 def spin_free_rdms(d1, d2, d3=None, d4=None): r""" @@ -206,7 +253,7 @@ def spin_free_rdms(d1, d2, d3=None, d4=None): Spin traced three-particle RDM. """ nbasis = d1.shape[1] - rdm1,rdm2,rdm3=spinize_rdms(d1,d2,d3,d4) + rdm1,rdm2,rdm3=spinize_rdms_34(d1,d2,d3,d4) rdm1_sf=np.zeros((nbasis, nbasis), dtype=np.double) rdm2_sf=np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis,nbasis,nbasis), dtype=np.double) From 0cee298cd9dfe7865252317dbe0d846a3d5a8624 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Fri, 6 Dec 2024 21:09:54 +0000 Subject: [PATCH 13/31] Creating new tests routines for compute_rdms_34 and spinize_rdms_34 --- pyci/test/data/BH_sto-3g_eq.fcidump | 194 ++ pyci/test/data/h10_chain_1.4_STO-6G.fcidump | 3076 +++++++++++++++++++ pyci/test/data/h6_sto_3g.fcidump | 242 ++ pyci/test/test_routines.py | 90 + 4 files changed, 3602 insertions(+) create mode 100644 pyci/test/data/BH_sto-3g_eq.fcidump create mode 100644 pyci/test/data/h10_chain_1.4_STO-6G.fcidump create mode 100644 pyci/test/data/h6_sto_3g.fcidump diff --git a/pyci/test/data/BH_sto-3g_eq.fcidump b/pyci/test/data/BH_sto-3g_eq.fcidump new file mode 100644 index 0000000..e8535bd --- /dev/null +++ b/pyci/test/data/BH_sto-3g_eq.fcidump @@ -0,0 +1,194 @@ + &FCI NORB= 6,NELEC= 6,MS2=0, + ORBSYM=1,1,1,1,1,1, + ISYM=1, + &END + 2.890694185551886 1 1 1 1 + -0.2285478644008276 1 1 2 1 + 0.5953083364634656 1 1 2 2 + -0.2162016548582802 1 1 3 1 + 0.09104871057910127 1 1 3 2 + 0.6900652953132707 1 1 3 3 + 0.7419889025330183 1 1 4 4 + 0.7419889025330181 1 1 5 5 + 0.1413257075902383 1 1 6 1 + -0.1861902551212619 1 1 6 2 + 0.09008046930667073 1 1 6 3 + 0.6699597694264849 1 1 6 6 + -0.2285478644008276 2 1 1 1 + 0.02992401570960048 2 1 2 1 + -0.001146336251477235 2 1 2 2 + 0.02347037645652453 2 1 3 1 + -0.008237570230799412 2 1 3 2 + -0.01537296998854835 2 1 3 3 + -0.008814449236465278 2 1 4 4 + -0.008814449236465275 2 1 5 5 + -0.02314657520492044 2 1 6 1 + 0.003050017645768165 2 1 6 2 + -0.00419211917379873 2 1 6 3 + -0.004379253657977653 2 1 6 6 + 0.5953083364634657 2 2 1 1 + -0.001146336251477227 2 2 2 1 + 0.5804858409021905 2 2 2 2 + -0.01900821896163675 2 2 3 1 + -0.07241056645830383 2 2 3 2 + 0.4170856180274074 2 2 3 3 + 0.4593408467391383 2 2 4 4 + 0.4593408467391382 2 2 5 5 + -0.01238748160972113 2 2 6 1 + 0.0002084163025978247 2 2 6 2 + -0.05254431697407079 2 2 6 3 + 0.5754116421934867 2 2 6 6 + -0.2162016548582803 3 1 1 1 + 0.02347037645652455 3 1 2 1 + -0.01900821896163674 3 1 2 2 + 0.03397697977407958 3 1 3 1 + 0.003163633505588129 3 1 3 2 + 0.00404893468739087 3 1 3 3 + -0.007412212106220699 3 1 4 4 + -0.007412212106220697 3 1 5 5 + -0.005247409917599474 3 1 6 1 + 0.01158307545322849 3 1 6 2 + 0.006990498122004285 3 1 6 3 + -0.01879243966504147 3 1 6 6 + 0.09104871057910127 3 2 1 1 + -0.008237570230799426 3 2 2 1 + -0.07241056645830381 3 2 2 2 + 0.003163633505588093 3 2 3 1 + 0.0676156185213167 3 2 3 2 + 0.05019628841726888 3 2 3 3 + 0.04621563081453394 3 2 4 4 + 0.04621563081453393 3 2 5 5 + 0.01250097777451356 3 2 6 1 + -0.05223141555214424 3 2 6 2 + 0.05747267715242108 3 2 6 3 + -0.06327529964411363 3 2 6 6 + 0.6900652953132709 3 3 1 1 + -0.01537296998854832 3 3 2 1 + 0.4170856180274075 3 3 2 2 + 0.004048934687390883 3 3 3 1 + 0.05019628841726886 3 3 3 2 + 0.5635811972005504 3 3 3 3 + 0.5041862576414032 3 3 4 4 + 0.5041862576414031 3 3 5 5 + 0.0231276130620684 3 3 6 1 + -0.03192699042073559 3 3 6 2 + 0.07541684244416474 3 3 6 3 + 0.4565326809201556 3 3 6 6 + 0.02169507828733871 4 1 4 1 + 0.01921155457995589 4 1 4 2 + 0.01851865219375422 4 1 4 3 + -0.01161252859365546 4 1 6 4 + 0.01921155457995589 4 2 4 1 + 0.06039821130266281 4 2 4 2 + 0.04342107961102947 4 2 4 3 + -0.03633847993724627 4 2 6 4 + 0.01851865219375421 4 3 4 1 + 0.04342107961102945 4 3 4 2 + 0.06291076116021634 4 3 4 3 + -0.01322878606419047 4 3 6 4 + 0.7419889025330183 4 4 1 1 + -0.008814449236465242 4 4 2 1 + 0.4593408467391384 4 4 2 2 + -0.00741221210622064 4 4 3 1 + 0.04621563081453399 4 4 3 2 + 0.5041862576414033 4 4 3 3 + 0.5867727439789322 4 4 4 4 + 0.5235134814676911 4 4 5 5 + 0.004168026575771488 4 4 6 1 + -0.09238076313811244 4 4 6 2 + 0.04177944228679972 4 4 6 3 + 0.4740773398260829 4 4 6 6 + 0.0216950782873387 5 1 5 1 + 0.01921155457995588 5 1 5 2 + 0.01851865219375421 5 1 5 3 + -0.01161252859365545 5 1 6 5 + 0.01921155457995588 5 2 5 1 + 0.06039821130266281 5 2 5 2 + 0.04342107961102946 5 2 5 3 + -0.03633847993724625 5 2 6 5 + 0.01851865219375421 5 3 5 1 + 0.04342107961102945 5 3 5 2 + 0.06291076116021634 5 3 5 3 + -0.01322878606419046 5 3 6 5 + 0.03162963125562031 5 4 5 4 + 0.7419889025330181 5 5 1 1 + -0.008814449236465207 5 5 2 1 + 0.4593408467391384 5 5 2 2 + -0.007412212106220606 5 5 3 1 + 0.04621563081453402 5 5 3 2 + 0.5041862576414033 5 5 3 3 + 0.5235134814676911 5 5 4 4 + 0.586772743978932 5 5 5 5 + 0.004168026575771471 5 5 6 1 + -0.09238076313811253 5 5 6 2 + 0.04177944228679967 5 5 6 3 + 0.4740773398260828 5 5 6 6 + 0.1413257075902383 6 1 1 1 + -0.02314657520492046 6 1 2 1 + -0.01238748160972115 6 1 2 2 + -0.005247409917599475 6 1 3 1 + 0.01250097777451353 6 1 3 2 + 0.02312761306206843 6 1 3 3 + 0.004168026575771572 6 1 4 4 + 0.00416802657577157 6 1 5 5 + 0.02880391396937533 6 1 6 1 + 0.005524338027076478 6 1 6 2 + 0.01082364008038884 6 1 6 3 + -0.008812192154253081 6 1 6 6 + -0.186190255121262 6 2 1 1 + 0.003050017645768176 6 2 2 1 + 0.0002084163025976651 6 2 2 2 + 0.01158307545322851 6 2 3 1 + -0.05223141555214433 6 2 3 2 + -0.03192699042073567 6 2 3 3 + -0.0923807631381124 6 2 4 4 + -0.09238076313811237 6 2 5 5 + 0.005524338027076496 6 2 6 1 + 0.1212730361895562 6 2 6 2 + -0.05403162334477736 6 2 6 3 + 0.01293203355693659 6 2 6 6 + 0.09008046930667071 6 3 1 1 + -0.004192119173798695 6 3 2 1 + -0.05254431697407061 6 3 2 2 + 0.006990498122004348 6 3 3 1 + 0.05747267715242119 6 3 3 2 + 0.07541684244416491 6 3 3 3 + 0.0417794422867997 6 3 4 4 + 0.04177944228679968 6 3 5 5 + 0.01082364008038878 6 3 6 1 + -0.05403162334477741 6 3 6 2 + 0.07634911021780025 6 3 6 3 + -0.04207173170262291 6 3 6 6 + -0.01161252859365545 6 4 4 1 + -0.03633847993724626 6 4 4 2 + -0.01322878606419046 6 4 4 3 + 0.03249943702929813 6 4 6 4 + -0.01161252859365545 6 5 5 1 + -0.03633847993724625 6 5 5 2 + -0.01322878606419045 6 5 5 3 + 0.03249943702929813 6 5 6 5 + 0.6699597694264852 6 6 1 1 + -0.004379253657977538 6 6 2 1 + 0.5754116421934872 6 6 2 2 + -0.01879243966504134 6 6 3 1 + -0.06327529964411353 6 6 3 2 + 0.4565326809201556 6 6 3 3 + 0.4740773398260831 6 6 4 4 + 0.474077339826083 6 6 5 5 + -0.008812192154253214 6 6 6 1 + 0.01293203355693684 6 6 6 2 + -0.04207173170262306 6 6 6 3 + 0.6101411445973578 6 6 6 6 + -12.73694583468452 1 1 0 0 + 0.2636037738346674 2 1 0 0 + -3.08122009866082 2 2 0 0 + 0.2419315877376549 3 1 0 0 + -0.1364127650686597 3 2 0 0 + -2.922828142214635 3 3 0 0 + -2.996085190675585 4 4 0 0 + -2.996085190675584 5 5 0 0 + -0.1527654545391036 6 1 0 0 + 0.4703521766204644 6 2 0 0 + -0.2079679737989178 6 3 0 0 + -2.475899716280425 6 6 0 0 + 2.147634784577923 0 0 0 0 diff --git a/pyci/test/data/h10_chain_1.4_STO-6G.fcidump b/pyci/test/data/h10_chain_1.4_STO-6G.fcidump new file mode 100644 index 0000000..365b12c --- /dev/null +++ b/pyci/test/data/h10_chain_1.4_STO-6G.fcidump @@ -0,0 +1,3076 @@ + &FCI NORB= 10,NELEC=10,MS2=0, + ORBSYM=1,1,1,1,1,1,1,1,1,1, + ISYM=1, + &END + 0.2719135056885718 1 1 1 1 + -1.283695372222837e-15 1 1 2 1 + 0.2135322765337839 1 1 2 2 + -0.05771891560773984 1 1 3 1 + -1.797173521111972e-15 1 1 3 2 + 0.209778034210176 1 1 3 3 + 1.316655118266397e-15 1 1 4 1 + -0.0595580954535557 1 1 4 2 + -1.500535806719938e-15 1 1 4 3 + 0.2048146572786106 1 1 4 4 + -0.0007667669690404719 1 1 5 1 + -1.114559833315099e-15 1 1 5 2 + 0.06116489876137325 1 1 5 3 + 1.627170620466245e-15 1 1 5 4 + 0.2359458813967895 1 1 5 5 + -7.936359902593892e-17 1 1 6 1 + -0.003243328258909472 1 1 6 2 + -8.951173136040325e-16 1 1 6 3 + 0.05291221201647324 1 1 6 4 + -1.179611963664229e-15 1 1 6 5 + 0.2374153884582209 1 1 6 6 + 0.001039530978195261 1 1 7 1 + 2.012279232133096e-16 1 1 7 2 + -0.008383868636907571 1 1 7 3 + 5.551115123125783e-16 1 1 7 4 + 0.05426855834446991 1 1 7 5 + 1.831867990631508e-15 1 1 7 6 + 0.209452890323557 1 1 7 7 + -4.85722573273506e-17 1 1 8 1 + -0.00372548805991189 1 1 8 2 + -1.387778780781446e-17 1 1 8 3 + -0.009304304266424797 1 1 8 4 + -9.645062526431047e-16 1 1 8 5 + 0.06286754223248477 1 1 8 6 + -1.020017403874363e-15 1 1 8 7 + 0.217064857271385 1 1 8 8 + -0.002300517755399142 1 1 9 1 + -5.551115123125783e-17 1 1 9 2 + -0.004337834271397153 1 1 9 3 + 1.908195823574488e-16 1 1 9 4 + -0.003131806471713798 1 1 9 5 + -7.624109676918067e-16 1 1 9 6 + -0.06221218356732444 1 1 9 7 + -1.375635716449608e-15 1 1 9 8 + 0.2218190728402289 1 1 9 9 + -2.775557561562891e-17 1 1 10 1 + 0.002666469712595804 1 1 10 2 + -4.85722573273506e-17 1 1 10 3 + -0.001026290222846632 1 1 10 4 + -5.681219383824043e-17 1 1 10 5 + 0.0004598467237082299 1 1 10 6 + -7.702172233337023e-16 1 1 10 7 + 0.06143018353433492 1 1 10 8 + 2.229987028368186e-15 1 1 10 9 + 0.2852690919516131 1 1 10 10 + -1.276322797449936e-15 2 1 1 1 + 0.1070778312549922 2 1 2 1 + 1.450228825916611e-15 2 1 2 2 + -1.345711736489008e-15 2 1 3 1 + 0.06525238788372528 2 1 3 2 + 3.590877595271991e-16 2 1 3 3 + -0.04287770784843427 2 1 4 1 + -1.222112688825661e-15 2 1 4 2 + 0.0622022766089781 2 1 4 3 + 4.076600168545497e-16 2 1 4 4 + -9.805524447958902e-16 2 1 5 1 + 0.04436027601429843 2 1 5 2 + 1.184816134092159e-15 2 1 5 3 + -0.08055441338718669 2 1 5 4 + 2.255140518769849e-16 2 1 5 5 + -0.002968360877592111 2 1 6 1 + -7.28583859910259e-16 2 1 6 2 + 0.04268433110040729 2 1 6 3 + 8.465450562766819e-16 2 1 6 4 + 0.05557040913152933 2 1 6 5 + 6.245004513516506e-16 2 1 6 6 + 1.214306433183765e-16 2 1 7 1 + -0.006218164528317324 2 1 7 2 + 4.85722573273506e-16 2 1 7 3 + -0.0318793596462497 2 1 7 4 + 8.534839501805891e-16 2 1 7 5 + -0.08175139483705947 2 1 7 6 + 1.457167719820518e-16 2 1 7 7 + -0.003237152520878292 2 1 8 1 + -1.040834085586084e-16 2 1 8 2 + -0.0008086054842363233 2 1 8 3 + 4.093947403305265e-16 2 1 8 4 + 0.04387706361307386 2 1 8 5 + 8.430756093247282e-16 2 1 8 6 + 0.0645170679249823 2 1 8 7 + -2.099015405931937e-16 2 1 8 8 + -7.28583859910259e-17 2 1 9 1 + -0.0007352683863011376 2 1 9 2 + -2.42861286636753e-17 2 1 9 3 + -0.006947913302373193 2 1 9 4 + -5.412337245047638e-16 2 1 9 5 + 0.04561233492813795 2 1 9 6 + -7.311859451242242e-16 2 1 9 7 + 0.06807998679900459 2 1 9 8 + 5.455705331947058e-16 2 1 9 9 + -0.001064022506667284 2 1 10 1 + 2.081668171172169e-17 2 1 10 2 + 0.003625660103058213 2 1 10 3 + -7.28583859910259e-17 2 1 10 4 + 0.002849998466040588 2 1 10 5 + 6.153931531027723e-16 2 1 10 6 + 0.04483128601773538 2 1 10 7 + 1.375635716449608e-15 2 1 10 8 + -0.1134691146226011 2 1 10 9 + 4.477754972365133e-16 2 1 10 10 + 0.2135322765337839 2 2 1 1 + 1.445892017226669e-15 2 2 2 1 + 0.2396740849178484 2 2 2 2 + 0.0249501729293154 2 2 3 1 + 1.115427195053087e-15 2 2 3 2 + 0.2043850884190881 2 2 3 3 + -8.881784197001252e-16 2 2 4 1 + -0.01205594897277364 2 2 4 2 + 7.667477763817487e-16 2 2 4 3 + 0.2132062155627702 2 2 4 4 + 0.0353092170198321 2 2 5 1 + 1.280225925270884e-15 2 2 5 2 + 0.001113430601256642 2 2 5 3 + -1.160530005428484e-15 2 2 5 4 + 0.2138936383648609 2 2 5 5 + -6.904199434387692e-16 2 2 6 1 + 0.03236086287156834 2 2 6 2 + 1.042568809062061e-15 2 2 6 3 + 0.003979733925699133 2 2 6 4 + 6.938893903907228e-16 2 2 6 5 + 0.2151299327685745 2 2 6 6 + -0.004691009786066425 2 2 7 1 + 2.116362640691705e-16 2 2 7 2 + -0.03459658488135228 2 2 7 3 + -8.049116928532385e-16 2 2 7 4 + 0.004723785546635759 2 2 7 5 + -1.283695372222837e-15 2 2 7 6 + 0.2172257936862807 2 2 7 7 + -1.838806884535416e-16 2 2 8 1 + -0.003657702562831155 2 2 8 2 + 2.636779683484747e-16 2 2 8 3 + -0.035545887748736 2 2 8 4 + 7.546047120499111e-16 2 2 8 5 + 0.001349265666253463 2 2 8 6 + 8.291978215169138e-16 2 2 8 7 + 0.2106489655907659 2 2 8 8 + -0.0007901982796604274 2 2 9 1 + -1.249000902703301e-16 2 2 9 2 + -0.004357894829045077 2 2 9 3 + 5.204170427930421e-17 2 2 9 4 + 0.03317981387687303 2 2 9 5 + 1.106753577673203e-15 2 2 9 6 + -0.01272095863229621 2 2 9 7 + 8.36136715420821e-16 2 2 9 8 + 0.249025709541147 2 2 9 9 + -2.081668171172169e-17 2 2 10 1 + 0.001116111925952023 2 2 10 2 + 1.231653667943533e-16 2 2 10 3 + 0.005201094304403294 2 2 10 4 + 3.816391647148976e-16 2 2 10 5 + -0.0361783158756831 2 2 10 6 + 1.103284130721249e-15 2 2 10 7 + -0.02501896706180026 2 2 10 8 + -2.018350764299015e-15 2 2 10 9 + 0.2246720836295986 2 2 10 10 + -0.05771891560773988 3 1 1 1 + -1.350915906916939e-15 3 1 2 1 + 0.02495017292931541 3 1 2 2 + 0.08088177709772652 3 1 3 1 + 1.48318857196017e-16 3 1 3 2 + -0.005694140722575204 3 1 3 3 + -7.806255641895632e-16 3 1 4 1 + 0.04672125422176103 3 1 4 2 + -2.775557561562891e-16 3 1 4 3 + 0.007985878079571972 3 1 4 4 + 0.03511966415847821 3 1 5 1 + 8.27463098040937e-16 3 1 5 2 + -0.05921709293892907 3 1 5 3 + 3.851086116668512e-16 3 1 5 4 + -0.02241512891113883 3 1 5 5 + -6.29704621779581e-16 3 1 6 1 + 0.03433487759841741 3 1 6 2 + 4.267419750902945e-16 3 1 6 3 + -0.04769176432925898 3 1 6 4 + -3.243932900076629e-16 3 1 6 5 + -0.02251252965698172 3 1 6 6 + -0.005262688214109073 3 1 7 1 + 3.712308238590367e-16 3 1 7 2 + -0.02566231126094852 3 1 7 3 + -3.365363543395006e-16 3 1 7 4 + -0.04843525193843833 3 1 7 5 + 1.700029006457271e-16 3 1 7 6 + 0.007270654535654173 3 1 7 7 + -6.938893903907228e-18 3 1 8 1 + -0.0001507768381662587 3 1 8 2 + 3.608224830031759e-16 3 1 8 3 + -0.02557816581121298 3 1 8 4 + 1.561251128379126e-16 3 1 8 5 + -0.06063200985747148 3 1 8 6 + -7.840950111415168e-16 3 1 8 7 + -0.006820704847870005 3 1 8 8 + 0.000939698133821212 3 1 9 1 + -1.734723475976807e-17 3 1 9 2 + -0.0001451454034599388 3 1 9 3 + 2.255140518769849e-16 3 1 9 4 + 0.03509835633121934 3 1 9 5 + 2.393918396847994e-16 3 1 9 6 + 0.04874158332287198 3 1 9 7 + -6.34041430469523e-16 3 1 9 8 + 0.02584468338626092 3 1 9 9 + 4.85722573273506e-17 3 1 10 1 + -0.001047551907658165 3 1 10 2 + 4.85722573273506e-17 3 1 10 3 + 0.005797536219575179 3 1 10 4 + 4.579669976578771e-16 3 1 10 5 + -0.03568313627515171 3 1 10 6 + 3.833738881908744e-16 3 1 10 7 + -0.0847187582544848 3 1 10 8 + 1.294537393947692e-16 3 1 10 9 + -0.06024047162299976 3 1 10 10 + -1.793704074160019e-15 3 2 1 1 + 0.06525238788372528 3 2 2 1 + 1.118896642005041e-15 3 2 2 2 + 1.509209424099822e-16 3 2 3 1 + 0.09030634042979668 3 2 3 2 + 1.97758476261356e-16 3 2 3 3 + 0.02169548874317431 3 2 4 1 + 4.423544863740858e-16 3 2 4 2 + 0.07161531488939708 3 2 4 3 + 5.030698080332741e-16 3 2 4 4 + 6.496539417533143e-16 3 2 5 1 + -0.002943656982132592 3 2 5 2 + -3.365363543395006e-16 3 2 5 3 + -0.07104214844562312 3 2 5 4 + -3.642919299551295e-16 3 2 5 5 + 0.02712991317660465 3 2 6 1 + 7.459310946700271e-16 3 2 6 2 + 0.002267686966858618 3 2 6 3 + -4.440892098500626e-16 3 2 6 4 + 0.05029663765318164 3 2 6 5 + 1.387778780781446e-17 3 2 6 6 + 3.33066907387547e-16 3 2 7 1 + -0.02799827961629774 3 2 7 2 + -5.030698080332741e-16 3 2 7 3 + 0.008133011190474345 3 2 7 4 + -4.232725281383409e-16 3 2 7 5 + -0.07183481210683981 3 2 7 6 + 1.647987302177967e-16 3 2 7 7 + -0.001375147179501227 3 2 8 1 + 1.630640067418199e-16 3 2 8 2 + -0.02448459200782569 3 2 8 3 + -3.747002708109903e-16 3 2 8 4 + 0.002695920562279996 3 2 8 5 + -5.325601071248798e-16 3 2 8 6 + 0.07323096429391798 3 2 8 7 + -6.730727086790012e-16 3 2 8 8 + -3.816391647148976e-17 3 2 9 1 + -0.0001771532990596861 3 2 9 2 + 1.144917494144693e-16 3 2 9 3 + -0.0285685422191652 3 2 9 4 + 4.666406150377611e-16 3 2 9 5 + -0.002715442657981578 3 2 9 6 + 4.371503159461554e-16 3 2 9 7 + 0.09297444444689473 3 2 9 8 + 1.150121664572623e-15 3 2 9 9 + -0.0005206137085990679 3 2 10 1 + 2.775557561562891e-17 3 2 10 2 + 0.001831786025133076 3 2 10 3 + -5.898059818321144e-17 3 2 10 4 + -0.02729609989096018 3 2 10 5 + -5.93275428784068e-16 3 2 10 6 + -0.02117953301661502 3 2 10 7 + -6.522560269672795e-16 3 2 10 8 + -0.07042094094239126 3 2 10 9 + -6.166941957097549e-16 3 2 10 10 + 0.209778034210176 3 3 1 1 + 3.538835890992686e-16 3 3 2 1 + 0.2043850884190881 3 3 2 2 + -0.005694140722575214 3 3 3 1 + 2.012279232133096e-16 3 3 3 2 + 0.2323774225821818 3 3 3 3 + -2.949029909160572e-17 3 3 4 1 + 0.02197302567741438 3 3 4 2 + 3.191891195797325e-16 3 3 4 3 + 0.207341114946769 3 3 4 4 + -0.02859113433620741 3 3 5 1 + -2.185751579730777e-16 3 3 5 2 + 0.004300746285171759 3 3 5 3 + -2.220446049250313e-16 3 3 5 4 + 0.2100285518901546 3 3 5 5 + 2.003605614753212e-16 3 3 6 1 + -4.221904013976784e-05 3 3 6 2 + 4.683753385137379e-17 3 3 6 3 + 0.00458630702125579 3 3 6 4 + 1.387778780781446e-16 3 3 6 5 + 0.2109580877288481 3 3 6 6 + -0.02040165221050795 3 3 7 1 + -4.215378046623641e-16 3 3 7 2 + -0.001061317141163528 3 3 7 3 + 9.71445146547012e-17 3 3 7 4 + 0.005610436606715527 3 3 7 5 + -1.509209424099822e-16 3 3 7 6 + 0.2108842306205813 3 3 7 7 + 1.994931997373328e-16 3 3 8 1 + -0.02330175225600689 3 3 8 2 + -2.498001805406602e-16 3 3 8 3 + -0.001980005299219521 3 3 8 4 + -3.816391647148976e-17 3 3 8 5 + 0.005068456387391071 3 3 8 6 + 1.97758476261356e-16 3 3 8 7 + 0.2375603022623377 3 3 8 8 + -0.001071442090721201 3 3 9 1 + 8.326672684688674e-17 3 3 9 2 + -0.02397996784780894 3 3 9 3 + -2.34187669256869e-16 3 3 9 4 + 0.0003693023826924751 3 3 9 5 + -3.469446951953614e-18 3 3 9 6 + 0.02015409394800537 3 3 9 7 + 4.128641872824801e-16 3 3 9 8 + 0.2137682392302787 3 3 9 9 + 6.938893903907228e-18 3 3 10 1 + 0.001493436850267556 3 3 10 2 + -1.517883041479706e-16 3 3 10 3 + 0.0205801671989395 3 3 10 4 + -2.550043509685906e-16 3 3 10 5 + 0.0272825429496792 3 3 10 6 + 5.204170427930421e-17 3 3 10 7 + 0.005682596951931167 3 3 10 8 + -3.729655473350135e-16 3 3 10 9 + 0.2205961403230399 3 3 10 10 + 1.314486713921426e-15 4 1 1 1 + -0.04287770784843427 4 1 2 1 + -8.916478666520788e-16 4 1 2 2 + -7.825771281000371e-16 4 1 3 1 + 0.02169548874317431 4 1 3 2 + -4.9439619065339e-17 4 1 3 3 + 0.06258051389282684 4 1 4 1 + 1.118896642005041e-16 4 1 4 2 + 0.008552231590580561 4 1 4 3 + -7.28583859910259e-17 4 1 4 4 + 8.187894806610529e-16 4 1 5 1 + -0.04780174749943003 4 1 5 2 + 2.619432448724979e-16 4 1 5 3 + 0.01206705639851446 4 1 5 4 + 1.509209424099822e-16 4 1 5 5 + 0.02665688390183493 4 1 6 1 + 5.342948306008566e-16 4 1 6 2 + -0.03882937333170527 4 1 6 3 + 1.630640067418199e-16 4 1 6 4 + -0.006385208688702243 4 1 6 5 + 1.335737076502141e-16 4 1 6 6 + 3.885780586188048e-16 4 1 7 1 + -0.02050747490687329 4 1 7 2 + -3.348016308635238e-16 4 1 7 3 + 0.03888560286980956 4 1 7 4 + 1.778091562876227e-16 4 1 7 5 + 0.01230295773553846 4 1 7 6 + -1.249000902703301e-16 4 1 7 7 + -0.0002030042571824762 4 1 8 1 + 2.992397996059992e-16 4 1 8 2 + -0.02182779361659652 4 1 8 3 + -1.387778780781446e-16 4 1 8 4 + -0.03982447292170425 4 1 8 5 + 4.40619762898109e-16 4 1 8 6 + 0.007637363522803746 4 1 8 7 + -2.810252031082427e-16 4 1 8 8 + 3.642919299551295e-17 4 1 9 1 + -0.0007781872708408943 4 1 9 2 + 1.951563910473908e-16 4 1 9 3 + -0.02020780157107845 4 1 9 4 + 9.367506770274758e-17 4 1 9 5 + -0.04874472408258325 4 1 9 6 + -4.215378046623641e-16 4 1 9 7 + 0.02147489915670179 4 1 9 8 + -2.211772431870429e-17 4 1 9 9 + -0.0001784413560022901 4 1 10 1 + 6.938893903907228e-18 4 1 10 2 + 9.903059187987926e-05 4 1 10 3 + -1.908195823574488e-16 4 1 10 4 + -0.02687478909563736 4 1 10 5 + -3.660266534311063e-16 4 1 10 6 + -0.06420267028017268 4 1 10 7 + 3.97685356867683e-16 4 1 10 8 + 0.04451895773613526 4 1 10 9 + 8.023096076392733e-16 4 1 10 10 + -0.05955809545355571 4 2 1 1 + -1.218209561004713e-15 4 2 2 1 + -0.01205594897277364 4 2 2 2 + 0.04672125422176102 4 2 3 1 + 4.397524011601206e-16 4 2 3 2 + 0.02197302567741438 4 2 3 3 + 1.092875789865388e-16 4 2 4 1 + 0.07884692589323011 4 2 4 2 + 3.226585665316861e-16 4 2 4 3 + 0.001280403690057419 4 2 4 4 + -0.03038689998292421 4 2 5 1 + -5.741934705483231e-16 4 2 5 2 + -0.05377753296956946 4 2 5 3 + 2.42861286636753e-16 4 2 5 4 + -0.02662794884571829 4 2 5 5 + 4.839878497975292e-16 4 2 6 1 + 0.000103502871968917 4 2 6 2 + -3.677613769070831e-16 4 2 6 3 + -0.04426329282535235 4 2 6 4 + -9.71445146547012e-17 4 2 6 5 + -0.02673455586384135 4 2 6 6 + -0.02049521045527097 4 2 7 1 + -5.585809592645319e-16 4 2 7 2 + 0.008367347869882118 4 2 7 3 + 5.672545766444159e-16 4 2 7 4 + -0.04497396820091291 4 2 7 5 + 1.561251128379126e-16 4 2 7 6 + 1.031586266645942e-05 4 2 7 7 + 3.018418848199644e-16 4 2 8 1 + -0.02051016005616235 4 2 8 2 + -3.348016308635238e-16 4 2 8 3 + 0.008725845778714096 4 2 8 4 + -4.093947403305265e-16 4 2 8 5 + -0.05457948876584447 4 2 8 6 + -2.801578413702543e-16 4 2 8 7 + 0.019643507623719 4 2 8 8 + -0.0003100540317197283 4 2 9 1 + 1.123233450694983e-16 4 2 9 2 + -0.02029422409791932 4 2 9 3 + -3.677613769070831e-16 4 2 9 4 + 0.0004694182731242872 4 2 9 5 + -7.467984564080155e-16 4 2 9 6 + 0.07973083023043565 4 2 9 7 + 2.185751579730777e-16 4 2 9 8 + -0.01150356726899533 4 2 9 9 + 4.163336342344337e-17 4 2 10 1 + 0.0001721954174062007 4 2 10 2 + -1.318389841742373e-16 4 2 10 3 + 0.02072400836421798 4 2 10 4 + -3.642919299551295e-16 4 2 10 5 + 0.02946210218263464 4 2 10 6 + -6.591949208711867e-16 4 2 10 7 + -0.05041272763313614 4 2 10 8 + 5.325601071248798e-16 4 2 10 9 + -0.06279903273810894 4 2 10 10 + -1.495331636292008e-15 4 3 1 1 + 0.0622022766089781 4 3 2 1 + 7.73686670285656e-16 4 3 2 2 + -2.827599265842196e-16 4 3 3 1 + 0.07161531488939707 4 3 3 2 + 2.810252031082427e-16 4 3 3 3 + 0.008552231590580557 4 3 4 1 + 3.122502256758253e-16 4 3 4 2 + 0.08880969960351816 4 3 4 3 + 4.614364446098307e-16 4 3 4 4 + 9.367506770274758e-17 4 3 5 1 + -0.02225456741037249 4 3 5 2 + -5.204170427930421e-17 4 3 5 3 + -0.06992666765426035 4 3 5 4 + -2.844946500601964e-16 4 3 5 5 + -0.01719759226680676 4 3 6 1 + -1.639313684798083e-16 4 3 6 2 + 0.001119482425041749 4 3 6 3 + -2.151057110211241e-16 4 3 6 4 + 0.04883416013782187 4 3 6 5 + 4.510281037539698e-17 4 3 6 6 + -1.97758476261356e-16 4 3 7 1 + 0.0007625437775641477 4 3 7 2 + 9.367506770274758e-17 4 3 7 3 + 0.0088183302421191 4 3 7 4 + -1.110223024625157e-16 4 3 7 5 + -0.07036837355270918 4 3 7 6 + 7.632783294297951e-17 4 3 7 7 + -0.01775008725096059 4 3 8 1 + -2.844946500601964e-16 4 3 8 2 + 0.001816949696284003 4 3 8 3 + 5.551115123125783e-17 4 3 8 4 + 0.00188345752444609 4 3 8 5 + -1.413799632921098e-16 4 3 8 6 + 0.0885469845274421 4 3 8 7 + -4.059252933785729e-16 4 3 8 8 + 1.595945597898663e-16 4 3 9 1 + -0.01800292998046151 4 3 9 2 + -1.942890293094024e-16 4 3 9 3 + -0.0003745781433476501 4 3 9 4 + -5.204170427930421e-17 4 3 9 5 + -0.02036099114723873 4 3 9 6 + 5.082739784612045e-16 4 3 9 7 + 0.07529686280954687 4 3 9 8 + 5.238864897449957e-16 4 3 9 9 + 0.0005737236817156066 4 3 10 1 + -1.110223024625157e-16 4 3 10 2 + 0.01789641741276912 4 3 10 3 + 1.52655665885959e-16 4 3 10 4 + 0.01541345086112878 4 3 10 5 + 1.786765180256111e-16 4 3 10 6 + -0.008846209327337696 4 3 10 7 + -1.734723475976807e-17 4 3 10 8 + -0.06708815763101919 4 3 10 9 + -5.165139149720943e-16 4 3 10 10 + 0.2048146572786106 4 4 1 1 + 3.946495907847236e-16 4 4 2 1 + 0.2132062155627702 4 4 2 2 + 0.007985878079571965 4 4 3 1 + 5.134781488891349e-16 4 4 3 2 + 0.207341114946769 4 4 3 3 + -7.459310946700271e-17 4 4 4 1 + 0.00128040369005741 4 4 4 2 + 4.787836793695988e-16 4 4 4 3 + 0.2246143287070161 4 4 4 4 + 0.008714483433859631 4 4 5 1 + 1.804112415015879e-16 4 4 5 2 + -0.01730696425834853 4 4 5 3 + -5.238864897449957e-16 4 4 5 4 + 0.2084447035074809 4 4 5 5 + -1.023486850826316e-16 4 4 6 1 + -0.01024869855399782 4 4 6 2 + 3.295974604355933e-17 4 4 6 3 + 0.001178781394543993 4 4 6 4 + 1.804112415015879e-16 4 4 6 5 + 0.2088972324257383 4 4 6 6 + 0.01596171210888997 4 4 7 1 + 3.087807787238717e-16 4 4 7 2 + -0.003071065699095519 4 4 7 3 + -2.775557561562891e-17 4 4 7 4 + 0.002491705335447 4 4 7 5 + -4.787836793695988e-16 4 4 7 6 + 0.2258668608519628 4 4 7 7 + -1.674008154317619e-16 4 4 8 1 + 0.001649232800536434 4 4 8 2 + 6.938893903907228e-17 4 4 8 3 + -0.004793715991012377 4 4 8 4 + 2.949029909160572e-17 4 4 8 5 + -0.0145991144609938 4 4 8 6 + 4.093947403305265e-16 4 4 8 7 + 0.2141248734032968 4 4 8 8 + -0.01506743271188133 4 4 9 1 + -2.914335439641036e-16 4 4 9 2 + 0.0003821176300046469 4 4 9 3 + 1.630640067418199e-16 4 4 9 4 + -0.00765871599105173 4 4 9 5 + 1.040834085586084e-17 4 4 9 6 + 0.00104639245774801 4 4 9 7 + 4.128641872824801e-16 4 4 9 8 + 0.2230284778678226 4 4 9 9 + -1.804112415015879e-16 4 4 10 1 + 0.01545911006955741 4 4 10 2 + 1.717376241217039e-16 4 4 10 3 + -0.01402993203551835 4 4 10 4 + 9.80118763926896e-17 4 4 10 5 + -0.008770424909909936 4 4 10 6 + 1.006139616066548e-16 4 4 10 7 + -0.008409032690840371 4 4 10 8 + -5.377642775528102e-16 4 4 10 9 + 0.2158247737252613 4 4 10 10 + -0.0007667669690404868 5 1 1 1 + -9.795766628406533e-16 5 1 2 1 + 0.03530921701983211 5 1 2 2 + 0.03511966415847823 5 1 3 1 + 6.461844948013606e-16 5 1 3 2 + -0.02859113433620742 5 1 3 3 + 8.135853102331225e-16 5 1 4 1 + -0.0303868999829242 5 1 4 2 + 9.194034422677078e-17 5 1 4 3 + 0.008714483433859607 5 1 4 4 + 0.06528155885353265 5 1 5 1 + 6.938893903907228e-18 5 1 5 2 + -0.009814831625432846 5 1 5 3 + 1.134075472419838e-16 5 1 5 4 + 0.002567373736713652 5 1 5 5 + -4.718447854656915e-16 5 1 6 1 + 0.03040069685086816 5 1 6 2 + -2.662800535624399e-16 5 1 6 3 + -0.004637574615428167 5 1 6 4 + -1.617629641348373e-16 5 1 6 5 + 0.002631333536207308 5 1 6 6 + 0.01871019343920287 5 1 7 1 + 4.267419750902945e-16 5 1 7 2 + -0.03212742263925905 5 1 7 3 + 2.029626466892864e-16 5 1 7 4 + -0.004768247681334589 5 1 7 5 + -1.344410693882025e-17 5 1 7 6 + 0.008815762553662603 5 1 7 7 + -4.163336342344337e-16 5 1 8 1 + 0.02146043572822283 5 1 8 2 + 1.370431546021678e-16 5 1 8 3 + -0.03242112662798077 5 1 8 4 + -4.98732999343332e-16 5 1 8 5 + -0.01012170248736563 5 1 8 6 + 1.387778780781446e-16 5 1 8 7 + -0.02745749089883057 5 1 8 8 + -0.001206446053474838 5 1 9 1 + -2.775557561562891e-16 5 1 9 2 + 0.0212648982868217 5 1 9 3 + 7.28583859910259e-17 5 1 9 4 + 0.03123347066272188 5 1 9 5 + -4.510281037539698e-16 5 1 9 6 + -0.0291188621263339 5 1 9 7 + 9.71445146547012e-17 5 1 9 8 + 0.03586360885951699 5 1 9 9 + -2.417770844642675e-17 5 1 10 1 + 0.001168345294700522 5 1 10 2 + 2.914335439641036e-16 5 1 10 3 + -0.01812473947335218 5 1 10 4 + 1.908195823574488e-16 5 1 10 5 + -0.0650281222223914 5 1 10 6 + -7.216449660063518e-16 5 1 10 7 + -0.03573004633497294 5 1 10 8 + 4.653395724307785e-16 5 1 10 9 + -0.0003722949731890539 5 1 10 10 + -1.119194797602474e-15 5 2 1 1 + 0.04436027601429843 5 2 2 1 + 1.280225925270884e-15 5 2 2 2 + 8.291978215169138e-16 5 2 3 1 + -0.002943656982132591 5 2 3 2 + -2.055647319032516e-16 5 2 3 3 + -0.04780174749943004 5 2 4 1 + -5.776629175002768e-16 5 2 4 2 + -0.0222545674103725 5 2 4 3 + 1.960237527853792e-16 5 2 4 4 + 6.071532165918825e-18 5 2 5 1 + 0.06285957487430066 5 2 5 2 + -1.97758476261356e-16 5 2 5 3 + -0.01574845888189377 5 2 5 4 + -4.466912950640278e-17 5 2 5 5 + 0.01430602602039381 5 2 6 1 + 2.393918396847994e-16 5 2 6 2 + 0.03528089274968141 5 2 6 3 + -5.030698080332741e-17 5 2 6 4 + 0.007964084678179916 5 2 6 5 + 3.035766082959412e-17 5 2 6 6 + 3.41740524767431e-16 5 2 7 1 + -0.003558403453613128 5 2 7 2 + -2.680147770384167e-16 5 2 7 3 + -0.03637408468487556 5 2 7 4 + -1.422473250300982e-16 5 2 7 5 + -0.01588026523915655 5 2 7 6 + 2.8796409701215e-16 5 2 7 7 + 0.01742643444269534 5 2 8 1 + 3.28946939132102e-16 5 2 8 2 + -0.00183463191869784 5 2 8 3 + -2.983724378680108e-16 5 2 8 4 + 0.03636187472020762 5 2 8 5 + -4.649058915617843e-16 5 2 8 6 + -0.01962514647668058 5 2 8 7 + -1.509209424099822e-16 5 2 8 8 + -2.758210326803123e-16 5 2 9 1 + 0.01741899333492435 5 2 9 2 + 2.866630544051674e-16 5 2 9 3 + -0.003692286409191565 5 2 9 4 + 3.191891195797325e-16 5 2 9 5 + 0.06227201305794967 5 2 9 6 + -2.42861286636753e-16 5 2 9 7 + -0.003391539236996008 5 2 9 8 + 6.938893903907228e-16 5 2 9 9 + 0.001016442655657901 5 2 10 1 + 2.0643209364124e-16 5 2 10 2 + -0.01679760461467064 5 2 10 3 + -2.567390744445674e-16 5 2 10 4 + -0.01264555128562887 5 2 10 5 + -6.106226635438361e-16 5 2 10 6 + 0.05009172584571667 5 2 10 7 + -6.175615574477433e-16 5 2 10 8 + -0.04656853890893904 5 2 10 9 + -4.375839968151496e-16 5 2 10 10 + 0.06116489876137327 5 3 1 1 + 1.177877240188252e-15 5 3 2 1 + 0.001113430601256645 5 3 2 2 + -0.05921709293892906 5 3 3 1 + -3.287300986976049e-16 5 3 3 2 + 0.004300746285171764 5 3 3 3 + 2.671474153004283e-16 5 3 4 1 + -0.05377753296956947 5 3 4 2 + -6.418476861114186e-17 5 3 4 3 + -0.01730696425834851 5 3 4 4 + -0.00981483162543284 5 3 5 1 + -2.003605614753212e-16 5 3 5 2 + 0.0717378310778664 5 3 5 3 + -2.445960101127298e-16 5 3 5 4 + 0.02859543806772685 5 3 5 5 + -6.635317295611287e-17 5 3 6 1 + 0.007425143513455258 5 3 6 2 + 6.938893903907228e-17 5 3 6 3 + 0.04304693635288455 5 3 6 4 + 2.099015405931937e-16 5 3 6 5 + 0.02845511279908496 5 3 6 6 + -0.01538643067047412 5 3 7 1 + -1.942890293094024e-16 5 3 7 2 + -0.001652042121676851 5 3 7 3 + -1.153591111524577e-16 5 3 7 4 + 0.04402330914585357 5 3 7 5 + -1.35308431126191e-16 5 3 7 6 + -0.01393635226942991 5 3 7 7 + 7.28583859910259e-17 5 3 8 1 + -0.002659666930720914 5 3 8 2 + -3.556183125752455e-17 5 3 8 3 + -0.001728088242502716 5 3 8 4 + 4.163336342344337e-17 5 3 8 5 + 0.07067077076503564 5 3 8 6 + 4.779163176316104e-16 5 3 8 7 + 0.00524673574884163 5 3 8 8 + 0.01555624284131016 5 3 9 1 + 2.315855840429037e-16 5 3 9 2 + -0.002700519055965475 5 3 9 3 + -5.204170427930421e-17 5 3 9 4 + 0.0049252475819481 5 3 9 5 + 3.37403716077489e-16 5 3 9 6 + -0.05616051863107587 5 3 9 7 + 1.873501354054952e-16 5 3 9 8 + 0.0004992131613732907 5 3 9 9 + 2.185751579730777e-16 5 3 10 1 + -0.01513443205157315 5 3 10 2 + -1.908195823574488e-16 5 3 10 3 + 0.01345429081656489 5 3 10 4 + -6.245004513516506e-17 5 3 10 5 + 0.00958687809064967 5 3 10 6 + 2.255140518769849e-16 5 3 10 7 + 0.06326178664490845 5 3 10 8 + -3.677613769070831e-16 5 3 10 9 + 0.06463932000359035 5 3 10 10 + 1.616762279610384e-15 5 4 1 1 + -0.08055441338718669 5 4 2 1 + -1.183081410616182e-15 5 4 2 2 + 3.963843142607004e-16 5 4 3 1 + -0.07104214844562312 5 4 3 2 + -2.116362640691705e-16 5 4 3 3 + 0.01206705639851446 5 4 4 1 + 2.498001805406602e-16 5 4 4 2 + -0.06992666765426035 5 4 4 3 + -5.325601071248798e-16 5 4 4 4 + 1.123233450694983e-16 5 4 5 1 + -0.01574845888189378 5 4 5 2 + -2.489328188026718e-16 5 4 5 3 + 0.08951284690984809 5 4 5 4 + 1.908195823574488e-16 5 4 5 5 + -0.002683880802533865 5 4 6 1 + 6.765421556309548e-17 5 4 6 2 + 0.0007445631038842009 5 4 6 3 + -1.387778780781446e-17 5 4 6 4 + -0.0497388918574776 5 4 6 5 + -1.942890293094024e-16 5 4 6 6 + -1.040834085586084e-17 5 4 7 1 + -0.01036899184746206 5 4 7 2 + -7.979727989493313e-17 5 4 7 3 + 0.0007431487657135992 5 4 7 4 + -9.71445146547012e-17 5 4 7 5 + 0.08765874641651983 5 4 7 6 + -1.335737076502141e-16 5 4 7 7 + -0.01460191643583464 5 4 8 1 + -1.387778780781446e-16 5 4 8 2 + -0.00111155375768803 5 4 8 3 + -3.122502256758253e-17 5 4 8 4 + -0.002480834081723751 5 4 8 5 + 2.602085213965211e-18 5 4 8 6 + -0.07203566915402798 5 4 8 7 + 4.891920202254596e-16 5 4 8 8 + 9.71445146547012e-17 5 4 9 1 + -0.002184201454963483 5 4 9 2 + -6.938893903907228e-17 5 4 9 3 + -0.007743354232139076 5 4 9 4 + 9.107298248878237e-17 5 4 9 5 + -0.01586474270089226 5 4 9 6 + -3.382710778154774e-17 5 4 9 7 + -0.07462122305723018 5 4 9 8 + -7.337880303381894e-16 5 4 9 9 + -0.01321268483890981 5 4 10 1 + -2.220446049250313e-16 5 4 10 2 + 0.01270492887807739 5 4 10 3 + 7.632783294297951e-17 5 4 10 4 + 0.002587202724779586 5 4 10 5 + -1.821459649775647e-17 5 4 10 6 + -0.01267628790289769 5 4 10 7 + -1.994931997373328e-16 5 4 10 8 + 0.08674391137563289 5 4 10 9 + 3.018418848199644e-16 5 4 10 10 + 0.2359458813967895 5 5 1 1 + 2.255140518769849e-16 5 5 2 1 + 0.2138936383648609 5 5 2 2 + -0.02241512891113882 5 5 3 1 + -3.95516952522712e-16 5 5 3 2 + 0.2100285518901546 5 5 3 3 + 1.578598363138894e-16 5 5 4 1 + -0.0266279488457183 5 5 4 2 + -2.844946500601964e-16 5 5 4 3 + 0.2084447035074809 5 5 4 4 + 0.002567373736713652 5 5 5 1 + -4.510281037539698e-17 5 5 5 2 + 0.02859543806772685 5 5 5 3 + 1.908195823574488e-16 5 5 5 4 + 0.2325499618396295 5 5 5 5 + -2.220446049250313e-16 5 5 6 1 + 0.00398576336241605 5 5 6 2 + 9.020562075079397e-17 5 5 6 3 + 0.01004639855372196 5 5 6 4 + -1.942890293094024e-16 5 5 6 5 + 0.2301086892560344 5 5 6 6 + -0.002463280321787284 5 5 7 1 + 1.561251128379126e-17 5 5 7 2 + 0.005007618748049409 5 5 7 3 + -8.326672684688674e-17 5 5 7 4 + 0.01394473831189972 5 5 7 5 + 2.810252031082427e-16 5 5 7 6 + 0.2124980804483877 5 5 7 7 + -2.714842239903703e-16 5 5 8 1 + 0.00960392043995487 5 5 8 2 + 2.775557561562891e-17 5 5 8 3 + 0.001559617183919601 5 5 8 4 + 1.040834085586084e-17 5 5 8 5 + 0.02913514257382663 5 5 8 6 + -9.020562075079397e-17 5 5 8 7 + 0.2174750519357028 5 5 8 8 + 0.01256936093135933 5 5 9 1 + 8.326672684688674e-17 5 5 9 2 + 0.007005404181481479 5 5 9 3 + 1.266348137463069e-16 5 5 9 4 + 0.003975344775906405 5 5 9 5 + 1.734723475976807e-16 5 5 9 6 + -0.02800019715667702 5 5 9 7 + -2.463307335887066e-16 5 5 9 8 + 0.2238388509799648 5 5 9 9 + 9.71445146547012e-17 5 5 10 1 + -0.0109126655388493 5 5 10 2 + -5.204170427930421e-18 5 5 10 3 + 0.002335956601570248 5 5 10 4 + 5.377642775528102e-17 5 5 10 5 + -0.002912053823721093 5 5 10 6 + 2.133709875451473e-16 5 5 10 7 + 0.02413064865925802 5 5 10 8 + 5.204170427930421e-18 5 5 10 9 + 0.2495016041290201 5 5 10 10 + -8.253489038045903e-17 6 1 1 1 + -0.002968360877592105 6 1 2 1 + -6.904199434387692e-16 6 1 2 2 + -6.149594722337781e-16 6 1 3 1 + 0.02712991317660465 6 1 3 2 + 1.97758476261356e-16 6 1 3 3 + 0.02665688390183493 6 1 4 1 + 4.839878497975292e-16 6 1 4 2 + -0.01719759226680677 6 1 4 3 + -1.0321604682062e-16 6 1 4 4 + -4.683753385137379e-16 6 1 5 1 + 0.01430602602039381 6 1 5 2 + -7.459310946700271e-17 6 1 5 3 + -0.002683880802533869 6 1 5 4 + -2.243214294872509e-16 6 1 5 5 + 0.05720973239744101 6 1 6 1 + 1.981921571303502e-16 6 1 6 2 + -0.008298456845026971 6 1 6 3 + 2.51534904016637e-17 6 1 6 4 + 0.001343437814475839 6 1 6 5 + -1.431146867680866e-16 6 1 6 6 + 6.7914424084492e-16 6 1 7 1 + -0.03514268907780797 6 1 7 2 + 7.199102425303749e-17 6 1 7 3 + 0.007466153824138488 6 1 7 4 + -7.806255641895632e-17 6 1 7 5 + -0.002675822722973635 6 1 7 6 + -8.066464163292153e-17 6 1 7 7 + 0.02196696636989239 6 1 8 1 + 3.781697177629439e-16 6 1 8 2 + -0.03431139975583339 6 1 8 3 + 3.174543961037557e-16 6 1 8 4 + -0.008528952599485832 6 1 8 5 + -1.665334536937735e-16 6 1 8 6 + -0.01551932317974922 6 1 8 7 + -9.71445146547012e-17 6 1 8 8 + -3.794707603699266e-16 6 1 9 1 + 0.0217874632241169 6 1 9 2 + 1.804112415015879e-16 6 1 9 3 + -0.03502306474955832 6 1 9 4 + -3.660266534311063e-16 6 1 9 5 + 0.01251041904505704 6 1 9 6 + 1.457167719820518e-16 6 1 9 7 + 0.02684686230319666 6 1 9 8 + -2.393918396847994e-16 6 1 9 9 + 0.0005108920032471022 6 1 10 1 + 3.365363543395006e-16 6 1 10 2 + -0.02150532678466904 6 1 10 3 + -2.96637714392034e-16 6 1 10 4 + -0.05614727034508792 6 1 10 5 + 2.8796409701215e-16 6 1 10 6 + -0.02666844696860023 6 1 10 7 + 3.400058012914542e-16 6 1 10 8 + 0.00269309145494437 6 1 10 9 + 4.152494320619482e-17 6 1 10 10 + -0.003243328258909482 6 2 1 1 + -7.216449660063518e-16 6 2 2 1 + 0.03236086287156836 6 2 2 2 + 0.03433487759841741 6 2 3 1 + 7.494005416219807e-16 6 2 3 2 + -4.221904013975786e-05 6 2 3 3 + 5.360295540768334e-16 6 2 4 1 + 0.0001035028719689108 6 2 4 2 + -1.682681771697503e-16 6 2 4 3 + -0.01024869855399783 6 2 4 4 + 0.03040069685086816 6 2 5 1 + 2.51534904016637e-16 6 2 5 2 + 0.007425143513455261 6 2 5 3 + 5.811323644522304e-17 6 2 5 4 + 0.003985763362416057 6 2 5 5 + 1.89084858881472e-16 6 2 6 1 + 0.05248075169048397 6 2 6 2 + -1.994931997373328e-17 6 2 6 3 + -0.01112563679449188 6 2 6 4 + -2.602085213965211e-17 6 2 6 5 + 0.003917916823900393 6 2 6 6 + -0.02676524449895389 6 2 7 1 + -5.230191280070073e-16 6 2 7 2 + -0.03473496235798108 6 2 7 3 + 1.387778780781446e-16 6 2 7 4 + -0.01118937466980782 6 2 7 5 + -1.023486850826316e-16 6 2 7 6 + -0.007743382345866565 6 2 7 7 + 3.33066907387547e-16 6 2 8 1 + -0.005643821940677436 6 2 8 2 + -3.087807787238717e-16 6 2 8 3 + -0.03468546789697341 6 2 8 4 + -4.198030811863873e-16 6 2 8 5 + 0.004719252812465533 6 2 8 6 + -1.873501354054952e-16 6 2 8 7 + -0.0004540415859492887 6 2 8 8 + 0.01942558978412024 6 2 9 1 + 4.85722573273506e-16 6 2 9 2 + -0.00560042887131105 6 2 9 3 + -5.256212132209725e-16 6 2 9 4 + 0.05131994915233704 6 2 9 5 + 1.110223024625157e-16 6 2 9 6 + 9.867902214226627e-05 6 2 9 7 + 3.747002708109903e-16 6 2 9 8 + 0.03355634552373445 6 2 9 9 + 3.102986617653514e-16 6 2 10 1 + -0.01923082204352315 6 2 10 2 + -3.95516952522712e-16 6 2 10 3 + 0.0256819666392949 6 2 10 4 + -5.533767888366015e-16 6 2 10 5 + -0.03185061906710248 6 2 10 6 + -5.117434254131581e-16 6 2 10 7 + -0.03566189691699159 6 2 10 8 + 9.71445146547012e-17 6 2 10 9 + -0.002956619576086066 6 2 10 10 + -8.873110579621368e-16 6 3 1 1 + 0.04268433110040729 6 3 2 1 + 1.041267766455078e-15 6 3 2 2 + 4.172009959724221e-16 6 3 3 1 + 0.002267686966858624 6 3 3 2 + 4.683753385137379e-17 6 3 3 3 + -0.03882937333170527 6 3 4 1 + -3.703634621210483e-16 6 3 4 2 + 0.001119482425041746 6 3 4 3 + 2.602085213965211e-17 6 3 4 4 + -2.658463726934457e-16 6 3 5 1 + 0.03528089274968141 6 3 5 2 + 7.979727989493313e-17 6 3 5 3 + 0.0007445631038841987 6 3 5 4 + 9.454242944073599e-17 6 3 5 5 + -0.008298456845026973 6 3 6 1 + -2.081668171172169e-17 6 3 6 2 + 0.05517217740584834 6 3 6 3 + 3.729655473350135e-17 6 3 6 4 + 0.01411044288247001 6 3 6 5 + 1.561251128379126e-16 6 3 6 6 + -2.081668171172169e-17 6 3 7 1 + -0.02057704771566203 6 3 7 2 + -5.290906601729262e-17 6 3 7 3 + -0.03914041342461944 6 3 7 4 + -3.859759734048396e-17 6 3 7 5 + -0.002282321723258179 6 3 7 6 + 1.52655665885959e-16 6 3 7 7 + -0.02344303299701732 6 3 8 1 + -2.51534904016637e-16 6 3 8 2 + -0.002507450105334738 6 3 8 3 + -9.280770596475918e-17 6 3 8 4 + 0.05391720515921221 6 3 8 5 + -9.020562075079397e-17 6 3 8 6 + 0.001770518600976713 6 3 8 7 + 1.040834085586084e-16 6 3 8 8 + 1.52655665885959e-16 6 3 9 1 + -0.00524360852511075 6 3 9 2 + -7.719519468096792e-17 6 3 9 3 + -0.0191888163486444 6 3 9 4 + 2.636779683484747e-16 6 3 9 5 + 0.03716196346737853 6 3 9 6 + -3.122502256758253e-17 6 3 9 7 + 0.002261896005579486 6 3 9 8 + 4.761815941556335e-16 6 3 9 9 + -0.01761413534290171 6 3 10 1 + -3.729655473350135e-16 6 3 10 2 + 0.02226042571307383 6 3 10 3 + 1.717376241217039e-16 6 3 10 4 + 0.008049564892887766 6 3 10 5 + -6.852157730108388e-17 6 3 10 6 + 0.04118153228396401 6 3 10 7 + -2.393918396847994e-16 6 3 10 8 + -0.04521241764996567 6 3 10 9 + -2.567390744445674e-16 6 3 10 10 + 0.05291221201647325 6 4 1 1 + 8.352693536828326e-16 6 4 2 1 + 0.003979733925699116 6 4 2 2 + -0.04769176432925899 6 4 3 1 + -4.388850394221322e-16 6 4 3 2 + 0.004586307021255794 6 4 3 3 + 1.663166132592764e-16 6 4 4 1 + -0.04426329282535235 6 4 4 2 + -2.289834988289385e-16 6 4 4 3 + 0.001178781394543976 6 4 4 4 + -0.004637574615428172 6 4 5 1 + -5.551115123125783e-17 6 4 5 2 + 0.04304693635288456 6 4 5 3 + -3.469446951953614e-18 6 4 5 4 + 0.01004639855372195 6 4 5 5 + 2.55871712706579e-17 6 4 6 1 + -0.01112563679449189 6 4 6 2 + 3.469446951953614e-17 6 4 6 3 + 0.05861466673469206 6 4 6 4 + -1.734723475976807e-18 6 4 6 5 + 0.01315236318600593 6 4 6 6 + 0.005923049882337794 6 4 7 1 + 8.153200337090993e-17 6 4 7 2 + -0.01804567506187994 6 4 7 3 + -2.644369098692145e-16 6 4 7 4 + 0.05722053165029727 6 4 7 5 + 9.367506770274758e-17 6 4 7 6 + 0.002232578219411523 6 4 7 7 + 1.457167719820518e-16 6 4 8 1 + -0.01841432835901575 6 4 8 2 + -2.51534904016637e-17 6 4 8 3 + -0.01648183636832135 6 4 8 4 + 8.326672684688674e-17 6 4 8 5 + 0.04489555522015169 6 4 8 6 + 2.151057110211241e-16 6 4 8 7 + 0.005587899366805786 6 4 8 8 + -0.02198162866660923 6 4 9 1 + -3.348016308635238e-16 6 4 9 2 + -0.01723808335470607 6 4 9 3 + -5.898059818321144e-17 6 4 9 4 + -0.01107668203327708 6 4 9 5 + 1.830133267155531e-16 6 4 9 6 + -0.04663521886612054 6 4 9 7 + -5.551115123125783e-17 6 4 9 8 + 0.003597753756978159 6 4 9 9 + -2.636779683484747e-16 6 4 10 1 + 0.02123093229911221 6 4 10 2 + 1.179611963664229e-16 6 4 10 3 + -0.005780452822981537 6 4 10 4 + 1.301042606982605e-18 6 4 10 5 + 0.004746471754767528 6 4 10 6 + 1.387778780781446e-16 6 4 10 7 + 0.05133622869016195 6 4 10 8 + -6.591949208711867e-17 6 4 10 9 + 0.05612162541258427 6 4 10 10 + -1.169203622808368e-15 6 5 1 1 + 0.05557040913152933 6 5 2 1 + 7.025630077706069e-16 6 5 2 2 + -3.356689926015122e-16 6 5 3 1 + 0.05029663765318163 6 5 3 2 + 1.35308431126191e-16 6 5 3 3 + -0.006385208688702245 6 5 4 1 + -9.020562075079397e-17 6 5 4 2 + 0.04883416013782188 6 5 4 3 + 1.873501354054952e-16 6 5 4 4 + -1.647987302177967e-16 6 5 5 1 + 0.007964084678179915 6 5 5 2 + 2.090341788552053e-16 6 5 5 3 + -0.04973889185747761 6 5 5 4 + -2.046973701652632e-16 6 5 5 5 + 0.001343437814475829 6 5 6 1 + -2.949029909160572e-17 6 5 6 2 + 0.01411044288247 6 5 6 3 + -6.938893903907228e-18 6 5 6 4 + 0.06852833984795706 6 5 6 5 + 1.110223024625157e-16 6 5 6 6 + -3.556183125752455e-17 6 5 7 1 + -0.008497232825245985 6 5 7 2 + 0.02703237966960798 6 5 7 4 + 1.318389841742373e-16 6 5 7 5 + -0.05085324225167477 6 5 7 6 + 1.734723475976807e-17 6 5 7 7 + -0.00588686660872331 6 5 8 1 + -2.532696274926138e-16 6 5 8 2 + 0.02872226504327339 6 5 8 3 + 4.85722573273506e-17 6 5 8 4 + 0.01442647761648331 6 5 8 5 + 9.367506770274758e-17 6 5 8 6 + 0.0506764433573841 6 5 8 7 + -3.573530360512223e-16 6 5 8 8 + -2.185751579730777e-16 6 5 9 1 + 0.03041838451118374 6 5 9 2 + 1.422473250300982e-16 6 5 9 3 + -0.008525225848002454 6 5 9 4 + 3.686287386450715e-17 6 5 9 5 + 0.008393882258338285 6 5 9 6 + 2.51534904016637e-17 6 5 9 7 + 0.0531203549005059 6 5 9 8 + 4.822531263215524e-16 6 5 9 9 + -0.03595679132331528 6 5 10 1 + -3.573530360512223e-16 6 5 10 2 + 0.005617424417244366 6 5 10 3 + 2.55871712706579e-17 6 5 10 4 + -0.001492733022454106 6 5 10 5 + 3.63207727782644e-17 6 5 10 6 + 0.006853298651158608 6 5 10 7 + 1.747733902046633e-16 6 5 10 8 + -0.06011306777678947 6 5 10 9 + -2.220446049250313e-16 6 5 10 10 + 0.237415388458221 6 6 1 1 + 6.25367813089639e-16 6 6 2 1 + 0.2151299327685745 6 6 2 2 + -0.02251252965698174 6 6 3 1 + 2.255140518769849e-17 6 6 3 2 + 0.2109580877288481 6 6 3 3 + 1.370431546021678e-16 6 6 4 1 + -0.02673455586384137 6 6 4 2 + 5.898059818321144e-17 6 6 4 3 + 0.2088972324257383 6 6 4 4 + 0.002631333536207323 6 6 5 1 + 4.076600168545497e-17 6 6 5 2 + 0.02845511279908496 6 6 5 3 + -1.8474805019153e-16 6 6 5 4 + 0.2301086892560344 6 6 5 5 + -1.110223024625157e-16 6 6 6 1 + 0.003917916823900398 6 6 6 2 + 1.561251128379126e-16 6 6 6 3 + 0.01315236318600593 6 6 6 4 + 1.387778780781446e-16 6 6 6 5 + 0.2355496885235698 6 6 6 6 + -0.002394839959035856 6 6 7 1 + -7.459310946700271e-17 6 6 7 2 + 0.002062972650267794 6 6 7 3 + -4.163336342344337e-17 6 6 7 4 + 0.01167009520737637 6 6 7 5 + -1.092875789865388e-16 6 6 7 6 + 0.2148988401075751 6 6 7 7 + -2.367897544708342e-16 6 6 8 1 + 0.007181162231022473 6 6 8 2 + -2.775557561562891e-17 6 6 8 3 + 0.003724005147657496 6 6 8 4 + 9.020562075079397e-17 6 6 8 5 + 0.02990850197896495 6 6 8 6 + 2.463307335887066e-16 6 6 8 7 + 0.2196101373651133 6 6 8 8 + 0.01087094337845078 6 6 9 1 + 1.110223024625157e-16 6 6 9 2 + 0.008768199198264175 6 6 9 3 + 5.204170427930421e-17 6 6 9 4 + 0.004331545569280335 6 6 9 5 + 2.359223927328458e-16 6 6 9 6 + -0.02848394043011195 6 6 9 7 + 1.838806884535416e-16 6 6 9 8 + 0.2260090766341135 6 6 9 9 + 9.71445146547012e-17 6 6 10 1 + -0.01200962451587099 6 6 10 2 + -3.903127820947816e-17 6 6 10 3 + 0.002534150821016864 6 6 10 4 + -4.597017211338539e-17 6 6 10 5 + -0.003046986987052868 6 6 10 6 + 2.116362640691705e-16 6 6 10 7 + 0.02438765395741332 6 6 10 8 + -4.041905699025961e-16 6 6 10 9 + 0.2518703181646837 6 6 10 10 + 0.001039530978195274 7 1 1 1 + 1.222980050563649e-16 7 1 2 1 + -0.004691009786066434 7 1 2 2 + -0.005262688214109081 7 1 3 1 + 3.33066907387547e-16 7 1 3 2 + -0.02040165221050796 7 1 3 3 + 3.851086116668512e-16 7 1 4 1 + -0.02049521045527097 7 1 4 2 + -1.951563910473908e-16 7 1 4 3 + 0.01596171210888996 7 1 4 4 + 0.01871019343920287 7 1 5 1 + 3.469446951953614e-16 7 1 5 2 + -0.01538643067047412 7 1 5 3 + -1.127570259384925e-17 7 1 5 4 + -0.002463280321787275 7 1 5 5 + 6.782768791069316e-16 7 1 6 1 + -0.02676524449895388 7 1 6 2 + -1.821459649775647e-17 7 1 6 3 + 0.005923049882337796 7 1 6 4 + -3.838075690598686e-17 7 1 6 5 + -0.002394839959035848 7 1 6 6 + 0.03833762730163029 7 1 7 1 + -6.071532165918825e-17 7 1 7 2 + 0.009140688867774575 7 1 7 3 + -1.092875789865388e-16 7 1 7 4 + 0.005903590997989022 7 1 7 5 + 2.125036258071589e-17 7 1 7 6 + 0.01396779422257005 7 1 7 7 + -2.402592014227878e-16 7 1 8 1 + 0.02067570380593351 7 1 8 2 + -3.877106968808164e-16 7 1 8 3 + 0.008871461342652709 7 1 8 4 + 1.700029006457271e-16 7 1 8 5 + -0.01341510678513065 7 1 8 6 + -1.170938346284345e-16 7 1 8 7 + -0.01970810224458738 7 1 8 8 + -0.01910041309396768 7 1 9 1 + -2.344045096913661e-16 7 1 9 2 + 0.02053885601122861 7 1 9 3 + -3.070460552478949e-16 7 1 9 4 + -0.02525433543112075 7 1 9 5 + 1.127570259384925e-16 7 1 9 6 + -0.01998186611483036 7 1 9 7 + 2.740863092043355e-16 7 1 9 8 + -0.005180222435122467 7 1 9 9 + -3.546967407286328e-16 7 1 10 1 + 0.0189371960982318 7 1 10 2 + 2.129373066761531e-16 7 1 10 3 + -0.03721086876032681 7 1 10 4 + -5.273559366969494e-16 7 1 10 5 + -0.01779037331709067 7 1 10 6 + -3.365363543395006e-16 7 1 10 7 + 0.005760260346472046 7 1 10 8 + 3.816391647148976e-17 7 1 10 9 + 0.0009779281255174065 7 1 10 10 + 1.908195823574488e-16 7 2 1 1 + -0.006218164528317322 7 2 2 1 + 2.209604027525458e-16 7 2 2 2 + 3.729655473350135e-16 7 2 3 1 + -0.02799827961629774 7 2 3 2 + -4.076600168545497e-16 7 2 3 3 + -0.02050747490687329 7 2 4 1 + -5.568462357885551e-16 7 2 4 2 + 0.0007625437775641477 7 2 4 3 + 3.148523108897905e-16 7 2 4 4 + 4.302114220422482e-16 7 2 5 1 + -0.003558403453613132 7 2 5 2 + -1.994931997373328e-16 7 2 5 3 + -0.01036899184746206 7 2 5 4 + 2.34187669256869e-17 7 2 5 5 + -0.03514268907780798 7 2 6 1 + -5.217180854000247e-16 7 2 6 2 + -0.02057704771566202 7 2 6 3 + 7.849623728795052e-17 7 2 6 4 + -0.008497232825245997 7 2 6 5 + -4.163336342344337e-17 7 2 6 6 + -6.331740687315346e-17 7 2 7 1 + 0.04972144556055116 7 2 7 2 + 1.0321604682062e-16 7 2 7 3 + 0.005290018862608172 7 2 7 4 + 1.821459649775647e-16 7 2 7 5 + -0.007820248688825259 7 2 7 6 + 2.081668171172169e-16 7 2 7 7 + 0.01408879725166876 7 2 8 1 + 1.682681771697503e-16 7 2 8 2 + 0.03281090781068997 7 2 8 3 + -1.170938346284345e-16 7 2 8 4 + -0.01853071439110358 7 2 8 5 + -1.196959198423997e-16 7 2 8 6 + 0.0003849751513863298 7 2 8 7 + -1.630640067418199e-16 7 2 8 8 + -2.285498179599443e-16 7 2 9 1 + -0.003310295266844346 7 2 9 2 + 1.474514954580286e-16 7 2 9 3 + 0.04842553390460006 7 2 9 4 + -2.081668171172169e-16 7 2 9 5 + -0.003868322906543242 7 2 9 6 + -3.33066907387547e-16 7 2 9 7 + -0.02834219879038376 7 2 9 8 + -5.984795992119984e-17 7 2 9 9 + 0.01730456306122882 7 2 10 1 + 4.243567303108264e-16 7 2 10 2 + -0.01306461479891315 7 2 10 3 + -3.538835890992686e-16 7 2 10 4 + 0.03571327324323943 7 2 10 5 + -3.642919299551295e-16 7 2 10 6 + 0.02036853211970716 7 2 10 7 + -1.561251128379126e-16 7 2 10 8 + 0.007030094499813701 7 2 10 9 + -5.204170427930421e-17 7 2 10 10 + -0.008383868636907571 7 3 1 1 + 4.735795089416683e-16 7 3 2 1 + -0.03459658488135228 7 3 2 2 + -0.02566231126094851 7 3 3 1 + -5.004677228193088e-16 7 3 3 2 + -0.001061317141163529 7 3 3 3 + -3.35235311732518e-16 7 3 4 1 + 0.008367347869882118 7 3 4 2 + 1.040834085586084e-16 7 3 4 3 + -0.003071065699095504 7 3 4 4 + -0.03212742263925905 7 3 5 1 + -2.636779683484747e-16 7 3 5 2 + -0.001652042121676854 7 3 5 3 + -7.37257477290143e-17 7 3 5 4 + 0.005007618748049421 7 3 5 5 + 7.459310946700271e-17 7 3 6 1 + -0.03473496235798107 7 3 6 2 + -4.423544863740858e-17 7 3 6 3 + -0.01804567506187994 7 3 6 4 + 8.673617379884035e-18 7 3 6 5 + 0.00206297265026779 7 3 6 6 + 0.009140688867774575 7 3 7 1 + 9.71445146547012e-17 7 3 7 2 + 0.05008825848035472 7 3 7 3 + 3.295974604355933e-17 7 3 7 4 + -0.01602200731037146 7 3 7 5 + 6.591949208711867e-17 7 3 7 6 + -0.004158150861093472 7 3 7 7 + -2.740863092043355e-16 7 3 8 1 + 0.02102519112191942 7 3 8 2 + 3.642919299551295e-17 7 3 8 3 + 0.04859489057647872 7 3 8 4 + 2.827599265842196e-16 7 3 8 5 + -0.001552837210938502 7 3 8 6 + 5.204170427930421e-17 7 3 8 7 + -0.001080599262243664 7 3 8 8 + 0.01311296861676802 7 3 9 1 + 6.418476861114186e-17 7 3 9 2 + 0.01988646168088383 7 3 9 3 + 3.235259282696745e-16 7 3 9 4 + -0.0355795091256863 7 3 9 5 + -1.387778780781446e-17 7 3 9 6 + 0.008917395664382832 7 3 9 7 + -1.821459649775647e-16 7 3 9 8 + -0.03615505691511873 7 3 9 9 + 1.730386667286865e-16 7 3 10 1 + -0.012308774121103 7 3 10 2 + 1.908195823574488e-17 7 3 10 3 + -0.009656461027829277 7 3 10 4 + 1.595945597898663e-16 7 3 10 5 + 0.03344738786215335 7 3 10 6 + 3.33066907387547e-16 7 3 10 7 + 0.02659968115039525 7 3 10 8 + -9.194034422677078e-17 7 3 10 9 + -0.009261617197954562 7 3 10 10 + 5.750608322863116e-16 7 4 1 1 + -0.0318793596462497 7 4 2 1 + -8.396061623727746e-16 7 4 2 2 + -3.356689926015122e-16 7 4 3 1 + 0.008133011190474349 7 4 3 2 + 9.540979117872439e-17 7 4 3 3 + 0.03888560286980956 7 4 4 1 + 5.761450344587971e-16 7 4 4 2 + 0.008818330242119104 7 4 4 3 + -3.469446951953614e-17 7 4 4 4 + 1.971079549578647e-16 7 4 5 1 + -0.03637408468487556 7 4 5 2 + -1.162264728904461e-16 7 4 5 3 + 0.0007431487657136035 7 4 5 4 + -7.28583859910259e-17 7 4 5 5 + 0.007466153824138492 7 4 6 1 + 1.35308431126191e-16 7 4 6 2 + -0.03914041342461945 7 4 6 3 + -2.701831813833877e-16 7 4 6 4 + 0.02703237966960797 7 4 6 5 + -4.510281037539698e-17 7 4 6 6 + -1.110223024625157e-16 7 4 7 1 + 0.005290018862608167 7 4 7 2 + 3.122502256758253e-17 7 4 7 3 + 0.06639818305141731 7 4 7 4 + -8.370040771588094e-17 7 4 7 5 + 0.0009209473773786705 7 4 7 6 + -1.249000902703301e-16 7 4 7 7 + 0.007842639541531556 7 4 8 1 + -5.421010862427522e-17 7 4 8 2 + 0.03092201022536814 7 4 8 3 + 1.249000902703301e-16 7 4 8 4 + -0.04011613976380646 7 4 8 5 + 7.28583859910259e-17 7 4 8 6 + 0.008680904837215994 7 4 8 7 + -3.469446951953614e-17 7 4 8 8 + -1.908195823574488e-16 7 4 9 1 + 0.03422637268565552 7 4 9 2 + 2.081668171172169e-16 7 4 9 3 + 0.00590991702280706 7 4 9 4 + -5.898059818321144e-17 7 4 9 5 + -0.03787228151918065 7 4 9 6 + 2.281161370909501e-16 7 4 9 7 + 0.008788797901919519 7 4 9 8 + -2.532696274926138e-16 7 4 9 9 + -0.02689238583580545 7 4 10 1 + -2.445960101127298e-16 7 4 10 2 + -0.008455470306156742 7 4 10 3 + -1.734723475976807e-18 7 4 10 4 + -0.007564858759393724 7 4 10 5 + 9.627715291671279e-17 7 4 10 6 + -0.04132893929509072 7 4 10 7 + 1.058181320345852e-16 7 4 10 8 + 0.03393108603469314 7 4 10 9 + 1.838806884535416e-16 7 4 10 10 + 0.05426855834446989 7 5 1 1 + 8.534839501805891e-16 7 5 2 1 + 0.004723785546635747 7 5 2 2 + -0.04843525193843834 7 5 3 1 + -4.258746133523061e-16 7 5 3 2 + 0.005610436606715515 7 5 3 3 + 1.919037845299343e-16 7 5 4 1 + -0.04497396820091291 7 5 4 2 + -1.257674520083185e-16 7 5 4 3 + 0.002491705335446965 7 5 4 4 + -0.004768247681334594 7 5 5 1 + -1.435483676370808e-16 7 5 5 2 + 0.04402330914585358 7 5 5 3 + -9.367506770274758e-17 7 5 5 4 + 0.01394473831189971 7 5 5 5 + -6.743737512859838e-17 7 5 6 1 + -0.01118937466980781 7 5 6 2 + -4.510281037539698e-17 7 5 6 3 + 0.05722053165029727 7 5 6 4 + 1.361757928641794e-16 7 5 6 5 + 0.01167009520737636 7 5 6 6 + 0.00590359099798902 7 5 7 1 + 1.873501354054952e-16 7 5 7 2 + -0.01602200731037146 7 5 7 3 + -8.922983879555701e-17 7 5 7 4 + 0.05972222948986159 7 5 7 5 + 1.387778780781446e-17 7 5 7 6 + 0.002699641783130405 7 5 7 7 + 1.283695372222837e-16 7 5 8 1 + -0.01676484090914303 7 5 8 2 + 1.814954436740734e-16 7 5 8 3 + -0.01809396120174063 7 5 8 4 + 0.04530428905870566 7 5 8 6 + 3.226585665316861e-16 7 5 8 7 + 0.006411609982868174 7 5 8 8 + -0.02086770925260733 7 5 9 1 + -2.268150944839675e-16 7 5 9 2 + -0.01856374290613438 7 5 9 3 + 5.551115123125783e-17 7 5 9 4 + -0.01156980857483261 7 5 9 5 + 9.80118763926896e-17 7 5 9 6 + -0.04737463871790822 7 5 9 7 + -3.642919299551295e-17 7 5 9 8 + 0.004499591960193033 7 5 9 9 + -3.573530360512223e-16 7 5 10 1 + 0.02212256926780791 7 5 10 2 + 1.07552855510562e-16 7 5 10 3 + -0.006045031689924919 7 5 10 4 + 1.027823659516258e-16 7 5 10 5 + 0.004934222318665136 7 5 10 6 + 1.357421119951852e-16 7 5 10 7 + 0.052393410268166 7 5 10 8 + -8.326672684688674e-17 7 5 10 9 + 0.05831970222411222 7 5 10 10 + 1.815388117609729e-15 7 6 1 1 + -0.08175139483705945 7 6 2 1 + -1.262878690511116e-15 7 6 2 2 + 1.665334536937735e-16 7 6 3 1 + -0.07183481210683981 7 6 3 2 + -1.561251128379126e-16 7 6 3 3 + 0.01230295773553847 7 6 4 1 + 1.561251128379126e-16 7 6 4 2 + -0.0703683735527092 7 6 4 3 + -4.77048955893622e-16 7 6 4 4 + -1.647987302177967e-17 7 6 5 1 + -0.01588026523915656 7 6 5 2 + -1.283695372222837e-16 7 6 5 3 + 0.08765874641651983 7 6 5 4 + 2.983724378680108e-16 7 6 5 5 + -0.002675822722973624 7 6 6 1 + -9.627715291671279e-17 7 6 6 2 + -0.002282321723258192 7 6 6 3 + 9.020562075079397e-17 7 6 6 4 + -0.05085324225167476 7 6 6 5 + -9.367506770274758e-17 7 6 6 6 + 2.42861286636753e-17 7 6 7 1 + -0.007820248688825261 7 6 7 2 + 6.938893903907228e-17 7 6 7 3 + 0.0009209473773786839 7 6 7 4 + 6.938893903907228e-18 7 6 7 5 + 0.09150207536966062 7 6 7 6 + -6.765421556309548e-17 7 6 7 7 + -0.01264339126412675 7 6 8 1 + -9.020562075079397e-17 7 6 8 2 + -0.001133067719190266 7 6 8 3 + 1.07552855510562e-16 7 6 8 4 + -0.001081156518065045 7 6 8 5 + 1.118896642005041e-16 7 6 8 6 + -0.07348432585038289 7 6 8 7 + 5.689893001203927e-16 7 6 8 8 + 9.020562075079397e-17 7 6 9 1 + -0.0024123698969391 7 6 9 2 + -3.469446951953614e-17 7 6 9 3 + -0.009039871055421417 7 6 9 4 + -7.632783294297951e-17 7 6 9 5 + -0.0167925232688888 7 6 9 6 + -1.231653667943533e-16 7 6 9 7 + -0.07619761611220564 7 6 9 8 + -7.979727989493313e-16 7 6 9 9 + -0.01239389705987072 7 6 10 1 + -1.97758476261356e-16 7 6 10 2 + 0.01368325505936344 7 6 10 3 + 1.908195823574488e-17 7 6 10 4 + 0.002895790591532216 7 6 10 5 + 1.140580685454751e-16 7 6 10 6 + -0.01322425283813206 7 6 10 7 + 3.642919299551295e-17 7 6 10 8 + 0.08876336860888456 7 6 10 9 + 5.048045315092509e-16 7 6 10 10 + 0.209452890323557 7 7 1 1 + 1.52655665885959e-16 7 7 2 1 + 0.2172257936862807 7 7 2 2 + 0.00727065453565418 7 7 3 1 + 1.665334536937735e-16 7 7 3 2 + 0.2108842306205813 7 7 3 3 + -1.249000902703301e-16 7 7 4 1 + 1.031586266646636e-05 7 7 4 2 + 9.020562075079397e-17 7 7 4 3 + 0.2258668608519628 7 7 4 4 + 0.008815762553662596 7 7 5 1 + 2.654126918244515e-16 7 7 5 2 + -0.01393635226942994 7 7 5 3 + -1.301042606982605e-16 7 7 5 4 + 0.2124980804483877 7 7 5 5 + -1.066854937725736e-16 7 7 6 1 + -0.007743382345866587 7 7 6 2 + 1.474514954580286e-16 7 7 6 3 + 0.002232578219411535 7 7 6 4 + 0.2148988401075751 7 7 6 6 + 0.01396779422257007 7 7 7 1 + 2.220446049250313e-16 7 7 7 2 + -0.004158150861093474 7 7 7 3 + -1.52655665885959e-16 7 7 7 4 + 0.002699641783130423 7 7 7 5 + -1.040834085586084e-16 7 7 7 6 + 0.2332274261003439 7 7 7 7 + -2.107689023311821e-16 7 7 8 1 + 0.001188453648116679 7 7 8 2 + 5.551115123125783e-17 7 7 8 3 + -0.004454973585915838 7 7 8 4 + 1.43982048506075e-16 7 7 8 5 + -0.01558819543015441 7 7 8 6 + 3.469446951953614e-18 7 7 8 7 + 0.2196060736798824 7 7 8 8 + -0.01433009955421499 7 7 9 1 + -2.636779683484747e-16 7 7 9 2 + 0.0009908919092924892 7 7 9 3 + 1.214306433183765e-16 7 7 9 4 + -0.008894555992806112 7 7 9 5 + 1.162264728904461e-16 7 7 9 6 + -4.674553208284388e-06 7 7 9 7 + 4.510281037539698e-17 7 7 9 8 + 0.2292651761004132 7 7 9 9 + -2.567390744445674e-16 7 7 10 1 + 0.0147384852805015 7 7 10 2 + 1.942890293094024e-16 7 7 10 3 + -0.01511177524028656 7 7 10 4 + 8.847089727481716e-17 7 7 10 5 + -0.009448234145053561 7 7 10 6 + 2.324529457808922e-16 7 7 10 7 + -0.007753690170762832 7 7 10 8 + -2.931682674400804e-16 7 7 10 9 + 0.2230143923471968 7 7 10 10 + -5.637851296924623e-17 8 1 1 1 + -0.003237152520878288 8 1 2 1 + -1.674008154317619e-16 8 1 2 2 + -0.001375147179501226 8 1 3 2 + 2.045889499480147e-16 8 1 3 3 + -0.0002030042571824733 8 1 4 1 + 2.92300905702092e-16 8 1 4 2 + -0.01775008725096059 8 1 4 3 + -1.691355389077387e-16 8 1 4 4 + -4.198030811863873e-16 8 1 5 1 + 0.01742643444269534 8 1 5 2 + 6.852157730108388e-17 8 1 5 3 + -0.01460191643583464 8 1 5 4 + -2.727852665973529e-16 8 1 5 5 + 0.02196696636989239 8 1 6 1 + 3.400058012914542e-16 8 1 6 2 + -0.02344303299701731 8 1 6 3 + 1.457167719820518e-16 8 1 6 4 + -0.005886866608723316 8 1 6 5 + -2.298508605669269e-16 8 1 6 6 + -2.449212707644755e-16 8 1 7 1 + 0.01408879725166876 8 1 7 2 + -2.688821387764051e-16 8 1 7 3 + 0.007842639541531558 8 1 7 4 + 1.249000902703301e-16 8 1 7 5 + -0.01264339126412677 8 1 7 6 + -2.099015405931937e-16 8 1 7 7 + 0.03650970687265523 8 1 8 1 + -7.41594285980085e-17 8 1 8 2 + -0.001339598731862119 8 1 8 3 + -2.272487753529617e-16 8 1 8 4 + -0.02200761447195976 8 1 8 5 + 3.469446951953614e-18 8 1 8 6 + -0.01693396982516625 8 1 8 7 + 1.565587937069068e-16 8 1 8 8 + -3.473783760643556e-16 8 1 9 1 + 0.01957642916185121 8 1 9 2 + -2.747368305078268e-16 8 1 9 3 + 0.01306682169960563 8 1 9 4 + 8.673617379884035e-17 8 1 9 5 + 0.01612034512397093 8 1 9 6 + 2.151057110211241e-16 8 1 9 7 + -0.001646582187725695 8 1 9 8 + -9.71445146547012e-17 8 1 9 9 + 0.01749870711749667 8 1 10 1 + 4.887583393564654e-16 8 1 10 2 + -0.03545809397624382 8 1 10 3 + 1.929879867024198e-16 8 1 10 4 + -0.02108534312819937 8 1 10 5 + 2.411265631607762e-16 8 1 10 6 + 6.658699648183844e-05 8 1 10 7 + -1.040834085586084e-17 8 1 10 8 + 0.003518921327255412 8 1 10 9 + -6.591949208711867e-17 8 1 10 10 + -0.003725488059911908 8 2 1 1 + -9.584347204771859e-17 8 2 2 1 + -0.003657702562831163 8 2 2 2 + -0.0001507768381662516 8 2 3 1 + 1.717376241217039e-16 8 2 3 2 + -0.02330175225600689 8 2 3 3 + 2.983724378680108e-16 8 2 4 1 + -0.02051016005616236 8 2 4 2 + -2.83627288322208e-16 8 2 4 3 + 0.001649232800536422 8 2 4 4 + 0.02146043572822283 8 2 5 1 + 3.361026734705064e-16 8 2 5 2 + -0.002659666930720919 8 2 5 3 + -1.35308431126191e-16 8 2 5 4 + 0.009603920439954868 8 2 5 5 + 3.790370795009324e-16 8 2 6 1 + -0.005643821940677436 8 2 6 2 + -2.445960101127298e-16 8 2 6 3 + -0.01841432835901575 8 2 6 4 + -2.511012231476428e-16 8 2 6 5 + 0.007181162231022463 8 2 6 6 + 0.02067570380593351 8 2 7 1 + 1.726049858596923e-16 8 2 7 2 + 0.02102519112191943 8 2 7 3 + -5.030698080332741e-17 8 2 7 4 + -0.01676484090914303 8 2 7 5 + -9.367506770274758e-17 8 2 7 6 + 0.001188453648116686 8 2 7 7 + -7.892991815694472e-17 8 2 8 1 + 0.03718839525063882 8 2 8 2 + -3.001071613439876e-16 8 2 8 3 + 0.01955776220951611 8 2 8 4 + -1.292368989602721e-16 8 2 8 5 + -0.003034981398933304 8 2 8 6 + -2.099015405931937e-16 8 2 8 7 + -0.02316105897932836 8 2 8 8 + 0.01469413529194649 8 2 9 1 + 1.565587937069068e-16 8 2 9 2 + 0.03622660300484214 8 2 9 3 + 1.179611963664229e-16 8 2 9 4 + -0.005905143584528746 8 2 9 5 + 2.324529457808922e-16 8 2 9 6 + -0.01999252889387661 8 2 9 7 + 5.551115123125783e-17 8 2 9 8 + -0.004230273951185023 8 2 9 9 + 4.397524011601206e-16 8 2 10 1 + -0.01405042046723947 8 2 10 2 + -2.745199900733297e-16 8 2 10 3 + -0.02110469282263363 8 2 10 4 + -3.816391647148976e-16 8 2 10 5 + -0.02114218888314762 8 2 10 6 + -1.734723475976807e-16 8 2 10 7 + 0.0003777956571122147 8 2 10 8 + 8.673617379884035e-17 8 2 10 9 + -0.003989732940491215 8 2 10 10 + 2.081668171172169e-17 8 3 1 1 + -0.0008086054842363135 8 3 2 1 + 2.463307335887066e-16 8 3 2 2 + 3.623403660446556e-16 8 3 3 1 + -0.02448459200782568 8 3 3 2 + -2.289834988289385e-16 8 3 3 3 + -0.02182779361659651 8 3 4 1 + -3.365363543395006e-16 8 3 4 2 + 0.001816949696284015 8 3 4 3 + 5.724587470723463e-17 8 3 4 4 + 1.387778780781446e-16 8 3 5 1 + -0.001834631918697845 8 3 5 2 + -3.382710778154774e-17 8 3 5 3 + -0.001111553757688033 8 3 5 4 + 2.081668171172169e-17 8 3 5 5 + -0.03431139975583337 8 3 6 1 + -3.118165448068311e-16 8 3 6 2 + -0.002507450105334742 8 3 6 3 + -3.209238430557093e-17 8 3 6 4 + 0.02872226504327339 8 3 6 5 + -1.040834085586084e-17 8 3 6 6 + -3.851086116668512e-16 8 3 7 1 + 0.03281090781068997 8 3 7 2 + 4.163336342344337e-17 8 3 7 3 + 0.03092201022536815 8 3 7 4 + 1.838806884535416e-16 8 3 7 5 + -0.001133067719190268 8 3 7 6 + 5.898059818321144e-17 8 3 7 7 + -0.001339598731862129 8 3 8 1 + -2.992397996059992e-16 8 3 8 2 + 0.06115363999862537 8 3 8 3 + -1.266348137463069e-16 8 3 8 4 + -0.002468783572308412 8 3 8 5 + 5.898059818321144e-17 8 3 8 6 + 0.002108249509655031 8 3 8 7 + -2.135878279796444e-16 8 3 9 1 + 0.0275269352098812 8 3 9 2 + 1.196959198423997e-16 8 3 9 3 + 0.03359726680615688 8 3 9 4 + 6.852157730108388e-17 8 3 9 5 + -0.001956581542303535 8 3 9 6 + -1.561251128379126e-16 8 3 9 7 + -0.02505207938851046 8 3 9 8 + 6.938893903907228e-18 8 3 9 9 + -0.02905360822881883 8 3 10 1 + -2.619432448724979e-16 8 3 10 2 + 0.0007504025605588925 8 3 10 3 + 0.0351613045264669 8 3 10 5 + -1.734723475976807e-16 8 3 10 6 + 0.02226772591609263 8 3 10 7 + -1.552577510999242e-16 8 3 10 8 + 0.001324050228799243 8 3 10 9 + -5.898059818321144e-17 8 3 10 10 + -0.009304304266424777 8 4 1 1 + 4.037568890336019e-16 8 4 2 1 + -0.03554588774873601 8 4 2 2 + -0.02557816581121297 8 4 3 1 + -3.642919299551295e-16 8 4 3 2 + -0.001980005299219505 8 4 3 3 + -1.457167719820518e-16 8 4 4 1 + 0.008725845778714093 8 4 4 2 + 5.898059818321144e-17 8 4 4 3 + -0.004793715991012374 8 4 4 4 + -0.03242112662798076 8 4 5 1 + -2.949029909160572e-16 8 4 5 2 + -0.001728088242502713 8 4 5 3 + -3.642919299551295e-17 8 4 5 4 + 0.001559617183919614 8 4 5 5 + 3.209238430557093e-16 8 4 6 1 + -0.03468546789697341 8 4 6 2 + -8.933825901280557e-17 8 4 6 3 + -0.01648183636832135 8 4 6 4 + 3.556183125752455e-17 8 4 6 5 + 0.003724005147657488 8 4 6 6 + 0.008871461342652705 8 4 7 1 + -1.09721259855533e-16 8 4 7 2 + 0.04859489057647874 8 4 7 3 + 1.301042606982605e-16 8 4 7 4 + -0.01809396120174064 8 4 7 5 + 1.023486850826316e-16 8 4 7 6 + -0.004454973585915852 8 4 7 7 + -2.246466901389965e-16 8 4 8 1 + 0.01955776220951611 8 4 8 2 + -1.231653667943533e-16 8 4 8 3 + 0.05066312292414943 8 4 8 4 + 2.289834988289385e-16 8 4 8 5 + -0.001565159009725757 8 4 8 6 + 1.387778780781446e-17 8 4 8 7 + -0.001810735895513307 8 4 8 8 + 0.01233691732317784 8 4 9 1 + 1.370431546021678e-16 8 4 9 2 + 0.02129004788468988 8 4 9 3 + 1.296705798292663e-16 8 4 9 4 + -0.03583133941321028 8 4 9 5 + -5.551115123125783e-17 8 4 9 6 + 0.009148141866703088 8 4 9 7 + -3.469446951953614e-17 8 4 9 8 + -0.0376961419041591 8 4 9 9 + 1.288032180912779e-16 8 4 10 1 + -0.01335620346590846 8 4 10 2 + -1.561251128379126e-17 8 4 10 3 + -0.009609111489395529 8 4 10 4 + -8.500145032286355e-17 8 4 10 5 + 0.03388181939360652 8 4 10 6 + 1.309716224362489e-16 8 4 10 7 + 0.02686825190298381 8 4 10 8 + -1.734723475976807e-17 8 4 10 9 + -0.01068330029925241 8 4 10 10 + -9.575673587391975e-16 8 5 1 1 + 0.04387706361307386 8 5 2 1 + 7.494005416219807e-16 8 5 2 2 + 1.517883041479706e-16 8 5 3 1 + 0.002695920562279993 8 5 3 2 + -3.295974604355933e-17 8 5 3 3 + -0.03982447292170427 8 5 4 1 + -4.076600168545497e-16 8 5 4 2 + 0.00188345752444609 8 5 4 3 + 4.510281037539698e-17 8 5 4 4 + -4.9439619065339e-16 8 5 5 1 + 0.03636187472020763 8 5 5 2 + 4.85722573273506e-17 8 5 5 3 + -0.002480834081723753 8 5 5 4 + 2.688821387764051e-17 8 5 5 5 + -0.008528952599485832 8 5 6 1 + -4.198030811863873e-16 8 5 6 2 + 0.05391720515921221 8 5 6 3 + 8.196568423990414e-17 8 5 6 4 + 0.01442647761648332 8 5 6 5 + 8.847089727481716e-17 8 5 6 6 + 1.700029006457271e-16 8 5 7 1 + -0.01853071439110358 8 5 7 2 + 2.758210326803123e-16 8 5 7 3 + -0.04011613976380646 8 5 7 4 + 2.602085213965211e-18 8 5 7 5 + -0.001081156518065031 8 5 7 6 + 1.630640067418199e-16 8 5 7 7 + -0.02200761447195977 8 5 8 1 + -1.35308431126191e-16 8 5 8 2 + -0.002468783572308409 8 5 8 3 + 2.333203075188806e-16 8 5 8 4 + 0.05661734829650964 8 5 8 5 + -1.144917494144693e-16 8 5 8 6 + 0.002352423446863199 8 5 8 7 + 2.255140518769849e-17 8 5 8 8 + 6.418476861114186e-17 8 5 9 1 + -0.005586728475665824 8 5 9 2 + 3.859759734048396e-17 8 5 9 3 + -0.0203894317667712 8 5 9 4 + -1.422473250300982e-16 8 5 9 5 + 0.03789788319306149 8 5 9 6 + -6.418476861114186e-17 8 5 9 7 + 0.002688144726357439 8 5 9 8 + 1.500535806719938e-16 8 5 9 9 + -0.01698006970579465 8 5 10 1 + -2.775557561562891e-16 8 5 10 2 + 0.02336186496405677 8 5 10 3 + -4.510281037539698e-17 8 5 10 4 + 0.008745122158540222 8 5 10 5 + 1.639313684798083e-16 8 5 10 6 + 0.04261256089196933 8 5 10 7 + 5.204170427930421e-17 8 5 10 8 + -0.04748276737207641 8 5 10 9 + -3.226585665316861e-16 8 5 10 10 + 0.06286754223248479 8 6 1 1 + 8.491471414906471e-16 8 6 2 1 + 0.001349265666253454 8 6 2 2 + -0.06063200985747147 8 6 3 1 + -5.26488574958961e-16 8 6 3 2 + 0.005068456387391096 8 6 3 3 + 4.458239333260394e-16 8 6 4 1 + -0.05457948876584447 8 6 4 2 + -1.387778780781446e-16 8 6 4 3 + -0.01459911446099379 8 6 4 4 + -0.01012170248736563 8 6 5 1 + -4.649058915617843e-16 8 6 5 2 + 0.07067077076503564 8 6 5 3 + 0.02913514257382662 8 6 5 5 + -1.543903893619358e-16 8 6 6 1 + 0.004719252812465533 8 6 6 2 + -9.367506770274758e-17 8 6 6 3 + 0.04489555522015169 8 6 6 4 + 9.71445146547012e-17 8 6 6 5 + 0.02990850197896492 8 6 6 6 + -0.01341510678513066 8 6 7 1 + -1.179611963664229e-16 8 6 7 2 + -0.00155283721093851 8 6 7 3 + 6.505213034913027e-17 8 6 7 4 + 0.04530428905870566 8 6 7 5 + 1.214306433183765e-16 8 6 7 6 + -0.0155881954301544 8 6 7 7 + 6.938893903907228e-18 8 6 8 1 + -0.003034981398933313 8 6 8 2 + 4.9439619065339e-17 8 6 8 3 + -0.001565159009725755 8 6 8 4 + -1.318389841742373e-16 8 6 8 5 + 0.07456922293317492 8 6 8 6 + 4.059252933785729e-16 8 6 8 7 + 0.006007590002378774 8 6 8 8 + 0.01429755595270366 8 6 9 1 + 1.778091562876227e-16 8 6 9 2 + -0.002915710030705562 8 6 9 3 + 1.387778780781446e-17 8 6 9 4 + 0.005859109157547835 8 6 9 5 + 8.326672684688674e-17 8 6 9 6 + -0.05804579206915783 8 6 9 7 + -1.387778780781446e-17 8 6 9 8 + 0.0007266730595736071 8 6 9 9 + 1.734723475976807e-16 8 6 10 1 + -0.01468781551658679 8 6 10 2 + -1.214306433183765e-16 8 6 10 3 + 0.01448548792883655 8 6 10 4 + 3.729655473350135e-17 8 6 10 5 + 0.01050562020043416 8 6 10 6 + 4.163336342344337e-17 8 6 10 7 + 0.0658955954417895 8 6 10 8 + 5.204170427930421e-18 8 6 10 9 + 0.06766710886153229 8 6 10 10 + -1.020884765612351e-15 8 7 1 1 + 0.06451706792498228 8 7 2 1 + 8.205242041370298e-16 8 7 2 2 + -7.892991815694472e-16 8 7 3 1 + 0.073230964293918 8 7 3 2 + 1.942890293094024e-16 8 7 3 3 + 0.007637363522803749 8 7 4 1 + -2.827599265842196e-16 8 7 4 2 + 0.08854698452744211 8 7 4 3 + 3.989863994746656e-16 8 7 4 4 + 1.422473250300982e-16 8 7 5 1 + -0.01962514647668058 8 7 5 2 + 4.822531263215524e-16 8 7 5 3 + -0.07203566915402798 8 7 5 4 + -8.326672684688674e-17 8 7 5 5 + -0.01551932317974922 8 7 6 1 + -1.908195823574488e-16 8 7 6 2 + 0.001770518600976708 8 7 6 3 + 2.081668171172169e-16 8 7 6 4 + 0.0506764433573841 8 7 6 5 + 2.671474153004283e-16 8 7 6 6 + -1.153591111524577e-16 8 7 7 1 + 0.0003849751513863228 8 7 7 2 + 4.85722573273506e-17 8 7 7 3 + 0.008680904837215996 8 7 7 4 + 3.33066907387547e-16 8 7 7 5 + -0.07348432585038289 8 7 7 6 + 1.561251128379126e-17 8 7 7 7 + -0.01693396982516627 8 7 8 1 + -2.151057110211241e-16 8 7 8 2 + 0.002108249509655021 8 7 8 3 + 1.387778780781446e-17 8 7 8 4 + 0.002352423446863205 8 7 8 5 + 4.111294638065033e-16 8 7 8 6 + 0.09330151139634568 8 7 8 7 + -5.204170427930421e-16 8 7 8 8 + 1.52655665885959e-16 8 7 9 1 + -0.01733849305156834 8 7 9 2 + -1.179611963664229e-16 8 7 9 3 + 0.0001368324459789984 8 7 9 4 + -9.540979117872439e-17 8 7 9 5 + -0.02143342708144142 8 7 9 6 + -1.144917494144693e-16 8 7 9 7 + 0.0782087707280021 8 7 9 8 + 5.48172618408671e-16 8 7 9 9 + 0.0004677027860712048 8 7 10 1 + -1.144917494144693e-16 8 7 10 2 + 0.01774182389426472 8 7 10 3 + 8.153200337090993e-17 8 7 10 4 + 0.01690105452800604 8 7 10 5 + 1.006139616066548e-16 8 7 10 6 + -0.008224311279471482 8 7 10 7 + 5.342948306008566e-16 8 7 10 8 + -0.0709023846557085 8 7 10 9 + 3.859759734048396e-17 8 7 10 10 + 0.217064857271385 8 8 1 1 + -2.203098814490545e-16 8 8 2 1 + 0.2106489655907658 8 8 2 2 + -0.006820704847870002 8 8 3 1 + -6.800116025829084e-16 8 8 3 2 + 0.2375603022623378 8 8 3 3 + -2.740863092043355e-16 8 8 4 1 + 0.01964350762371899 8 8 4 2 + -3.95516952522712e-16 8 8 4 3 + 0.2141248734032968 8 8 4 4 + -0.02745749089883057 8 8 5 1 + -1.561251128379126e-16 8 8 5 2 + 0.00524673574884164 8 8 5 3 + 4.891920202254596e-16 8 8 5 4 + 0.2174750519357027 8 8 5 5 + -7.806255641895632e-17 8 8 6 1 + -0.0004540415859492965 8 8 6 2 + 9.367506770274758e-17 8 8 6 3 + 0.005587899366805789 8 8 6 4 + -3.608224830031759e-16 8 8 6 5 + 0.2196101373651133 8 8 6 6 + -0.01970810224458738 8 8 7 1 + -1.595945597898663e-16 8 8 7 2 + -0.001080599262243638 8 8 7 3 + -4.163336342344337e-17 8 8 7 4 + 0.006411609982868183 8 8 7 5 + 5.568462357885551e-16 8 8 7 6 + 0.2196060736798825 8 8 7 7 + 1.604619215278547e-16 8 8 8 1 + -0.02316105897932835 8 8 8 2 + -0.001810735895513293 8 8 8 4 + -3.469446951953614e-18 8 8 8 5 + 0.006007590002378802 8 8 8 6 + -5.377642775528102e-16 8 8 8 7 + 0.2492237799934879 8 8 8 8 + -0.001275766749062134 8 8 9 1 + 5.551115123125783e-17 8 8 9 2 + -0.02402209541863456 8 8 9 3 + 6.765421556309548e-17 8 8 9 4 + 8.356722924128188e-05 8 8 9 5 + 7.112366251504909e-17 8 8 9 6 + 0.02142586086882196 8 8 9 7 + -5.689893001203927e-16 8 8 9 8 + 0.2235333817632019 8 8 9 9 + -2.775557561562891e-17 8 8 10 1 + 0.001561315660752054 8 8 10 2 + -1.222980050563649e-16 8 8 10 3 + 0.02090821371873472 8 8 10 4 + 4.336808689942018e-17 8 8 10 5 + 0.02951236252458016 8 8 10 6 + 3.642919299551295e-16 8 8 10 7 + 0.006855804692643241 8 8 10 8 + 2.992397996059992e-16 8 8 10 9 + 0.2320114362733717 8 8 10 10 + -0.002300517755399155 9 1 1 1 + -7.806255641895632e-17 9 1 2 1 + -0.000790198279660405 9 1 2 2 + 0.0009396981338212248 9 1 3 1 + -3.295974604355933e-17 9 1 3 2 + -0.001071442090721198 9 1 3 3 + 3.729655473350135e-17 9 1 4 1 + -0.0003100540317197258 9 1 4 2 + 1.574261554448952e-16 9 1 4 3 + -0.01506743271188132 9 1 4 4 + -0.001206446053474841 9 1 5 1 + -2.758210326803123e-16 9 1 5 2 + 0.01555624284131015 9 1 5 3 + 1.006139616066548e-16 9 1 5 4 + 0.01256936093135933 9 1 5 5 + -3.827233668873831e-16 9 1 6 1 + 0.01942558978412024 9 1 6 2 + 1.535230276239474e-16 9 1 6 3 + -0.02198162866660922 9 1 6 4 + -2.263814136149733e-16 9 1 6 5 + 0.01087094337845077 9 1 6 6 + -0.01910041309396768 9 1 7 1 + -2.198762005800603e-16 9 1 7 2 + 0.01311296861676802 9 1 7 3 + -1.986258379993444e-16 9 1 7 4 + -0.02086770925260733 9 1 7 5 + 8.500145032286355e-17 9 1 7 6 + -0.01433009955421498 9 1 7 7 + -3.48245737802344e-16 9 1 8 1 + 0.01469413529194648 9 1 8 2 + -2.161899131936096e-16 9 1 8 3 + 0.01233691732317783 9 1 8 4 + 5.984795992119984e-17 9 1 8 5 + 0.01429755595270365 9 1 8 6 + 1.474514954580286e-16 9 1 8 7 + -0.001275766749062123 9 1 8 8 + 0.03409183456302849 9 1 9 1 + 1.626303258728257e-17 9 1 9 2 + 0.01420915824406437 9 1 9 3 + 1.387778780781446e-17 9 1 9 4 + 0.01848778213583382 9 1 9 5 + -7.979727989493313e-17 9 1 9 6 + -0.0002028643820550509 9 1 9 7 + -3.816391647148976e-17 9 1 9 8 + -0.000836635701699657 9 1 9 9 + 6.530691785966436e-16 9 1 10 1 + -0.03368391358371953 9 1 10 2 + 1.409462824231156e-17 9 1 10 3 + 0.0183000387886107 9 1 10 4 + 2.324529457808922e-16 9 1 10 5 + 0.0009632758962515318 9 1 10 6 + 6.071532165918825e-17 9 1 10 7 + -0.001107694834923398 9 1 10 8 + -3.469446951953614e-17 9 1 10 9 + -0.002458579147680899 9 1 10 10 + -7.112366251504909e-17 9 2 1 1 + -0.0007352683863011427 9 2 2 1 + -9.71445146547012e-17 9 2 2 2 + -1.214306433183765e-17 9 2 3 1 + -0.000177153299059677 9 2 3 2 + 8.500145032286355e-17 9 2 3 3 + -0.0007781872708408921 9 2 4 1 + 1.20346441145891e-16 9 2 4 2 + -0.01800292998046151 9 2 4 3 + -2.931682674400804e-16 9 2 4 4 + -2.83627288322208e-16 9 2 5 1 + 0.01741899333492434 9 2 5 2 + 2.263814136149733e-16 9 2 5 3 + -0.002184201454963483 9 2 5 4 + 8.153200337090993e-17 9 2 5 5 + 0.0217874632241169 9 2 6 1 + 4.9439619065339e-16 9 2 6 2 + -0.005243608525110747 9 2 6 3 + -3.263448539181368e-16 9 2 6 4 + 0.03041838451118374 9 2 6 5 + 1.144917494144693e-16 9 2 6 6 + -2.274656157874588e-16 9 2 7 1 + -0.003310295266844347 9 2 7 2 + 5.377642775528102e-17 9 2 7 3 + 0.03422637268565552 9 2 7 4 + -2.125036258071589e-16 9 2 7 5 + -0.002412369896939104 9 2 7 6 + -2.151057110211241e-16 9 2 7 7 + 0.0195764291618512 9 2 8 1 + 1.530893467549532e-16 9 2 8 2 + 0.02752693520988119 9 2 8 3 + 1.275021754842953e-16 9 2 8 4 + -0.005586728475665822 9 2 8 5 + 1.799775606325937e-16 9 2 8 6 + -0.01733849305156834 9 2 8 7 + 5.551115123125783e-17 9 2 8 8 + 1.539567084929416e-17 9 2 9 1 + 0.05030889123911586 9 2 9 2 + 3.972516759986888e-16 9 2 9 3 + -0.002728636484870589 9 2 9 4 + 3.139849491518021e-16 9 2 9 5 + 0.01688094456461043 9 2 9 6 + -1.127570259384925e-17 9 2 9 7 + -0.0002937298315556264 9 2 9 8 + 4.163336342344337e-17 9 2 9 9 + -0.0303648098419623 9 2 10 1 + -5.527262675331102e-16 9 2 10 2 + -0.02012751285373932 9 2 10 3 + 2.116362640691705e-16 9 2 10 4 + -0.02146613359859574 9 2 10 5 + 1.908195823574488e-17 9 2 10 6 + 0.0007906936123002663 9 2 10 7 + -5.204170427930421e-18 9 2 10 8 + 0.0009033312340075046 9 2 10 9 + 4.163336342344337e-17 9 2 10 10 + -0.004337834271397155 9 3 1 1 + -2.688821387764051e-17 9 3 2 1 + -0.00435789482904507 9 3 2 2 + -0.0001451454034599385 9 3 3 1 + 1.214306433183765e-16 9 3 3 2 + -0.02397996784780895 9 3 3 3 + 1.960237527853792e-16 9 3 4 1 + -0.02029422409791931 9 3 4 2 + -1.856154119295184e-16 9 3 4 3 + 0.0003821176300046504 9 3 4 4 + 0.0212648982868217 9 3 5 1 + 2.866630544051674e-16 9 3 5 2 + -0.002700519055965485 9 3 5 3 + -6.245004513516506e-17 9 3 5 4 + 0.007005404181481482 9 3 5 5 + 1.769417945496343e-16 9 3 6 1 + -0.005600428871311056 9 3 6 2 + -6.895525817007808e-17 9 3 6 3 + -0.01723808335470606 9 3 6 4 + 1.37476835471162e-16 9 3 6 5 + 0.008768199198264172 9 3 6 6 + 0.02053885601122861 9 3 7 1 + 1.535230276239474e-16 9 3 7 2 + 0.01988646168088383 9 3 7 3 + 2.133709875451473e-16 9 3 7 4 + -0.01856374290613438 9 3 7 5 + -4.163336342344337e-17 9 3 7 6 + 0.0009908919092924866 9 3 7 7 + -2.797241605012601e-16 9 3 8 1 + 0.03622660300484214 9 3 8 2 + 1.162264728904461e-16 9 3 8 3 + 0.02129004788468987 9 3 8 4 + 4.163336342344337e-17 9 3 8 5 + -0.002915710030705555 9 3 8 6 + -1.214306433183765e-16 9 3 8 7 + -0.02402209541863454 9 3 8 8 + 0.01420915824406437 9 3 9 1 + 3.994200803436598e-16 9 3 9 2 + 0.03763795472948935 9 3 9 3 + 1.196959198423997e-16 9 3 9 4 + -0.005931183675920839 9 3 9 5 + 1.990595188683386e-16 9 3 9 6 + -0.02025661921573861 9 3 9 7 + 1.040834085586084e-17 9 3 9 8 + -0.005128115969096811 9 3 9 9 + -1.214306433183765e-17 9 3 10 1 + -0.01507207189536401 9 3 10 2 + -7.936359902593892e-17 9 3 10 3 + -0.02114783008972831 9 3 10 4 + -1.838806884535416e-16 9 3 10 5 + -0.02130717685829735 9 3 10 6 + -7.28583859910259e-17 9 3 10 7 + 0.0004399579541541567 9 3 10 8 + 2.255140518769849e-17 9 3 10 9 + -0.004956317940852348 9 3 10 10 + 2.125036258071589e-16 9 4 1 1 + -0.006947913302373201 9 4 2 1 + 6.960577947356938e-17 9 4 2 2 + 2.276824562219559e-16 9 4 3 1 + -0.02856854221916519 9 4 3 2 + -2.0643209364124e-16 9 4 3 3 + -0.02020780157107845 9 4 4 1 + -3.608224830031759e-16 9 4 4 2 + -0.0003745781433476562 9 4 4 3 + 1.830133267155531e-16 9 4 4 4 + 7.28583859910259e-17 9 4 5 1 + -0.003692286409191559 9 4 5 2 + -5.551115123125783e-17 9 4 5 3 + -0.007743354232139081 9 4 5 4 + 1.344410693882025e-16 9 4 5 5 + -0.03502306474955832 9 4 6 1 + -5.186823193170653e-16 9 4 6 2 + -0.01918881634864439 9 4 6 3 + -6.418476861114186e-17 9 4 6 4 + -0.008525225848002468 9 4 6 5 + 6.591949208711867e-17 9 4 6 6 + -3.139849491518021e-16 9 4 7 1 + 0.04842553390460006 9 4 7 2 + 3.37403716077489e-16 9 4 7 3 + 0.005909917022807063 9 4 7 4 + 4.466912950640278e-17 9 4 7 5 + -0.009039871055421421 9 4 7 6 + 1.127570259384925e-16 9 4 7 7 + 0.01306682169960563 9 4 8 1 + 1.231653667943533e-16 9 4 8 2 + 0.03359726680615688 9 4 8 3 + 1.327063459122257e-16 9 4 8 4 + -0.02038943176677121 9 4 8 5 + 1.040834085586084e-17 9 4 8 6 + 0.0001368324459789846 9 4 8 7 + 4.85722573273506e-17 9 4 8 8 + 1.561251128379126e-17 9 4 9 1 + -0.002728636484870582 9 4 9 2 + 1.214306433183765e-16 9 4 9 3 + 0.05031865042853049 9 4 9 4 + -2.376571162088226e-16 9 4 9 5 + -0.004095161085491589 9 4 9 6 + -1.457167719820518e-16 9 4 9 7 + -0.0299288321258331 9 4 9 8 + -2.211772431870429e-16 9 4 9 9 + 0.01660592816533209 9 4 10 1 + 1.769417945496343e-16 9 4 10 2 + -0.01403625215462185 9 4 10 3 + -1.162264728904461e-16 9 4 10 4 + 0.03643531372893806 9 4 10 5 + -3.469446951953614e-18 9 4 10 6 + 0.02091714570464385 9 4 10 7 + -3.469446951953614e-18 9 4 10 8 + 0.008173746503258097 9 4 10 9 + -3.816391647148976e-17 9 4 10 10 + -0.003131806471713812 9 5 1 1 + -5.386316392907986e-16 9 5 2 1 + 0.03317981387687304 9 5 2 2 + 0.03509835633121935 9 5 3 1 + 4.610027637408365e-16 9 5 3 2 + 0.000369302382692489 9 5 3 3 + 8.673617379884035e-17 9 5 4 1 + 0.000469418273124285 9 5 4 2 + -5.377642775528102e-17 9 5 4 3 + -0.007658715991051735 9 5 4 4 + 0.03123347066272187 9 5 5 1 + 3.226585665316861e-16 9 5 5 2 + 0.004925247581948099 9 5 5 3 + 8.413408858487514e-17 9 5 5 4 + 0.003975344775906388 9 5 5 5 + -3.747002708109903e-16 9 5 6 1 + 0.05131994915233704 9 5 6 2 + 2.541369892306022e-16 9 5 6 3 + -0.01107668203327708 9 5 6 4 + 1.561251128379126e-17 9 5 6 5 + 0.004331545569280294 9 5 6 6 + -0.02525433543112075 9 5 7 1 + -2.090341788552053e-16 9 5 7 2 + -0.03557950912568631 9 5 7 3 + -6.591949208711867e-17 9 5 7 4 + -0.0115698085748326 9 5 7 5 + -7.28583859910259e-17 9 5 7 6 + -0.008894555992806101 9 5 7 7 + 8.326672684688674e-17 9 5 8 1 + -0.005905143584528753 9 5 8 2 + 5.637851296924623e-17 9 5 8 3 + -0.03583133941321028 9 5 8 4 + -1.366094737331736e-16 9 5 8 5 + 0.005859109157547822 9 5 8 6 + -9.71445146547012e-17 9 5 8 7 + 8.356722924127407e-05 9 5 8 8 + 0.01848778213583381 9 5 9 1 + 3.157196726277789e-16 9 5 9 2 + -0.005931183675920845 9 5 9 3 + -2.393918396847994e-16 9 5 9 4 + 0.05388736392653417 9 5 9 5 + 1.97758476261356e-16 9 5 9 6 + 0.0004606603272192334 9 5 9 7 + 7.546047120499111e-17 9 5 9 8 + 0.03578899616451012 9 5 9 9 + 2.225867060112741e-16 9 5 10 1 + -0.01889633116205238 9 5 10 2 + -1.543903893619358e-16 9 5 10 3 + 0.02697844236374194 9 5 10 4 + 1.561251128379126e-17 9 5 10 5 + -0.03295396463647574 9 5 10 6 + -6.245004513516506e-17 9 5 10 7 + -0.03778797284246133 9 5 10 8 + -9.020562075079397e-17 9 5 10 9 + -0.002990852796782787 9 5 10 10 + -7.562310153086393e-16 9 6 1 1 + 0.04561233492813795 9 6 2 1 + 1.085069534223493e-15 9 6 2 2 + 2.419939248987646e-16 9 6 3 1 + -0.00271544265798157 9 6 3 2 + -1.387778780781446e-17 9 6 3 3 + -0.04874472408258324 9 6 4 1 + -7.480994990149981e-16 9 6 4 2 + -0.02036099114723873 9 6 4 3 + 8.673617379884035e-18 9 6 4 4 + -4.518954654919582e-16 9 6 5 1 + 0.06227201305794967 9 6 5 2 + 3.434752482434078e-16 9 6 5 3 + -0.01586474270089227 9 6 5 4 + 1.613292832658431e-16 9 6 5 5 + 0.01251041904505703 9 6 6 1 + 1.110223024625157e-16 9 6 6 2 + 0.03716196346737852 9 6 6 3 + 1.916869440954372e-16 9 6 6 4 + 0.008393882258338299 9 6 6 5 + 2.324529457808922e-16 9 6 6 6 + 9.8879238130678e-17 9 6 7 1 + -0.003868322906543238 9 6 7 2 + -2.42861286636753e-17 9 6 7 3 + -0.03787228151918066 9 6 7 4 + 1.006139616066548e-16 9 6 7 5 + -0.01679252326888879 9 6 7 6 + 9.020562075079397e-17 9 6 7 7 + 0.01612034512397093 9 6 8 1 + 2.272487753529617e-16 9 6 8 2 + -0.001956581542303533 9 6 8 3 + -5.898059818321144e-17 9 6 8 4 + 0.03789788319306149 9 6 8 5 + 8.326672684688674e-17 9 6 8 6 + -0.02143342708144141 9 6 8 7 + 3.989863994746656e-17 9 6 8 8 + -8.153200337090993e-17 9 6 9 1 + 0.01688094456461042 9 6 9 2 + 1.968911145233676e-16 9 6 9 3 + -0.004095161085491588 9 6 9 4 + 1.908195823574488e-16 9 6 9 5 + 0.0661266219876053 9 6 9 6 + -4.4278816724308e-16 9 6 9 7 + -0.003246373217005848 9 6 9 8 + 4.787836793695988e-16 9 6 9 9 + 0.0008036276419734956 9 6 10 1 + 6.938893903907228e-18 9 6 10 2 + -0.01665689388636428 9 6 10 3 + -2.775557561562891e-17 9 6 10 4 + -0.01372143059450789 9 6 10 5 + -1.543903893619358e-16 9 6 10 6 + 0.05264119662395945 9 6 10 7 + 1.561251128379126e-17 9 6 10 8 + -0.04950218146920535 9 6 10 9 + -3.686287386450715e-17 9 6 10 10 + -0.06221218356732443 9 7 1 1 + -7.24247051220317e-16 9 7 2 1 + -0.01272095863229623 9 7 2 2 + 0.04874158332287197 9 7 3 1 + 4.371503159461554e-16 9 7 3 2 + 0.02015409394800539 9 7 3 3 + -4.241398898763293e-16 9 7 4 1 + 0.07973083023043565 9 7 4 2 + 5.134781488891349e-16 9 7 4 3 + 0.001046392457748012 9 7 4 4 + -0.0291188621263339 9 7 5 1 + -2.350550309948574e-16 9 7 5 2 + -0.05616051863107586 9 7 5 3 + -4.510281037539698e-17 9 7 5 4 + -0.02800019715667703 9 7 5 5 + 1.422473250300982e-16 9 7 6 1 + 9.86790221422641e-05 9 7 6 2 + -4.510281037539698e-17 9 7 6 3 + -0.04663521886612053 9 7 6 4 + 3.469446951953614e-17 9 7 6 5 + -0.02848394043011193 9 7 6 6 + -0.01998186611483035 9 7 7 1 + -3.261280134836397e-16 9 7 7 2 + 0.008917395664382832 9 7 7 3 + 2.185751579730777e-16 9 7 7 4 + -0.04737463871790823 9 7 7 5 + -1.561251128379126e-16 9 7 7 6 + -4.674553208313011e-06 9 7 7 7 + 2.237793284010081e-16 9 7 8 1 + -0.0199925288938766 9 7 8 2 + -1.630640067418199e-16 9 7 8 3 + 0.009148141866703086 9 7 8 4 + -6.245004513516506e-17 9 7 8 5 + -0.05804579206915783 9 7 8 6 + -1.006139616066548e-16 9 7 8 7 + 0.02142586086882195 9 7 8 8 + -0.0002028643820550509 9 7 9 1 + -4.336808689942018e-18 9 7 9 2 + -0.02025661921573861 9 7 9 3 + -1.387778780781446e-16 9 7 9 4 + 0.0004606603272192282 9 7 9 5 + -4.388850394221322e-16 9 7 9 6 + 0.08547118727387754 9 7 9 7 + 2.151057110211241e-16 9 7 9 8 + -0.01232785965194074 9 7 9 9 + 9.367506770274758e-17 9 7 10 1 + 0.0001671457611561763 9 7 10 2 + -6.938893903907228e-17 9 7 10 3 + 0.02110638023911591 9 7 10 4 + -3.295974604355933e-17 9 7 10 5 + 0.03149808861510318 9 7 10 6 + -1.405126015541214e-16 9 7 10 7 + -0.05404807817088854 9 7 10 8 + -1.778091562876227e-17 9 7 10 9 + -0.06757990187808353 9 7 10 10 + -1.407728100755179e-15 9 8 1 1 + 0.06807998679900459 9 8 2 1 + 8.205242041370298e-16 9 8 2 2 + -6.236330896136622e-16 9 8 3 1 + 0.09297444444689473 9 8 3 2 + 3.920475055707584e-16 9 8 3 3 + 0.02147489915670178 9 8 4 1 + 2.185751579730777e-16 9 8 4 2 + 0.07529686280954687 9 8 4 3 + 4.093947403305265e-16 9 8 4 4 + 9.280770596475918e-17 9 8 5 1 + -0.003391539236996008 9 8 5 2 + 1.838806884535416e-16 9 8 5 3 + -0.07462122305723018 9 8 5 4 + -2.359223927328458e-16 9 8 5 5 + 0.02684686230319666 9 8 6 1 + 3.642919299551295e-16 9 8 6 2 + 0.002261896005579488 9 8 6 3 + -5.898059818321144e-17 9 8 6 4 + 0.0531203549005059 9 8 6 5 + 1.734723475976807e-16 9 8 6 6 + 2.714842239903703e-16 9 8 7 1 + -0.02834219879038377 9 8 7 2 + -1.804112415015879e-16 9 8 7 3 + 0.008788797901919514 9 8 7 4 + -3.469446951953614e-17 9 8 7 5 + -0.07619761611220563 9 8 7 6 + 5.898059818321144e-17 9 8 7 7 + -0.001646582187725689 9 8 8 1 + 5.898059818321144e-17 9 8 8 2 + -0.02505207938851046 9 8 8 3 + -4.85722573273506e-17 9 8 8 4 + 0.00268814472635745 9 8 8 5 + -1.908195823574488e-17 9 8 8 6 + 0.07820877072800209 9 8 8 7 + -5.447031714567174e-16 9 8 8 8 + -3.122502256758253e-17 9 8 9 1 + -0.0002937298315556234 9 8 9 2 + 2.081668171172169e-17 9 8 9 3 + -0.02992883212583311 9 8 9 4 + 7.546047120499111e-17 9 8 9 5 + -0.003246373217005842 9 8 9 6 + 2.046973701652632e-16 9 8 9 7 + 0.1008064010337917 9 8 9 8 + 8.36136715420821e-16 9 8 9 9 + -0.0006103788836873752 9 8 10 1 + 1.387778780781446e-17 9 8 10 2 + 0.002050646350635526 9 8 10 3 + -1.561251128379126e-17 9 8 10 4 + -0.0290920026827045 9 8 10 5 + -4.510281037539698e-17 9 8 10 6 + -0.02392770954640095 9 8 10 7 + 1.734723475976807e-16 9 8 10 8 + -0.0754283616279095 9 8 10 9 + -1.647987302177967e-16 9 8 10 10 + 0.2218190728402289 9 9 1 1 + 5.48172618408671e-16 9 9 2 1 + 0.249025709541147 9 9 2 2 + 0.02584468338626093 9 9 3 1 + 1.127570259384925e-15 9 9 3 2 + 0.2137682392302787 9 9 3 3 + -3.469446951953614e-18 9 9 4 1 + -0.01150356726899533 9 9 4 2 + 5.30825383648903e-16 9 9 4 3 + 0.2230284778678226 9 9 4 4 + 0.03586360885951698 9 9 5 1 + 6.609296443471635e-16 9 9 5 2 + 0.000499213161373302 9 9 5 3 + -7.025630077706069e-16 9 9 5 4 + 0.2238388509799648 9 9 5 5 + -2.567390744445674e-16 9 9 6 1 + 0.03355634552373445 9 9 6 2 + 4.562322741819003e-16 9 9 6 3 + 0.003597753756978165 9 9 6 4 + 4.579669976578771e-16 9 9 6 5 + 0.2260090766341135 9 9 6 6 + -0.005180222435122473 9 9 7 1 + -8.326672684688674e-17 9 9 7 2 + -0.03615505691511872 9 9 7 3 + -2.220446049250313e-16 9 9 7 4 + 0.004499591960193044 9 9 7 5 + -7.945033519973776e-16 9 9 7 6 + 0.2292651761004132 9 9 7 7 + -1.0321604682062e-16 9 9 8 1 + -0.004230273951185023 9 9 8 2 + -1.387778780781446e-17 9 9 8 3 + -0.0376961419041591 9 9 8 4 + 1.405126015541214e-16 9 9 8 5 + 0.0007266730595736279 9 9 8 6 + 5.585809592645319e-16 9 9 8 7 + 0.2235333817632019 9 9 8 8 + -0.0008366357016996607 9 9 9 1 + 2.775557561562891e-17 9 9 9 2 + -0.005128115969096821 9 9 9 3 + -2.081668171172169e-16 9 9 9 4 + 0.03578899616451015 9 9 9 5 + 4.891920202254596e-16 9 9 9 6 + -0.01232785965194071 9 9 9 7 + 8.187894806610529e-16 9 9 9 8 + 0.2663816291313159 9 9 9 9 + -9.71445146547012e-17 9 9 10 1 + 0.001190922334193033 9 9 10 2 + 4.163336342344337e-17 9 9 10 3 + 0.006162162133960154 9 9 10 4 + -9.367506770274758e-17 9 9 10 5 + -0.03890004586554002 9 9 10 6 + 1.8474805019153e-16 9 9 10 7 + -0.02903237632103995 9 9 10 8 + -1.104151492459238e-15 9 9 10 9 + 0.238460710304213 9 9 10 10 + -4.683753385137379e-17 10 1 1 1 + -0.001064022506667295 10 1 2 1 + -2.949029909160572e-17 10 1 2 2 + 4.510281037539698e-17 10 1 3 1 + -0.0005206137085990725 10 1 3 2 + 1.734723475976807e-18 10 1 3 3 + -0.000178441356002285 10 1 4 1 + 2.51534904016637e-17 10 1 4 2 + 0.0005737236817156019 10 1 4 3 + -1.734723475976807e-16 10 1 4 4 + -2.634611279139776e-17 10 1 5 1 + 0.001016442655657904 10 1 5 2 + 2.159730727591125e-16 10 1 5 3 + -0.01321268483890981 10 1 5 4 + 1.07552855510562e-16 10 1 5 5 + 0.0005108920032471027 10 1 6 1 + 3.108949729602184e-16 10 1 6 2 + -0.0176141353429017 10 1 6 3 + -2.589074787895385e-16 10 1 6 4 + -0.03595679132331528 10 1 6 5 + 8.673617379884035e-17 10 1 6 6 + -3.63207727782644e-16 10 1 7 1 + 0.01730456306122882 10 1 7 2 + 1.820375447603162e-16 10 1 7 3 + -0.02689238583580544 10 1 7 4 + -3.712308238590367e-16 10 1 7 5 + -0.01239389705987072 10 1 7 6 + -2.810252031082427e-16 10 1 7 7 + 0.01749870711749665 10 1 8 1 + 4.392103000738778e-16 10 1 8 2 + -0.02905360822881881 10 1 8 3 + 1.363926332986765e-16 10 1 8 4 + -0.01698006970579464 10 1 8 5 + 1.647987302177967e-16 10 1 8 6 + 0.0004677027860712087 10 1 8 7 + -2.775557561562891e-17 10 1 8 8 + 6.481360587118346e-16 10 1 9 1 + -0.0303648098419623 10 1 9 2 + -1.24683249835833e-17 10 1 9 3 + 0.01660592816533209 10 1 9 4 + 2.151057110211241e-16 10 1 9 5 + 0.0008036276419734846 10 1 9 6 + 9.020562075079397e-17 10 1 9 7 + -0.0006103788836873737 10 1 9 8 + -1.006139616066548e-16 10 1 9 9 + 0.04850638108435124 10 1 10 1 + 4.824699667560495e-17 10 1 10 2 + -0.01673193722885407 10 1 10 3 + 3.1712913545201e-16 10 1 10 4 + -0.0003754677770103607 10 1 10 5 + 9.475926987523309e-17 10 1 10 6 + 8.847716104474026e-05 10 1 10 7 + -4.163336342344337e-17 10 1 10 8 + 0.001198825826418459 10 1 10 9 + -1.52655665885959e-16 10 1 10 10 + 0.002666469712595804 10 2 1 1 + 2.42861286636753e-17 10 2 2 1 + 0.001116111925952 10 2 2 2 + -0.001047551907658179 10 2 3 1 + 2.51534904016637e-17 10 2 3 2 + 0.00149343685026755 10 2 3 3 + 8.673617379884035e-18 10 2 4 1 + 0.000172195417406202 10 2 4 2 + -1.040834085586084e-16 10 2 4 3 + 0.0154591100695574 10 2 4 4 + 0.001168345294700516 10 2 5 1 + 1.942890293094024e-16 10 2 5 2 + -0.01513443205157315 10 2 5 3 + -2.185751579730777e-16 10 2 5 4 + -0.0109126655388493 10 2 5 5 + 3.400329063457663e-16 10 2 6 1 + -0.01923082204352315 10 2 6 2 + -3.660266534311063e-16 10 2 6 3 + 0.02123093229911221 10 2 6 4 + -3.41740524767431e-16 10 2 6 5 + -0.01200962451587098 10 2 6 6 + 0.0189371960982318 10 2 7 1 + 4.198030811863873e-16 10 2 7 2 + -0.01230877412110299 10 2 7 3 + -2.411265631607762e-16 10 2 7 4 + 0.0221225692678079 10 2 7 5 + -2.046973701652632e-16 10 2 7 6 + 0.01473848528050149 10 2 7 7 + 4.834457487112864e-16 10 2 8 1 + -0.01405042046723946 10 2 8 2 + -2.584737979205443e-16 10 2 8 3 + -0.01335620346590845 10 2 8 4 + -2.784231178942775e-16 10 2 8 5 + -0.01468781551658679 10 2 8 6 + -1.07552855510562e-16 10 2 8 7 + 0.001561315660752063 10 2 8 8 + -0.03368391358371954 10 2 9 1 + -5.625925073027283e-16 10 2 9 2 + -0.01507207189536401 10 2 9 3 + 1.767249541151372e-16 10 2 9 4 + -0.01889633116205239 10 2 9 5 + 1.214306433183765e-17 10 2 9 6 + 0.0001671457611561646 10 2 9 7 + 2.602085213965211e-17 10 2 9 8 + 0.00119092233419304 10 2 9 9 + 4.87890977618477e-17 10 2 10 1 + 0.0343671221569473 10 2 10 2 + -1.520051445824677e-16 10 2 10 3 + -0.01859663721609591 10 2 10 4 + -1.910364227919459e-16 10 2 10 5 + -0.0009571212468825744 10 2 10 6 + -1.023486850826316e-16 10 2 10 7 + 0.00124610020474203 10 2 10 8 + 9.71445146547012e-17 10 2 10 9 + 0.003050195887428389 10 2 10 10 + -4.423544863740858e-17 10 3 1 1 + 0.003625660103058216 10 3 2 1 + 1.214306433183765e-16 10 3 2 2 + 4.683753385137379e-17 10 3 3 1 + 0.001831786025133067 10 3 3 2 + -1.472346550235315e-16 10 3 3 3 + 9.903059187987102e-05 10 3 4 1 + -1.301042606982605e-16 10 3 4 2 + 0.01789641741276912 10 3 4 3 + 1.578598363138894e-16 10 3 4 4 + 3.044439700339296e-16 10 3 5 1 + -0.01679760461467064 10 3 5 2 + -1.804112415015879e-16 10 3 5 3 + 0.01270492887807739 10 3 5 4 + -8.673617379884035e-19 10 3 5 5 + -0.02150532678466903 10 3 6 1 + -3.946495907847236e-16 10 3 6 2 + 0.02226042571307382 10 3 6 3 + 1.092875789865388e-16 10 3 6 4 + 0.005617424417244363 10 3 6 5 + -1.821459649775647e-17 10 3 6 6 + 2.203098814490545e-16 10 3 7 1 + -0.01306461479891315 10 3 7 2 + 1.040834085586084e-17 10 3 7 3 + -0.008455470306156739 10 3 7 4 + 1.188285581044113e-16 10 3 7 5 + 0.01368325505936343 10 3 7 6 + 2.099015405931937e-16 10 3 7 7 + -0.03545809397624382 10 3 8 1 + -2.717010644248674e-16 10 3 8 2 + 0.0007504025605588856 10 3 8 3 + -1.994931997373328e-17 10 3 8 4 + 0.02336186496405675 10 3 8 5 + -1.231653667943533e-16 10 3 8 6 + 0.01774182389426471 10 3 8 7 + -1.209969624493823e-16 10 3 8 8 + 1.376936759056591e-17 10 3 9 1 + -0.02012751285373932 10 3 9 2 + -7.719519468096792e-17 10 3 9 3 + -0.01403625215462184 10 3 9 4 + -1.52655665885959e-16 10 3 9 5 + -0.01665689388636427 10 3 9 6 + -6.765421556309548e-17 10 3 9 7 + 0.002050646350635519 10 3 9 8 + 5.204170427930421e-17 10 3 9 9 + -0.01673193722885408 10 3 10 1 + -1.513546232789764e-16 10 3 10 2 + 0.0362445217772395 10 3 10 3 + -1.812786032395763e-16 10 3 10 4 + 0.02155598106337438 10 3 10 5 + -1.457167719820518e-16 10 3 10 6 + 7.246555865579075e-06 10 3 10 7 + -3.816391647148976e-17 10 3 10 8 + -0.004199223137393907 10 3 10 9 + -2.255140518769849e-17 10 3 10 10 + -0.001026290222846636 10 4 1 1 + -6.765421556309548e-17 10 4 2 1 + 0.005201094304403307 10 4 2 2 + 0.005797536219575185 10 4 3 1 + -6.591949208711867e-17 10 4 3 2 + 0.02058016719893951 10 4 3 3 + -2.029626466892864e-16 10 4 4 1 + 0.02072400836421797 10 4 4 2 + 1.465841337200402e-16 10 4 4 3 + -0.01402993203551832 10 4 4 4 + -0.01812473947335218 10 4 5 1 + -2.498001805406602e-16 10 4 5 2 + 0.01345429081656489 10 4 5 3 + 6.678685382510707e-17 10 4 5 4 + 0.002335956601570236 10 4 5 5 + -2.940356291780688e-16 10 4 6 1 + 0.0256819666392949 10 4 6 2 + 1.561251128379126e-16 10 4 6 3 + -0.005780452822981544 10 4 6 4 + 1.799775606325937e-17 10 4 6 5 + 0.002534150821016865 10 4 6 6 + -0.0372108687603268 10 4 7 1 + -3.50414142147315e-16 10 4 7 2 + -0.009656461027829282 10 4 7 3 + -2.081668171172169e-17 10 4 7 4 + -0.006045031689924908 10 4 7 5 + 1.734723475976807e-17 10 4 7 6 + -0.01511177524028657 10 4 7 7 + 2.04263689296269e-16 10 4 8 1 + -0.02110469282263362 10 4 8 2 + 8.673617379884035e-19 10 4 8 3 + -0.009609111489395538 10 4 8 4 + -4.683753385137379e-17 10 4 8 5 + 0.01448548792883654 10 4 8 6 + 7.112366251504909e-17 10 4 8 7 + 0.02090821371873471 10 4 8 8 + 0.01830003878861069 10 4 9 1 + 2.112025832001763e-16 10 4 9 2 + -0.02114783008972832 10 4 9 3 + -1.144917494144693e-16 10 4 9 4 + 0.02697844236374194 10 4 9 5 + -1.908195823574488e-17 10 4 9 6 + 0.02110638023911591 10 4 9 7 + -1.734723475976807e-17 10 4 9 8 + 0.006162162133960146 10 4 9 9 + 3.207612127298365e-16 10 4 10 1 + -0.01859663721609591 10 4 10 2 + -1.78459677591114e-16 10 4 10 3 + 0.03855564214442857 10 4 10 4 + 1.474514954580286e-16 10 4 10 5 + 0.01826035494422812 10 4 10 6 + 1.595945597898663e-16 10 4 10 7 + -0.006737630184185562 10 4 10 8 + -1.179611963664229e-16 10 4 10 9 + -0.00104360897349663 10 4 10 10 + -6.18672864674541e-17 10 5 1 1 + 0.002849998466040574 10 5 2 1 + 3.599551212651875e-16 10 5 2 2 + 4.527628272299467e-16 10 5 3 1 + -0.02729609989096019 10 5 3 2 + -2.393918396847994e-16 10 5 3 3 + -0.02687478909563736 10 5 4 1 + -3.677613769070831e-16 10 5 4 2 + 0.01541345086112878 10 5 4 3 + 8.803721640582296e-17 10 5 4 4 + 1.97758476261356e-16 10 5 5 1 + -0.01264555128562886 10 5 5 2 + -5.290906601729262e-17 10 5 5 3 + 0.002587202724779593 10 5 5 4 + 6.646159317336142e-17 10 5 5 5 + -0.05614727034508792 10 5 6 1 + -5.455705331947058e-16 10 5 6 2 + 0.008049564892887773 10 5 6 3 + 1.734723475976807e-18 10 5 6 4 + -0.001492733022454129 10 5 6 5 + -1.539567084929416e-17 10 5 6 6 + -5.212844045310305e-16 10 5 7 1 + 0.03571327324323943 10 5 7 2 + 1.682681771697503e-16 10 5 7 3 + -0.00756485875939371 10 5 7 4 + 1.049507702965968e-16 10 5 7 5 + 0.002895790591532225 10 5 7 6 + 6.418476861114186e-17 10 5 7 7 + -0.02108534312819937 10 5 8 1 + -3.764349942869671e-16 10 5 8 2 + 0.03516130452646687 10 5 8 3 + -8.326672684688674e-17 10 5 8 4 + 0.008745122158540203 10 5 8 5 + 3.642919299551295e-17 10 5 8 6 + 0.01690105452800602 10 5 8 7 + 1.734723475976807e-17 10 5 8 8 + 2.308266425221639e-16 10 5 9 1 + -0.02146613359859573 10 5 9 2 + -1.821459649775647e-16 10 5 9 3 + 0.03643531372893807 10 5 9 4 + 1.127570259384925e-17 10 5 9 5 + -0.01372143059450789 10 5 9 6 + -4.163336342344337e-17 10 5 9 7 + -0.0290920026827045 10 5 9 8 + -9.71445146547012e-17 10 5 9 9 + -0.000375467777010365 10 5 10 1 + -1.952648112646393e-16 10 5 10 2 + 0.02155598106337437 10 5 10 3 + 1.509209424099822e-16 10 5 10 4 + 0.05893348035575813 10 5 10 5 + -5.551115123125783e-17 10 5 10 6 + 0.02859960607864213 10 5 10 7 + -1.97758476261356e-16 10 5 10 8 + -0.002749119230467878 10 5 10 9 + -2.26706674266719e-16 10 5 10 10 + 0.0004598467237082396 10 6 1 1 + 6.211394246169455e-16 10 6 2 1 + -0.0361783158756831 10 6 2 2 + -0.03568313627515171 10 6 3 1 + -5.906733435701028e-16 10 6 3 2 + 0.02728254294967921 10 6 3 3 + -3.720981855970251e-16 10 6 4 1 + 0.02946210218263463 10 6 4 2 + 1.734723475976807e-16 10 6 4 3 + -0.008770424909909921 10 6 4 4 + -0.06502812222239138 10 6 5 1 + -6.036837696399289e-16 10 6 5 2 + 0.009586878090649679 10 6 5 3 + -2.38524477946811e-17 10 6 5 4 + -0.002912053823721106 10 6 5 5 + 3.087807787238717e-16 10 6 6 1 + -0.03185061906710247 10 6 6 2 + -7.155734338404329e-17 10 6 6 3 + 0.004746471754767521 10 6 6 4 + 4.618701254788249e-17 10 6 6 5 + -0.003046986987052856 10 6 6 6 + -0.01779037331709066 10 6 7 1 + -3.608224830031759e-16 10 6 7 2 + 0.03344738786215335 10 6 7 3 + 7.025630077706069e-17 10 6 7 4 + 0.004934222318665132 10 6 7 5 + 1.05384451165591e-16 10 6 7 6 + -0.009448234145053594 10 6 7 7 + 2.51534904016637e-16 10 6 8 1 + -0.02114218888314761 10 6 8 2 + -1.752070710736575e-16 10 6 8 3 + 0.03388181939360652 10 6 8 4 + 1.587271980518778e-16 10 6 8 5 + 0.01050562020043416 10 6 8 6 + 1.110223024625157e-16 10 6 8 7 + 0.02951236252458012 10 6 8 8 + 0.0009632758962515291 10 6 9 1 + 2.255140518769849e-17 10 6 9 2 + -0.02130717685829735 10 6 9 3 + -0.03295396463647574 10 6 9 5 + -1.387778780781446e-16 10 6 9 6 + 0.03149808861510317 10 6 9 7 + -4.163336342344337e-17 10 6 9 8 + -0.03890004586554001 10 6 9 9 + 9.985502008591496e-17 10 6 10 1 + -0.0009571212468825788 10 6 10 2 + -1.405126015541214e-16 10 6 10 3 + 0.01826035494422812 10 6 10 4 + -4.163336342344337e-17 10 6 10 5 + 0.06928324932948096 10 6 10 6 + 3.087807787238717e-16 10 6 10 7 + 0.03835410672097569 10 6 10 8 + -1.099381002900301e-16 10 6 10 9 + 8.365587899029903e-05 10 6 10 10 + -7.768308565858639e-16 10 7 1 1 + 0.04483128601773537 10 7 2 1 + 1.087671619437458e-15 10 7 2 2 + 3.881443777498106e-16 10 7 3 1 + -0.02117953301661502 10 7 3 2 + 6.765421556309548e-17 10 7 3 3 + -0.06420267028017267 10 7 4 1 + -6.730727086790012e-16 10 7 4 2 + -0.008846209327337694 10 7 4 3 + 1.231653667943533e-16 10 7 4 4 + -7.190428807923865e-16 10 7 5 1 + 0.05009172584571665 10 7 5 2 + 2.272487753529617e-16 10 7 5 3 + -0.01267628790289769 10 7 5 4 + 2.112025832001763e-16 10 7 5 5 + -0.02666844696860023 10 7 6 1 + -5.134781488891349e-16 10 7 6 2 + 0.041181532283964 10 7 6 3 + 1.361757928641794e-16 10 7 6 4 + 0.006853298651158608 10 7 6 5 + 2.177077962350893e-16 10 7 6 6 + -3.538835890992686e-16 10 7 7 1 + 0.02036853211970714 10 7 7 2 + 3.413068438984368e-16 10 7 7 3 + -0.0413289392950907 10 7 7 4 + 1.275021754842953e-16 10 7 7 5 + -0.01322425283813204 10 7 7 6 + 1.838806884535416e-16 10 7 7 7 + 6.658699648183215e-05 10 7 8 1 + -1.743397093356691e-16 10 7 8 2 + 0.02226772591609262 10 7 8 3 + 1.292368989602721e-16 10 7 8 4 + 0.04261256089196931 10 7 8 5 + 4.85722573273506e-17 10 7 8 6 + -0.008224311279471465 10 7 8 7 + 3.33066907387547e-16 10 7 8 8 + 6.765421556309548e-17 10 7 9 1 + 0.000790693612300265 10 7 9 2 + -7.979727989493313e-17 10 7 9 3 + 0.02091714570464383 10 7 9 4 + -5.898059818321144e-17 10 7 9 5 + 0.05264119662395944 10 7 9 6 + -1.179611963664229e-16 10 7 9 7 + -0.02392770954640092 10 7 9 8 + 1.856154119295184e-16 10 7 9 9 + 8.847716104472898e-05 10 7 10 1 + -1.058181320345852e-16 10 7 10 2 + 7.246555865575823e-06 10 7 10 3 + 1.630640067418199e-16 10 7 10 4 + 0.02859960607864213 10 7 10 5 + 2.740863092043355e-16 10 7 10 6 + 0.07023636212416121 10 7 10 7 + 2.038300084272748e-17 10 7 10 8 + -0.04890045988589462 10 7 10 9 + -2.461138931542095e-16 10 7 10 10 + 0.06143018353433494 10 8 1 1 + 1.370431546021678e-15 10 8 2 1 + -0.02501896706180026 10 8 2 2 + -0.0847187582544848 10 8 3 1 + -6.349087922075114e-16 10 8 3 2 + 0.005682596951931146 10 8 3 3 + 4.015884846886308e-16 10 8 4 1 + -0.05041272763313614 10 8 4 2 + -2.949029909160572e-17 10 8 4 3 + -0.008409032690840368 10 8 4 4 + -0.03573004633497293 10 8 5 1 + -6.088879400678593e-16 10 8 5 2 + 0.06326178664490845 10 8 5 3 + -1.97758476261356e-16 10 8 5 4 + 0.024130648659258 10 8 5 5 + 3.799044412389208e-16 10 8 6 1 + -0.03566189691699158 10 8 6 2 + -2.498001805406602e-16 10 8 6 3 + 0.05133622869016193 10 8 6 4 + 1.682681771697503e-16 10 8 6 5 + 0.02438765395741329 10 8 6 6 + 0.005760260346472054 10 8 7 1 + -1.457167719820518e-16 10 8 7 2 + 0.02659968115039525 10 8 7 3 + 1.110223024625157e-16 10 8 7 4 + 0.052393410268166 10 8 7 5 + 4.85722573273506e-17 10 8 7 6 + -0.007753690170762841 10 8 7 7 + -3.469446951953614e-18 10 8 8 1 + 0.0003777956571122212 10 8 8 2 + -1.52655665885959e-16 10 8 8 3 + 0.0268682519029838 10 8 8 4 + 4.85722573273506e-17 10 8 8 5 + 0.0658955954417895 10 8 8 6 + 5.30825383648903e-16 10 8 8 7 + 0.006855804692643171 10 8 8 8 + -0.0011076948349234 10 8 9 1 + 3.469446951953614e-18 10 8 9 2 + 0.0004399579541541606 10 8 9 3 + 1.040834085586084e-17 10 8 9 4 + -0.03778797284246133 10 8 9 5 + 6.938893903907228e-18 10 8 9 6 + -0.05404807817088855 10 8 9 7 + 1.708702623837155e-16 10 8 9 8 + -0.02903237632103993 10 8 9 9 + -3.469446951953614e-17 10 8 10 1 + 0.001246100204742033 10 8 10 2 + -4.163336342344337e-17 10 8 10 3 + -0.00673763018418556 10 8 10 4 + -1.97758476261356e-16 10 8 10 5 + 0.03835410672097567 10 8 10 6 + 4.119968255444917e-17 10 8 10 7 + 0.09379709063869343 10 8 10 8 + -1.09721259855533e-16 10 8 10 9 + 0.066752379621626 10 8 10 10 + 2.210254548828949e-15 10 9 1 1 + -0.1134691146226011 10 9 2 1 + -2.003605614753212e-15 10 9 2 2 + 1.288032180912779e-16 10 9 3 1 + -0.07042094094239126 10 9 3 2 + -3.642919299551295e-16 10 9 3 3 + 0.04451895773613525 10 9 4 1 + 5.360295540768334e-16 10 9 4 2 + -0.06708815763101919 10 9 4 3 + -5.48172618408671e-16 10 9 4 4 + 4.722784663346857e-16 10 9 5 1 + -0.04656853890893903 10 9 5 2 + -3.729655473350135e-16 10 9 5 3 + 0.08674391137563289 10 9 5 4 + 3.469446951953614e-17 10 9 5 5 + 0.002693091454944395 10 9 6 1 + 1.144917494144693e-16 10 9 6 2 + -0.04521241764996566 10 9 6 3 + -8.326672684688674e-17 10 9 6 4 + -0.06011306777678946 10 9 6 5 + -3.747002708109903e-16 10 9 6 6 + 4.85722573273506e-17 10 9 7 1 + 0.007030094499813705 10 9 7 2 + -9.020562075079397e-17 10 9 7 3 + 0.03393108603469312 10 9 7 4 + -8.326672684688674e-17 10 9 7 5 + 0.08876336860888454 10 9 7 6 + -2.671474153004283e-16 10 9 7 7 + 0.003518921327255418 10 9 8 1 + 9.020562075079397e-17 10 9 8 2 + 0.001324050228799231 10 9 8 3 + -6.938893903907228e-18 10 9 8 4 + -0.04748276737207641 10 9 8 5 + -6.938893903907228e-18 10 9 8 6 + -0.07090238465570849 10 9 8 7 + 2.949029909160572e-16 10 9 8 8 + -4.163336342344337e-17 10 9 9 1 + 0.0009033312340074998 10 9 9 2 + 2.081668171172169e-17 10 9 9 3 + 0.008173746503258124 10 9 9 4 + -9.367506770274758e-17 10 9 9 5 + -0.04950218146920538 10 9 9 6 + 8.673617379884035e-19 10 9 9 7 + -0.07542836162790952 10 9 9 8 + -1.126702897646936e-15 10 9 9 9 + 0.001198825826418475 10 9 10 1 + 9.020562075079397e-17 10 9 10 2 + -0.004199223137393909 10 9 10 3 + -1.07552855510562e-16 10 9 10 4 + -0.002749119230467873 10 9 10 5 + -8.283304597789254e-17 10 9 10 6 + -0.04890045988589464 10 9 10 7 + -9.84455572616838e-17 10 9 10 8 + 0.1259058314655762 10 9 10 9 + 4.549312315749177e-16 10 9 10 10 + 0.2852690919516132 10 10 1 1 + 4.423544863740858e-16 10 10 2 1 + 0.2246720836295986 10 10 2 2 + -0.06024047162299974 10 10 3 1 + -6.38378239159465e-16 10 10 3 2 + 0.2205961403230399 10 10 3 3 + 8.335346302068558e-16 10 10 4 1 + -0.06279903273810897 10 10 4 2 + -5.169475958410885e-16 10 10 4 3 + 0.2158247737252613 10 10 4 4 + -0.0003722949731890446 10 10 5 1 + -4.388850394221322e-16 10 10 5 2 + 0.06463932000359036 10 10 5 3 + 3.226585665316861e-16 10 10 5 4 + 0.24950160412902 10 10 5 5 + 8.413408858487514e-17 10 10 6 1 + -0.002956619576086075 10 10 6 2 + -2.8796409701215e-16 10 10 6 3 + 0.05612162541258425 10 10 6 4 + -2.220446049250313e-16 10 10 6 5 + 0.2518703181646837 10 10 6 6 + 0.000977928125517424 10 10 7 1 + -4.510281037539698e-17 10 10 7 2 + -0.009261617197954576 10 10 7 3 + 1.942890293094024e-16 10 10 7 4 + 0.05831970222411223 10 10 7 5 + 5.204170427930421e-16 10 10 7 6 + 0.2230143923471968 10 10 7 7 + -4.85722573273506e-17 10 10 8 1 + -0.003989732940491223 10 10 8 2 + -1.110223024625157e-16 10 10 8 3 + -0.01068330029925241 10 10 8 4 + -3.33066907387547e-16 10 10 8 5 + 0.06766710886153232 10 10 8 6 + 2.602085213965211e-17 10 10 8 7 + 0.2320114362733716 10 10 8 8 + -0.002458579147680915 10 10 9 1 + 2.775557561562891e-17 10 10 9 2 + -0.004956317940852355 10 10 9 3 + -5.551115123125783e-17 10 10 9 4 + -0.002990852796782777 10 10 9 5 + -5.724587470723463e-17 10 10 9 6 + -0.06757990187808355 10 10 9 7 + -1.717376241217039e-16 10 10 9 8 + 0.238460710304213 10 10 9 9 + -1.387778780781446e-16 10 10 10 1 + 0.00305019588742839 10 10 10 2 + -4.510281037539698e-17 10 10 10 3 + -0.001043608973496623 10 10 10 4 + -2.398255205537936e-16 10 10 10 5 + 8.365587899027702e-05 10 10 10 6 + -2.47198095326695e-16 10 10 10 7 + 0.066752379621626 10 10 10 8 + 4.605690828718423e-16 10 10 10 9 + 0.3085190921908223 10 10 10 10 + -2.19111296812892 1 1 0 0 + -2.248201624865942e-15 2 1 0 0 + -2.064394073240481 2 2 0 0 + 0.1063610010358324 3 1 0 0 + 4.996003610813204e-16 3 2 0 0 + -1.982398736377998 3 3 0 0 + -1.137978600240785e-15 4 1 0 0 + 0.1521907317025598 4 2 0 0 + 5.551115123125783e-16 4 3 0 0 + -1.913827871130571 4 4 0 0 + -0.03545549952907472 5 1 0 0 + -1.942890293094024e-16 5 2 0 0 + -0.1605895758888545 5 3 0 0 + -1.387778780781446e-16 5 4 0 0 + -1.926593085944477 5 5 0 0 + 1.27675647831893e-15 6 1 0 0 + -0.05026377982308276 6 2 0 0 + -7.771561172376096e-16 6 3 0 0 + -0.1660871116870535 6 4 0 0 + 5.273559366969494e-16 6 5 0 0 + -1.858053610500148 6 6 0 0 + 0.02438580871698742 7 1 0 0 + -8.326672684688674e-17 7 2 0 0 + 0.1027297931667069 7 3 0 0 + 3.05311331771918e-16 7 4 0 0 + -0.1338908092416626 7 5 0 0 + -6.938893903907228e-16 7 6 0 0 + -1.705142733840509 7 7 0 0 + 4.510281037539698e-16 8 1 0 0 + 0.05257185518012579 8 2 0 0 + 1.665334536937735e-16 8 3 0 0 + 0.07395782395790085 8 4 0 0 + 1.52655665885959e-16 8 5 0 0 + -0.1558822501103612 8 6 0 0 + -5.551115123125783e-17 8 7 0 0 + -1.636627109545049 8 8 0 0 + 0.02116519886757063 9 1 0 0 + 3.538835890992686e-16 9 2 0 0 + 0.03190959425676634 9 3 0 0 + 4.163336342344337e-17 9 4 0 0 + -0.04372385826197285 9 5 0 0 + -1.290634266126744e-15 9 6 0 0 + 0.1552815685062187 9 7 0 0 + -5.551115123125783e-17 9 8 0 0 + -1.602475672985413 9 9 0 0 + 6.158268339717665e-16 10 1 0 0 + -0.009682592055972942 10 2 0 0 + -1.804112415015879e-16 10 3 0 0 + -0.0196745495144794 10 4 0 0 + 3.608224830031759e-16 10 5 0 0 + 0.03650411960960784 10 6 0 0 + -8.187894806610529e-16 10 7 0 0 + -0.1122961598431787 10 8 0 0 + 6.869504964868156e-16 10 9 0 0 + -1.655373871806323 10 10 0 0 + 7.291186004201019 0 0 0 0 diff --git a/pyci/test/data/h6_sto_3g.fcidump b/pyci/test/data/h6_sto_3g.fcidump new file mode 100644 index 0000000..fbbb914 --- /dev/null +++ b/pyci/test/data/h6_sto_3g.fcidump @@ -0,0 +1,242 @@ + &FCI NORB= 6,NELEC= 6,MS2=0, + ORBSYM=1,1,1,1,1,1, + ISYM=1, + &END + 0.3405802140863509 1 1 1 1 + 0.2692917758384298 1 1 2 2 + -0.06828813131765722 1 1 3 1 + 0.2963863119302292 1 1 3 3 + -0.06242149663824752 1 1 4 2 + 0.2993660413473914 1 1 4 4 + 0.008296075160819316 1 1 5 1 + 0.06446476889578254 1 1 5 3 + 0.2774687774025673 1 1 5 5 + 0.009375219851436805 1 1 6 2 + 0.07102893902790242 1 1 6 4 + 0.3563217091402203 1 1 6 6 + 0.1218645845745998 2 1 2 1 + 0.09613388666782847 2 1 3 2 + -0.04445515277960078 2 1 4 1 + 0.07010483876962852 2 1 4 3 + 0.03500442198607656 2 1 5 2 + -0.09758621085336246 2 1 5 4 + -0.0007384305560872249 2 1 6 1 + 0.04560540107749143 2 1 6 3 + 0.1265883489266239 2 1 6 5 + 0.2692917758384298 2 2 1 1 + 0.3112652110681455 2 2 2 2 + 0.04129261112567156 2 2 3 1 + 0.2735790254058288 2 2 3 3 + -0.001473204885322189 2 2 4 2 + 0.2754628690682513 2 2 4 4 + 0.03239445967155281 2 2 5 1 + 0.003239917454584122 2 2 5 3 + 0.3178916361521684 2 2 5 5 + 0.03348891079907575 2 2 6 2 + -0.03933516688000639 2 2 6 4 + 0.2830295621920236 2 2 6 6 + -0.06828813131765722 3 1 1 1 + 0.04129261112567158 3 1 2 2 + 0.1065466964643124 3 1 3 1 + -0.02495023591106678 3 1 3 3 + 0.05452966595864447 3 1 4 2 + -0.02539992552923563 3 1 4 4 + 0.02794955292264144 3 1 5 1 + -0.05542054064043091 3 1 5 3 + 0.0394892656324503 3 1 5 5 + 0.02754275885012849 3 1 6 2 + -0.1074124027244904 3 1 6 4 + -0.07108492970990871 3 1 6 6 + 0.09613388666782846 3 2 2 1 + 0.117356358569553 3 2 3 2 + 0.01841000681599105 3 2 4 1 + 0.06471915701077344 3 2 4 3 + -0.005001912777534194 3 2 5 2 + -0.1163969337748609 3 2 5 4 + 0.0230573195162725 3 2 6 1 + -0.01533366994996729 3 2 6 3 + 0.1015813908546368 3 2 6 5 + 0.2963863119302291 3 3 1 1 + 0.2735790254058288 3 3 2 2 + -0.02495023591106679 3 3 3 1 + 0.3001149287454475 3 3 3 3 + -0.0001593449741428346 3 3 4 2 + 0.2989939837381631 3 3 4 4 + -0.01839065978258972 3 3 5 1 + 0.004806727051404697 3 3 5 3 + 0.2823446739704003 3 3 5 5 + -0.01527658694948972 3 3 6 2 + 0.02605010979246581 3 3 6 4 + 0.3121956089394762 3 3 6 6 + -0.04445515277960078 4 1 2 1 + 0.01841000681599105 4 1 3 2 + 0.08570511699002371 4 1 4 1 + -0.01360415848537413 4 1 4 3 + -0.05557785344995735 4 1 5 2 + -0.0159816679789385 4 1 5 4 + 0.03119190651888957 4 1 6 1 + -0.08474684451134294 4 1 6 3 + -0.04546449567905838 4 1 6 5 + -0.06242149663824751 4 2 1 1 + -0.001473204885322189 4 2 2 2 + 0.05452966595864446 4 2 3 1 + -0.0001593449741428311 4 2 3 3 + 0.08285596799885958 4 2 4 2 + -0.003737598205981917 4 2 4 4 + -0.03795865681034608 4 2 5 1 + -0.08155537055536966 4 2 5 3 + -0.001761169977007131 4 2 5 5 + -0.03675333499872382 4 2 6 2 + -0.05740891566751927 4 2 6 4 + -0.06584844470332619 4 2 6 6 + 0.07010483876962853 4 3 2 1 + 0.06471915701077344 4 3 3 2 + -0.01360415848537412 4 3 4 1 + 0.1034975068931626 4 3 4 3 + -0.04919382939086762 4 3 5 2 + -0.06679829826682983 4 3 5 4 + -0.0580602580102066 4 3 6 1 + 0.01380251877807094 4 3 6 3 + 0.07460271379165262 4 3 6 5 + 0.2993660413473914 4 4 1 1 + 0.2754628690682512 4 4 2 2 + -0.0253999255292356 4 4 3 1 + 0.2989939837381631 4 4 3 3 + -0.003737598205981928 4 4 4 2 + 0.3065497607421923 4 4 4 4 + -0.01600230182946917 4 4 5 1 + 0.00251633056189221 4 4 5 3 + 0.2862948111294085 4 4 5 5 + -0.01735055879715752 4 4 6 2 + 0.02718151119496331 4 4 6 4 + 0.3169665388180512 4 4 6 6 + 0.008296075160819302 5 1 1 1 + 0.03239445967155279 5 1 2 2 + 0.02794955292264145 5 1 3 1 + -0.0183906597825897 5 1 3 3 + -0.03795865681034607 5 1 4 2 + -0.01600230182946921 5 1 4 4 + 0.05734489373630881 5 1 5 1 + 0.03648503229700761 5 1 5 3 + 0.03224766653627834 5 1 5 5 + 0.05638777193066421 5 1 6 2 + -0.02707918220623885 5 1 6 4 + 0.009087368447530501 5 1 6 6 + 0.03500442198607655 5 2 2 1 + -0.005001912777534165 5 2 3 2 + -0.05557785344995735 5 2 4 1 + -0.0491938293908676 5 2 4 3 + 0.1000729884787031 5 2 5 2 + 0.005609476004307414 5 2 5 4 + 0.04476898608663186 5 2 6 1 + 0.05725972263185591 5 2 6 3 + 0.03623646678909669 5 2 6 5 + 0.06446476889578252 5 3 1 1 + 0.003239917454584101 5 3 2 2 + -0.05542054064043091 5 3 3 1 + 0.004806727051404763 5 3 3 3 + -0.08155537055536963 5 3 4 2 + 0.002516330561892183 5 3 4 4 + 0.0364850322970076 5 3 5 1 + 0.08482431184660798 5 3 5 3 + 0.003237139196233019 5 3 5 5 + 0.03866331144068057 5 3 6 2 + 0.05831038039821725 5 3 6 4 + 0.06924091763827081 5 3 6 6 + -0.09758621085336246 5 4 2 1 + -0.1163969337748609 5 4 3 2 + -0.0159816679789385 5 4 4 1 + -0.06679829826682981 5 4 4 3 + 0.005609476004307418 5 4 5 2 + 0.1217454178361418 5 4 5 4 + -0.02206356306802722 5 4 6 1 + 0.01720010942719271 5 4 6 3 + -0.1045961073774792 5 4 6 5 + 0.2774687774025673 5 5 1 1 + 0.3178916361521684 5 5 2 2 + 0.03948926563245028 5 5 3 1 + 0.2823446739704002 5 5 3 3 + -0.001761169977007107 5 5 4 2 + 0.2862948111294084 5 5 4 4 + 0.03224766653627832 5 5 5 1 + 0.003237139196233009 5 5 5 3 + 0.3325815011081286 5 5 5 5 + 0.03371393460500473 5 5 6 2 + -0.04198722662479198 5 5 6 4 + 0.2959042365247369 5 5 6 6 + -0.0007384305560872329 6 1 2 1 + 0.02305731951627251 6 1 3 2 + 0.03119190651888954 6 1 4 1 + -0.0580602580102066 6 1 4 3 + 0.04476898608663187 6 1 5 2 + -0.02206356306802723 6 1 5 4 + 0.07914105477233936 6 1 6 1 + -0.03040828998749494 6 1 6 3 + -0.0008704060307874652 6 1 6 5 + 0.009375219851436788 6 2 1 1 + 0.03348891079907573 6 2 2 2 + 0.0275427588501285 6 2 3 1 + -0.01527658694948973 6 2 3 3 + -0.03675333499872382 6 2 4 2 + -0.01735055879715754 6 2 4 4 + 0.0563877719306642 6 2 5 1 + 0.03866331144068057 6 2 5 3 + 0.03371393460500474 6 2 5 5 + 0.05805472966832648 6 2 6 2 + -0.02749406947280534 6 2 6 4 + 0.01073608413307036 6 2 6 6 + 0.04560540107749142 6 3 2 1 + -0.01533366994996728 6 3 3 2 + -0.08474684451134291 6 3 4 1 + 0.01380251877807095 6 3 4 3 + 0.0572597226318559 6 3 5 2 + 0.01720010942719272 6 3 5 4 + -0.03040828998749494 6 3 6 1 + 0.08826473242070912 6 3 6 3 + 0.0486414993890977 6 3 6 5 + 0.07102893902790244 6 4 1 1 + -0.03933516688000633 6 4 2 2 + -0.1074124027244903 6 4 3 1 + 0.02605010979246583 6 4 3 3 + -0.05740891566751927 6 4 4 2 + 0.0271815111949633 6 4 4 4 + -0.02707918220623886 6 4 5 1 + 0.05831038039821722 6 4 5 3 + -0.04198722662479192 6 4 5 5 + -0.02749406947280533 6 4 6 2 + 0.114158093843388 6 4 6 4 + 0.07645399389763961 6 4 6 6 + 0.1265883489266239 6 5 2 1 + 0.1015813908546368 6 5 3 2 + -0.04546449567905837 6 5 4 1 + 0.07460271379165258 6 5 4 3 + 0.03623646678909669 6 5 5 2 + -0.1045961073774792 6 5 5 4 + -0.0008704060307874548 6 5 6 1 + 0.04864149938909769 6 5 6 3 + 0.1378733942227017 6 5 6 5 + 0.3563217091402204 6 6 1 1 + 0.2830295621920237 6 6 2 2 + -0.07108492970990869 6 6 3 1 + 0.3121956089394763 6 6 3 3 + -0.06584844470332619 6 6 4 2 + 0.3169665388180512 6 6 4 4 + 0.00908736844753049 6 6 5 1 + 0.06924091763827081 6 6 5 3 + 0.2959042365247369 6 6 5 5 + 0.01073608413307035 6 6 6 2 + 0.07645399389763959 6 6 6 4 + 0.3834778853565485 6 6 6 6 + -1.696037966439943 1 1 0 0 + -1.538492256247005 2 2 0 0 + 0.1067870307836242 3 1 0 0 + -1.483885474763482 3 3 0 0 + 0.1468988929110372 4 2 0 0 + -1.386119822620544 4 4 0 0 + -0.05671979375364133 5 1 0 0 + -0.117268458518322 5 3 0 0 + -1.251984891232949 5 5 0 0 + -0.03775827634294857 6 2 0 0 + -0.1072466725959154 6 4 0 0 + -1.267956311081696 6 6 0 0 + 3.069227823336 0 0 0 0 diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index 538f5ac..7583757 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -133,6 +133,96 @@ def test_compute_rdms(filename, wfn_type, occs, energy): npt.assert_allclose(energy, es[0], rtol=0.0, atol=1.0e-9) +@pytest.mark.parametrize( + "filename, wfn_type, occs, energy", + [ + ("BH_sto-3g_eq", pyci.doci_wfn, (3, 3), -26.93841940211769), + ("h10_chain_1.4_STO-6G", pyci.doci_wfn, (5, 5), -9.84401083866329), + ("h6_sto_3g", pyci.doci_wfn, (3, 3), -5.877285606582455), + ], +) +def test_compute_rdms_34(filename, wfn_type, occs, energy): + ham = pyci.secondquant_op(datafile("{0:s}.fcidump".format(filename))) + wfn = wfn_type(ham.nbasis, *occs) + wfn.add_all_dets() + op = pyci.sparse_op(ham, wfn) + es, cs = op.solve(n=1, tol=1.0e-6) + if not isinstance(wfn, pyci.doci_wfn): + raise TypeError('Wfn must be DOCI') + d0, d2, d3, d4= pyci.compute_rdms_34(wfn, cs[0]) + npt.assert_allclose(np.trace(d0), wfn.nocc_up, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.sum(d2), wfn.nocc_up * (wfn.nocc_up - 1), rtol=0, atol=1.0e-9) + k0, k2 = pyci.reduce_senzero_integrals(ham.h, ham.v, ham.w, wfn.nocc_up) + energy = ham.ecore + energy += np.einsum("ij,ij", k0, d0) + energy += np.einsum("ij,ij", k2, d2) + npt.assert_allclose(energy, es[0], rtol=0.0, atol=1.0e-9) + rdm1, rdm2, rdm3 = pyci.spinize_rdms_34(d0, d2, d3 ,d4) + assert np.all(np.abs(rdm1 - rdm1.T) < 1e-5) + # # Test RDM2 is antisymmetric + # for i in range(0, wfn.nbasis * 2): + # for j in range(0, wfn.nbasis * 2): + # assert np.all(rdm2[i, j, :, :] + rdm2[i, j, :, :].T) < 1e-5 + # for k in range(0, wfn.nbasis * 2): + # for l in range(0, wfn.nbasis * 2): + # assert np.abs(rdm2[i, j, k, l] - rdm2[k, l, i, j]) < 1e-5 + # "Testing that non Antiysmmetric parts are all zeros." + for i in range(0, wfn.nbasis * 2): + assert np.all(np.abs(rdm2[i, i, :, :]) < 1e-5) + assert np.all(np.abs(rdm2[:, :, i, i]) < 1e-5) + + # # Test RDM3 is antisymmetric + # "Testing that non Antiysmmetric parts are all zeros." + for i in range(0, wfn.nbasis * 2): + assert np.all(np.abs(rdm3[i, i, i, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm3[:, :, :, i, i, i]) < 1e-5) + assert np.all(np.abs(rdm3[i, i, :, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm3[:, :, :, :, i, i]) < 1e-5) + assert np.all(np.abs(rdm3[i, :, i, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm3[:, :, :, i, :, i]) < 1e-5) + #TEST COMPLETE 3RDM AND BLOCKS TRACES + aabaab=rdm3[:ham.nbasis,:ham.nbasis,ham.nbasis:,:ham.nbasis,:ham.nbasis,ham.nbasis:] + bbabba=rdm3[ham.nbasis:,ham.nbasis:,:ham.nbasis,ham.nbasis:,ham.nbasis:,:ham.nbasis] + aaaaaa=rdm3[:ham.nbasis,:ham.nbasis,:ham.nbasis,:ham.nbasis,:ham.nbasis,:ham.nbasis] + bbbbbb=rdm3[ham.nbasis:,ham.nbasis:,ham.nbasis:,ham.nbasis:,ham.nbasis:,ham.nbasis:] + npt.assert_allclose(np.einsum('ijkijk -> ',rdm3),(wfn.nocc_up*2)*(wfn.nocc_up*2-1)*(wfn.nocc_up*2-2) ,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ',aaaaaa),(wfn.nocc_up)*(wfn.nocc_up-1)*(wfn.nocc_up-2) ,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ',aabaab),(wfn.nocc_up)*(wfn.nocc_dn)*(wfn.nocc_up-1) ,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ',bbbbbb),(wfn.nocc_dn)*(wfn.nocc_dn-1)*(wfn.nocc_dn-2) ,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ',bbabba),(wfn.nocc_up)*(wfn.nocc_dn)*(wfn.nocc_dn-1) ,rtol=0, atol=1.0e-9) + #TEST TRACING OVER TWO INDICES IN 3RDM REDUCES TO 2RDM + d2_block_aaaa = rdm2[:ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis] + d2_block_bbbb = rdm2[ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:] + d2_block_abab = rdm2[:ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:] + d2_block_baba = rdm2[ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis] + # All-alpha block + fac=(1.0/(wfn.nocc_up-2.0)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ',aaaaaa)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ',aaaaaa)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('mijmkl->ijkl ',aaaaaa)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) + + fac=(1.0/(wfn.nocc_up)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ',aabaab)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) + + # All-beta block + fac=(1.0/(wfn.nocc_dn-2.0)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ',bbbbbb)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ',bbbbbb)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('mijmkl->ijkl ',bbbbbb)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) + + fac=(1.0/(wfn.nocc_dn)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ',bbabba)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) + + #Mixed-spin blocks + fac=(1.0/(wfn.nocc_up-1.0)) + npt.assert_allclose(np.einsum('mijmkl->ijkl ',aabaab)*fac,d2_block_abab,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ',aabaab)*fac,d2_block_abab,rtol=0, atol=1.0e-9) + + fac=(1.0/(wfn.nocc_dn-1.0)) + npt.assert_allclose(np.einsum('mijmkl->ijkl ',bbabba)*fac,d2_block_baba,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ',bbabba)*fac,d2_block_baba,rtol=0, atol=1.0e-9) + + @pytest.mark.parametrize( "filename, wfn_type, occs, energy", [ From 6267ab994af272914fd3d452a69a20feaf0f9948 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:52:24 +0000 Subject: [PATCH 14/31] Improving code style --- pyci/__init__.py | 2 +- pyci/utility.py | 74 ++++++++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/pyci/__init__.py b/pyci/__init__.py index c97e513..242070c 100644 --- a/pyci/__init__.py +++ b/pyci/__init__.py @@ -19,7 +19,7 @@ from pyci._pyci import secondquant_op, wavefunction, one_spin_wfn, two_spin_wfn from pyci._pyci import doci_wfn, fullci_wfn, genci_wfn, sparse_op from pyci._pyci import get_num_threads, set_num_threads, popcnt, ctz -from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms,compute_rdms_34 +from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms,compute_rdms_1234 from pyci._pyci import add_hci, compute_enpt2 from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spinize_rdms_34,spin_free_rdms diff --git a/pyci/utility.py b/pyci/utility.py index eda96ce..af7330e 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -150,7 +150,7 @@ def spinize_rdms(d1, d2): return rdm1, rdm2 -def spinize_rdms_34(d1, d2, d3, d4): +def spinize_rdms_1234(d1, d2, d3, d4): r""" Convert the DOCI matrices or FullCI RDM spin-blocks to full, generalized RDMs. @@ -188,10 +188,10 @@ def spinize_rdms_34(d1, d2, d3, d4): baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] abba = rdm2[:nbasis, nbasis:, nbasis:, :nbasis] baab = rdm2[nbasis:, :nbasis, :nbasis, nbasis:] - aaaaaa= rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] - bbbbbb= rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] - bbabba= rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] - aabaab= rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] + aaaaaa = rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] + bbbbbb = rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] + bbabba = rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] + aabaab = rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] for p in range(nbasis): aa[p, p] = d1[p, p] bb[p, p] = d1[p, p] @@ -202,11 +202,11 @@ def spinize_rdms_34(d1, d2, d3, d4): bbbb[p, q, p, q] += d2[p, q] abab[p, q, p, q] += d2[p, q] baba[p, q, p, q] += d2[p, q] - bbabba[p, q, q, p, q, q] += 2.0*d2[p, q] - aabaab[p, q, q, p, q, q] += 2.0*d2[p, q] + bbabba[p, q, q, p, q, q] += 2.0 * d2[p, q] + aabaab[p, q, q, p, q, q] += 2.0 * d2[p, q] for r in range(nbasis): - bbabba[p, q, q, p, r, r] += 2.0*d4[p, q, r] - aabaab[p, q, q, p, r, r] += 2.0*d4[p, q, r] + bbabba[p, q, q, p, r, r] += 2.0 * d4[p, q, r] + aabaab[p, q, q, p, r, r] += 2.0 * d4[p, q, r] aaaaaa[p, q, r, p, q, r] += d3[p, q, r] bbbbbb[p, q, r, p, q, r] += d3[p, q, r] bbabba[p, q, r, p, q, r] += d3[p, q, r] @@ -214,15 +214,15 @@ def spinize_rdms_34(d1, d2, d3, d4): rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 - rdm3 += np.einsum('ijklmn -> ijknlm',rdm3)+\ - np.einsum('ijklmn -> ijkmnl',rdm3) - rdm3*=1 - rdm3-=np.einsum('ijklmn -> ijkmln',rdm3) - rdm3 +=np.einsum('ijklmn -> kijlmn',rdm3)+\ - np.einsum('ijklmn -> jkilmn',rdm3) - aaaaaa *=1/3 - bbbbbb *=1/3 - rdm3-=np.einsum('ijklmn -> jiklmn',rdm3) + rdm3 += np.einsum('ijklmn -> ijknlm', rdm3)+\ + np.einsum('ijklmn -> ijkmnl', rdm3) + rdm3 *= 1 + rdm3 -= np.einsum('ijklmn -> ijkmln', rdm3) + rdm3 += np.einsum('ijklmn -> kijlmn', rdm3)+\ + np.einsum('ijklmn -> jkilmn', rdm3) + aaaaaa *= 1/3 + bbbbbb *= 1/3 + rdm3 -= np.einsum('ijklmn -> jiklmn', rdm3) rdm3 *= 0.5 return rdm1, rdm2, rdm3 @@ -253,10 +253,10 @@ def spin_free_rdms(d1, d2, d3=None, d4=None): Spin traced three-particle RDM. """ nbasis = d1.shape[1] - rdm1,rdm2,rdm3=spinize_rdms_34(d1,d2,d3,d4) - rdm1_sf=np.zeros((nbasis, nbasis), dtype=np.double) - rdm2_sf=np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) - rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis,nbasis,nbasis), dtype=np.double) + rdm1, rdm2, rdm3 = spinize_rdms_1234(d1, d2, d3, d4) + rdm1_sf = np.zeros((nbasis, nbasis), dtype=np.double) + rdm2_sf = np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm3_sf = np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -266,23 +266,23 @@ def spin_free_rdms(d1, d2, d3=None, d4=None): if d1.ndim == 2: # DOCI matrices rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis,nbasis,nbasis), dtype=np.double) - aaaaaa= rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] - bbbbbb= rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] - bbabba= rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] - abbabb= rdm3[:nbasis,nbasis:,nbasis:,:nbasis,nbasis:,nbasis:] - babbab=rdm3[nbasis:,:nbasis,nbasis:,nbasis:,:nbasis,nbasis:] - aabaab= rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] - abaaba=rdm3[:nbasis,nbasis:,:nbasis,:nbasis,nbasis:,:nbasis] - baabaa=rdm3[nbasis:,:nbasis,:nbasis,nbasis:,:nbasis,:nbasis] - rdm1_sf=aa+bb - rdm2_sf=aaaa+abab+baba+bbbb - rdm3_sf=aaaaaa+bbbbbb+aabaab+abaaba+baabaa+bbabba+babbab+abbabb - return (rdm1_sf,rdm2_sf,rdm3_sf) + aaaaaa= rdm3[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] + bbbbbb= rdm3[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] + bbabba= rdm3[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, :nbasis] + abbabb= rdm3[:nbasis, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:] + babbab = rdm3[nbasis:, :nbasis, nbasis:, nbasis:, :nbasis, nbasis:] + aabaab = rdm3[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, nbasis:] + abaaba = rdm3[:nbasis, nbasis:, :nbasis, :nbasis, nbasis:, :nbasis] + baabaa = rdm3[nbasis:, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] + rdm1_sf = aa + bb + rdm2_sf = aaaa + abab+ baba+ bbbb + rdm3_sf = aaaaaa + bbbbbb + aabaab + abaaba + baabaa + bbabba + babbab + abbabb + return (rdm1_sf, rdm2_sf, rdm3_sf) else: # FullCI RDM spin-blocks - rdm1_sf=aa+bb - rdm2_sf=aaaa+abab+baba+bbbb - return (rdm1_sf,rdm2_sf) + rdm1_sf = aa + bb + rdm2_sf = aaaa + abab + baba + bbbb + return (rdm1_sf, rdm2_sf) def odometer_one_spin(wfn, cost, t, qmax): r""" From ca1f3afc19df41d15ffb16c7663125d7dc5cc968 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:23:07 +0000 Subject: [PATCH 15/31] Changing function name to compute_rdms_1234 --- pyci/__init__.py | 2 +- pyci/include/pyci.h | 4 +-- pyci/src/binding.cpp | 2 +- pyci/src/rdm.cpp | 32 +++++++++---------- pyci/test/test_routines.py | 64 +++++++++++++++++++------------------- 5 files changed, 52 insertions(+), 52 deletions(-) diff --git a/pyci/__init__.py b/pyci/__init__.py index 242070c..015691b 100644 --- a/pyci/__init__.py +++ b/pyci/__init__.py @@ -22,7 +22,7 @@ from pyci._pyci import compute_overlap, compute_rdms, compute_transition_rdms,compute_rdms_1234 from pyci._pyci import add_hci, compute_enpt2 -from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spinize_rdms_34,spin_free_rdms +from pyci.utility import make_senzero_integrals, reduce_senzero_integrals, spinize_rdms,spinize_rdms_1234,spin_free_rdms from pyci.utility import odometer_one_spin, odometer_two_spin from pyci.excitation_ci import add_excitations diff --git a/pyci/include/pyci.h b/pyci/include/pyci.h index bddb89a..49159d0 100644 --- a/pyci/include/pyci.h +++ b/pyci/include/pyci.h @@ -221,7 +221,7 @@ void clearbit_det(const long, ulong *); void compute_rdms(const DOCIWfn &, const double *, double *, double *); -void compute_rdms_34(const DOCIWfn &, const double *, double *, double *, double *, double *); +void compute_rdms_1234(const DOCIWfn &, const double *, double *, double *, double *, double *); void compute_rdms(const FullCIWfn &, const double *, double *, double *); @@ -254,7 +254,7 @@ long py_ctz(const Array); pybind11::tuple py_compute_rdms_doci(const DOCIWfn &, const Array); -pybind11::tuple py_compute_rdms_34_doci(const DOCIWfn &, const Array); +pybind11::tuple py_compute_rdms_1234_doci(const DOCIWfn &, const Array); pybind11::tuple py_compute_rdms_fullci(const FullCIWfn &, const Array); diff --git a/pyci/src/binding.cpp b/pyci/src/binding.cpp index 04d1bdd..d23ef2e 100644 --- a/pyci/src/binding.cpp +++ b/pyci/src/binding.cpp @@ -1246,7 +1246,7 @@ For Generalized CI wave functions, ``rdm1`` and ``rdm2`` are the full 1-RDM and )""", py::arg("wfn"), py::arg("coeffs")); -m.def("compute_rdms_34", &py_compute_rdms_34_doci, R"""( +m.def("compute_rdms_1234", &py_compute_rdms_1234_doci, R"""( Compute the one-, two-, three-, and four-particle(not implemented yet) reduced density matrices (RDMs) of a wave function. Parameters diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 282ad06..357a988 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -65,7 +65,7 @@ void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double * } -void compute_rdms_34(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4) { +void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4) { // prepare working vectors AlignedVector v_det(wfn.nword); AlignedVector v_occs(wfn.nocc_up); @@ -78,7 +78,7 @@ void compute_rdms_34(const DOCIWfn &wfn, const double *coeffs, double *d0, doubl d0[j] = 0; d2[j++] = 0; } - i=wfn.nbasis * wfn.nbasis * wfn.nbasis; + i = wfn.nbasis * wfn.nbasis * wfn.nbasis; j = 0; while (j < i) { d3[j]=0; @@ -101,13 +101,13 @@ void compute_rdms_34(const DOCIWfn &wfn, const double *coeffs, double *d0, doubl d2[wfn.nbasis * k + l] += val1; d2[wfn.nbasis * l + k] += val1; for (m= j + 1; m < wfn.nocc_up; ++m){ - n=occs[m]; - d3[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*l + n]+=val1; - d3[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*n + l]+=val1; - d3[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*k + n]+=val1; - d3[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*n + k]+=val1; - d3[(wfn.nbasis*wfn.nbasis)*n + wfn.nbasis*k + l]+=val1; - d3[(wfn.nbasis*wfn.nbasis)*n + wfn.nbasis*l + k]+=val1; + n = occs[m]; + d3[(wfn.nbasis * wfn.nbasis) * k + wfn.nbasis * l + n] += val1; + d3[(wfn.nbasis * wfn.nbasis) * k + wfn.nbasis * n + l] += val1; + d3[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * k + n] += val1; + d3[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * n + k] += val1; + d3[(wfn.nbasis * wfn.nbasis) * n + wfn.nbasis * k + l] += val1; + d3[(wfn.nbasis * wfn.nbasis) * n + wfn.nbasis * l + k] += val1; } // pair excitation elements 3rdm j>i for (m = 0; m < wfn.nvir_up; ++m) { @@ -118,10 +118,10 @@ void compute_rdms_34(const DOCIWfn &wfn, const double *coeffs, double *d0, doubl // check if excited determinant is in wfn if (mdet > idet) { val2 = coeffs[mdet] * coeffs[idet]; - d4[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*l + n]+=val2; - d4[(wfn.nbasis*wfn.nbasis)*k + wfn.nbasis*n + l]+=val2; + d4[(wfn.nbasis * wfn.nbasis) * k + wfn.nbasis * l + n] += val2; + d4[(wfn.nbasis * wfn.nbasis) * k + wfn.nbasis * n + l] += val2; } - } //pair excitation elements 3rdm i>j + } //pair excitation elements 3rdm i > j for (m = 0; m < wfn.nvir_up; ++m) { n = virs[m]; excite_det(k, n, det); @@ -130,8 +130,8 @@ void compute_rdms_34(const DOCIWfn &wfn, const double *coeffs, double *d0, doubl // check if excited determinant is in wfn if (mdet > idet) { val2 = coeffs[mdet] * coeffs[idet]; - d4[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*k + n]+=val2; - d4[(wfn.nbasis*wfn.nbasis)*l + wfn.nbasis*n + k]+=val2; + d4[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * k + n] += val2; + d4[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * n + k] += val2; } } @@ -904,12 +904,12 @@ pybind11::tuple py_compute_rdms_doci(const DOCIWfn &wfn, const Array coe return pybind11::make_tuple(d0, d2); } -pybind11::tuple py_compute_rdms_34_doci(const DOCIWfn &wfn, const Array coeffs) { +pybind11::tuple py_compute_rdms_1234_doci(const DOCIWfn &wfn, const Array coeffs) { Array d0({wfn.nbasis, wfn.nbasis}); Array d2({wfn.nbasis, wfn.nbasis}); Array d3({wfn.nbasis, wfn.nbasis, wfn.nbasis}); Array d4({wfn.nbasis, wfn.nbasis, wfn.nbasis}); - compute_rdms_34(wfn, reinterpret_cast(coeffs.request().ptr), + compute_rdms_1234(wfn, reinterpret_cast(coeffs.request().ptr), reinterpret_cast(d0.request().ptr), reinterpret_cast(d2.request().ptr), reinterpret_cast(d3.request().ptr), diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index 7583757..b833c57 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -141,7 +141,7 @@ def test_compute_rdms(filename, wfn_type, occs, energy): ("h6_sto_3g", pyci.doci_wfn, (3, 3), -5.877285606582455), ], ) -def test_compute_rdms_34(filename, wfn_type, occs, energy): +def test_compute_rdms_1234(filename, wfn_type, occs, energy): ham = pyci.secondquant_op(datafile("{0:s}.fcidump".format(filename))) wfn = wfn_type(ham.nbasis, *occs) wfn.add_all_dets() @@ -149,7 +149,7 @@ def test_compute_rdms_34(filename, wfn_type, occs, energy): es, cs = op.solve(n=1, tol=1.0e-6) if not isinstance(wfn, pyci.doci_wfn): raise TypeError('Wfn must be DOCI') - d0, d2, d3, d4= pyci.compute_rdms_34(wfn, cs[0]) + d0, d2, d3, d4= pyci.compute_rdms_1234(wfn, cs[0]) npt.assert_allclose(np.trace(d0), wfn.nocc_up, rtol=0, atol=1.0e-9) npt.assert_allclose(np.sum(d2), wfn.nocc_up * (wfn.nocc_up - 1), rtol=0, atol=1.0e-9) k0, k2 = pyci.reduce_senzero_integrals(ham.h, ham.v, ham.w, wfn.nocc_up) @@ -157,7 +157,7 @@ def test_compute_rdms_34(filename, wfn_type, occs, energy): energy += np.einsum("ij,ij", k0, d0) energy += np.einsum("ij,ij", k2, d2) npt.assert_allclose(energy, es[0], rtol=0.0, atol=1.0e-9) - rdm1, rdm2, rdm3 = pyci.spinize_rdms_34(d0, d2, d3 ,d4) + rdm1, rdm2, rdm3 = pyci.spinize_rdms_1234(d0, d2, d3 ,d4) assert np.all(np.abs(rdm1 - rdm1.T) < 1e-5) # # Test RDM2 is antisymmetric # for i in range(0, wfn.nbasis * 2): @@ -173,7 +173,7 @@ def test_compute_rdms_34(filename, wfn_type, occs, energy): # # Test RDM3 is antisymmetric # "Testing that non Antiysmmetric parts are all zeros." - for i in range(0, wfn.nbasis * 2): + for i in range(0, wfn.nbasis * 2): assert np.all(np.abs(rdm3[i, i, i, :, :, :]) < 1e-5) assert np.all(np.abs(rdm3[:, :, :, i, i, i]) < 1e-5) assert np.all(np.abs(rdm3[i, i, :, :, :, :]) < 1e-5) @@ -181,46 +181,46 @@ def test_compute_rdms_34(filename, wfn_type, occs, energy): assert np.all(np.abs(rdm3[i, :, i, :, :, :]) < 1e-5) assert np.all(np.abs(rdm3[:, :, :, i, :, i]) < 1e-5) #TEST COMPLETE 3RDM AND BLOCKS TRACES - aabaab=rdm3[:ham.nbasis,:ham.nbasis,ham.nbasis:,:ham.nbasis,:ham.nbasis,ham.nbasis:] - bbabba=rdm3[ham.nbasis:,ham.nbasis:,:ham.nbasis,ham.nbasis:,ham.nbasis:,:ham.nbasis] - aaaaaa=rdm3[:ham.nbasis,:ham.nbasis,:ham.nbasis,:ham.nbasis,:ham.nbasis,:ham.nbasis] - bbbbbb=rdm3[ham.nbasis:,ham.nbasis:,ham.nbasis:,ham.nbasis:,ham.nbasis:,ham.nbasis:] - npt.assert_allclose(np.einsum('ijkijk -> ',rdm3),(wfn.nocc_up*2)*(wfn.nocc_up*2-1)*(wfn.nocc_up*2-2) ,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijkijk -> ',aaaaaa),(wfn.nocc_up)*(wfn.nocc_up-1)*(wfn.nocc_up-2) ,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijkijk -> ',aabaab),(wfn.nocc_up)*(wfn.nocc_dn)*(wfn.nocc_up-1) ,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijkijk -> ',bbbbbb),(wfn.nocc_dn)*(wfn.nocc_dn-1)*(wfn.nocc_dn-2) ,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijkijk -> ',bbabba),(wfn.nocc_up)*(wfn.nocc_dn)*(wfn.nocc_dn-1) ,rtol=0, atol=1.0e-9) + aabaab=rdm3[:ham.nbasis, :ham.nbasis, ham.nbasis:, :ham.nbasis, :ham.nbasis, ham.nbasis:] + bbabba=rdm3[ham.nbasis:, ham.nbasis:, :ham.nbasis, ham.nbasis:, ham.nbasis:, :ham.nbasis] + aaaaaa=rdm3[:ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis] + bbbbbb=rdm3[ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:] + npt.assert_allclose(np.einsum('ijkijk -> ', rdm3),(wfn.nocc_up * 2)*(wfn.nocc_up * 2 - 1) * (wfn.nocc_up * 2 - 2) ,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ', aaaaaa),(wfn.nocc_up) * (wfn.nocc_up - 1) * (wfn.nocc_up - 2) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ', aabaab),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_up - 1) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ', bbbbbb),(wfn.nocc_dn) * (wfn.nocc_dn - 1) * (wfn.nocc_dn - 2) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkijk -> ', bbabba),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_dn - 1) , rtol=0, atol=1.0e-9) #TEST TRACING OVER TWO INDICES IN 3RDM REDUCES TO 2RDM d2_block_aaaa = rdm2[:ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis] d2_block_bbbb = rdm2[ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:] d2_block_abab = rdm2[:ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:] d2_block_baba = rdm2[ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis] # All-alpha block - fac=(1.0/(wfn.nocc_up-2.0)) - npt.assert_allclose(np.einsum('ijmklm->ijkl ',aaaaaa)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('imjkml->ijkl ',aaaaaa)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('mijmkl->ijkl ',aaaaaa)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) + fac=(1.0 / (wfn.nocc_up - 2.0)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ', aaaaaa) * fac,d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ', aaaaaa) * fac,d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('mijmkl->ijkl ', aaaaaa) * fac,d2_block_aaaa, rtol=0, atol=1.0e-9) - fac=(1.0/(wfn.nocc_up)) - npt.assert_allclose(np.einsum('ijmklm->ijkl ',aabaab)*fac,d2_block_aaaa,rtol=0, atol=1.0e-9) + fac=(1.0 / (wfn.nocc_up)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ', aabaab) * fac,d2_block_aaaa, rtol=0, atol=1.0e-9) - # All-beta block - fac=(1.0/(wfn.nocc_dn-2.0)) - npt.assert_allclose(np.einsum('ijmklm->ijkl ',bbbbbb)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('imjkml->ijkl ',bbbbbb)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('mijmkl->ijkl ',bbbbbb)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) + # All-beta block + fac=(1.0 / (wfn.nocc_dn - 2.0)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ', bbbbbb) * fac,d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ', bbbbbb) * fac,d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('mijmkl->ijkl ', bbbbbb) * fac,d2_block_bbbb, rtol=0, atol=1.0e-9) - fac=(1.0/(wfn.nocc_dn)) - npt.assert_allclose(np.einsum('ijmklm->ijkl ',bbabba)*fac,d2_block_bbbb,rtol=0, atol=1.0e-9) + fac=(1.0 / (wfn.nocc_dn)) + npt.assert_allclose(np.einsum('ijmklm->ijkl ', bbabba) * fac,d2_block_bbbb, rtol=0, atol=1.0e-9) #Mixed-spin blocks - fac=(1.0/(wfn.nocc_up-1.0)) - npt.assert_allclose(np.einsum('mijmkl->ijkl ',aabaab)*fac,d2_block_abab,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('imjkml->ijkl ',aabaab)*fac,d2_block_abab,rtol=0, atol=1.0e-9) + fac=(1.0 / (wfn.nocc_up - 1.0)) + npt.assert_allclose(np.einsum('mijmkl->ijkl ', aabaab) * fac,d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ', aabaab) * fac,d2_block_abab, rtol=0, atol=1.0e-9) - fac=(1.0/(wfn.nocc_dn-1.0)) - npt.assert_allclose(np.einsum('mijmkl->ijkl ',bbabba)*fac,d2_block_baba,rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('imjkml->ijkl ',bbabba)*fac,d2_block_baba,rtol=0, atol=1.0e-9) + fac=(1.0 / (wfn.nocc_dn - 1.0)) + npt.assert_allclose(np.einsum('mijmkl->ijkl ', bbabba) * fac,d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('imjkml->ijkl ', bbabba) * fac,d2_block_baba, rtol=0, atol=1.0e-9) @pytest.mark.parametrize( From b137aaef1601d5aca40b3d695e69b474c75daeb9 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 10 Dec 2024 21:22:07 +0000 Subject: [PATCH 16/31] First attempt to include 4RDM elements in compute_rdms_1234 --- pyci/src/rdm.cpp | 119 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 116 insertions(+), 3 deletions(-) diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 357a988..84f479e 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -65,7 +65,7 @@ void compute_rdms(const DOCIWfn &wfn, const double *coeffs, double *d0, double * } -void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4) { +void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, double *d2, double *d3, double *d4, double *d5, double *d6, double *d7) { // prepare working vectors AlignedVector v_det(wfn.nword); AlignedVector v_occs(wfn.nocc_up); @@ -84,8 +84,15 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d3[j]=0; d4[j++]=0; } + i = wfn.nbasis * wfn.nbasis * wfn.nbasis * wfn.nbasis; + j = 0; + while (j < i) { + d5[j]=0; + d6[j]=0 + d7[j++]=0; + } // iterate over determinants - for (long idet = 0, jdet, mdet, k, l, m, n; idet < wfn.ndet; ++idet) { + for (long idet = 0, jdet, mdet, k, l, m, n, p, q; idet < wfn.ndet; ++idet) { double val1, val2; // fill working vectors wfn.copy_det(idet, det); @@ -107,7 +114,84 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d3[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * k + n] += val1; d3[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * n + k] += val1; d3[(wfn.nbasis * wfn.nbasis) * n + wfn.nbasis * k + l] += val1; - d3[(wfn.nbasis * wfn.nbasis) * n + wfn.nbasis * l + k] += val1; + d3[(wfn.nbasis * wfn.nbasis) * n + wfn.nbasis * l + k] += val1; + for (p= m + 1; p < wfn.nocc_up; ++p){ + q= occs[p]; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * n + q] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * q + n] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * l + q] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * q + l] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * l + n] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * n + l] += val1; + + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * n + q] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + n] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * k + q] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * q + k] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * k + n] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * n + k] += val1; + + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * k + q] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * q + k] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * l + q] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + l] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * l + k] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * k + l] += val1; + + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * n + k] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * k + n] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * l + k] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * k + l] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * l + n] += val1; + d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * n + l] += val1; + + } + //pair excitation elements 4rdm i,j >m + for (p= 0; p < wfn.nvir_up; ++p){ + q = virs[p]; + excite_det(n, q, det); + pdet = wfn.index_det(det); + excite_det(q, n, det); + // check if excited determinant is in wfn + if (pdet > idet) { + val2 = coeffs[pdet] * coeffs[idet]; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * n + q] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * q + n] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * n + q] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + n] += val2; + } + } + //pair excitation elements 4rdm m >j + for (p= 0; p < wfn.nvir_up; ++p){ + q = virs[p]; + excite_det(l, q, det); + pdet = wfn.index_det(det); + excite_det(q, l, det); + // check if excited determinant is in wfn + if (pdet > idet) { + val2 = coeffs[pdet] * coeffs[idet]; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * l + q] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * q + l] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * l + q] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + l] += val2; + } + } + //pair excitation elements 4rdm m >i + for (p= 0; p < wfn.nvir_up; ++p){ + q = virs[p]; + excite_det(k, q, det); + pdet = wfn.index_det(det); + excite_det(q, k, det); + // check if excited determinant is in wfn + if (pdet > idet) { + val2 = coeffs[pdet] * coeffs[idet]; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * k + q] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * q + k] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * k + q] += val2; + d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * q + k] += val2; + } + } + } // pair excitation elements 3rdm j>i for (m = 0; m < wfn.nvir_up; ++m) { @@ -134,6 +218,35 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d4[(wfn.nbasis * wfn.nbasis) * l + wfn.nbasis * n + k] += val2; } } + //double-pair excitation elements 4rdm + for (m = 0; m < wfn.nvir_up; ++m) { + n = virs[m]; + for (p= m + 1; p < wfn.nvir_up; ++p){ + q = virs[p]; + + excite_det(l, q, det); + pdet = wfn.index_det(det); + excite_det(q, l, det); + + excite_det(k, n, det); + mdet = wfn.index_det(det); + excite_det(n, k, det); + // check if excited determinants are the same and if it is in wfn + if ((mdet==pdet) && (mdet> idet)) { + val2 = coeffs[mdet] * coeffs[idet]; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * n + q] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * k + (wfn.nbasis * wfn.nbasis) * l + (wfn.nbasis) * q + n] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + n] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * n + q] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * k + l] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * l + k] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * l + k] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * k + n] += val2; + + + } + } + } } // pair excitation elements From b97f92a49c7297d30110e0c51f212e683514b2b9 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Thu, 27 Feb 2025 21:54:18 +0000 Subject: [PATCH 17/31] Chaing python biding to receive 4RDM vectors --- pyci/include/pyci.h | 2 +- pyci/src/rdm.cpp | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/pyci/include/pyci.h b/pyci/include/pyci.h index 49159d0..abfdcef 100644 --- a/pyci/include/pyci.h +++ b/pyci/include/pyci.h @@ -221,7 +221,7 @@ void clearbit_det(const long, ulong *); void compute_rdms(const DOCIWfn &, const double *, double *, double *); -void compute_rdms_1234(const DOCIWfn &, const double *, double *, double *, double *, double *); +void compute_rdms_1234(const DOCIWfn &, const double *, double *, double *, double *, double *, double *, double *, double *); void compute_rdms(const FullCIWfn &, const double *, double *, double *); diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 84f479e..5fffe28 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -88,11 +88,11 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou j = 0; while (j < i) { d5[j]=0; - d6[j]=0 + d6[j]=0; d7[j++]=0; } // iterate over determinants - for (long idet = 0, jdet, mdet, k, l, m, n, p, q; idet < wfn.ndet; ++idet) { + for (long idet = 0, jdet, mdet, pdet, k, l, m, n, p, q; idet < wfn.ndet; ++idet) { double val1, val2; // fill working vectors wfn.copy_det(idet, det); @@ -146,7 +146,7 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d5[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * n + l] += val1; } - //pair excitation elements 4rdm i,j >m + //pair excitation elements 4rdm n >k,l for (p= 0; p < wfn.nvir_up; ++p){ q = virs[p]; excite_det(n, q, det); @@ -161,7 +161,7 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * l + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + n] += val2; } } - //pair excitation elements 4rdm m >j + //pair excitation elements 4rdm l >k,n for (p= 0; p < wfn.nvir_up; ++p){ q = virs[p]; excite_det(l, q, det); @@ -176,7 +176,7 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d6[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * k + (wfn.nbasis) * q + l] += val2; } } - //pair excitation elements 4rdm m >i + //pair excitation elements 4rdm k >n,l for (p= 0; p < wfn.nvir_up; ++p){ q = virs[p]; excite_det(k, q, det); @@ -193,7 +193,7 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou } } - // pair excitation elements 3rdm j>i + // pair excitation elements 3rdm l>k for (m = 0; m < wfn.nvir_up; ++m) { n = virs[m]; excite_det(l, n, det); @@ -205,7 +205,7 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d4[(wfn.nbasis * wfn.nbasis) * k + wfn.nbasis * l + n] += val2; d4[(wfn.nbasis * wfn.nbasis) * k + wfn.nbasis * n + l] += val2; } - } //pair excitation elements 3rdm i > j + } //pair excitation elements 3rdm k > l for (m = 0; m < wfn.nvir_up; ++m) { n = virs[m]; excite_det(k, n, det); @@ -1022,12 +1022,18 @@ pybind11::tuple py_compute_rdms_1234_doci(const DOCIWfn &wfn, const Array d2({wfn.nbasis, wfn.nbasis}); Array d3({wfn.nbasis, wfn.nbasis, wfn.nbasis}); Array d4({wfn.nbasis, wfn.nbasis, wfn.nbasis}); + Array d5({wfn.nbasis, wfn.nbasis, wfn.nbasis, wfn.nbasis}); + Array d6({wfn.nbasis, wfn.nbasis, wfn.nbasis, wfn.nbasis}); + Array d7({wfn.nbasis, wfn.nbasis, wfn.nbasis, wfn.nbasis}); compute_rdms_1234(wfn, reinterpret_cast(coeffs.request().ptr), reinterpret_cast(d0.request().ptr), reinterpret_cast(d2.request().ptr), reinterpret_cast(d3.request().ptr), - reinterpret_cast(d4.request().ptr)); - return pybind11::make_tuple(d0, d2, d3, d4); + reinterpret_cast(d4.request().ptr), + reinterpret_cast(d5.request().ptr), + reinterpret_cast(d6.request().ptr), + reinterpret_cast(d7.request().ptr)); + return pybind11::make_tuple(d0, d2, d3, d4, d5, d6, d7); } pybind11::tuple py_compute_rdms_fullci(const FullCIWfn &wfn, const Array coeffs) { From 4707357f67bea9b2284a3cc6cd141190cbf86864 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:58:07 +0000 Subject: [PATCH 18/31] Adding H8 electron integrals to test 4RDM --- pyci/test/data/h8_fcidump.fcidump | 693 ++++++++++++++++++++++++++++++ 1 file changed, 693 insertions(+) create mode 100644 pyci/test/data/h8_fcidump.fcidump diff --git a/pyci/test/data/h8_fcidump.fcidump b/pyci/test/data/h8_fcidump.fcidump new file mode 100644 index 0000000..12fa405 --- /dev/null +++ b/pyci/test/data/h8_fcidump.fcidump @@ -0,0 +1,693 @@ + &FCI NORB= 8,NELEC= 8,MS2=0, + ORBSYM=1,1,1,1,1,1,1,1, + ISYM=1, + &END + 0.3777373646626236 1 1 1 1 + 0.3032911140190673 1 1 2 2 + -0.07273594613890115 1 1 3 1 + 1.162264728904461e-15 1 1 3 2 + 0.2932688073085586 1 1 3 3 + 0.07754570140898318 1 1 4 2 + -1.124100812432971e-15 1 1 4 3 + 0.3174944778613163 1 1 4 4 + 0.003890875696227873 1 1 5 1 + -0.07434801414710537 1 1 5 3 + 0.3215704683220267 1 1 5 5 + 0.005201431595257785 1 1 6 2 + -0.07689487200458164 1 1 6 4 + 0.3061794232828999 1 1 6 6 + 0.002667173893774385 1 1 7 1 + 0.006624963123186868 1 1 7 3 + 0.08093912016067416 1 1 7 5 + 1.092875789865388e-15 1 1 7 6 + 0.3225353131684576 1 1 7 7 + 0.003259294716182586 1 1 8 2 + 0.002977681073939263 1 1 8 4 + -0.07700497350018676 1 1 8 6 + 1.508342062361834e-15 1 1 8 7 + 0.4044233451490636 1 1 8 8 + 0.1276875770155474 2 1 2 1 + 0.08047088090018464 2 1 3 2 + 0.05080555679265045 2 1 4 1 + -0.0921944635936279 2 1 4 3 + -0.05174454563523459 2 1 5 2 + -0.07448342145223696 2 1 5 4 + 0.002974896189897208 2 1 6 1 + 0.04371406632977299 2 1 6 3 + -0.09523614900298887 2 1 6 5 + -0.001235730136786957 2 1 7 2 + -0.05325811427142381 2 1 7 4 + 0.08599567951036789 2 1 7 6 + -0.0009243703453183493 2 1 8 1 + 0.004038644591538278 2 1 8 3 + 0.05106990181782984 2 1 8 5 + 1.080732725533551e-15 2 1 8 6 + 0.1354069734259121 2 1 8 7 + 0.3032911140190673 2 2 1 1 + 0.326040755661211 2 2 2 2 + 0.01947938035318023 2 2 3 1 + 0.2956896514862595 2 2 3 3 + 0.01134293155171051 2 2 4 2 + 0.2991617116459523 2 2 4 4 + -0.03722920183189456 2 2 5 1 + -0.01499664100213257 2 2 5 3 + 0.3025634122723684 2 2 5 5 + 0.03916537208826076 2 2 6 2 + -0.01612583428340721 2 2 6 4 + 0.306420649889851 2 2 6 6 + -6.782133604622039e-05 2 2 7 1 + 0.04017828471921903 2 2 7 3 + 0.01149396611230397 2 2 7 5 + 0.3396208110312242 2 2 7 7 + 0.0008416569953567281 2 2 8 2 + -0.03685664206883331 2 2 8 4 + 0.01634767847087008 2 2 8 6 + 0.3254369198479697 2 2 8 8 + -0.07273594613890116 3 1 1 1 + 0.01947938035318019 3 1 2 2 + 0.08762298463099905 3 1 3 1 + 0.001495257363865569 3 1 3 3 + -0.06429327380847667 3 1 4 2 + -0.01974064649916499 3 1 4 4 + -0.03759559984264665 3 1 5 1 + 0.05641280519095481 3 1 5 3 + -0.02009129080536805 3 1 5 5 + 0.03207328285390884 3 1 6 2 + 0.05819894935423993 3 1 6 4 + -0.001179868529573061 3 1 6 6 + -0.001280307351915255 3 1 7 1 + 0.0313758884827281 3 1 7 3 + -0.06730161194607866 3 1 7 5 + 0.01359428193967588 3 1 7 7 + -0.001243153876571393 3 1 8 2 + -0.03661973803322326 3 1 8 4 + 0.08911325905835694 3 1 8 6 + -0.0783191515379387 3 1 8 8 + 1.1518563880486e-15 3 2 1 1 + 0.0804708809001846 3 2 2 1 + 0.1135446628389791 3 2 3 2 + -0.02757311637693935 3 2 4 1 + -0.08929893682906852 3 2 4 3 + -0.006812370871680025 3 2 5 2 + -0.07281976301298612 3 2 5 4 + 0.02815328004280931 3 2 6 1 + -0.001447038893572885 3 2 6 3 + -0.09124642274875733 3 2 6 5 + 0.02715635318070105 3 2 7 2 + -0.006703918647588987 3 2 7 4 + 0.1119817871285603 3 2 7 6 + -0.0008170031280246193 3 2 8 1 + 0.02762561424019737 3 2 8 3 + -0.02374471086779989 3 2 8 5 + 0.08726034486763701 3 2 8 7 + 0.2932688073085586 3 3 1 1 + 0.2956896514862595 3 3 2 2 + 0.001495257363865576 3 3 3 1 + 0.3133875468127063 3 3 3 3 + -0.01645000004907656 3 3 4 2 + 0.2952893195540534 3 3 4 4 + 0.01602874165277816 3 3 5 1 + -0.007493133009665573 3 3 5 3 + 0.2978215703472982 3 3 5 5 + 0.005877584447796687 3 3 6 2 + -0.00928015585280758 3 3 6 4 + 0.3164120557995788 3 3 6 6 + 0.02225045911343843 3 3 7 1 + 0.007694112671248757 3 3 7 3 + -0.009117377335470269 3 3 7 5 + 0.3117681406263421 3 3 7 7 + 0.02225691657236466 3 3 8 2 + 0.01095141422836556 3 3 8 4 + 0.0002348385631720656 3 3 8 6 + 0.3150948068163652 3 3 8 8 + 0.05080555679265046 4 1 2 1 + -0.02757311637693937 4 1 3 2 + 0.07705004332188665 4 1 4 1 + -0.009747907913098347 4 1 4 3 + -0.04235254330408224 4 1 5 2 + -0.005833794842860932 4 1 5 4 + -0.0265635301134305 4 1 6 1 + 0.04369999672526756 4 1 6 3 + -0.01022576867489183 4 1 6 5 + -0.02815349490513309 4 1 7 2 + -0.04483395810359535 4 1 7 4 + -0.02039063733171277 4 1 7 6 + 0.001509262734822648 4 1 8 1 + -0.02449451241825074 4 1 8 3 + 0.07399502880957334 4 1 8 5 + 0.05298564742257036 4 1 8 7 + 0.0775457014089832 4 2 1 1 + 0.0113429315517105 4 2 2 2 + -0.06429327380847667 4 2 3 1 + -0.01645000004907661 4 2 3 3 + 0.08537885995708341 4 2 4 2 + 0.02525578093189796 4 2 4 4 + -0.01479660967840978 4 2 5 1 + -0.05687660463088976 4 2 5 3 + 0.02537610127150836 4 2 5 5 + -0.0009315177863644959 4 2 6 2 + -0.05896902700886359 4 2 6 4 + -0.006416037653337613 4 2 6 6 + -0.02171832991096397 4 2 7 1 + -0.0001638812047695722 4 2 7 3 + 0.08160103075104096 4 2 7 5 + 0.01543335960972698 4 2 7 7 + -0.02033870323993325 4 2 8 2 + -0.01063933230960605 4 2 8 4 + -0.06758823107280383 4 2 8 6 + 0.08460192196458861 4 2 8 8 + -1.10848830114918e-15 4 3 1 1 + -0.09219446359362791 4 3 2 1 + -0.08929893682906853 4 3 3 2 + -0.009747907913098344 4 3 4 1 + 0.1101897201035431 4 3 4 3 + -0.006109368832648883 4 3 5 2 + 0.07431689295851231 4 3 5 4 + 0.01525071222447963 4 3 6 1 + -0.001618104299622222 4 3 6 3 + 0.1048594042007572 4 3 6 5 + -0.0003468495106461363 4 3 7 2 + 0.001026024965555438 4 3 7 4 + -0.09267196830923465 4 3 7 6 + -0.01717027213147523 4 3 8 1 + 0.01019001929831586 4 3 8 3 + -0.01004638133302189 4 3 8 5 + -0.1000964484193152 4 3 8 7 + 0.3174944778613164 4 4 1 1 + 0.2991617116459523 4 4 2 2 + -0.01974064649916499 4 4 3 1 + 0.2952893195540534 4 4 3 3 + 0.02525578093189797 4 4 4 2 + 0.3179904404909178 4 4 4 4 + -0.00342071723224583 4 4 5 1 + -0.008209307452447606 4 4 5 3 + 0.3125777187872322 4 4 5 5 + -0.009341990098456605 4 4 6 2 + -0.0173079839566213 4 4 6 4 + 0.3052011389833167 4 4 6 6 + -0.014180875769342 4 4 7 1 + -0.001850314249025781 4 4 7 3 + 0.02734547557532422 4 4 7 5 + 0.3174976234512071 4 4 7 7 + -0.009457542300655177 4 4 8 2 + -0.004336723521982595 4 4 8 4 + -0.02197555943861437 4 4 8 6 + 0.3433586005772224 4 4 8 8 + 0.003890875696227897 5 1 1 1 + -0.03722920183189456 5 1 2 2 + -0.03759559984264667 5 1 3 1 + 0.01602874165277817 5 1 3 3 + -0.01479660967840976 5 1 4 2 + -0.003420717232245804 5 1 4 4 + 0.06346941754343619 5 1 5 1 + -0.006577662747035979 5 1 5 3 + -0.003355454742328909 5 1 5 5 + -0.03974363641353696 5 1 6 2 + -0.006768225411280009 5 1 6 4 + 0.008862424851493033 5 1 6 6 + 0.02548256684462248 5 1 7 1 + -0.03978724388375501 5 1 7 3 + -0.007270638697225986 5 1 7 5 + -0.03563392161125239 5 1 7 7 + 0.02416738720835741 5 1 8 2 + 0.05886294599317772 5 1 8 4 + -0.03727852146450039 5 1 8 6 + 0.003679217178800187 5 1 8 8 + -0.05174454563523456 5 2 2 1 + -0.006812370871680021 5 2 3 2 + -0.04235254330408224 5 2 4 1 + -0.006109368832648877 5 2 4 3 + 0.06564389965049423 5 2 5 2 + 0.01137534324671695 5 2 5 4 + -0.0240045857016372 5 2 6 1 + -0.04739092862906956 5 2 6 3 + 0.002749781975534181 5 2 6 5 + -0.002028519600017274 5 2 7 2 + 0.06089999743332094 5 2 7 4 + -0.009908013357936061 5 2 7 6 + 0.02040743071452167 5 2 8 1 + -0.02040781827369249 5 2 8 3 + -0.0435592930602546 5 2 8 5 + -0.05512869153668251 5 2 8 7 + -0.07434801414710533 5 3 1 1 + -0.01499664100213259 5 3 2 2 + 0.05641280519095481 5 3 3 1 + -0.007493133009665557 5 3 3 3 + -0.05687660463088978 5 3 4 2 + -0.008209307452447589 5 3 4 4 + -0.00657766274703596 5 3 5 1 + 0.0746403044485264 5 3 5 3 + -0.01726294532091014 5 3 5 5 + -0.01954585390981655 5 3 6 2 + 0.06958061953123607 5 3 6 4 + -0.01248441023853922 5 3 6 6 + -0.02080477455627485 5 3 7 1 + -0.01459654267303495 5 3 7 3 + -0.05918163930159978 5 3 7 5 + -0.01921086940015644 5 3 7 7 + -0.01748174286329561 5 3 8 2 + -0.006622443443183709 5 3 8 4 + 0.06017917852102828 5 3 8 6 + -0.08183764070437513 5 3 8 8 + -0.07448342145223692 5 4 2 1 + -0.07281976301298612 5 4 3 2 + -0.005833794842860925 5 4 4 1 + 0.07431689295851228 5 4 4 3 + 0.01137534324671694 5 4 5 2 + 0.08958046828038319 5 4 5 4 + -0.004636472114670305 5 4 6 1 + 0.02456843934266519 5 4 6 3 + 0.07545171817296827 5 4 6 5 + 0.02769176452187111 5 4 7 2 + 0.0127919313556912 5 4 7 4 + -0.07628235659444113 5 4 7 6 + 0.03212799979008063 5 4 8 1 + -0.005172568108815253 5 4 8 3 + -0.0064113689056661 5 4 8 5 + -0.08151389358805225 5 4 8 7 + 0.3215704683220267 5 5 1 1 + 0.3025634122723685 5 5 2 2 + -0.02009129080536806 5 5 3 1 + 0.2978215703472982 5 5 3 3 + 0.02537610127150836 5 5 4 2 + 0.3125777187872322 5 5 4 4 + -0.003355454742328911 5 5 5 1 + -0.01726294532091014 5 5 5 3 + 0.3237373774704471 5 5 5 5 + -0.001186833164321194 5 5 6 2 + -0.01360043020986031 5 5 6 4 + 0.3108215700111734 5 5 6 6 + -0.007520912278380249 5 5 7 1 + -0.005053199516740306 5 5 7 3 + 0.02863480593192595 5 5 7 5 + 0.323276671727155 5 5 7 7 + -0.01079286021170061 5 5 8 2 + -0.00461606280604886 5 5 8 4 + -0.02275893004965866 5 5 8 6 + 0.3500450832315031 5 5 8 8 + 0.002974896189897195 6 1 2 1 + 0.02815328004280932 6 1 3 2 + -0.02656353011343051 6 1 4 1 + 0.01525071222447963 6 1 4 3 + -0.02400458570163719 6 1 5 2 + -0.004636472114670302 6 1 5 4 + 0.04463298128952019 6 1 6 1 + 0.005930958796015234 6 1 6 3 + 0.008146410968716041 6 1 6 5 + 0.02566314771696102 6 1 7 2 + -0.01791700395908279 6 1 7 4 + 0.02601625722529591 6 1 7 6 + -0.02056642869824812 6 1 8 1 + 0.0402888385460678 6 1 8 3 + -0.02436559391300808 6 1 8 5 + 0.003469277151610719 6 1 8 7 + 0.005201431595257773 6 2 1 1 + 0.03916537208826075 6 2 2 2 + 0.03207328285390885 6 2 3 1 + 0.005877584447796695 6 2 3 3 + -0.0009315177863644937 6 2 4 2 + -0.009341990098456618 6 2 4 4 + -0.03974363641353697 6 2 5 1 + -0.01954585390981655 6 2 5 3 + -0.001186833164321197 6 2 5 5 + 0.05596599568604857 6 2 6 2 + -0.0130362957639665 6 2 6 4 + 0.009336606686913726 6 2 6 6 + 0.01431677855412424 6 2 7 1 + 0.05104053017495509 6 2 7 3 + -0.003118464587035023 6 2 7 5 + 0.03934281828745755 6 2 7 7 + 0.01143017699894073 6 2 8 2 + -0.03917468004632275 6 2 8 4 + 0.03218861630840229 6 2 8 6 + 0.00611103884846266 6 2 8 8 + 0.04371406632977299 6 3 2 1 + -0.001447038893572893 6 3 3 2 + 0.04369999672526755 6 3 4 1 + -0.001618104299622213 6 3 4 3 + -0.04739092862906957 6 3 5 2 + 0.02456843934266519 6 3 5 4 + 0.005930958796015239 6 3 6 1 + 0.07291943353770959 6 3 6 3 + -0.004622117111788653 6 3 6 5 + 0.02991985935470044 6 3 7 2 + -0.04764258991312954 6 3 7 4 + 0.001285349342260274 6 3 7 6 + 0.02634548660908666 6 3 8 1 + 0.006277833576495176 6 3 8 3 + 0.04483037906287135 6 3 8 5 + 0.04739596083267579 6 3 8 7 + -0.07689487200458164 6 4 1 1 + -0.0161258342834072 6 4 2 2 + 0.05819894935423991 6 4 3 1 + -0.009280155852807562 6 4 3 3 + -0.05896902700886358 6 4 4 2 + -0.01730798395662128 6 4 4 4 + -0.00676822541128 6 4 5 1 + 0.06958061953123612 6 4 5 3 + -0.01360043020986034 6 4 5 5 + -0.01303629576396653 6 4 6 2 + 0.07501133002160298 6 4 6 4 + -0.01342245159364497 6 4 6 6 + -0.01563248944207074 6 4 7 1 + -0.0172566140905961 6 4 7 3 + -0.06066217226667293 6 4 7 5 + -0.02067441091830608 6 4 7 7 + -0.01879952149581443 6 4 8 2 + -0.0073055874870635 6 4 8 4 + 0.06247468668706985 6 4 8 6 + -0.08637299036698511 6 4 8 8 + -0.09523614900298885 6 5 2 1 + -0.09124642274875733 6 5 3 2 + -0.01022576867489184 6 5 4 1 + 0.1048594042007572 6 5 4 3 + 0.002749781975534134 6 5 5 2 + 0.07545171817296824 6 5 5 4 + 0.008146410968716079 6 5 6 1 + -0.00462211711178865 6 5 6 3 + 0.1124712191579555 6 5 6 5 + -0.002274487330007723 6 5 7 2 + -0.0003854783523560522 6 5 7 4 + -0.09646650314049544 6 5 7 6 + -0.01526826028562705 6 5 8 1 + 0.01102499622384149 6 5 8 3 + -0.01143749975685842 6 5 8 5 + -0.1051865533809677 6 5 8 7 + 0.3061794232829 6 6 1 1 + 0.3064206498898509 6 6 2 2 + -0.001179868529573073 6 6 3 1 + 0.3164120557995789 6 6 3 3 + -0.006416037653337696 6 6 4 2 + 0.3052011389833168 6 6 4 4 + 0.00886242485149309 6 6 5 1 + -0.0124844102385392 6 6 5 3 + 0.3108215700111735 6 6 5 5 + 0.0093366066869137 6 6 6 2 + -0.01342245159364495 6 6 6 4 + 0.3338087051113193 6 6 6 6 + 0.01977460638263587 6 6 7 1 + 0.009718866650592222 6 6 7 3 + -0.008787788360034961 6 6 7 5 + 0.3282107914843099 6 6 7 7 + 0.02085303413180931 6 6 8 2 + 0.01164204420754553 6 6 8 4 + -0.002379384803869523 6 6 8 6 + 0.335690099450537 6 6 8 8 + 0.002667173893774382 7 1 1 1 + -6.782133604623438e-05 7 1 2 2 + -0.001280307351915266 7 1 3 1 + 0.02225045911343843 7 1 3 3 + -0.02171832991096397 7 1 4 2 + -0.01418087576934201 7 1 4 4 + 0.02548256684462248 7 1 5 1 + -0.02080477455627485 7 1 5 3 + -0.007520912278380222 7 1 5 5 + 0.01431677855412423 7 1 6 2 + -0.01563248944207071 7 1 6 4 + 0.0197746063826358 7 1 6 6 + 0.0409239860621842 7 1 7 1 + 0.0101070686126435 7 1 7 3 + -0.01824841797727699 7 1 7 5 + 0.0002355174059414543 7 1 7 7 + 0.03779349016366373 7 1 8 2 + 0.0234645736305239 7 1 8 4 + -0.001540566308341938 7 1 8 6 + 0.002904688977815371 7 1 8 8 + -0.001235730136786954 7 2 2 1 + 0.02715635318070107 7 2 3 2 + -0.02815349490513309 7 2 4 1 + -0.0003468495106461408 7 2 4 3 + -0.002028519600017268 7 2 5 2 + 0.0276917645218711 7 2 5 4 + 0.02566314771696102 7 2 6 1 + 0.02991985935470042 7 2 6 3 + -0.002274487330007721 7 2 6 5 + 0.05606898352040245 7 2 7 2 + -0.000135382152286501 7 2 7 4 + 0.0255415495499703 7 2 7 6 + 0.02992563328161791 7 2 8 1 + 0.02502186010987519 7 2 8 3 + -0.02724464634598884 7 2 8 5 + -0.0009966599751359394 7 2 8 7 + 0.006624963123186882 7 3 1 1 + 0.04017828471921902 7 3 2 2 + 0.03137588848272813 7 3 3 1 + 0.007694112671248724 7 3 3 3 + -0.0001638812047695488 7 3 4 2 + -0.001850314249025826 7 3 4 4 + -0.03978724388375507 7 3 5 1 + -0.01459654267303498 7 3 5 3 + -0.005053199516740271 7 3 5 5 + 0.05104053017495513 7 3 6 2 + -0.01725661409059608 7 3 6 4 + 0.009718866650592279 7 3 6 6 + 0.0101070686126435 7 3 7 1 + 0.05448857635844626 7 3 7 3 + -0.002686385524509631 7 3 7 5 + 0.04182962695420471 7 3 7 7 + 0.01285006675836148 7 3 8 2 + -0.03999648957680422 7 3 8 4 + 0.03282441095023209 7 3 8 6 + 0.008238205877387689 7 3 8 8 + -0.0532581142714238 7 4 2 1 + -0.006703918647588967 7 4 3 2 + -0.04483395810359535 7 4 4 1 + 0.001026024965555399 7 4 4 3 + 0.06089999743332099 7 4 5 2 + 0.0127919313556912 7 4 5 4 + -0.01791700395908282 7 4 6 1 + -0.04764258991312954 7 4 6 3 + -0.0003854783523560244 7 4 6 5 + -0.000135382152286488 7 4 7 2 + 0.06585042792261667 7 4 7 4 + -0.01029616770992134 7 4 7 6 + 0.01900636401629375 7 4 8 1 + -0.02147949065554438 7 4 8 3 + -0.04623491641720332 7 4 8 5 + -0.05938831669463143 7 4 8 7 + 0.08093912016067414 7 5 1 1 + 0.01149396611230396 7 5 2 2 + -0.06730161194607864 7 5 3 1 + -0.009117377335470354 7 5 3 3 + 0.08160103075104104 7 5 4 2 + 0.02734547557532418 7 5 4 4 + -0.007270638697226052 7 5 5 1 + -0.05918163930159982 7 5 5 3 + 0.0286348059319259 7 5 5 5 + -0.003118464587034993 7 5 6 2 + -0.060662172266673 7 5 6 4 + -0.008787788360034961 7 5 6 6 + -0.01824841797727705 7 5 7 1 + -0.002686385524509628 7 5 7 3 + 0.08895545915902364 7 5 7 5 + 0.01631919356377493 7 5 7 7 + -0.01914767405216444 7 5 8 2 + -0.01062442634036531 7 5 8 4 + -0.07325083845639155 7 5 8 6 + 0.09206005894086289 7 5 8 8 + 1.077263278581597e-15 7 6 1 1 + 0.08599567951036785 7 6 2 1 + 0.1119817871285604 7 6 3 2 + -0.02039063733171287 7 6 4 1 + -0.09267196830923467 7 6 4 3 + -0.009908013357936058 7 6 5 2 + -0.07628235659444119 7 6 5 4 + 0.02601625722529601 7 6 6 1 + 0.001285349342260263 7 6 6 3 + -0.09646650314049551 7 6 6 5 + 0.02554154954997035 7 6 7 2 + -0.01029616770992136 7 6 7 4 + 0.1220068376424689 7 6 7 6 + -0.001092005122187551 7 6 8 1 + 0.02793323805647863 7 6 8 3 + -0.02424489262452514 7 6 8 5 + 0.09657596132850904 7 6 8 7 + 0.3225353131684576 7 7 1 1 + 0.3396208110312242 7 7 2 2 + 0.01359428193967594 7 7 3 1 + 0.3117681406263421 7 7 3 3 + 0.01543335960972699 7 7 4 2 + 0.3174976234512073 7 7 4 4 + -0.03563392161125258 7 7 5 1 + -0.01921086940015643 7 7 5 3 + 0.3232766717271552 7 7 5 5 + 0.03934281828745767 7 7 6 2 + -0.02067441091830612 7 7 6 4 + 0.32821079148431 7 7 6 6 + 0.0002355174059413987 7 7 7 1 + 0.04182962695420487 7 7 7 3 + 0.0163191935637751 7 7 7 5 + 0.3709231007159722 7 7 7 7 + 0.0009778661905347954 7 7 8 2 + -0.03985550343665119 7 7 8 4 + 0.01735395007729829 7 7 8 6 + 0.3574611768324225 7 7 8 8 + -0.0009243703453183351 8 1 2 1 + -0.0008170031280246243 8 1 3 2 + 0.001509262734822658 8 1 4 1 + -0.01717027213147524 8 1 4 3 + 0.02040743071452169 8 1 5 2 + 0.03212799979008064 8 1 5 4 + -0.02056642869824814 8 1 6 1 + 0.02634548660908667 8 1 6 3 + -0.01526826028562702 8 1 6 5 + 0.02992563328161791 8 1 7 2 + 0.01900636401629372 8 1 7 4 + -0.001092005122187534 8 1 7 6 + 0.05306504253486071 8 1 8 1 + -0.01932303533274308 8 1 8 3 + 0.001358398288693484 8 1 8 5 + -0.001118325658904838 8 1 8 7 + 0.003259294716182596 8 2 1 1 + 0.0008416569953566728 8 2 2 2 + -0.001243153876571396 8 2 3 1 + 0.02225691657236468 8 2 3 3 + -0.02033870323993326 8 2 4 2 + -0.009457542300655196 8 2 4 4 + 0.02416738720835742 8 2 5 1 + -0.01748174286329562 8 2 5 3 + -0.01079286021170053 8 2 5 5 + 0.01143017699894074 8 2 6 2 + -0.01879952149581441 8 2 6 4 + 0.02085303413180926 8 2 6 6 + 0.03779349016366375 8 2 7 1 + 0.01285006675836149 8 2 7 3 + -0.0191476740521644 8 2 7 5 + 0.0009778661905348839 8 2 7 7 + 0.03902398668641941 8 2 8 2 + 0.02380706850120509 8 2 8 4 + -0.00149487435382537 8 2 8 6 + 0.003922231448494082 8 2 8 8 + 0.004038644591538265 8 3 2 1 + 0.02762561424019742 8 3 3 2 + -0.02449451241825078 8 3 4 1 + 0.01019001929831588 8 3 4 3 + -0.02040781827369254 8 3 5 2 + -0.005172568108815266 8 3 5 4 + 0.04028883854606786 8 3 6 1 + 0.006277833576495177 8 3 6 3 + 0.01102499622384145 8 3 6 5 + 0.02502186010987521 8 3 7 2 + -0.02147949065554438 8 3 7 4 + 0.02793323805647857 8 3 7 6 + -0.01932303533274309 8 3 8 1 + 0.04203231718208127 8 3 8 3 + -0.02491302824185763 8 3 8 5 + 0.005081915540519287 8 3 8 7 + 0.002977681073939271 8 4 1 1 + -0.03685664206883338 8 4 2 2 + -0.03661973803322331 8 4 3 1 + 0.0109514142283656 8 4 3 3 + -0.0106393323096061 8 4 4 2 + -0.004336723521982576 8 4 4 4 + 0.05886294599317782 8 4 5 1 + -0.006622443443183685 8 4 5 3 + -0.004616062806048784 8 4 5 5 + -0.03917468004632282 8 4 6 2 + -0.007305587487063475 8 4 6 4 + 0.01164204420754546 8 4 6 6 + 0.02346457363052395 8 4 7 1 + -0.03999648957680425 8 4 7 3 + -0.01062442634036533 8 4 7 5 + -0.03985550343665095 8 4 7 7 + 0.02380706850120514 8 4 8 2 + 0.06267655506312379 8 4 8 4 + -0.04025686646966539 8 4 8 6 + 0.003060458728385032 8 4 8 8 + 0.05106990181782987 8 5 2 1 + -0.02374471086780002 8 5 3 2 + 0.07399502880957348 8 5 4 1 + -0.0100463813330219 8 5 4 3 + -0.04355929306025461 8 5 5 2 + -0.006411368905666072 8 5 5 4 + -0.02436559391300818 8 5 6 1 + 0.04483037906287141 8 5 6 3 + -0.01143749975685839 8 5 6 5 + -0.02724464634598892 8 5 7 2 + -0.04623491641720331 8 5 7 4 + -0.02424489262452517 8 5 7 6 + 0.001358398288693496 8 5 8 1 + -0.02491302824185771 8 5 8 3 + 0.08076584174486622 8 5 8 5 + 0.05827244648852593 8 5 8 7 + -0.07700497350018679 8 6 1 1 + 1.07552855510562e-15 8 6 2 1 + 0.01634767847087016 8 6 2 2 + 0.08911325905835704 8 6 3 1 + 0.0002348385631721073 8 6 3 3 + -0.06758823107280384 8 6 4 2 + -0.02197555943861428 8 6 4 4 + -0.0372785214645005 8 6 5 1 + 0.0601791785210283 8 6 5 3 + -0.02275893004965875 8 6 5 5 + 0.03218861630840238 8 6 6 2 + 0.06247468668706983 8 6 6 4 + -0.002379384803869466 8 6 6 6 + -0.001540566308341948 8 6 7 1 + 0.03282441095023221 8 6 7 3 + -0.07325083845639153 8 6 7 5 + 0.01735395007729827 8 6 7 7 + -0.001494874353825382 8 6 8 2 + -0.04025686646966547 8 6 8 4 + 0.1012860645052663 8 6 8 6 + -0.08908694706088738 8 6 8 8 + 1.490561146733071e-15 8 7 1 1 + 0.1354069734259122 8 7 2 1 + 0.08726034486763698 8 7 3 2 + 0.05298564742257043 8 7 4 1 + -0.1000964484193152 8 7 4 3 + -0.05512869153668255 8 7 5 2 + -0.08151389358805228 8 7 5 4 + 0.003469277151610727 8 7 6 1 + 0.04739596083267588 8 7 6 3 + -0.1051865533809677 8 7 6 5 + -0.0009966599751359429 8 7 7 2 + -0.05938831669463146 8 7 7 4 + 0.09657596132850892 8 7 7 6 + -0.001118325658904869 8 7 8 1 + 0.005081915540519268 8 7 8 3 + 0.05827244648852607 8 7 8 5 + 0.1568976063616374 8 7 8 7 + 1.00895854171501e-15 8 7 8 8 + 0.4044233451490638 8 8 1 1 + 0.3254369198479696 8 8 2 2 + -0.07831915153793875 8 8 3 1 + 0.3150948068163651 8 8 3 3 + 0.0846019219645886 8 8 4 2 + 0.3433586005772226 8 8 4 4 + 0.003679217178800155 8 8 5 1 + -0.08183764070437517 8 8 5 3 + 0.3500450832315033 8 8 5 5 + 0.006111038848462702 8 8 6 2 + -0.08637299036698511 8 8 6 4 + 0.3356900994505371 8 8 6 6 + 0.002904688977815358 8 8 7 1 + 0.008238205877387661 8 8 7 3 + 0.09206005894086305 8 8 7 5 + 0.3574611768324223 8 8 7 7 + 0.003922231448494039 8 8 8 2 + 0.003060458728385008 8 8 8 4 + -0.08908694706088757 8 8 8 6 + 0.4571216167167121 8 8 8 8 + -2.596564468342772 1 1 0 0 + 1.865219984295888e-15 2 1 0 0 + -2.399365560916459 2 2 0 0 + 0.1424861803955349 3 1 0 0 + -2.243142834840991 3 3 0 0 + -0.1972834871598152 4 2 0 0 + -2.158809817255034 4 4 0 0 + 0.04418594869156806 5 1 0 0 + 0.2325100327505712 5 3 0 0 + -1.994893204681499 5 5 0 0 + -0.1000806345131301 6 2 0 0 + 0.1927964960051053 6 4 0 0 + -1.740632839812299 6 6 0 0 + -0.03336452176224047 7 1 0 0 + -0.07069787434416164 7 3 0 0 + -0.1996729158066857 7 5 0 0 + -1.549020898433734 7 7 0 0 + -0.0168970644849751 8 2 0 0 + 0.04155238929425725 8 4 0 0 + 0.1546320108630275 8 6 0 0 + -1.461392065158685 8 8 0 0 + 7.272406812929145 0 0 0 0 From acb3b9791021471bf11f78e6390a757825f550c4 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:58:25 +0000 Subject: [PATCH 19/31] Adding new test file(delete later) --- notebooks/test.py | 221 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 notebooks/test.py diff --git a/notebooks/test.py b/notebooks/test.py new file mode 100644 index 0000000..21b6b0f --- /dev/null +++ b/notebooks/test.py @@ -0,0 +1,221 @@ +import numpy as np +import pyci +import numpy as np +import iodata +from iodata import load_one +import pyscf +from pyscf import scf, fci +import time + +data = load_one("/workspaces/PyCI/pyci/test/data/h6_sto_3g.fcidump", fmt="fcidump") +h2=data.two_ints['two_mo'] +h1=data.one_ints['core_mo'] + +n=h1.shape[0] +h1_diag=np.diag(h1) +s1=np.diag(h1_diag) +s2=np.zeros(h2.shape) +for p in range(n): + s2[p][p][p][p]=h2[p][p][p][p] + for q in range(n): + if p!=q: + s2[p][q][q][p]=h2[p][q][q][p] + s2[p][q][p][q]=h2[p][q][p][q] + s2[p][p][q][q]=h2[p][p][q][q] + else: + continue + +occs = (3,3) +nbasis = 6 + +ecore = 0.0 +ham = pyci.hamiltonian(ecore, s1, s2) +wfn3 = pyci.doci_wfn(ham.nbasis, *occs) +wfn3.add_all_dets() +op = pyci.sparse_op(ham, wfn3) +e_vals, e_vecs3 = op.solve(n=1, tol=1.0e-9) +e_vals,wfn3 +d1, d2, d3, d4, d5, d6, d7 = pyci.compute_rdms_1234(wfn3, e_vecs3[0]) + + +rdm1_pyci,rdm2_pyci,rdm3_pyci,rdm4_pyci=pyci.spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7) +print(np.einsum('ijklijkl ->',rdm4_pyci)) +abbbabbb=rdm4_pyci[:n,n:,n:,n:,:n,n:,n:,n:] +baaabaaa=rdm4_pyci[n:,:n,:n,:n,n:,:n,:n,:n] +aaabaaab=rdm4_pyci[:n,:n,:n,n:,:n,:n,:n,n:] +bbbabbba=rdm4_pyci[n:,n:,n:,:n,n:,n:,n:,:n] +abababab=rdm4_pyci[:n,n:,:n,n:,:n,n:,:n,n:] +babababa=rdm4_pyci[n:,:n,n:,:n,n:,:n,n:,:n] +aaaaaaaa = rdm4_pyci[:n,:n,:n,:n,:n,:n,:n,:n] +bbbbbbbb = rdm4_pyci[n:,n:,n:,n:,n:,n:,n:,n:] +print(np.isclose(np.einsum('ijklijkl -> ', rdm4_pyci),(occs[0] * 2)*(occs[0] * 2 - 1) * (occs[0] * 2 - 2) * (occs[0] * 2 - 3) ,rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', abbbabbb),(occs[0]) * (occs[1]) * (occs[1] - 1) * (occs[1] - 2) ,rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', baaabaaa),(occs[1]) * (occs[0]) * (occs[0] - 1) * (occs[0] - 2), rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', aaabaaab),(occs[1]) * (occs[0]) * (occs[0] - 1) * (occs[0] - 2) , rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', bbbabbba),(occs[0]) * (occs[1]) * (occs[1] - 1) * (occs[1] - 2) , rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', abababab),(occs[0]) * (occs[1]) * (occs[0] - 1) * (occs[1] - 1) , rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', babababa),(occs[0]) * (occs[1]) * (occs[0] - 1) * (occs[1] - 1) , rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', aaaaaaaa),(occs[0])*(occs[0] - 1) * (occs[0] - 2) * (occs[0] - 3) , rtol=0, atol=1.0e-2)) +print(np.isclose(np.einsum('ijklijkl -> ', bbbbbbbb),(occs[1])*(occs[1]- 1) * (occs[1] - 2) * (occs[1] - 3), rtol=0, atol=1.0e-2)) + + + +#Defining d3 blocks +d3_aabaab_block=rdm3_pyci[:n, :n, n:, :n, :n, n:] +d3_bbabba_block=rdm3_pyci[n:, n:, :n, n:, n:, :n] +d3_abbabb_block=rdm3_pyci[:n, n:, n:, :n, n:, n:] +d3_baabaa_block=rdm3_pyci[n:, :n, :n, n:, :n, :n] +d3_aaaaaa_block=rdm3_pyci[:n, :n, :n, :n, :n, :n] +d3_bbbbbb_block=rdm3_pyci[n:, n:, n:, n:, n:, n:] + +#Defining d2 blocks + +d2_abab_block=rdm2_pyci[:n, n:, :n, n:] +d2_baba_block=rdm2_pyci[n:, :n, n:, :n] +d2_aaaa_block=rdm2_pyci[:n, :n, :n, :n] +d2_bbbb_block=rdm2_pyci[n:, n:, n:, n:] + +# # Testing aaabaaab/bbbabbba blocks +#With the 3rdms +fac=1/(occs[0]-2) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',aaabaaab)*fac,d3_aabaab_block)) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',aaabaaab)*fac,d3_aabaab_block)) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',aaabaaab)*fac,d3_aabaab_block)) +fac=1/(occs[1]) +print(np.allclose(np.einsum('ijkplmnp ->ijklmn',aaabaaab)*fac,d3_aaaaaa_block)) +fac=1/(occs[1]-2) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',bbbabbba)*fac,d3_bbabba_block)) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',bbbabbba)*fac,d3_bbabba_block)) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',bbbabbba)*fac,d3_bbabba_block)) +fac=1/(occs[1]) +print(np.allclose(np.einsum('ijkplmnp ->ijklmn',bbbabbba)*fac,d3_bbbbbb_block)) + +#With the 2rdms +fac=1/((occs[0]-2)*(occs[0]-1)) +print(np.allclose(np.einsum('pqijpqkl ->ijkl',aaabaaab)*fac,d2_abab_block)) +print(np.allclose(np.einsum('piqjpkql ->ijkl',aaabaaab)*fac,d2_abab_block)) +print(np.allclose(np.einsum('ipqjkpql ->ijkl',aaabaaab)*fac,d2_abab_block)) +fac=1/((occs[1]-2)*(occs[1]-1)) +print(np.allclose(np.einsum('pqijpqkl ->ijkl',bbbabbba)*fac,d2_baba_block)) +print(np.allclose(np.einsum('piqjpkql ->ijkl',bbbabbba)*fac,d2_baba_block)) +print(np.allclose(np.einsum('ipqjkpql ->ijkl',bbbabbba)*fac,d2_baba_block)) +fac=1/((occs[1])*(occs[0]-2)) +print(np.allclose(np.einsum('ijpqklpq ->ijkl',aaabaaab)*fac,d2_aaaa_block)) +fac=1/((occs[0])*(occs[1]-2)) +print(np.allclose(np.einsum('ijpqklpq ->ijkl',bbbabbba)*fac,d2_bbbb_block)) + +# # Testing abababab/babababa blocks + +#With the 3rdms +fac=1/(occs[1]-1) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',abababab)*fac,d3_aabaab_block)) +fac=1/(occs[0]-1) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',abababab)*fac,d3_abbabb_block)) +fac=1/(occs[0]-1) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',babababa)*fac,d3_bbabba_block)) +fac=1/(occs[1]-1) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',babababa)*fac,d3_baabaa_block)) + +#With the 2rdms + +fac=1/((occs[0]-1) * (occs[1]-1)) +print(np.allclose(np.einsum('pqijpqkl ->ijkl',abababab)*fac, d2_abab_block)) +print(np.allclose(np.einsum('ipqjkpql ->ijkl',abababab)*fac, d2_abab_block)) +print(np.allclose(np.einsum('ijpqklpq ->ijkl',abababab)*fac, d2_abab_block)) +print(np.allclose(np.einsum('pqijpqkl ->ijkl',babababa)*fac, d2_baba_block)) +print(np.allclose(np.einsum('ipqjkpql ->ijkl',babababa)*fac, d2_baba_block)) +print(np.allclose(np.einsum('ijpqklpq ->ijkl',babababa)*fac, d2_baba_block)) +fac=1/((occs[0]) * (occs[0]-1)) +print(np.allclose(np.einsum('piqjpkql ->ijkl',abababab)*fac,d2_bbbb_block)) +fac=1/((occs[0]-1) * (occs[1]-1)) +print(np.allclose(np.einsum('pijqpklq ->ijkl',abababab)*fac,d2_baba_block)) +fac=1/((occs[1]) * (occs[1]-1)) +print(np.allclose(np.einsum('ipjqkplq ->ijkl',abababab)*fac,d2_aaaa_block)) + +fac=1/((occs[1]) * (occs[1]-1)) +print(np.allclose(np.einsum('piqjpkql ->ijkl',babababa)*fac,d2_aaaa_block)) +fac=1/((occs[1]-1) * (occs[0]-1)) +print(np.allclose(np.einsum('pijqpklq ->ijkl',babababa)*fac,d2_abab_block)) +fac=1/((occs[0]) * (occs[0]-1)) +print(np.allclose(np.einsum('ipjqkplq ->ijkl',babababa)*fac,d2_bbbb_block)) + +# # Testing abbbabbb/baaabaaa blocks + +#With the 3rdms +fac=1 / (occs[1]-2) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',abbbabbb)*fac, d3_abbabb_block)) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',abbbabbb)*fac, d3_abbabb_block)) +print(np.allclose(np.einsum('ijkplmnp ->ijklmn',abbbabbb)*fac, d3_abbabb_block)) +fac=1 / (occs[0]) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',abbbabbb)*fac, d3_bbbbbb_block)) + +fac=1 / (occs[0]-2) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',baaabaaa)*fac, d3_baabaa_block)) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',baaabaaa)*fac, d3_baabaa_block)) +print(np.allclose(np.einsum('ijkplmnp ->ijklmn',baaabaaa)*fac, d3_baabaa_block)) +fac=1 / (occs[1]) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',baaabaaa)*fac, d3_aaaaaa_block)) + + +#With the 2rdms + +fac=1 / ((occs[1] - 2) * (occs[0])) +print(np.allclose(np.einsum('pqijpqkl ->ijkl',abbbabbb)*fac, d2_bbbb_block)) +print(np.allclose(np.einsum('piqjpkql ->ijkl',abbbabbb)*fac, d2_bbbb_block)) +print(np.allclose(np.einsum('pijqpklq ->ijkl',abbbabbb)*fac, d2_bbbb_block)) + +fac=1 / ((occs[1] - 2) * (occs[1] - 1)) +print(np.allclose(np.einsum('ipqjkpql ->ijkl',abbbabbb)*fac, d2_abab_block)) +print(np.allclose(np.einsum('ipjqkplq ->ijkl',abbbabbb)*fac, d2_abab_block)) +print(np.allclose(np.einsum('ijpqklpq ->ijkl',abbbabbb)*fac, d2_abab_block)) + +fac=1 / ((occs[0] - 2) * (occs[1])) +print(np.allclose(np.einsum('pqijpqkl ->ijkl',baaabaaa)*fac, d2_aaaa_block)) +print(np.allclose(np.einsum('piqjpkql ->ijkl',baaabaaa)*fac, d2_aaaa_block)) +print(np.allclose(np.einsum('pijqpklq ->ijkl',baaabaaa)*fac, d2_aaaa_block)) + +fac=1 / ((occs[0] - 2) * (occs[0] - 1)) +print(np.allclose(np.einsum('ipqjkpql ->ijkl',baaabaaa)*fac, d2_baba_block)) +print(np.allclose(np.einsum('ipjqkplq ->ijkl',baaabaaa)*fac, d2_baba_block)) +print(np.allclose(np.einsum('ijpqklpq ->ijkl',baaabaaa)*fac, d2_baba_block)) + +''' +# # Testing All-alpha/beta blocks +#With the 3rdms +fac=1/(occs[0]-3) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) +print(np.allclose(np.einsum('ijkplmnp ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) +fac=1/(occs[1]-3) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) +print(np.allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) +print(np.allclose(np.einsum('ipjklpmn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) +print(np.allclose(np.einsum('ijpklmpn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) +print(np.allclose(np.einsum('ijkplmnp ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) + +#With the 2rdms +fac=1/((occs[0]-3)*(occs[0]-2)) +print(np.allclose(np.einsum('pqijpqkl ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) +print(np.allclose(np.einsum('piqjpkql ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) +print(np.allclose(np.einsum('ipqjkpql ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) +print(np.allclose(np.einsum('ipjqkplq ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) +print(np.allclose(np.einsum('pijqpklq ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) +print(np.allclose(np.einsum('ijpqklpq ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) + +fac=1/((occs[1]-3)*(occs[1]-2)) +print(np.allclose(np.einsum('pqijpqkl ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) +print(np.allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) +print(np.allclose(np.einsum('ipqjkpql ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) +print(np.allclose(np.einsum('ipjqkplq ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) +print(np.allclose(np.einsum('pijqpklq ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) +print(np.allclose(np.einsum('ijpqklpq ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) +''' +#aaaaaaa normalized to (occs[0])*(occs[0]-1)*(occs[0]-2)*(occs[1]-3) +#abababab normalized to (occs[0])*(occs[1])*(occs[0]-1)*(occs[1]-1) +#abbbabbb normalized to (occs[0])*(occs[1])*(occs[1]-1)*(occs[1]-2) +#aaabaaab normalized to (occs[1])*(occs[0])*(occs[0]-1)*(occs[0]-2) +#rdm4 must be normalized to (wfn.nocc_up * 2)*(wfn.nocc_up * 2 - 1) * (wfn.nocc_up * 2 - 2)* (wfn.nocc_up * 2 - 3) + + From 1ee1e25c12569645d70f2104eb1e295128b38807 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:59:04 +0000 Subject: [PATCH 20/31] Adding computation of general 4RDM with the appropiate symmetries --- pyci/utility.py | 201 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 163 insertions(+), 38 deletions(-) diff --git a/pyci/utility.py b/pyci/utility.py index af7330e..2da1134 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -150,7 +150,7 @@ def spinize_rdms(d1, d2): return rdm1, rdm2 -def spinize_rdms_1234(d1, d2, d3, d4): +def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): r""" Convert the DOCI matrices or FullCI RDM spin-blocks to full, generalized RDMs. @@ -164,6 +164,12 @@ def spinize_rdms_1234(d1, d2, d3, d4): d_3 = \left .. math:: d_4 = \left + .. math:: + d_5 = \left + .. math:: + d_6 = \left + .. math:: + d_7 = \left Returns ------- rdm1 : numpy.ndarray @@ -172,6 +178,8 @@ def spinize_rdms_1234(d1, d2, d3, d4): Generalized two-particle RDM. rdm3 : numpy.ndarray Generalized three-particle RDM. + rdm4 : numpy.ndarray + Generalized four-particle RDM. """ if d1.ndim != 2: raise TypeError('wfn must be a DOCI') @@ -180,6 +188,7 @@ def spinize_rdms_1234(d1, d2, d3, d4): rdm1 = np.zeros((nspin, nspin), dtype=np.double) rdm2 = np.zeros((nspin, nspin, nspin, nspin), dtype=np.double) rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) + rdm4 = np.zeros((nspin, nspin, nspin, nspin, nspin, nspin, nspin, nspin), dtype=np.float64) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -188,10 +197,20 @@ def spinize_rdms_1234(d1, d2, d3, d4): baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] abba = rdm2[:nbasis, nbasis:, nbasis:, :nbasis] baab = rdm2[nbasis:, :nbasis, :nbasis, nbasis:] - aaaaaa = rdm3[:nbasis,:nbasis,:nbasis,:nbasis,:nbasis,:nbasis] - bbbbbb = rdm3[nbasis:,nbasis:,nbasis:,nbasis:,nbasis:,nbasis:] - bbabba = rdm3[nbasis:,nbasis:,:nbasis,nbasis:,nbasis:,:nbasis] - aabaab = rdm3[:nbasis,:nbasis,nbasis:,:nbasis,:nbasis,nbasis:] + aaaaaa = rdm3[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] + bbbbbb = rdm3[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] + bbabba = rdm3[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, :nbasis] + aabaab = rdm3[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, nbasis:] + abbabb = rdm3[:nbasis, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:] + baabaa = rdm3[nbasis:, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] + aaaaaaaa = rdm4[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] + bbbbbbbb = rdm4[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] + aaabaaab = rdm4[:nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:] + bbbabbba = rdm4[nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis] + abbbabbb = rdm4[:nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:] + baaabaaa = rdm4[nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis] + abababab = rdm4[:nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:] + babababa = rdm4[nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis] for p in range(nbasis): aa[p, p] = d1[p, p] bb[p, p] = d1[p, p] @@ -202,31 +221,100 @@ def spinize_rdms_1234(d1, d2, d3, d4): bbbb[p, q, p, q] += d2[p, q] abab[p, q, p, q] += d2[p, q] baba[p, q, p, q] += d2[p, q] - bbabba[p, q, q, p, q, q] += 2.0 * d2[p, q] - aabaab[p, q, q, p, q, q] += 2.0 * d2[p, q] + bbabba[p, q, q, p, q, q] += d2[p, q] + aabaab[p, q, q, p, q, q] += d2[p, q] + abbabb[p, p, q, p, p, q] += d2[p, q] + baabaa[p, p, q, p, p, q] += d2[p, q] + abababab[p, p, q, q, p, p, q, q] += d2[p, q] #this had a *2.0 + babababa[p, p, q, q, p, p, q, q] += d2[p, q] #this had a *2.0 for r in range(nbasis): - bbabba[p, q, q, p, r, r] += 2.0 * d4[p, q, r] - aabaab[p, q, q, p, r, r] += 2.0 * d4[p, q, r] + bbabba[p, q, q, p, r, r] += d4[p, q, r] + aabaab[p, q, q, p, r, r] += d4[p, q, r] + abbabb[q, q, p, r, r, p] += d4[p, q, r] + baabaa[q, q, p, r, r, p] += d4[p, q, r] aaaaaa[p, q, r, p, q, r] += d3[p, q, r] bbbbbb[p, q, r, p, q, r] += d3[p, q, r] bbabba[p, q, r, p, q, r] += d3[p, q, r] aabaab[p, q, r, p, q, r] += d3[p, q, r] + abbbabbb[p, p, q, r, p, p, q, r] += d3[p, q, r] #this had a *2.0 + baaabaaa[p, p, q, r, p, p, q, r] += d3[p, q, r] #this had a *2.0 + aaabaaab[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new + bbbabbba[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new + abababab[p, p, q, r, p, p, q, r] += d3[p, q, r] + babababa[p, p, q, r, p, p, q, r] += d3[p, q, r] + abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new + babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new + abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] #this had a *2.0 + babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] #this had a *2.0 + abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] #this is new + babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] #this is new + for s in range(nbasis): + aaaaaaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + bbbbbbbb[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + aaabaaab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + baaabaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + abababab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + babababa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + aaabaaab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + bbbabbba[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + abababab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + babababa[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + abbbabbb[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new + baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new + abababab[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new + babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new + abababab[p, p, q, q, r, r, s, s] += d7[p, q, r, s] + babababa[p, p, q, q, r, r, s, s] += d7[p, q, r, s] + rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 - rdm3 += np.einsum('ijklmn -> ijknlm', rdm3)+\ - np.einsum('ijklmn -> ijkmnl', rdm3) + rdm3 += np.einsum('pqrstu -> pqrust', rdm3)+\ + np.einsum('pqrstu -> pqrtus', rdm3) rdm3 *= 1 - rdm3 -= np.einsum('ijklmn -> ijkmln', rdm3) - rdm3 += np.einsum('ijklmn -> kijlmn', rdm3)+\ - np.einsum('ijklmn -> jkilmn', rdm3) + rdm3 -= np.einsum('pqrstu -> pqrtsu', rdm3) + rdm3 += np.einsum('pqrstu -> rpqstu', rdm3)+\ + np.einsum('pqrstu -> qrpstu', rdm3) aaaaaa *= 1/3 bbbbbb *= 1/3 - rdm3 -= np.einsum('ijklmn -> jiklmn', rdm3) + rdm3 -= np.einsum('pqrstu -> qprstu', rdm3) rdm3 *= 0.5 - return rdm1, rdm2, rdm3 - -def spin_free_rdms(d1, d2, d3=None, d4=None): + rdm4_copy=np.copy(rdm4) + rdm4 += np.einsum('pqrstuvw -> pqrstwuv', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrstvwu', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsutwv', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsuvtw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsuwvt', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsvtuw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsvwtu', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsvuwt', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrswtvu', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrswutv', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrswvut', rdm4_copy) + rdm4 *=1 + del rdm4_copy + rdm4 -= np.einsum('pqrstuvw -> pqrsutvw', rdm4) + rdm4_copy=np.copy(rdm4) + rdm4 += np.einsum('pqrstuvw -> psqrtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> prsqtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> qpsrtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> qrpstuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> qsrptuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> rpqstuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> rspqtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> rqsptuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> sprqtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> sqprtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> srqptuvw', rdm4_copy) + del rdm4_copy + rdm4 *= 0.5 + aaaaaaaa *= 1/6 + bbbbbbbb *= 1/6 + rdm4 -= np.einsum('pqrstuvw -> qprstuvw', rdm4) + rdm4 *= 0.5 + return rdm1, rdm2, rdm3, rdm4 + +def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): r""" Wrapper of spinze_rdms function that sums over the spin degree of freedom @@ -234,14 +322,21 @@ def spin_free_rdms(d1, d2, d3=None, d4=None): Parameters ---------- - d1 : numpy.ndarray - :math:`D_0` matrix or FullCI 1-RDM spin-blocks. - d2 : numpy.ndarray - :math:`D_2` matrix or FullCI 2-RDM spin-blocks. - d3 : numpy.ndarray - :math `D_3` matrix for 3-RDM spin-blocks - d4 : numpy.ndarray - :math `D_4` matrix for 3-RDM spin-blocks + .. math:: + d_0 = \left + .. math:: + d_2 = \left + .. math:: + d_3 = \left + .. math:: + d_4 = \left + .. math:: + d_5 = \left + .. math:: + d_6 = \left + .. math:: + d_7 = \left + Returns Returns ------- @@ -251,21 +346,23 @@ def spin_free_rdms(d1, d2, d3=None, d4=None): Spin traced two-particle RDM. rdm3 : numpy.ndarray Spin traced three-particle RDM. + rdm4 : numpy.ndarray + Spin traced four-particle RDM. """ nbasis = d1.shape[1] - rdm1, rdm2, rdm3 = spinize_rdms_1234(d1, d2, d3, d4) - rdm1_sf = np.zeros((nbasis, nbasis), dtype=np.double) - rdm2_sf = np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) - rdm3_sf = np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) - aa = rdm1[:nbasis, :nbasis] - bb = rdm1[nbasis:, nbasis:] - aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] - bbbb = rdm2[nbasis:, nbasis:, nbasis:, nbasis:] - abab = rdm2[:nbasis, nbasis:, :nbasis, nbasis:] - baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] if d1.ndim == 2: # DOCI matrices - rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis,nbasis,nbasis), dtype=np.double) + rdm1_sf = np.zeros((nbasis, nbasis), dtype=np.double) + rdm2_sf = np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm4_sf=np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm1, rdm2, rdm3, rdm4 = spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7) + aa = rdm1[:nbasis, :nbasis] + bb = rdm1[nbasis:, nbasis:] + aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] + bbbb = rdm2[nbasis:, nbasis:, nbasis:, nbasis:] + abab = rdm2[:nbasis, nbasis:, :nbasis, nbasis:] + baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] aaaaaa= rdm3[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] bbbbbb= rdm3[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] bbabba= rdm3[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, :nbasis] @@ -274,12 +371,40 @@ def spin_free_rdms(d1, d2, d3=None, d4=None): aabaab = rdm3[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, nbasis:] abaaba = rdm3[:nbasis, nbasis:, :nbasis, :nbasis, nbasis:, :nbasis] baabaa = rdm3[nbasis:, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] + aaaaaaaa = rdm4[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] + bbbbbbbb = rdm4[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] + aaabaaab = rdm4[:nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:] + bbbabbba = rdm4[nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis] + abbbabbb = rdm4[:nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:] + baaabaaa = rdm4[nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis] + abababab = rdm4[:nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:] + babababa = rdm4[nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis] + aabaaaba = rdm4[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis] + bbabbbab = rdm4[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:] + aabbaabb = rdm4[:nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:] + bbaabbaa = rdm4[nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis] + abaaabaa = rdm4[:nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] + babbbabb = rdm4[nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:] + abbaabba = rdm4[:nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis] + baabbaab = rdm4[nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:] rdm1_sf = aa + bb rdm2_sf = aaaa + abab+ baba+ bbbb rdm3_sf = aaaaaa + bbbbbb + aabaab + abaaba + baabaa + bbabba + babbab + abbabb - return (rdm1_sf, rdm2_sf, rdm3_sf) + rdm4_sf = aaaaaaaa + bbbbbbbb + aaabaaab + bbbabbba + abbbabbb + abbbabbb +baaabaaa \ + + abababab + babababa + aabaaaba + bbabbbab + aabbaabb + bbaabbaa + abaaabaa + babbbabb \ + + abbaabba + baabbaab + return (rdm1_sf, rdm2_sf, rdm3_sf, rdm4_sf) else: # FullCI RDM spin-blocks + rdm1_sf = np.zeros((nbasis, nbasis), dtype=np.double) + rdm2_sf = np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm1, rdm2, rdm3 = spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7) + aa = rdm1[:nbasis, :nbasis] + bb = rdm1[nbasis:, nbasis:] + aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] + bbbb = rdm2[nbasis:, nbasis:, nbasis:, nbasis:] + abab = rdm2[:nbasis, nbasis:, :nbasis, nbasis:] + baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] rdm1_sf = aa + bb rdm2_sf = aaaa + abab + baba + bbbb return (rdm1_sf, rdm2_sf) From 80df38e94b502399388ec59a3664bb684d7960fc Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:59:17 +0000 Subject: [PATCH 21/31] Adding new test_routines for the 4RDM --- pyci/test/test_routines.py | 174 +++++++++++++++++++++++++++++++++++-- 1 file changed, 167 insertions(+), 7 deletions(-) diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index b833c57..01ef666 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -137,7 +137,7 @@ def test_compute_rdms(filename, wfn_type, occs, energy): "filename, wfn_type, occs, energy", [ ("BH_sto-3g_eq", pyci.doci_wfn, (3, 3), -26.93841940211769), - ("h10_chain_1.4_STO-6G", pyci.doci_wfn, (5, 5), -9.84401083866329), + ("h8_fcidump", pyci.doci_wfn, (4, 4),-4.307571602003291 ), ("h6_sto_3g", pyci.doci_wfn, (3, 3), -5.877285606582455), ], ) @@ -149,7 +149,7 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): es, cs = op.solve(n=1, tol=1.0e-6) if not isinstance(wfn, pyci.doci_wfn): raise TypeError('Wfn must be DOCI') - d0, d2, d3, d4= pyci.compute_rdms_1234(wfn, cs[0]) + d0, d2, d3, d4, d5, d6, d7 = pyci.compute_rdms_1234(wfn, cs[0]) npt.assert_allclose(np.trace(d0), wfn.nocc_up, rtol=0, atol=1.0e-9) npt.assert_allclose(np.sum(d2), wfn.nocc_up * (wfn.nocc_up - 1), rtol=0, atol=1.0e-9) k0, k2 = pyci.reduce_senzero_integrals(ham.h, ham.v, ham.w, wfn.nocc_up) @@ -157,7 +157,7 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): energy += np.einsum("ij,ij", k0, d0) energy += np.einsum("ij,ij", k2, d2) npt.assert_allclose(energy, es[0], rtol=0.0, atol=1.0e-9) - rdm1, rdm2, rdm3 = pyci.spinize_rdms_1234(d0, d2, d3 ,d4) + rdm1, rdm2, rdm3, rdm4 = pyci.spinize_rdms_1234(d0, d2, d3, d4, d5, d6, d7) assert np.all(np.abs(rdm1 - rdm1.T) < 1e-5) # # Test RDM2 is antisymmetric # for i in range(0, wfn.nbasis * 2): @@ -181,10 +181,12 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): assert np.all(np.abs(rdm3[i, :, i, :, :, :]) < 1e-5) assert np.all(np.abs(rdm3[:, :, :, i, :, i]) < 1e-5) #TEST COMPLETE 3RDM AND BLOCKS TRACES - aabaab=rdm3[:ham.nbasis, :ham.nbasis, ham.nbasis:, :ham.nbasis, :ham.nbasis, ham.nbasis:] - bbabba=rdm3[ham.nbasis:, ham.nbasis:, :ham.nbasis, ham.nbasis:, ham.nbasis:, :ham.nbasis] - aaaaaa=rdm3[:ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis] - bbbbbb=rdm3[ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:] + aabaab = rdm3[:ham.nbasis, :ham.nbasis, ham.nbasis:, :ham.nbasis, :ham.nbasis, ham.nbasis:] + bbabba = rdm3[ham.nbasis:, ham.nbasis:, :ham.nbasis, ham.nbasis:, ham.nbasis:, :ham.nbasis] + aaaaaa = rdm3[:ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis] + bbbbbb = rdm3[ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:] + abbabb = rdm3[:ham.nbasis, ham.nbasis:, ham.nbasis:, :ham.nbasis, ham.nbasis:, ham.nbasis:] + baabaa = rdm3[ham.nbasis:, :ham.nbasis, :ham.nbasis, ham.nbasis:, :ham.nbasis, :ham.nbasis] npt.assert_allclose(np.einsum('ijkijk -> ', rdm3),(wfn.nocc_up * 2)*(wfn.nocc_up * 2 - 1) * (wfn.nocc_up * 2 - 2) ,rtol=0, atol=1.0e-9) npt.assert_allclose(np.einsum('ijkijk -> ', aaaaaa),(wfn.nocc_up) * (wfn.nocc_up - 1) * (wfn.nocc_up - 2) , rtol=0, atol=1.0e-9) npt.assert_allclose(np.einsum('ijkijk -> ', aabaab),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_up - 1) , rtol=0, atol=1.0e-9) @@ -221,6 +223,164 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): fac=(1.0 / (wfn.nocc_dn - 1.0)) npt.assert_allclose(np.einsum('mijmkl->ijkl ', bbabba) * fac,d2_block_baba, rtol=0, atol=1.0e-9) npt.assert_allclose(np.einsum('imjkml->ijkl ', bbabba) * fac,d2_block_baba, rtol=0, atol=1.0e-9) + + # # Test RDM4 is antisymmetric + # "Testing that non Antiysmmetric parts are all zeros." + for i in range(0, wfn.nbasis * 2): + assert np.all(np.abs(rdm4[i, i, i, i, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm4[:, :, :, i, i, i, i]) < 1e-5) + assert np.all(np.abs(rdm4[i, i, :, :, :, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm4[:, :, :, :, :, :, i, i]) < 1e-5) + assert np.all(np.abs(rdm4[:, :, i, i, :, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm4[:, :, :, :, i, i, :, :]) < 1e-5) + assert np.all(np.abs(rdm4[i, :, i, :, :, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm4[:, :, :, :, :, i, :, i]) < 1e-5) + assert np.all(np.abs(rdm4[:, i, :, i, :, :, :, :]) < 1e-5) + assert np.all(np.abs(rdm4[:, :, :, :, i, :, i, :]) < 1e-5) + #TEST COMPLETE 4RDM AND BLOCKS TRACES + abbbabbb = rdm4[:ham.nbasis, ham.nbasis:, ham.nbasis:, ham.nbasis:, :ham.nbasis, ham.nbasis:, ham.nbasis:, ham.nbasis:] + baaabaaa = rdm4[ham.nbasis:, :ham.nbasis, :ham.nbasis, :ham.nbasis, ham.nbasis:, :ham.nbasis, :ham.nbasis, :ham.nbasis] + aaabaaab = rdm4[:ham.nbasis, :ham.nbasis, :ham.nbasis, ham.nbasis:, :ham.nbasis, :ham.nbasis, :ham.nbasis, ham.nbasis:] + bbbabbba = rdm4[ham.nbasis:, ham.nbasis:, ham.nbasis:, :ham.nbasis, ham.nbasis:, ham.nbasis:, ham.nbasis:, :ham.nbasis] + abababab = rdm4[:ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:] + babababa = rdm4[ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis, ham.nbasis:, :ham.nbasis] + aaaaaaaa = rdm4[:ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis, :ham.nbasis] + bbbbbbbb = rdm4[ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:, ham.nbasis:] + npt.assert_allclose(np.einsum('ijklijkl -> ', rdm4),(wfn.nocc_up * 2)*(wfn.nocc_up * 2 - 1) * (wfn.nocc_up * 2 - 2) * (wfn.nocc_up * 2 - 3) ,rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', abbbabbb),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_dn - 1) * (wfn.nocc_dn - 2) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', baaabaaa),(wfn.nocc_dn) * (wfn.nocc_up) * (wfn.nocc_up - 1) * (wfn.nocc_up - 2), rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', aaabaaab),(wfn.nocc_dn) * (wfn.nocc_up) * (wfn.nocc_up - 1) * (wfn.nocc_up - 2) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', bbbabbba),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_dn - 1) * (wfn.nocc_dn - 2) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', abababab),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_up - 1) * (wfn.nocc_dn - 1) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', babababa),(wfn.nocc_up) * (wfn.nocc_dn) * (wfn.nocc_up - 1) * (wfn.nocc_dn - 1) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', aaaaaaaa),(wfn.nocc_up)*(wfn.nocc_up - 1) * (wfn.nocc_up - 2) * (wfn.nocc_up - 3) , rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijklijkl -> ', bbbbbbbb),(wfn.nocc_dn)*(wfn.nocc_dn - 1) * (wfn.nocc_dn - 2) * (wfn.nocc_dn - 3), rtol=0, atol=1.0e-9) + + # # # BLOCK TRACES TESTS + # #ALL-ALPHA/BETA BLOCKS + # With the 3RDM + fac=1 / (wfn.nocc_up - 3) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_dn - 3) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + #With 2RDMs + fac=1 / ((wfn.nocc_up - 3) * (wfn.nocc_up - 2)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_dn - 3) * (wfn.nocc_dn - 2)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',bbbbbbbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + + # #ABABABAB/BABABABA BLOCKS + #With the 3rdms + fac=1 / (wfn.nocc_dn - 1) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',abababab)*fac, aabaab, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_up -1) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',abababab)*fac, abbabb, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_up -1) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',babababa)*fac, bbabba, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_dn - 1) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',babababa)*fac, baabaa, rtol=0, atol=1.0e-9) + #With the 2rdms + fac=1 / ((wfn.nocc_up - 1) * (wfn.nocc_up - 1)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',abababab)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',abababab)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',abababab)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',babababa)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',babababa)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',babababa)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_up) * (wfn.nocc_up - 1)) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',abababab)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_up - 1) * (wfn.nocc_dn - 1)) + npt.assert_allclose(np.einsum('pijqpklq ->ijkl',abababab)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_dn) * (wfn.nocc_dn - 1)) + npt.assert_allclose(np.einsum('ipjqkplq ->ijkl',abababab)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_dn) * (wfn.nocc_dn - 1)) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',babababa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_up - 1) * (wfn.nocc_dn - 1)) + npt.assert_allclose(np.einsum('pijqpklq ->ijkl',babababa)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_up) * (wfn.nocc_up - 1)) + npt.assert_allclose(np.einsum('ipjqkplq ->ijkl',babababa)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + + # AAABAAAB/BBBABBBA BLOCKS + #With the 3rdms + fac=1/(wfn.nocc_up-2) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaabaaab)*fac, aabaab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',aaabaaab)*fac, aabaab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',aaabaaab)*fac, aabaab, rtol=0, atol=1.0e-9) + fac=1/(wfn.nocc_dn) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',aaabaaab)*fac, aaaaaa, rtol=0, atol=1.0e-9) + fac=1/(wfn.nocc_dn-2) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbabbba)*fac, bbabba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',bbbabbba)*fac, bbabba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',bbbabbba)*fac, bbabba, rtol=0, atol=1.0e-9) + fac=1/(wfn.nocc_up) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',bbbabbba)*fac, bbbbbb, rtol=0, atol=1.0e-9) + + #With the 2rdms + fac=1/((wfn.nocc_up-2)*(wfn.nocc_up-1)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',aaabaaab)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',aaabaaab)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',aaabaaab)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + fac=1/((wfn.nocc_dn-2)*(wfn.nocc_dn-1)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',bbbabbba)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',bbbabbba)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',bbbabbba)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + fac=1/((wfn.nocc_dn)*(wfn.nocc_up-2)) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',aaabaaab)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + fac=1/((wfn.nocc_up)*(wfn.nocc_dn-2)) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',bbbabbba)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + + # ABBBABBB/BAAABAAA BLOCKS + #With the 3rdms + fac=1 / (wfn.nocc_dn-2) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',abbbabbb)*fac, abbabb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',abbbabbb)*fac, abbabb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',abbbabbb)*fac, abbabb, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_up) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',abbbabbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_up-2) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',baaabaaa)*fac, baabaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',baaabaaa)*fac, baabaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',baaabaaa)*fac, baabaa, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_dn) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',baaabaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + + #With the 2rdms + fac=1 / ((wfn.nocc_dn - 2) * (wfn.nocc_up)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',abbbabbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',abbbabbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijkl',abbbabbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_dn - 2) * (wfn.nocc_dn - 1)) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',abbbabbb)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijkl',abbbabbb)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',abbbabbb)*fac, d2_block_abab, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_up - 2) * (wfn.nocc_dn)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',baaabaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',baaabaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijkl',baaabaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_up - 2) * (wfn.nocc_up - 1)) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',baaabaaa)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijkl',baaabaaa)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',baaabaaa)*fac, d2_block_baba, rtol=0, atol=1.0e-9) + @pytest.mark.parametrize( From 490ef93fa550c9becc8423394205da98dd5b4932 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:03:42 +0000 Subject: [PATCH 22/31] Modifying spin-free RDMs function --- pyci/utility.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyci/utility.py b/pyci/utility.py index 2da1134..a1c00f7 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -398,7 +398,7 @@ def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): # FullCI RDM spin-blocks rdm1_sf = np.zeros((nbasis, nbasis), dtype=np.double) rdm2_sf = np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) - rdm1, rdm2, rdm3 = spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7) + rdm1, rdm2 = spinize_rdms(d1, d2) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] From 0441aafa62f5fd17d816a3a505079a478e85e6ef Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:04:07 +0000 Subject: [PATCH 23/31] Modyfing _init_ function to include spinize_RDM_1234 and spin_free_rdms --- pyci/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyci/__init__.py b/pyci/__init__.py index 015691b..0edfe19 100644 --- a/pyci/__init__.py +++ b/pyci/__init__.py @@ -57,6 +57,8 @@ "make_senzero_integrals", "reduce_senzero_integrals", "spinize_rdms", + "spinize_rdms_1234", + "spin_free_rdms", "odometer_one_spin", "odometer_two_spin", "add_excitations", From 655bf73e89527e1dcda871b8e54f2573c595c5a1 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 15:55:36 +0000 Subject: [PATCH 24/31] Updating the test rotine for the 4RDM --- pyci/test/test_routines.py | 59 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index 01ef666..43d1729 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -257,36 +257,37 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): npt.assert_allclose(np.einsum('ijklijkl -> ', bbbbbbbb),(wfn.nocc_dn)*(wfn.nocc_dn - 1) * (wfn.nocc_dn - 2) * (wfn.nocc_dn - 3), rtol=0, atol=1.0e-9) # # # BLOCK TRACES TESTS - # #ALL-ALPHA/BETA BLOCKS + # #ALL-ALPHA/BETA BLOCKS (only if wfn.nocc_up/wfn.nocc_up > 3 ) # With the 3RDM - fac=1 / (wfn.nocc_up - 3) - npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) - fac=1 / (wfn.nocc_dn - 3) - npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) - #With 2RDMs - fac=1 / ((wfn.nocc_up - 3) * (wfn.nocc_up - 2)) - npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - fac=1 / ((wfn.nocc_dn - 3) * (wfn.nocc_dn - 2)) - npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',bbbbbbbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + if(wfn.nocc_up > 3): + fac=1 / (wfn.nocc_up - 3) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',aaaaaaaa)*fac, aaaaaa, rtol=0, atol=1.0e-9) + fac=1 / (wfn.nocc_dn - 3) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjklpmn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpklmpn ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) + #With 2RDMs + fac=1 / ((wfn.nocc_up - 3) * (wfn.nocc_up - 2)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + fac=1 / ((wfn.nocc_dn - 3) * (wfn.nocc_dn - 2)) + npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',bbbbbbbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) # #ABABABAB/BABABABA BLOCKS #With the 3rdms From e74e342eaa61e42bf24b5dcec4aa06e3d5ae1827 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 25 Mar 2025 16:30:57 +0000 Subject: [PATCH 25/31] Deleting auxiliary test file --- notebooks/test.py | 221 ---------------------------------------------- pyci/utility.py | 35 ++++---- 2 files changed, 17 insertions(+), 239 deletions(-) delete mode 100644 notebooks/test.py diff --git a/notebooks/test.py b/notebooks/test.py deleted file mode 100644 index 21b6b0f..0000000 --- a/notebooks/test.py +++ /dev/null @@ -1,221 +0,0 @@ -import numpy as np -import pyci -import numpy as np -import iodata -from iodata import load_one -import pyscf -from pyscf import scf, fci -import time - -data = load_one("/workspaces/PyCI/pyci/test/data/h6_sto_3g.fcidump", fmt="fcidump") -h2=data.two_ints['two_mo'] -h1=data.one_ints['core_mo'] - -n=h1.shape[0] -h1_diag=np.diag(h1) -s1=np.diag(h1_diag) -s2=np.zeros(h2.shape) -for p in range(n): - s2[p][p][p][p]=h2[p][p][p][p] - for q in range(n): - if p!=q: - s2[p][q][q][p]=h2[p][q][q][p] - s2[p][q][p][q]=h2[p][q][p][q] - s2[p][p][q][q]=h2[p][p][q][q] - else: - continue - -occs = (3,3) -nbasis = 6 - -ecore = 0.0 -ham = pyci.hamiltonian(ecore, s1, s2) -wfn3 = pyci.doci_wfn(ham.nbasis, *occs) -wfn3.add_all_dets() -op = pyci.sparse_op(ham, wfn3) -e_vals, e_vecs3 = op.solve(n=1, tol=1.0e-9) -e_vals,wfn3 -d1, d2, d3, d4, d5, d6, d7 = pyci.compute_rdms_1234(wfn3, e_vecs3[0]) - - -rdm1_pyci,rdm2_pyci,rdm3_pyci,rdm4_pyci=pyci.spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7) -print(np.einsum('ijklijkl ->',rdm4_pyci)) -abbbabbb=rdm4_pyci[:n,n:,n:,n:,:n,n:,n:,n:] -baaabaaa=rdm4_pyci[n:,:n,:n,:n,n:,:n,:n,:n] -aaabaaab=rdm4_pyci[:n,:n,:n,n:,:n,:n,:n,n:] -bbbabbba=rdm4_pyci[n:,n:,n:,:n,n:,n:,n:,:n] -abababab=rdm4_pyci[:n,n:,:n,n:,:n,n:,:n,n:] -babababa=rdm4_pyci[n:,:n,n:,:n,n:,:n,n:,:n] -aaaaaaaa = rdm4_pyci[:n,:n,:n,:n,:n,:n,:n,:n] -bbbbbbbb = rdm4_pyci[n:,n:,n:,n:,n:,n:,n:,n:] -print(np.isclose(np.einsum('ijklijkl -> ', rdm4_pyci),(occs[0] * 2)*(occs[0] * 2 - 1) * (occs[0] * 2 - 2) * (occs[0] * 2 - 3) ,rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', abbbabbb),(occs[0]) * (occs[1]) * (occs[1] - 1) * (occs[1] - 2) ,rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', baaabaaa),(occs[1]) * (occs[0]) * (occs[0] - 1) * (occs[0] - 2), rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', aaabaaab),(occs[1]) * (occs[0]) * (occs[0] - 1) * (occs[0] - 2) , rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', bbbabbba),(occs[0]) * (occs[1]) * (occs[1] - 1) * (occs[1] - 2) , rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', abababab),(occs[0]) * (occs[1]) * (occs[0] - 1) * (occs[1] - 1) , rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', babababa),(occs[0]) * (occs[1]) * (occs[0] - 1) * (occs[1] - 1) , rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', aaaaaaaa),(occs[0])*(occs[0] - 1) * (occs[0] - 2) * (occs[0] - 3) , rtol=0, atol=1.0e-2)) -print(np.isclose(np.einsum('ijklijkl -> ', bbbbbbbb),(occs[1])*(occs[1]- 1) * (occs[1] - 2) * (occs[1] - 3), rtol=0, atol=1.0e-2)) - - - -#Defining d3 blocks -d3_aabaab_block=rdm3_pyci[:n, :n, n:, :n, :n, n:] -d3_bbabba_block=rdm3_pyci[n:, n:, :n, n:, n:, :n] -d3_abbabb_block=rdm3_pyci[:n, n:, n:, :n, n:, n:] -d3_baabaa_block=rdm3_pyci[n:, :n, :n, n:, :n, :n] -d3_aaaaaa_block=rdm3_pyci[:n, :n, :n, :n, :n, :n] -d3_bbbbbb_block=rdm3_pyci[n:, n:, n:, n:, n:, n:] - -#Defining d2 blocks - -d2_abab_block=rdm2_pyci[:n, n:, :n, n:] -d2_baba_block=rdm2_pyci[n:, :n, n:, :n] -d2_aaaa_block=rdm2_pyci[:n, :n, :n, :n] -d2_bbbb_block=rdm2_pyci[n:, n:, n:, n:] - -# # Testing aaabaaab/bbbabbba blocks -#With the 3rdms -fac=1/(occs[0]-2) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',aaabaaab)*fac,d3_aabaab_block)) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',aaabaaab)*fac,d3_aabaab_block)) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',aaabaaab)*fac,d3_aabaab_block)) -fac=1/(occs[1]) -print(np.allclose(np.einsum('ijkplmnp ->ijklmn',aaabaaab)*fac,d3_aaaaaa_block)) -fac=1/(occs[1]-2) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',bbbabbba)*fac,d3_bbabba_block)) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',bbbabbba)*fac,d3_bbabba_block)) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',bbbabbba)*fac,d3_bbabba_block)) -fac=1/(occs[1]) -print(np.allclose(np.einsum('ijkplmnp ->ijklmn',bbbabbba)*fac,d3_bbbbbb_block)) - -#With the 2rdms -fac=1/((occs[0]-2)*(occs[0]-1)) -print(np.allclose(np.einsum('pqijpqkl ->ijkl',aaabaaab)*fac,d2_abab_block)) -print(np.allclose(np.einsum('piqjpkql ->ijkl',aaabaaab)*fac,d2_abab_block)) -print(np.allclose(np.einsum('ipqjkpql ->ijkl',aaabaaab)*fac,d2_abab_block)) -fac=1/((occs[1]-2)*(occs[1]-1)) -print(np.allclose(np.einsum('pqijpqkl ->ijkl',bbbabbba)*fac,d2_baba_block)) -print(np.allclose(np.einsum('piqjpkql ->ijkl',bbbabbba)*fac,d2_baba_block)) -print(np.allclose(np.einsum('ipqjkpql ->ijkl',bbbabbba)*fac,d2_baba_block)) -fac=1/((occs[1])*(occs[0]-2)) -print(np.allclose(np.einsum('ijpqklpq ->ijkl',aaabaaab)*fac,d2_aaaa_block)) -fac=1/((occs[0])*(occs[1]-2)) -print(np.allclose(np.einsum('ijpqklpq ->ijkl',bbbabbba)*fac,d2_bbbb_block)) - -# # Testing abababab/babababa blocks - -#With the 3rdms -fac=1/(occs[1]-1) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',abababab)*fac,d3_aabaab_block)) -fac=1/(occs[0]-1) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',abababab)*fac,d3_abbabb_block)) -fac=1/(occs[0]-1) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',babababa)*fac,d3_bbabba_block)) -fac=1/(occs[1]-1) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',babababa)*fac,d3_baabaa_block)) - -#With the 2rdms - -fac=1/((occs[0]-1) * (occs[1]-1)) -print(np.allclose(np.einsum('pqijpqkl ->ijkl',abababab)*fac, d2_abab_block)) -print(np.allclose(np.einsum('ipqjkpql ->ijkl',abababab)*fac, d2_abab_block)) -print(np.allclose(np.einsum('ijpqklpq ->ijkl',abababab)*fac, d2_abab_block)) -print(np.allclose(np.einsum('pqijpqkl ->ijkl',babababa)*fac, d2_baba_block)) -print(np.allclose(np.einsum('ipqjkpql ->ijkl',babababa)*fac, d2_baba_block)) -print(np.allclose(np.einsum('ijpqklpq ->ijkl',babababa)*fac, d2_baba_block)) -fac=1/((occs[0]) * (occs[0]-1)) -print(np.allclose(np.einsum('piqjpkql ->ijkl',abababab)*fac,d2_bbbb_block)) -fac=1/((occs[0]-1) * (occs[1]-1)) -print(np.allclose(np.einsum('pijqpklq ->ijkl',abababab)*fac,d2_baba_block)) -fac=1/((occs[1]) * (occs[1]-1)) -print(np.allclose(np.einsum('ipjqkplq ->ijkl',abababab)*fac,d2_aaaa_block)) - -fac=1/((occs[1]) * (occs[1]-1)) -print(np.allclose(np.einsum('piqjpkql ->ijkl',babababa)*fac,d2_aaaa_block)) -fac=1/((occs[1]-1) * (occs[0]-1)) -print(np.allclose(np.einsum('pijqpklq ->ijkl',babababa)*fac,d2_abab_block)) -fac=1/((occs[0]) * (occs[0]-1)) -print(np.allclose(np.einsum('ipjqkplq ->ijkl',babababa)*fac,d2_bbbb_block)) - -# # Testing abbbabbb/baaabaaa blocks - -#With the 3rdms -fac=1 / (occs[1]-2) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',abbbabbb)*fac, d3_abbabb_block)) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',abbbabbb)*fac, d3_abbabb_block)) -print(np.allclose(np.einsum('ijkplmnp ->ijklmn',abbbabbb)*fac, d3_abbabb_block)) -fac=1 / (occs[0]) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',abbbabbb)*fac, d3_bbbbbb_block)) - -fac=1 / (occs[0]-2) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',baaabaaa)*fac, d3_baabaa_block)) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',baaabaaa)*fac, d3_baabaa_block)) -print(np.allclose(np.einsum('ijkplmnp ->ijklmn',baaabaaa)*fac, d3_baabaa_block)) -fac=1 / (occs[1]) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',baaabaaa)*fac, d3_aaaaaa_block)) - - -#With the 2rdms - -fac=1 / ((occs[1] - 2) * (occs[0])) -print(np.allclose(np.einsum('pqijpqkl ->ijkl',abbbabbb)*fac, d2_bbbb_block)) -print(np.allclose(np.einsum('piqjpkql ->ijkl',abbbabbb)*fac, d2_bbbb_block)) -print(np.allclose(np.einsum('pijqpklq ->ijkl',abbbabbb)*fac, d2_bbbb_block)) - -fac=1 / ((occs[1] - 2) * (occs[1] - 1)) -print(np.allclose(np.einsum('ipqjkpql ->ijkl',abbbabbb)*fac, d2_abab_block)) -print(np.allclose(np.einsum('ipjqkplq ->ijkl',abbbabbb)*fac, d2_abab_block)) -print(np.allclose(np.einsum('ijpqklpq ->ijkl',abbbabbb)*fac, d2_abab_block)) - -fac=1 / ((occs[0] - 2) * (occs[1])) -print(np.allclose(np.einsum('pqijpqkl ->ijkl',baaabaaa)*fac, d2_aaaa_block)) -print(np.allclose(np.einsum('piqjpkql ->ijkl',baaabaaa)*fac, d2_aaaa_block)) -print(np.allclose(np.einsum('pijqpklq ->ijkl',baaabaaa)*fac, d2_aaaa_block)) - -fac=1 / ((occs[0] - 2) * (occs[0] - 1)) -print(np.allclose(np.einsum('ipqjkpql ->ijkl',baaabaaa)*fac, d2_baba_block)) -print(np.allclose(np.einsum('ipjqkplq ->ijkl',baaabaaa)*fac, d2_baba_block)) -print(np.allclose(np.einsum('ijpqklpq ->ijkl',baaabaaa)*fac, d2_baba_block)) - -''' -# # Testing All-alpha/beta blocks -#With the 3rdms -fac=1/(occs[0]-3) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) -print(np.allclose(np.einsum('ijkplmnp ->ijklmn',aaaaaaaa)*fac,d3_aaaaaa_block)) -fac=1/(occs[1]-3) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) -print(np.allclose(np.einsum('pijkplmn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) -print(np.allclose(np.einsum('ipjklpmn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) -print(np.allclose(np.einsum('ijpklmpn ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) -print(np.allclose(np.einsum('ijkplmnp ->ijklmn',bbbbbbbb)*fac,d3_bbbbbb_block)) - -#With the 2rdms -fac=1/((occs[0]-3)*(occs[0]-2)) -print(np.allclose(np.einsum('pqijpqkl ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) -print(np.allclose(np.einsum('piqjpkql ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) -print(np.allclose(np.einsum('ipqjkpql ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) -print(np.allclose(np.einsum('ipjqkplq ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) -print(np.allclose(np.einsum('pijqpklq ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) -print(np.allclose(np.einsum('ijpqklpq ->ijklmn',aaaaaaaa)*fac,d2_aaaa_block)) - -fac=1/((occs[1]-3)*(occs[1]-2)) -print(np.allclose(np.einsum('pqijpqkl ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) -print(np.allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) -print(np.allclose(np.einsum('ipqjkpql ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) -print(np.allclose(np.einsum('ipjqkplq ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) -print(np.allclose(np.einsum('pijqpklq ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) -print(np.allclose(np.einsum('ijpqklpq ->ijklmn',bbbbbbbb)*fac,d2_bbbb_block)) -''' -#aaaaaaa normalized to (occs[0])*(occs[0]-1)*(occs[0]-2)*(occs[1]-3) -#abababab normalized to (occs[0])*(occs[1])*(occs[0]-1)*(occs[1]-1) -#abbbabbb normalized to (occs[0])*(occs[1])*(occs[1]-1)*(occs[1]-2) -#aaabaaab normalized to (occs[1])*(occs[0])*(occs[0]-1)*(occs[0]-2) -#rdm4 must be normalized to (wfn.nocc_up * 2)*(wfn.nocc_up * 2 - 1) * (wfn.nocc_up * 2 - 2)* (wfn.nocc_up * 2 - 3) - - diff --git a/pyci/utility.py b/pyci/utility.py index a1c00f7..80535aa 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -225,8 +225,8 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): aabaab[p, q, q, p, q, q] += d2[p, q] abbabb[p, p, q, p, p, q] += d2[p, q] baabaa[p, p, q, p, p, q] += d2[p, q] - abababab[p, p, q, q, p, p, q, q] += d2[p, q] #this had a *2.0 - babababa[p, p, q, q, p, p, q, q] += d2[p, q] #this had a *2.0 + abababab[p, p, q, q, p, p, q, q] += d2[p, q] + babababa[p, p, q, q, p, p, q, q] += d2[p, q] for r in range(nbasis): bbabba[p, q, q, p, r, r] += d4[p, q, r] aabaab[p, q, q, p, r, r] += d4[p, q, r] @@ -236,18 +236,18 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): bbbbbb[p, q, r, p, q, r] += d3[p, q, r] bbabba[p, q, r, p, q, r] += d3[p, q, r] aabaab[p, q, r, p, q, r] += d3[p, q, r] - abbbabbb[p, p, q, r, p, p, q, r] += d3[p, q, r] #this had a *2.0 - baaabaaa[p, p, q, r, p, p, q, r] += d3[p, q, r] #this had a *2.0 - aaabaaab[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new - bbbabbba[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new + abbbabbb[p, p, q, r, p, p, q, r] += d3[p, q, r] + baaabaaa[p, p, q, r, p, p, q, r] += d3[p, q, r] + aaabaaab[q, r, p, p, q, r, p, p] += d3[p, q, r] + bbbabbba[q, r, p, p, q, r, p, p] += d3[p, q, r] abababab[p, p, q, r, p, p, q, r] += d3[p, q, r] babababa[p, p, q, r, p, p, q, r] += d3[p, q, r] - abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new - babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] #this is new - abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] #this had a *2.0 - babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] #this had a *2.0 - abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] #this is new - babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] #this is new + abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] + babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] + abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] + babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] + abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] + babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] for s in range(nbasis): aaaaaaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] bbbbbbbb[p, q, r, s, p, q, r, s] += d5[p, q, r, s] @@ -259,13 +259,12 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): bbbabbba[p, q, r, r, p, q, s, s] += d6[p, q, r, s] abababab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] babababa[p, q, r, r, p, q, s, s] += d6[p, q, r, s] - abbbabbb[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new - baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new - abababab[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new - babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] #this is new + abbbabbb[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + abababab[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] abababab[p, p, q, q, r, r, s, s] += d7[p, q, r, s] - babababa[p, p, q, q, r, r, s, s] += d7[p, q, r, s] - + babababa[p, p, q, q, r, r, s, s] += d7[p, q, r, s] rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 From 560e785f210f7cd5f7b74ef9211eea031ef4bb48 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Wed, 2 Apr 2025 04:26:58 +0000 Subject: [PATCH 26/31] Fixing typo in d7 definition --- pyci/src/rdm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyci/src/rdm.cpp b/pyci/src/rdm.cpp index 5fffe28..8d22d72 100644 --- a/pyci/src/rdm.cpp +++ b/pyci/src/rdm.cpp @@ -241,7 +241,7 @@ void compute_rdms_1234(const DOCIWfn &wfn, const double *coeffs, double *d0, dou d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * k + l] += val2; d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * n + (wfn.nbasis * wfn.nbasis) * q + (wfn.nbasis) * l + k] += val2; d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * l + k] += val2; - d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * k + n] += val2; + d7[(wfn.nbasis * wfn.nbasis * wfn.nbasis ) * q + (wfn.nbasis * wfn.nbasis) * n + (wfn.nbasis) * k + l] += val2; } From ca23e4d9fad51deae40e12bbd93bde3a7158eca0 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Wed, 2 Apr 2025 04:27:25 +0000 Subject: [PATCH 27/31] Fixing mixed-spin block definitions --- pyci/utility.py | 55 ++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/pyci/utility.py b/pyci/utility.py index 80535aa..fea3a7e 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -188,7 +188,7 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): rdm1 = np.zeros((nspin, nspin), dtype=np.double) rdm2 = np.zeros((nspin, nspin, nspin, nspin), dtype=np.double) rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) - rdm4 = np.zeros((nspin, nspin, nspin, nspin, nspin, nspin, nspin, nspin), dtype=np.float64) + rdm4 = np.zeros((nspin, nspin, nspin, nspin, nspin, nspin, nspin, nspin), dtype=np.float32) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -226,7 +226,7 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): abbabb[p, p, q, p, p, q] += d2[p, q] baabaa[p, p, q, p, p, q] += d2[p, q] abababab[p, p, q, q, p, p, q, q] += d2[p, q] - babababa[p, p, q, q, p, p, q, q] += d2[p, q] + babababa[q, q, p, p, q, q, p, p] += d2[p, q] for r in range(nbasis): bbabba[p, q, q, p, r, r] += d4[p, q, r] aabaab[p, q, q, p, r, r] += d4[p, q, r] @@ -236,35 +236,33 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): bbbbbb[p, q, r, p, q, r] += d3[p, q, r] bbabba[p, q, r, p, q, r] += d3[p, q, r] aabaab[p, q, r, p, q, r] += d3[p, q, r] - abbbabbb[p, p, q, r, p, p, q, r] += d3[p, q, r] - baaabaaa[p, p, q, r, p, p, q, r] += d3[p, q, r] + abbbabbb[p, p, q, r, p, p, q, r] += 2*d3[p, q, r] + baaabaaa[p, p, q, r, p, p, q, r] += 2*d3[p, q, r] aaabaaab[q, r, p, p, q, r, p, p] += d3[p, q, r] bbbabbba[q, r, p, p, q, r, p, p] += d3[p, q, r] - abababab[p, p, q, r, p, p, q, r] += d3[p, q, r] - babababa[p, p, q, r, p, p, q, r] += d3[p, q, r] - abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] - babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] - abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] - babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] - abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] - babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] + abababab[p, p, q, r, p, p, q, r] += d3[p, q, r] + babababa[p, p, q, r, p, p, q, r] += d3[p, q, r] + abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] + babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] + abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] + babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] + abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] + babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] for s in range(nbasis): aaaaaaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] bbbbbbbb[p, q, r, s, p, q, r, s] += d5[p, q, r, s] aaabaaab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - baaabaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - abababab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - babababa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - aaabaaab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] - bbbabbba[p, q, r, r, p, q, s, s] += d6[p, q, r, s] - abababab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] - babababa[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + bbbabbba[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + abababab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + aaabaaab[p, q, r, r, p, q, s, s] += 2*d6[p, q, r, s] + bbbabbba[p, q, r, r, p, q, s, s] += 2*d6[p, q, r, s] + abababab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + babababa[p, q, r, r, p, q, s, s] += d6[p, q, r, s] abbbabbb[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] abababab[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - abababab[p, p, q, q, r, r, s, s] += d7[p, q, r, s] - babababa[p, p, q, q, r, r, s, s] += d7[p, q, r, s] + babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + abababab[p, p, q, q, r, r, s, s] += d7[p, q, r, s] rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 @@ -278,6 +276,14 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): bbbbbb *= 1/3 rdm3 -= np.einsum('pqrstu -> qprstu', rdm3) rdm3 *= 0.5 + aaaaaaaa *= 1/12 + bbbbbbbb *= 1/12 + aaabaaab *= 1/3 + bbbabbba *= 1/3 + abbbabbb *= 1/3 + baaabaaa *= 1/3 + abababab *= 1/2 + babababa *= 1/2 rdm4_copy=np.copy(rdm4) rdm4 += np.einsum('pqrstuvw -> pqrstwuv', rdm4_copy) rdm4 += np.einsum('pqrstuvw -> pqrstvwu', rdm4_copy) @@ -306,9 +312,6 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): rdm4 += np.einsum('pqrstuvw -> sqprtuvw', rdm4_copy) rdm4 += np.einsum('pqrstuvw -> srqptuvw', rdm4_copy) del rdm4_copy - rdm4 *= 0.5 - aaaaaaaa *= 1/6 - bbbbbbbb *= 1/6 rdm4 -= np.einsum('pqrstuvw -> qprstuvw', rdm4) rdm4 *= 0.5 return rdm1, rdm2, rdm3, rdm4 From 32b92a777f3d3f5b7919a8815a34e56dabac5102 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Wed, 2 Apr 2025 15:53:52 +0000 Subject: [PATCH 28/31] Adding option to select if compute 4rdm or not --- pyci/test/data/BH3.fcidump | 792 +++++++++++++++++++++++++++++++++++++ pyci/test/test_routines.py | 4 +- pyci/utility.py | 274 +++++++------ 3 files changed, 937 insertions(+), 133 deletions(-) create mode 100644 pyci/test/data/BH3.fcidump diff --git a/pyci/test/data/BH3.fcidump b/pyci/test/data/BH3.fcidump new file mode 100644 index 0000000..1e7f849 --- /dev/null +++ b/pyci/test/data/BH3.fcidump @@ -0,0 +1,792 @@ + &FCI NORB= 8,NELEC= 8,MS2=0, + ORBSYM=1,1,1,1,1,1,1,1, + ISYM=1, + &END + 2.885872439643773 1 1 1 1 + -0.2505946034815988 1 1 2 1 + 0.6008649932608625 1 1 2 2 + 1.309499383927992e-15 1 1 3 1 + 0.5431012966104436 1 1 3 3 + -8.568915825469745e-08 1 1 4 1 + -1.222658309318891e-08 1 1 4 2 + 0.5431012364660358 1 1 4 4 + 0.7419370001826255 1 1 5 5 + -0.2768877053433903 1 1 6 1 + 0.215588408158452 1 1 6 2 + -1.302083441068191e-14 1 1 6 3 + 9.617531265895818e-07 1 1 6 4 + 0.617524002672765 1 1 6 6 + 1.19296259140086e-06 1 1 7 1 + -1.000159650862975e-06 1 1 7 2 + -2.667762904681736e-09 1 1 7 3 + 0.2035931511500463 1 1 7 4 + 2.236463252612564e-07 1 1 7 6 + 0.6817863344015808 1 1 7 7 + 0.2035931153060802 1 1 8 3 + 2.667762535185636e-09 1 1 8 4 + 0.6817863310616114 1 1 8 8 + -0.250594603481599 2 1 1 1 + 0.03398782149673659 2 1 2 1 + -0.00855399593326114 2 1 2 2 + -0.003656740753385496 2 1 3 3 + 8.364174153545954e-09 2 1 4 1 + -7.243120201815174e-09 2 1 4 2 + -0.003656743745705427 2 1 4 4 + -0.009802997405129389 2 1 5 5 + 0.038516802249326 2 1 6 1 + -0.009473380575598978 2 1 6 2 + -2.757017801806593e-08 2 1 6 4 + -0.01147166657986735 2 1 6 6 + -1.720166129072196e-07 2 1 7 1 + 3.978265411585039e-08 2 1 7 2 + 7.158059052176508e-11 2 1 7 3 + -0.005462748413268905 2 1 7 4 + 2.752050902053368e-09 2 1 7 6 + -0.009830874230348587 2 1 7 7 + -0.005462751575636361 2 1 8 3 + -7.158063662746246e-11 2 1 8 4 + -0.009830874235882046 2 1 8 8 + 0.6008649932608625 2 2 1 1 + -0.008553995933261128 2 2 2 1 + 0.4427455761842879 2 2 2 2 + 1.804112415015879e-15 2 2 3 2 + 0.437845512029406 2 2 3 3 + -1.486499987099661e-08 2 2 4 1 + -1.158696648212443e-07 2 2 4 2 + 1.706967900361178e-15 2 2 4 3 + 0.4378453869829156 2 2 4 4 + 0.462869579503667 2 2 5 5 + -0.008738497054256215 2 2 6 1 + 0.04243264270473726 2 2 6 2 + -3.615163723935666e-15 2 2 6 3 + 2.596254400147324e-07 2 2 6 4 + 0.4383641013013591 2 2 6 6 + 1.910571664293309e-08 2 2 7 1 + -1.977798448522805e-07 2 2 7 2 + -6.157832403708152e-10 2 2 7 3 + 0.04699415003091144 2 2 7 4 + -2.788649450247149e-08 2 2 7 6 + 0.4572792141443756 2 2 7 7 + 0.04699404069097696 2 2 8 3 + 6.157817727947545e-10 2 2 8 4 + 0.4572792609884542 2 2 8 8 + 1.316982920016984e-15 3 1 1 1 + 0.007474594718429727 3 1 3 1 + 0.01284990780508374 3 1 3 2 + 1.767792344800623e-10 3 1 3 3 + -0.004084305245176309 3 1 4 3 + -1.767792935690807e-10 3 1 4 4 + 0.003312072277051121 3 1 6 3 + -1.405993377279202e-15 3 1 6 6 + -1.717309493699424e-10 3 1 7 1 + -1.016305506548396e-10 3 1 7 2 + 0.003229158387026622 3 1 7 3 + 9.745363039768626e-11 3 1 7 4 + -1.705423846847659e-10 3 1 7 6 + 1.479452422115807e-11 3 1 7 7 + 0.01310582949056686 3 1 8 1 + 0.007756039235437579 3 1 8 2 + -9.745373215006015e-11 3 1 8 3 + 0.003229176787461637 3 1 8 4 + 0.01301513143892001 3 1 8 6 + 0.0008662621072355487 3 1 8 7 + -1.479295245326862e-11 3 1 8 8 + 1.772887392448297e-15 3 2 2 2 + 0.01284990780508375 3 2 3 1 + 0.1207362065036845 3 2 3 2 + 2.748137405139683e-09 3 2 3 3 + 1.240327285323417e-15 3 2 4 2 + -0.06349295720993479 3 2 4 3 + -2.748138201377759e-09 3 2 4 4 + -1.079811153686938e-15 3 2 6 1 + -0.04324768872890671 3 2 6 3 + 6.234596172660645e-15 3 2 6 4 + -1.211530875622202e-14 3 2 6 6 + -2.558507095963038e-10 3 2 7 1 + 3.592113065331581e-11 3 2 7 2 + 0.05101028878336435 3 2 7 3 + 1.539441038186928e-09 3 2 7 4 + -1.423037243597491e-09 3 2 7 6 + -4.819256001209471e-10 3 2 7 7 + 0.01952552068678413 3 2 8 1 + -0.002741426122683355 3 2 8 2 + -1.539441553399801e-09 3 2 8 3 + 0.05101010986804831 3 2 8 4 + 0.1086003493569573 3 2 8 6 + -0.02822402839137306 3 2 8 7 + 4.819386209553578e-10 3 2 8 8 + 0.5431012966104434 3 3 1 1 + -0.003656740753385428 3 3 2 1 + 0.4378455120294059 3 3 2 2 + 1.767792368653071e-10 3 3 3 1 + 2.748137412078577e-09 3 3 3 2 + 0.4905124605158808 3 3 3 3 + -0.004084312178270882 3 3 4 1 + -0.06349299035576955 3 3 4 2 + 2.581268532253489e-15 3 3 4 3 + 0.3919009833903837 3 3 4 4 + 0.4331511739849809 3 3 5 5 + -0.003506514741495167 3 3 6 1 + 0.02135559165735068 3 3 6 2 + -1.760851783827455e-09 3 3 6 3 + 0.04068296375539224 3 3 6 4 + 0.4371061237241277 3 3 6 6 + -0.005355703428214626 3 3 7 1 + 0.02441947500448238 3 3 7 2 + -7.977632443534333e-11 3 3 7 3 + 0.05338880260968507 3 3 7 4 + -0.05779185160978591 3 3 7 6 + 0.4222954975769656 3 3 7 7 + 1.616306782425275e-10 3 3 8 1 + -7.369626714437416e-10 3 3 8 2 + 0.006088711866650699 3 3 8 3 + 6.99576091500731e-10 3 3 8 4 + 1.744101030265455e-09 3 3 8 6 + -8.608482260363814e-10 3 3 8 7 + 0.4879910039492059 3 3 8 8 + -8.568915822053068e-08 4 1 1 1 + 8.364174145619843e-09 4 1 2 1 + -1.486499987002083e-08 4 1 2 2 + -0.004084312178270883 4 1 3 3 + 0.007474593229381657 4 1 4 1 + 0.01284990256982012 4 1 4 2 + -1.767793984114308e-10 4 1 4 3 + 0.004084315786589669 4 1 4 4 + -3.066141465615617e-09 4 1 5 5 + 6.760068835703874e-08 4 1 6 1 + 2.948831143964646e-08 4 1 6 2 + 0.00331204426952211 4 1 6 4 + 1.054808934262356e-07 4 1 6 6 + 0.01310582880284192 4 1 7 1 + 0.007756042874426749 4 1 7 2 + 9.745362134459812e-11 4 1 7 3 + -0.003229183403604272 4 1 7 4 + 0.01301512327652033 4 1 7 6 + -0.0008664318258174901 4 1 7 7 + 1.717309623905329e-10 4 1 8 1 + 1.016305008899598e-10 4 1 8 2 + 0.003229172732206766 4 1 8 3 + 9.745373458951503e-11 4 1 8 4 + 1.70542523462644e-10 4 1 8 6 + 1.479230724455577e-11 4 1 8 7 + 0.0008663145891723227 4 1 8 8 + -1.2226583084456e-08 4 2 1 1 + -7.243120211085103e-09 4 2 2 1 + -1.158696648056318e-07 4 2 2 2 + 1.23338839141951e-15 4 2 3 2 + -0.06349299035576955 4 2 3 3 + 0.01284990256982012 4 2 4 1 + 0.1207361175960395 4 2 4 2 + -2.748138702712843e-09 4 2 4 3 + 0.06349303900167501 4 2 4 4 + -8.873810804221893e-09 4 2 5 5 + 8.045403540333563e-08 4 2 6 1 + 1.187179611387978e-08 4 2 6 2 + 6.22071838485283e-15 4 2 6 3 + -0.04324810464226073 4 2 6 4 + 9.09208603662448e-07 4 2 6 6 + 0.01952551763965547 4 2 7 1 + -0.002741360116389463 4 2 7 2 + 1.539441020839694e-09 4 2 7 3 + -0.0510098946503148 4 2 7 4 + 0.1086005561822059 4 2 7 6 + 0.02822260016304924 4 2 7 7 + 2.558507589817127e-10 4 2 8 1 + -3.592206913871632e-11 4 2 8 2 + 0.05101010391011399 4 2 8 3 + 1.53944137819273e-09 4 2 8 4 + 1.423033670067131e-09 4 2 8 6 + -4.819442067649504e-10 4 2 8 7 + -0.02822355941824937 4 2 8 8 + 1.741662369880714e-15 4 3 2 2 + -0.004084305245176307 4 3 3 1 + -0.06349295720993479 4 3 3 2 + 2.581268532253489e-15 4 3 3 3 + -1.767793981945903e-10 4 3 4 1 + -2.74813870097812e-09 4 3 4 2 + 0.04930565142213954 4 3 4 3 + -3.285566263500073e-15 4 3 4 4 + 2.865763182313685e-15 4 3 6 2 + 0.04068259840035819 4 3 6 3 + 1.760853350282754e-09 4 3 6 4 + -1.447106323659852e-14 4 3 6 6 + -1.616311378900386e-10 4 3 7 1 + 7.36962011381459e-10 4 3 7 2 + -0.02365026807610607 4 3 7 3 + 3.098907285295494e-10 4 3 7 4 + -1.744111077783828e-09 4 3 7 6 + -8.60826233212153e-10 4 3 7 7 + -0.005355707506969795 4 3 8 1 + 0.02441960034267945 4 3 8 2 + -3.098978122728635e-10 4 3 8 3 + -0.0236500898525238 4 3 8 4 + -0.05779157924601717 4 3 8 6 + 0.03284823396007458 4 3 8 7 + 8.60841689598324e-10 4 3 8 8 + 0.5431012364660363 4 4 1 1 + -0.003656743745705401 4 4 2 1 + 0.4378453869829155 4 4 2 2 + -1.767792954122244e-10 4 4 3 1 + -2.748138203112482e-09 4 4 3 2 + 0.3919009833903836 4 4 3 3 + 0.004084315786589666 4 4 4 1 + 0.06349303900167499 4 4 4 2 + -3.289035710452026e-15 4 4 4 3 + 0.4905125105642152 4 4 4 4 + 0.4331511381239505 4 4 5 5 + -0.003506468718845008 4 4 6 1 + 0.0213554019405418 4 4 6 2 + 1.760848376830548e-09 4 4 6 3 + -0.04068271101952095 4 4 6 4 + 0.4371070897334383 4 4 6 6 + 0.005355742672269706 4 4 7 1 + -0.02441968094848624 4 4 7 2 + -6.995831275391495e-10 4 4 7 3 + 0.006088856220968246 4 4 7 4 + 0.05779204731270476 4 4 7 6 + 0.4879905021119901 4 4 7 7 + -1.616307065402042e-10 4 4 8 1 + 7.369626887909764e-10 4 4 8 2 + 0.0533889733668623 4 4 8 3 + 7.978407171038704e-11 4 4 8 4 + -1.744101182921121e-09 4 4 8 6 + 8.608482676697449e-10 4 4 8 7 + 0.4222949589965561 4 4 8 8 + 0.0219119901739971 5 1 5 1 + 0.02131300339593315 5 1 5 2 + 7.874760661694818e-09 5 1 5 4 + 0.02372430365489375 5 1 6 5 + -1.031805793045432e-07 5 1 7 5 + 0.02131300339593315 5 2 5 1 + 0.06928141719097859 5 2 5 2 + 1.750534678237464e-08 5 2 5 4 + 0.06566544782371983 5 2 6 5 + -2.914748359582331e-07 5 2 7 5 + 0.01761911615296837 5 3 5 3 + -1.313185671314443e-15 5 3 6 5 + -2.131530134688586e-10 5 3 7 5 + 0.01626699652681543 5 3 8 5 + 7.874760661908271e-09 5 4 5 1 + 1.750534678367568e-08 5 4 5 2 + 0.01761911298668863 5 4 5 4 + 9.462668368754451e-08 5 4 6 5 + 0.01626699768542145 5 4 7 5 + 2.131530039278795e-10 5 4 8 5 + 0.7419370001826256 5 5 1 1 + -0.009802997405129309 5 5 2 1 + 0.462869579503667 5 5 2 2 + 0.4331511739849808 5 5 3 3 + -3.066141466049298e-09 5 5 4 1 + -8.873810790344105e-09 5 5 4 2 + 0.4331511381239505 5 5 4 4 + 0.5867727439789319 5 5 5 5 + -0.00769846202532828 5 5 6 1 + 0.1078172952836542 5 5 6 2 + -6.418476861114186e-15 5 5 6 3 + 4.725037755590883e-07 5 5 6 4 + 0.4593833232162888 5 5 6 6 + 3.200026491527582e-08 5 5 7 1 + -4.948224276990487e-07 5 5 7 2 + -1.280041624779349e-09 5 5 7 3 + 0.09768773464986232 5 5 7 4 + 4.825789111373435e-08 5 5 7 6 + 0.4767268486444175 5 5 7 7 + 0.09768770749957068 5 5 8 3 + 1.280041357631934e-09 5 5 8 4 + 0.4767268554894359 5 5 8 8 + -0.2768877053433904 6 1 1 1 + 0.03851680224932599 6 1 2 1 + -0.008738497054256255 6 1 2 2 + -1.077561434179031e-15 6 1 3 2 + -0.003506514741495283 6 1 3 3 + 6.760068836909583e-08 6 1 4 1 + 8.045403540805191e-08 6 1 4 2 + -0.003506468718845072 6 1 4 4 + -0.007698462025328377 6 1 5 5 + 0.04378701810372509 6 1 6 1 + -0.009467007597906356 6 1 6 2 + 5.171934667509833e-10 6 1 6 4 + -0.0114633647476185 6 1 6 6 + -9.277087864673952e-08 6 1 7 1 + 9.723397860187017e-08 6 1 7 2 + 6.606969900108291e-11 6 1 7 3 + -0.005042172571767005 6 1 7 4 + 9.76088503226529e-08 6 1 7 6 + -0.0092707583932563 6 1 7 7 + -0.005042127587287211 6 1 8 3 + -6.606894995290699e-11 6 1 8 4 + -0.009270737731959777 6 1 8 8 + 0.2155884081584521 6 2 1 1 + -0.009473380575599027 6 2 2 1 + 0.04243264270473728 6 2 2 2 + 0.02135559165735062 6 2 3 3 + 2.948831144555875e-08 6 2 4 1 + 1.187179617969086e-08 6 2 4 2 + 2.867714746224159e-15 6 2 4 3 + 0.02135540194054172 6 2 4 4 + 0.107817295283654 6 2 5 5 + -0.009467007597906437 6 2 6 1 + 0.07041436123979071 6 2 6 2 + -6.609296443471635e-15 6 2 6 3 + 4.937225539236589e-07 6 2 6 4 + 0.02737358772151331 6 2 6 6 + 9.466183875933706e-08 6 2 7 1 + -1.331937086040957e-07 6 2 7 2 + -8.859655630660823e-10 6 2 7 3 + 0.06761338784822354 6 2 7 4 + 5.494331898996119e-08 6 2 7 6 + 0.0456614797777442 6 2 7 7 + 0.06761332704570971 6 2 8 3 + 8.859645031500385e-10 6 2 8 4 + 0.04566171962209002 6 2 8 8 + -1.303678869975992e-14 6 3 1 1 + -3.582203977892107e-15 6 3 2 2 + 0.003312072277051121 6 3 3 1 + -0.04324768872890664 6 3 3 2 + -1.760851745663539e-09 6 3 3 3 + 6.229392002232714e-15 6 3 4 2 + 0.04068259840035818 6 3 4 3 + 1.760848404586124e-09 6 3 4 4 + -6.401129626354418e-15 6 3 5 5 + -6.614500613899565e-15 6 3 6 2 + 0.05945074643173516 6 3 6 3 + -7.86697096355482e-15 6 3 6 4 + 3.524958103184872e-15 6 3 6 6 + -7.890660753918574e-11 6 3 7 1 + -5.98576393312511e-10 6 3 7 2 + -0.0303887399288535 6 3 7 3 + -9.171078662120746e-10 6 3 7 4 + 6.068656167868003e-10 6 3 7 6 + 6.350154724971135e-10 6 3 7 7 + 0.006021893801855345 6 3 8 1 + 0.04568092179366449 6 3 8 2 + 9.170985706963286e-10 6 3 8 3 + -0.03038848524635313 6 3 8 4 + -0.04631270420366784 6 3 8 6 + 0.03718878854055605 6 3 8 7 + -6.350279330158415e-10 6 3 8 8 + 9.617531264119935e-07 6 4 1 1 + -2.757017796814519e-08 6 4 2 1 + 2.596254400364165e-07 6 4 2 2 + 6.251943407420413e-15 6 4 3 2 + 0.0406829637553922 6 4 3 3 + 0.003312044269522111 6 4 4 1 + -0.04324810464226065 6 4 4 2 + 1.76085334854803e-09 6 4 4 3 + -0.04068271101952096 6 4 4 4 + 4.725037754081673e-07 6 4 5 5 + 5.1719352872669e-10 6 4 6 1 + 4.937225538646783e-07 6 4 6 2 + -7.870440410506774e-15 6 4 6 3 + 0.05945127324281606 6 4 6 4 + -2.621023723614613e-07 6 4 6 6 + 0.006021847395453992 6 4 7 1 + 0.04568097848955616 6 4 7 2 + -9.171078375891373e-10 6 4 7 3 + 0.03038888763910752 6 4 7 4 + -0.04631348354443215 6 4 7 6 + -0.03718802732760431 6 4 7 7 + 7.890738588792537e-11 6 4 8 1 + 5.985753715603837e-10 6 4 8 2 + -0.03038845537065924 6 4 8 3 + -9.170987398318675e-10 6 4 8 4 + -6.068525751357079e-10 6 4 8 6 + 6.350255789960846e-10 6 4 8 7 + 0.0371889465448763 6 4 8 8 + 0.02372430365489375 6 5 5 1 + 0.06566544782371983 6 5 5 2 + -1.313185671314443e-15 6 5 5 3 + 9.462668367106464e-08 6 5 5 4 + 0.06815328103583752 6 5 6 5 + -2.095076133412643e-07 6 5 7 5 + 0.6175240026727643 6 6 1 1 + -0.01147166657986728 6 6 2 1 + 0.4383641013013591 6 6 2 2 + -1.409462824231156e-15 6 6 3 1 + -1.217081990745328e-14 6 6 3 2 + 0.4371061237241274 6 6 3 3 + 1.054808934400049e-07 6 6 4 1 + 9.092086036208147e-07 6 6 4 2 + -1.446065489574266e-14 6 6 4 3 + 0.4371070897334379 6 6 4 4 + 0.4593833232162882 6 6 5 5 + -0.01146336474761833 6 6 6 1 + 0.02737358772151318 6 6 6 2 + 3.469446951953614e-15 6 6 6 3 + -2.621023723059501e-07 6 6 6 4 + 0.4546127474568775 6 6 6 6 + 2.227663392147142e-07 6 6 7 1 + -2.028762585044863e-07 6 6 7 2 + -3.602338011221562e-10 6 6 7 3 + 0.02749175900235704 6 6 7 4 + 9.66773658100939e-07 6 6 7 6 + 0.4638456709722711 6 6 7 7 + 0.02749263793977486 6 6 8 3 + 3.602487440301783e-10 6 6 8 4 + 0.4638451680072685 6 6 8 8 + 1.192962591339892e-06 7 1 1 1 + -1.720166128932012e-07 7 1 2 1 + 1.910571664613149e-08 7 1 2 2 + -1.717309490074123e-10 7 1 3 1 + -2.558507080242106e-10 7 1 3 2 + -0.005355703428214625 7 1 3 3 + 0.01310582880284192 7 1 4 1 + 0.01952551763965548 7 1 4 2 + -1.616311377274082e-10 7 1 4 3 + 0.005355742672269696 7 1 4 4 + 3.200026491345979e-08 7 1 5 5 + -9.277087862487125e-08 7 1 6 1 + 9.466183876870185e-08 7 1 6 2 + -7.890660401552868e-11 7 1 6 3 + 0.006021847395453975 7 1 6 4 + 2.227663391908075e-07 7 1 6 6 + 0.02321654759268586 7 1 7 1 + 0.01302582858072183 7 1 7 2 + 9.153751498111595e-11 7 1 7 3 + -0.005360674893443947 7 1 7 4 + 0.02067405857556876 7 1 7 6 + -0.00245320141617261 7 1 7 7 + 0.005360702844778411 7 1 8 3 + 9.153790149919044e-11 7 1 8 4 + 9.744444183848455e-12 7 1 8 7 + 0.002453104881959082 7 1 8 8 + -1.000159650865197e-06 7 2 1 1 + 3.978265412190159e-08 7 2 2 1 + -1.9777984485575e-07 7 2 2 2 + -1.01630551129178e-10 7 2 3 1 + 3.592113585748624e-11 7 2 3 2 + 0.02441947500448233 7 2 3 3 + 0.007756042874426756 7 2 4 1 + -0.002741360116389451 7 2 4 2 + 7.369620169108901e-10 7 2 4 3 + -0.02441968094848628 7 2 4 4 + -4.948224276192514e-07 7 2 5 5 + 9.723397860410634e-08 7 2 6 1 + -1.331937085676665e-07 7 2 6 2 + -5.985763846388936e-10 7 2 6 3 + 0.04568097848955621 7 2 6 4 + -2.028762583275445e-07 7 2 6 6 + 0.01302582858072182 7 2 7 1 + 0.04857800912948742 7 2 7 2 + -1.608860648871779e-10 7 2 7 3 + 0.009421791830493851 7 2 7 4 + -0.008641746821782516 7 2 7 6 + -0.0309852504152207 7 2 7 7 + -0.009422587341917516 7 2 8 3 + -1.608964025380522e-10 7 2 8 4 + 1.230834644275203e-10 7 2 8 7 + 0.03098490469971343 7 2 8 8 + -2.667762917037406e-09 7 3 1 1 + 7.158058472128345e-11 7 3 2 1 + -6.157832455749856e-10 7 3 2 2 + 0.003229158387026626 7 3 3 1 + 0.05101028878336431 7 3 3 2 + -7.977634525202504e-11 7 3 3 3 + 9.745362131749306e-11 7 3 4 1 + 1.539441018237608e-09 7 3 4 2 + -0.02365026807610605 7 3 4 3 + -6.995831362127669e-10 7 3 4 4 + -1.280041628248796e-09 7 3 5 5 + 6.606969504374498e-11 7 3 6 1 + -8.859655578619119e-10 7 3 6 2 + -0.0303887399288535 7 3 6 3 + -9.171078393238608e-10 7 3 6 4 + -3.602337941832623e-10 7 3 6 6 + 9.153751698688997e-11 7 3 7 1 + -1.608860631524545e-10 7 3 7 2 + 0.03591647364088903 7 3 7 3 + -9.039614499647963e-10 7 3 7 4 + 9.016174473686078e-10 7 3 7 6 + -5.669179067163688e-10 7 3 7 7 + 0.005360652155751565 7 3 8 1 + -0.009422498362905051 7 3 8 2 + -9.039729537835273e-10 7 3 8 3 + 0.03201691937278552 7 3 8 4 + 0.05280141431308802 7 3 8 6 + -0.01109587659462343 7 3 8 7 + -8.576824528372384e-10 7 3 8 8 + 0.2035931511500463 7 4 1 1 + -0.005462748413268849 7 4 2 1 + 0.04699415003091144 7 4 2 2 + 9.745362760586566e-11 7 4 3 1 + 1.539441031248034e-09 7 4 3 2 + 0.05338880260968509 7 4 3 3 + -0.003229183403604285 7 4 4 1 + -0.05100989465031477 7 4 4 2 + 3.09890732866358e-10 7 4 4 3 + 0.006088856220968234 7 4 4 4 + 0.09768773464986232 7 4 5 5 + -0.005042172571766922 7 4 6 1 + 0.0676133878482237 7 4 6 2 + -9.171078974370972e-10 7 4 6 3 + 0.03038888763910764 7 4 6 4 + 0.02749175900235752 7 4 6 6 + -0.005360674893443919 7 4 7 1 + 0.009421791830493798 7 4 7 2 + -9.039614560363285e-10 7 4 7 3 + 0.1049033234115907 7 4 7 4 + -0.05280100202768551 7 4 7 6 + 0.04326476331602425 7 4 7 7 + 9.15372272474119e-11 7 4 8 1 + -1.608952016757259e-10 7 4 8 2 + 0.0369706911419247 7 4 8 3 + 9.039729444593886e-10 7 4 8 4 + 9.016227842453817e-10 7 4 8 6 + -1.453951989187352e-10 7 4 8 7 + 0.06545500534034067 7 4 8 8 + -1.031805793044856e-07 7 5 5 1 + -2.914748359624615e-07 7 5 5 2 + -2.131530130351778e-10 7 5 5 3 + 0.01626699768542144 7 5 5 4 + -2.095076133551421e-07 7 5 6 5 + 0.02014400134859773 7 5 7 5 + 2.236463254652406e-07 7 6 1 1 + 2.752050836133876e-09 7 6 2 1 + -2.788649442787838e-08 7 6 2 2 + -1.705423843052951e-10 7 6 3 1 + -1.423037221046086e-09 7 6 3 2 + -0.05779185160978585 7 6 3 3 + 0.01301512327652036 7 6 4 1 + 0.1086005561822058 7 6 4 2 + -1.744111098600509e-09 7 6 4 3 + 0.05779204731270483 7 6 4 4 + 4.825789130802338e-08 7 6 5 5 + 9.760885020612827e-08 7 6 6 1 + 5.494331907496264e-08 7 6 6 2 + 6.068656514812698e-10 7 6 6 3 + -0.04631348354443205 7 6 6 4 + 9.667736581217556e-07 7 6 6 6 + 0.02067405857556874 7 6 7 1 + -0.008641746821782573 7 6 7 2 + 9.016174460675652e-10 7 6 7 3 + -0.05280100202768544 7 6 7 4 + 0.1111424447868589 7 6 7 6 + 0.02938938011646844 7 6 7 7 + 0.05280143252065627 7 6 8 3 + 9.016230366476474e-10 7 6 8 4 + -1.167472819807447e-10 7 6 8 7 + -0.02939011930180432 7 6 8 8 + 0.6817863344015809 7 7 1 1 + -0.009830874230348431 7 7 2 1 + 0.4572792141443754 7 7 2 2 + 1.479452476325915e-11 7 7 3 1 + -4.819256660404392e-10 7 7 3 2 + 0.4222954975769655 7 7 3 3 + -0.0008664318258175432 7 7 4 1 + 0.02822260016304919 7 7 4 2 + -8.608262019871304e-10 7 7 4 3 + 0.4879905021119904 7 7 4 4 + 0.4767268486444175 7 7 5 5 + -0.00927075839325596 7 7 6 1 + 0.0456614797777443 7 7 6 2 + 6.350153944345571e-10 7 7 6 3 + -0.03718802732760419 7 7 6 4 + 0.4638456709722718 7 7 6 6 + -0.002453201416172579 7 7 7 1 + -0.03098525041522102 7 7 7 2 + -5.669179049816453e-10 7 7 7 3 + 0.04326476331602423 7 7 7 4 + 0.02938938011646805 7 7 7 6 + 0.5275422035780376 7 7 7 7 + 9.744417837735664e-12 7 7 8 1 + 1.230836439714e-10 7 7 8 2 + 0.06545467220500588 7 7 8 3 + 8.576771619306367e-10 7 7 8 4 + -1.167472715724038e-10 7 7 8 6 + 1.720845688168993e-15 7 7 8 7 + 0.458572239014637 7 7 8 8 + 0.01310582949056686 8 1 3 1 + 0.01952552068678412 8 1 3 2 + 1.616306801940914e-10 8 1 3 3 + 1.717309618009979e-10 8 1 4 1 + 2.558507594153936e-10 8 1 4 2 + -0.005355707506969792 8 1 4 3 + -1.616307101180714e-10 8 1 4 4 + 0.006021893801855357 8 1 6 3 + 7.890738371952102e-11 8 1 6 4 + 0.005360652155751562 8 1 7 3 + 9.153721801814091e-11 8 1 7 4 + 9.744413175666322e-12 8 1 7 7 + 0.02321654569212701 8 1 8 1 + 0.013025821544563 8 1 8 2 + -9.153766980518618e-11 8 1 8 3 + 0.005360684693389956 8 1 8 4 + 0.02067407664130907 8 1 8 6 + 0.002452977658369744 8 1 8 7 + -9.744385853771576e-12 8 1 8 8 + 0.007756039235437579 8 2 3 1 + -0.002741426122683398 8 2 3 2 + -7.369626280756547e-10 8 2 3 3 + 1.016305021774499e-10 8 2 4 1 + -3.592206306718415e-11 8 2 4 2 + 0.02441960034267945 8 2 4 3 + 7.369626870562529e-10 8 2 4 4 + 0.04568092179366441 8 2 6 3 + 5.985753646214897e-10 8 2 6 4 + -0.009422498362905082 8 2 7 3 + -1.608952368038763e-10 8 2 7 4 + 1.230835650414819e-10 8 2 7 7 + 0.01302582154456299 8 2 8 1 + 0.04857802213371804 8 2 8 2 + 1.608927609197952e-10 8 2 8 3 + -0.009422286290220173 8 2 8 4 + -0.008641527567750294 8 2 8 6 + 0.03098516675257009 8 2 8 7 + -1.230835156018628e-10 8 2 8 8 + 0.2035931153060804 8 3 1 1 + -0.005462751575636357 8 3 2 1 + 0.04699404069097707 8 3 2 2 + -9.745373426425438e-11 8 3 3 1 + -1.539441546460907e-09 8 3 3 2 + 0.006088711866650776 8 3 3 3 + 0.00322917273220676 8 3 4 1 + 0.05101010391011397 8 3 4 2 + -3.0989781053814e-10 8 3 4 3 + 0.05338897336686225 8 3 4 4 + 0.09768770749957068 8 3 5 5 + -0.005042127587287223 8 3 6 1 + 0.06761332704570974 8 3 6 2 + 9.170985602879878e-10 8 3 6 3 + -0.03038845537065917 8 3 6 4 + 0.02749263793977465 8 3 6 6 + 0.005360702844778414 8 3 7 1 + -0.009422587341917497 8 3 7 2 + -9.039729555182507e-10 8 3 7 3 + 0.03697069114192472 8 3 7 4 + 0.05280143252065619 8 3 7 6 + 0.06545467220500592 8 3 7 7 + -9.153767164832988e-11 8 3 8 1 + 1.608927643892422e-10 8 3 8 2 + 0.104903578308026 8 3 8 3 + 9.039692119849896e-10 8 3 8 4 + -9.016203686429414e-10 8 3 8 6 + 1.453925764505204e-10 8 3 8 7 + 0.04326414358754157 8 3 8 8 + 2.667762551340248e-09 8 4 1 1 + -7.158063519089458e-11 8 4 2 1 + 6.157817710600311e-10 8 4 2 2 + 0.003229176787461637 8 4 3 1 + 0.05101010986804835 8 4 3 2 + 6.995760672146023e-10 8 4 3 3 + 9.745373315294716e-11 8 4 4 1 + 1.539441367784389e-09 8 4 4 2 + -0.02365008985252379 8 4 4 3 + 7.978405436315228e-11 8 4 4 4 + 1.280041364570828e-09 8 4 5 5 + -6.606894501978711e-11 8 4 6 1 + 8.859644944764211e-10 8 4 6 2 + -0.03038848524635305 8 4 6 3 + -9.170987354950588e-10 8 4 6 4 + 3.602487370912844e-10 8 4 6 6 + 9.153790255628756e-11 8 4 7 1 + -1.608963916960304e-10 8 4 7 2 + 0.03201691937278552 8 4 7 3 + 9.03972958120336e-10 8 4 7 4 + 9.016230158309657e-10 8 4 7 6 + 8.576771584611897e-10 8 4 7 7 + 0.005360684693389958 8 4 8 1 + -0.00942228629022018 8 4 8 2 + 9.039691946377548e-10 8 4 8 3 + 0.0359162089936258 8 4 8 4 + 0.05280121865932673 8 4 8 6 + -0.01109570617949226 8 4 8 7 + 5.669076527659023e-10 8 4 8 8 + 0.01626699652681544 8 5 5 3 + 2.131530028436773e-10 8 5 5 4 + 0.02014399892747861 8 5 8 5 + 0.01301513143892001 8 6 3 1 + 0.1086003493569572 8 6 3 2 + 1.744100974754303e-09 8 6 3 3 + 1.705425212400295e-10 8 6 4 1 + 1.423033650985173e-09 8 6 4 2 + -0.0577915792460171 8 6 4 3 + -1.744101269657294e-09 8 6 4 4 + -0.0463127042036676 8 6 6 3 + -6.068525716662609e-10 8 6 6 4 + 0.05280141431308791 8 6 7 3 + 9.016227677655086e-10 8 6 7 4 + -1.167473097363203e-10 8 6 7 7 + 0.02067407664130909 8 6 8 1 + -0.008641527567750367 8 6 8 2 + -9.016203998679639e-10 8 6 8 3 + 0.05280121865932673 8 6 8 4 + 0.1111419303234869 8 6 8 6 + -0.02939040005971782 8 6 8 7 + 1.167475283114783e-10 8 6 8 8 + 0.0008662621072355428 8 7 3 1 + -0.02822402839137308 8 7 3 2 + -8.608481531779955e-10 8 7 3 3 + 1.479230686508501e-11 8 7 4 1 + -4.819442154385678e-10 8 7 4 2 + 0.03284823396007455 8 7 4 3 + 8.608483179767257e-10 8 7 4 4 + 0.0371887885405559 8 7 6 3 + 6.350255755266376e-10 8 7 6 4 + 9.744440484008542e-12 8 7 7 1 + 1.230834314677742e-10 8 7 7 2 + -0.0110958765946234 8 7 7 3 + -1.453952505267586e-10 8 7 7 4 + -1.167472958585325e-10 8 7 7 6 + 1.637578961322106e-15 8 7 7 7 + 0.002452977658369743 8 7 8 1 + 0.0309851667525701 8 7 8 2 + 1.453925504296683e-10 8 7 8 3 + -0.01109570617949223 8 7 8 4 + -0.02939040005971776 8 7 8 6 + 0.03448561564567595 8 7 8 7 + 0.6817863310616118 8 8 1 1 + -0.009830874235881838 8 8 2 1 + 0.4572792609884544 8 8 2 2 + -1.479294009336385e-11 8 8 3 1 + 4.819385446275248e-10 8 8 3 2 + 0.4879910039492058 8 8 3 3 + 0.0008663145891722971 8 8 4 1 + -0.02822355941824931 8 8 4 2 + 8.608416618427484e-10 8 8 4 3 + 0.4222949589965561 8 8 4 4 + 0.4767268554894357 8 8 5 5 + -0.009270737731959367 8 8 6 1 + 0.04566171962208991 8 8 6 2 + -6.350280162825683e-10 8 8 6 3 + 0.03718894654487634 8 8 6 4 + 0.4638451680072678 8 8 6 6 + 0.002453104881959138 8 8 7 1 + 0.03098490469971332 8 8 7 2 + -8.576824320205567e-10 8 8 7 3 + 0.0654550053403407 8 8 7 4 + -0.02939011930180446 8 8 7 6 + 0.4585722390146374 8 8 7 7 + -9.744381191702234e-12 8 8 8 1 + -1.230834600907116e-10 8 8 8 2 + 0.04326414358754144 8 8 8 3 + 5.669076874603718e-10 8 8 8 4 + 1.167478613783857e-10 8 8 8 6 + 0.527542716694187 8 8 8 8 + -13.62793241091999 1 1 0 0 + 0.2994753725920457 2 1 0 0 + -3.782931500173552 2 2 0 0 + -1.709858220092652e-15 3 1 0 0 + -1.916088753094173e-15 3 2 0 0 + -3.518338126800653 3 3 0 0 + 1.115009226783957e-07 4 1 0 0 + 1.331870558166061e-07 4 2 0 0 + -3.235216772913752e-15 4 3 0 0 + -3.518337884987929 4 4 0 0 + -1.681074324005105e-15 5 3 0 0 + -1.184087114040172e-15 5 4 0 0 + -3.775764802942057 5 5 0 0 + 0.3055414023917791 6 1 0 0 + -0.6070104123205058 6 2 0 0 + 4.054285236373309e-14 6 3 0 0 + -2.981380796077343e-06 6 4 0 0 + -2.949612932884464 6 6 0 0 + -1.294896601724191e-06 7 1 0 0 + 2.832108898122002e-06 7 2 0 0 + 8.220115672262759e-09 7 3 0 0 + -0.6273268730928548 7 4 0 0 + -8.611798488695355e-07 7 6 0 0 + -3.143334178358397 7 7 0 0 + -0.6273266669849521 8 3 0 0 + -8.22011393910896e-09 8 4 0 0 + -3.143334139381771 8 8 0 0 + 7.37851836955179 0 0 0 0 diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index 43d1729..48e1124 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -136,7 +136,7 @@ def test_compute_rdms(filename, wfn_type, occs, energy): @pytest.mark.parametrize( "filename, wfn_type, occs, energy", [ - ("BH_sto-3g_eq", pyci.doci_wfn, (3, 3), -26.93841940211769), + ("BH3", pyci.doci_wfn, (4, 4), -26.121994681435808), ("h8_fcidump", pyci.doci_wfn, (4, 4),-4.307571602003291 ), ("h6_sto_3g", pyci.doci_wfn, (3, 3), -5.877285606582455), ], @@ -157,7 +157,7 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): energy += np.einsum("ij,ij", k0, d0) energy += np.einsum("ij,ij", k2, d2) npt.assert_allclose(energy, es[0], rtol=0.0, atol=1.0e-9) - rdm1, rdm2, rdm3, rdm4 = pyci.spinize_rdms_1234(d0, d2, d3, d4, d5, d6, d7) + rdm1, rdm2, rdm3, rdm4 = pyci.spinize_rdms_1234(d0, d2, d3, d4, d5, d6, d7, flag='34RDM') assert np.all(np.abs(rdm1 - rdm1.T) < 1e-5) # # Test RDM2 is antisymmetric # for i in range(0, wfn.nbasis * 2): diff --git a/pyci/utility.py b/pyci/utility.py index fea3a7e..6e368bf 100644 --- a/pyci/utility.py +++ b/pyci/utility.py @@ -150,26 +150,28 @@ def spinize_rdms(d1, d2): return rdm1, rdm2 -def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): +def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7, flag='3RDM' ): r""" Convert the DOCI matrices or FullCI RDM spin-blocks to full, generalized RDMs. Parameters ---------- - .. math:: - d_0 = \left - .. math:: - d_2 = \left - .. math:: - d_3 = \left - .. math:: - d_4 = \left - .. math:: - d_5 = \left - .. math:: - d_6 = \left - .. math:: - d_7 = \left + d1 : numpy.ndarray + math: d_1 = \left + d2 : numpy.ndarray + math: d_2 = \left + d3 : numpy.ndarray + math: d_3 = \left + d4 : numpy.ndarray + math: d_4 = \left + d5 : numpy.ndarray + math: d_5 = \left + d6 : numpy.ndarray + math: d_6 = \left + d7 : numpy.ndarray + math: d_7 = \left + flag : ('3RDM' | '34RDM'), default='3RDM' + RDM selection Returns ------- rdm1 : numpy.ndarray @@ -178,7 +180,7 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): Generalized two-particle RDM. rdm3 : numpy.ndarray Generalized three-particle RDM. - rdm4 : numpy.ndarray + rdm4 : numpy.ndarray or None Generalized four-particle RDM. """ if d1.ndim != 2: @@ -187,8 +189,7 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): nspin = nbasis * 2 rdm1 = np.zeros((nspin, nspin), dtype=np.double) rdm2 = np.zeros((nspin, nspin, nspin, nspin), dtype=np.double) - rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) - rdm4 = np.zeros((nspin, nspin, nspin, nspin, nspin, nspin, nspin, nspin), dtype=np.float32) + rdm4 = None aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -197,20 +198,23 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): baba = rdm2[nbasis:, :nbasis, nbasis:, :nbasis] abba = rdm2[:nbasis, nbasis:, nbasis:, :nbasis] baab = rdm2[nbasis:, :nbasis, :nbasis, nbasis:] + rdm3 = np.zeros((nspin, nspin, nspin, nspin,nspin,nspin), dtype=np.double) aaaaaa = rdm3[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] bbbbbb = rdm3[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] bbabba = rdm3[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, :nbasis] aabaab = rdm3[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, nbasis:] abbabb = rdm3[:nbasis, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:] baabaa = rdm3[nbasis:, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] - aaaaaaaa = rdm4[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] - bbbbbbbb = rdm4[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] - aaabaaab = rdm4[:nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:] - bbbabbba = rdm4[nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis] - abbbabbb = rdm4[:nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:] - baaabaaa = rdm4[nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis] - abababab = rdm4[:nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:] - babababa = rdm4[nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis] + if (flag =='34RDM') : + rdm4 = np.zeros((nspin, nspin, nspin, nspin, nspin, nspin, nspin, nspin), dtype=np.float64) + aaaaaaaa = rdm4[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] + bbbbbbbb = rdm4[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] + aaabaaab = rdm4[:nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:] + bbbabbba = rdm4[nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis] + abbbabbb = rdm4[:nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:] + baaabaaa = rdm4[nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis] + abababab = rdm4[:nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:] + babababa = rdm4[nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis] for p in range(nbasis): aa[p, p] = d1[p, p] bb[p, p] = d1[p, p] @@ -225,8 +229,9 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): aabaab[p, q, q, p, q, q] += d2[p, q] abbabb[p, p, q, p, p, q] += d2[p, q] baabaa[p, p, q, p, p, q] += d2[p, q] - abababab[p, p, q, q, p, p, q, q] += d2[p, q] - babababa[q, q, p, p, q, q, p, p] += d2[p, q] + if (flag == '34RDM') : + abababab[p, p, q, q, p, p, q, q] += d2[p, q] + babababa[q, q, p, p, q, q, p, p] += d2[p, q] for r in range(nbasis): bbabba[p, q, q, p, r, r] += d4[p, q, r] aabaab[p, q, q, p, r, r] += d4[p, q, r] @@ -236,33 +241,34 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): bbbbbb[p, q, r, p, q, r] += d3[p, q, r] bbabba[p, q, r, p, q, r] += d3[p, q, r] aabaab[p, q, r, p, q, r] += d3[p, q, r] - abbbabbb[p, p, q, r, p, p, q, r] += 2*d3[p, q, r] - baaabaaa[p, p, q, r, p, p, q, r] += 2*d3[p, q, r] - aaabaaab[q, r, p, p, q, r, p, p] += d3[p, q, r] - bbbabbba[q, r, p, p, q, r, p, p] += d3[p, q, r] - abababab[p, p, q, r, p, p, q, r] += d3[p, q, r] - babababa[p, p, q, r, p, p, q, r] += d3[p, q, r] - abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] - babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] - abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] - babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] - abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] - babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] - for s in range(nbasis): - aaaaaaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - bbbbbbbb[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - aaabaaab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - bbbabbba[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - abababab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] - aaabaaab[p, q, r, r, p, q, s, s] += 2*d6[p, q, r, s] - bbbabbba[p, q, r, r, p, q, s, s] += 2*d6[p, q, r, s] - abababab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] - babababa[p, q, r, r, p, q, s, s] += d6[p, q, r, s] - abbbabbb[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - abababab[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] - abababab[p, p, q, q, r, r, s, s] += d7[p, q, r, s] + if (flag == '34RDM') : + abbbabbb[p, p, q, r, p, p, q, r] += 2*d3[p, q, r] + baaabaaa[p, p, q, r, p, p, q, r] += 2*d3[p, q, r] + aaabaaab[q, r, p, p, q, r, p, p] += d3[p, q, r] + bbbabbba[q, r, p, p, q, r, p, p] += d3[p, q, r] + abababab[p, p, q, r, p, p, q, r] += d3[p, q, r] + babababa[p, p, q, r, p, p, q, r] += d3[p, q, r] + abababab[q, r, p, p, q, r, p, p] += d3[p, q, r] + babababa[q, r, p, p, q, r, p, p] += d3[p, q, r] + abababab[p, p, q, q, p, p, r, r] += d4[p, q, r] + babababa[p, p, q, q, p, p, r, r] += d4[p, q, r] + abababab[q, q, p, p, r, r, p, p] += d4[p, q, r] + babababa[q, q, p, p, r, r, p, p] += d4[p, q, r] + for s in range(nbasis): + aaaaaaaa[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + bbbbbbbb[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + aaabaaab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + bbbabbba[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + abababab[p, q, r, s, p, q, r, s] += d5[p, q, r, s] + aaabaaab[p, q, r, r, p, q, s, s] += 2*d6[p, q, r, s] + bbbabbba[p, q, r, r, p, q, s, s] += 2*d6[p, q, r, s] + abababab[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + babababa[p, q, r, r, p, q, s, s] += d6[p, q, r, s] + abbbabbb[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + baaabaaa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + abababab[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + babababa[r, r, p, q, s, s, p, q] += d6[p, q, r, s] + abababab[p, p, q, q, r, r, s, s] += d7[p, q, r, s] rdm2 -= np.transpose(rdm2, axes=(1, 0, 2, 3)) rdm2 -= np.transpose(rdm2, axes=(0, 1, 3, 2)) rdm2 *= 0.5 @@ -276,47 +282,48 @@ def spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7): bbbbbb *= 1/3 rdm3 -= np.einsum('pqrstu -> qprstu', rdm3) rdm3 *= 0.5 - aaaaaaaa *= 1/12 - bbbbbbbb *= 1/12 - aaabaaab *= 1/3 - bbbabbba *= 1/3 - abbbabbb *= 1/3 - baaabaaa *= 1/3 - abababab *= 1/2 - babababa *= 1/2 - rdm4_copy=np.copy(rdm4) - rdm4 += np.einsum('pqrstuvw -> pqrstwuv', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrstvwu', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrsutwv', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrsuvtw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrsuwvt', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrsvtuw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrsvwtu', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrsvuwt', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrswtvu', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrswutv', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> pqrswvut', rdm4_copy) - rdm4 *=1 - del rdm4_copy - rdm4 -= np.einsum('pqrstuvw -> pqrsutvw', rdm4) - rdm4_copy=np.copy(rdm4) - rdm4 += np.einsum('pqrstuvw -> psqrtuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> prsqtuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> qpsrtuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> qrpstuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> qsrptuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> rpqstuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> rspqtuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> rqsptuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> sprqtuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> sqprtuvw', rdm4_copy) - rdm4 += np.einsum('pqrstuvw -> srqptuvw', rdm4_copy) - del rdm4_copy - rdm4 -= np.einsum('pqrstuvw -> qprstuvw', rdm4) - rdm4 *= 0.5 + if (flag == '34RDM') : + aaaaaaaa *= 1/12 + bbbbbbbb *= 1/12 + aaabaaab *= 1/3 + bbbabbba *= 1/3 + abbbabbb *= 1/3 + baaabaaa *= 1/3 + abababab *= 1/2 + babababa *= 1/2 + rdm4_copy=np.copy(rdm4) + rdm4 += np.einsum('pqrstuvw -> pqrstwuv', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrstvwu', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsutwv', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsuvtw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsuwvt', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsvtuw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsvwtu', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrsvuwt', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrswtvu', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrswutv', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> pqrswvut', rdm4_copy) + rdm4 *=1 + del rdm4_copy + rdm4 -= np.einsum('pqrstuvw -> pqrsutvw', rdm4) + rdm4_copy=np.copy(rdm4) + rdm4 += np.einsum('pqrstuvw -> psqrtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> prsqtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> qpsrtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> qrpstuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> qsrptuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> rpqstuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> rspqtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> rqsptuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> sprqtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> sqprtuvw', rdm4_copy) + rdm4 += np.einsum('pqrstuvw -> srqptuvw', rdm4_copy) + del rdm4_copy + rdm4 -= np.einsum('pqrstuvw -> qprstuvw', rdm4) + rdm4 *= 0.5 return rdm1, rdm2, rdm3, rdm4 -def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): +def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None, flag= '3RDM'): r""" Wrapper of spinze_rdms function that sums over the spin degree of freedom @@ -324,20 +331,22 @@ def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): Parameters ---------- - .. math:: - d_0 = \left - .. math:: - d_2 = \left - .. math:: - d_3 = \left - .. math:: - d_4 = \left - .. math:: - d_5 = \left - .. math:: - d_6 = \left - .. math:: - d_7 = \left + d1 : numpy.ndarray + math: d_1 = \left + d2 : numpy.ndarray + math: d_2 = \left + d3 : numpy.ndarray, default = None + math: d_3 = \left + d4 : numpy.ndarray, default = None + math: d_4 = \left + d5 : numpy.ndarray, default = None + math: d_5 = \left + d6 : numpy.ndarray, default = None + math: d_6 = \left + d7 : numpy.ndarray, default = None + math: d_7 = \left + flag : ('3RDM' | '34RDM'), default='3RDM' + RDM selection Returns Returns @@ -348,7 +357,7 @@ def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): Spin traced two-particle RDM. rdm3 : numpy.ndarray Spin traced three-particle RDM. - rdm4 : numpy.ndarray + rdm4 : numpy.ndarray or None Spin traced four-particle RDM. """ nbasis = d1.shape[1] @@ -356,9 +365,9 @@ def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): # DOCI matrices rdm1_sf = np.zeros((nbasis, nbasis), dtype=np.double) rdm2_sf = np.zeros((nbasis, nbasis, nbasis, nbasis), dtype=np.double) - rdm3_sf=np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) - rdm4_sf=np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) - rdm1, rdm2, rdm3, rdm4 = spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7) + rdm3_sf = np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) + rdm4_sf = None + rdm1, rdm2, rdm3, rdm4 = spinize_rdms_1234(d1, d2, d3, d4, d5, d6, d7, flag) aa = rdm1[:nbasis, :nbasis] bb = rdm1[nbasis:, nbasis:] aaaa = rdm2[:nbasis, :nbasis, :nbasis, :nbasis] @@ -373,28 +382,31 @@ def spin_free_rdms(d1, d2, d3=None, d4=None, d5=None, d6=None, d7=None): aabaab = rdm3[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, nbasis:] abaaba = rdm3[:nbasis, nbasis:, :nbasis, :nbasis, nbasis:, :nbasis] baabaa = rdm3[nbasis:, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] - aaaaaaaa = rdm4[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] - bbbbbbbb = rdm4[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] - aaabaaab = rdm4[:nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:] - bbbabbba = rdm4[nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis] - abbbabbb = rdm4[:nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:] - baaabaaa = rdm4[nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis] - abababab = rdm4[:nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:] - babababa = rdm4[nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis] - aabaaaba = rdm4[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis] - bbabbbab = rdm4[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:] - aabbaabb = rdm4[:nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:] - bbaabbaa = rdm4[nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis] - abaaabaa = rdm4[:nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] - babbbabb = rdm4[nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:] - abbaabba = rdm4[:nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis] - baabbaab = rdm4[nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:] + if (flag == '34RDM') : + rdm4_sf=np.zeros((nbasis, nbasis, nbasis, nbasis, nbasis, nbasis, nbasis, nbasis), dtype=np.double) + aaaaaaaa = rdm4[:nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis, :nbasis] + bbbbbbbb = rdm4[nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:, nbasis:] + aaabaaab = rdm4[:nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:] + bbbabbba = rdm4[nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis] + abbbabbb = rdm4[:nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:] + baaabaaa = rdm4[nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis] + abababab = rdm4[:nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:] + babababa = rdm4[nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis, nbasis:, :nbasis] + aabaaaba = rdm4[:nbasis, :nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis] + bbabbbab = rdm4[nbasis:, nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:] + aabbaabb = rdm4[:nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:] + bbaabbaa = rdm4[nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis] + abaaabaa = rdm4[:nbasis, nbasis:, :nbasis, :nbasis, :nbasis, nbasis:, :nbasis, :nbasis] + babbbabb = rdm4[nbasis:, :nbasis, nbasis:, nbasis:, nbasis:, :nbasis, nbasis:, nbasis:] + abbaabba = rdm4[:nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis] + baabbaab = rdm4[nbasis:, :nbasis, :nbasis, nbasis:, nbasis:, :nbasis, :nbasis, nbasis:] rdm1_sf = aa + bb rdm2_sf = aaaa + abab+ baba+ bbbb rdm3_sf = aaaaaa + bbbbbb + aabaab + abaaba + baabaa + bbabba + babbab + abbabb - rdm4_sf = aaaaaaaa + bbbbbbbb + aaabaaab + bbbabbba + abbbabbb + abbbabbb +baaabaaa \ - + abababab + babababa + aabaaaba + bbabbbab + aabbaabb + bbaabbaa + abaaabaa + babbbabb \ - + abbaabba + baabbaab + if (flag == '34RDM') : + rdm4_sf = aaaaaaaa + bbbbbbbb + aaabaaab + bbbabbba + abbbabbb + abbbabbb +baaabaaa \ + + abababab + babababa + aabaaaba + bbabbbab + aabbaabb + bbaabbaa + abaaabaa + babbbabb \ + + abbaabba + baabbaab return (rdm1_sf, rdm2_sf, rdm3_sf, rdm4_sf) else: # FullCI RDM spin-blocks From e4caf7acbb05df72a6cd527f2e705ee1c28e3781 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Wed, 2 Apr 2025 19:42:54 +0000 Subject: [PATCH 29/31] Fixing typo in test routine --- pyci/test/test_routines.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index 48e1124..c6f6881 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -274,20 +274,20 @@ def test_compute_rdms_1234(filename, wfn_type, occs, energy): npt.assert_allclose(np.einsum('ijkplmnp ->ijklmn',bbbbbbbb)*fac, bbbbbb, rtol=0, atol=1.0e-9) #With 2RDMs fac=1 / ((wfn.nocc_up - 3) * (wfn.nocc_up - 2)) - npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijkl',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijkl',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',aaaaaaaa)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) fac=1 / ((wfn.nocc_dn - 3) * (wfn.nocc_dn - 2)) - npt.assert_allclose(np.einsum('pqijpqkl ->ijklmn',bbbbbbbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('piqjpkql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipqjkpql ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ipjqkplq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('pijqpklq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) - npt.assert_allclose(np.einsum('ijpqklpq ->ijklmn',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pqijpqkl ->ijkl',bbbbbbbb)*fac, d2_block_bbbb, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('piqjpkql ->ijkl',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipqjkpql ->ijkl',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ipjqkplq ->ijkl',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('pijqpklq ->ijkl',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) + npt.assert_allclose(np.einsum('ijpqklpq ->ijkl',bbbbbbbb)*fac, d2_block_aaaa, rtol=0, atol=1.0e-9) # #ABABABAB/BABABABA BLOCKS #With the 3rdms From 24a1fb0d6fc530cc019b2851166da4fea5915662 Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Tue, 8 Apr 2025 15:33:49 +0000 Subject: [PATCH 30/31] setting up bigmem mark --- pyci/test/conftest.py | 22 ++++++++++++++++++++++ pyci/test/test_routines.py | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 pyci/test/conftest.py diff --git a/pyci/test/conftest.py b/pyci/test/conftest.py new file mode 100644 index 0000000..94f0ea7 --- /dev/null +++ b/pyci/test/conftest.py @@ -0,0 +1,22 @@ +import pytest + +def pytest_addoption(parser): + parser.addoption( + "--bigmem", + action="store_true", + default=False, + help="run tests that require a large amount of memory" + ) + +def pytest_configure(config): + config.addinivalue_line( + "markers", + "bigmem: mark test as requiring a large amount of memory" + ) + +def pytest_collection_modifyitems(config, items): + if not config.getoption("--bigmem"): + skip_bigmem = pytest.mark.skip(reason="need --bigmem option to run") + for item in items: + if "bigmem" in item.keywords: + item.add_marker(skip_bigmem) diff --git a/pyci/test/test_routines.py b/pyci/test/test_routines.py index 7d2e6d2..585cecc 100644 --- a/pyci/test/test_routines.py +++ b/pyci/test/test_routines.py @@ -132,7 +132,7 @@ def test_compute_rdms(filename, wfn_type, occs, energy): energy += 0.25 * np.einsum("ijkl,ijkl", two_mo, rdm2) npt.assert_allclose(energy, es[0], rtol=0.0, atol=1.0e-9) - +@pytest.mark.bigmem @pytest.mark.parametrize( "filename, wfn_type, occs, energy", [ From 87a3ba9d914c2d9824e5beff3bc4a0abdf966a2d Mon Sep 17 00:00:00 2001 From: Daniel Calero <110789386+DanielCalero1@users.noreply.github.com> Date: Thu, 10 Apr 2025 13:21:09 +0000 Subject: [PATCH 31/31] Updating Makefile to ignore 34 RDM test unless specified --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 15b3afa..47ba873 100644 --- a/Makefile +++ b/Makefile @@ -76,6 +76,10 @@ all: pyci/_pyci.so.$(PYCI_VERSION) pyci/_pyci.so.$(VERSION_MAJOR) pyci/_pyci.so test: @set -e; $(PYTHON) -m pytest -sv ./pyci +.PHONY: test-bigmem +test-bigmem: + @set -e; $(PYTHON) -m pytest -sv ./pyci --bigmem + .PHONY: clean clean: rm -rf pyci/src/*.o pyci/_pyci.so*