From 4ac908f64f649ab05627ba6174e295f68c679110 Mon Sep 17 00:00:00 2001 From: Oliver Backhouse Date: Wed, 18 Dec 2024 12:06:10 +0000 Subject: [PATCH 1/3] Adds rCCD and drCCD --- ebcc/__init__.py | 2 +- ebcc/codegen/GwdwwrwCCD.py | 60 +++++++++++++ ebcc/codegen/GwrwCCD.py | 60 +++++++++++++ ebcc/codegen/RDFwdwwrwCCD.py | 77 +++++++++++++++++ ebcc/codegen/RDFwrwCCD.py | 96 +++++++++++++++++++++ ebcc/codegen/RwdwwrwCCD.py | 74 ++++++++++++++++ ebcc/codegen/RwrwCCD.py | 83 ++++++++++++++++++ ebcc/codegen/UDFwdwwrwCCD.py | 117 +++++++++++++++++++++++++ ebcc/codegen/UDFwrwCCD.py | 161 +++++++++++++++++++++++++++++++++++ ebcc/codegen/UwdwwrwCCD.py | 124 +++++++++++++++++++++++++++ ebcc/codegen/UwrwCCD.py | 143 +++++++++++++++++++++++++++++++ ebcc/core/ansatz.py | 2 + 12 files changed, 998 insertions(+), 1 deletion(-) create mode 100644 ebcc/codegen/GwdwwrwCCD.py create mode 100644 ebcc/codegen/GwrwCCD.py create mode 100644 ebcc/codegen/RDFwdwwrwCCD.py create mode 100644 ebcc/codegen/RDFwrwCCD.py create mode 100644 ebcc/codegen/RwdwwrwCCD.py create mode 100644 ebcc/codegen/RwrwCCD.py create mode 100644 ebcc/codegen/UDFwdwwrwCCD.py create mode 100644 ebcc/codegen/UDFwrwCCD.py create mode 100644 ebcc/codegen/UwdwwrwCCD.py create mode 100644 ebcc/codegen/UwrwCCD.py diff --git a/ebcc/__init__.py b/ebcc/__init__.py index 06d91024..e92d6e2e 100644 --- a/ebcc/__init__.py +++ b/ebcc/__init__.py @@ -40,7 +40,7 @@ __version__ = "1.6.1" """List of supported ansatz types.""" -METHOD_TYPES = ["MP", "CC", "LCC", "QCI", "QCC", "DC"] +METHOD_TYPES = ["MP", "CC", "LCC", "QCI", "QCC", "DC", "rCC", "drCC"] import importlib import os diff --git a/ebcc/codegen/GwdwwrwCCD.py b/ebcc/codegen/GwdwwrwCCD.py new file mode 100644 index 00000000..82e3c804 --- /dev/null +++ b/ebcc/codegen/GwdwwrwCCD.py @@ -0,0 +1,60 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:33:54.016728 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + e_cc = einsum(t2, (0, 1, 2, 3), v.oovv, (0, 1, 2, 3), ()) * 0.25 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + t2new = np.copy(v.oovv) + t2new += einsum(v.ovvo, (0, 1, 2, 3), t2, (4, 3, 5, 1), (0, 4, 2, 5)) + tmp0 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new += np.transpose(tmp0, (0, 1, 3, 2)) * -1 + t2new += np.transpose(tmp0, (1, 0, 3, 2)) + del tmp0 + tmp1 = einsum(f.vv, (0, 1), t2, (2, 3, 4, 1), (2, 3, 0, 4)) + t2new += np.transpose(tmp1, (1, 0, 2, 3)) + t2new += np.transpose(tmp1, (1, 0, 3, 2)) * -1 + del tmp1 + tmp2 = np.copy(np.transpose(v.ovvo, (0, 3, 2, 1))) + tmp2 += einsum(v.oovv, (0, 1, 2, 3), t2, (4, 1, 5, 3), (4, 0, 5, 2)) + t2new += einsum(tmp2, (0, 1, 2, 3), t2, (4, 1, 5, 3), (4, 0, 5, 2)) + del tmp2 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/GwrwCCD.py b/ebcc/codegen/GwrwCCD.py new file mode 100644 index 00000000..e9d0a1cc --- /dev/null +++ b/ebcc/codegen/GwrwCCD.py @@ -0,0 +1,60 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:25:15.492925 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + e_cc = einsum(v.oovv, (0, 1, 2, 3), t2, (0, 1, 2, 3), ()) * 0.25 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + t2new = np.copy(v.oovv) + t2new += einsum(v.ovov, (0, 1, 2, 3), t2, (4, 2, 5, 1), (4, 0, 5, 3)) * -1 + tmp0 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2)) + t2new += np.transpose(tmp0, (1, 0, 2, 3)) + t2new += np.transpose(tmp0, (1, 0, 3, 2)) * -1 + del tmp0 + tmp1 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new += np.transpose(tmp1, (0, 1, 3, 2)) * -1 + t2new += np.transpose(tmp1, (1, 0, 3, 2)) + del tmp1 + tmp2 = np.copy(np.transpose(v.ovov, (0, 2, 3, 1))) * -1 + tmp2 += einsum(t2, (0, 1, 2, 3), v.oovv, (4, 1, 5, 3), (0, 4, 2, 5)) + t2new += einsum(t2, (0, 1, 2, 3), tmp2, (4, 1, 5, 3), (4, 0, 5, 2)) + del tmp2 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/RDFwdwwrwCCD.py b/ebcc/codegen/RDFwdwwrwCCD.py new file mode 100644 index 00000000..848c742c --- /dev/null +++ b/ebcc/codegen/RDFwdwwrwCCD.py @@ -0,0 +1,77 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:59:03.642796 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + tmp0 = np.copy(np.transpose(t2, (1, 0, 2, 3))) * -1 + tmp0 += np.transpose(t2, (1, 0, 3, 2)) * 2 + tmp1 = einsum(v.xov, (0, 1, 2), tmp0, (1, 3, 2, 4), (3, 4, 0)) * 0.5 + del tmp0 + e_cc = einsum(v.xov, (0, 1, 2), tmp1, (1, 2, 0), ()) * 2 + del tmp1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + tmp0 = einsum(v.xov, (0, 1, 2), t2, (3, 1, 2, 4), (3, 4, 0)) + t2new = einsum(tmp0, (0, 1, 2), tmp0, (3, 4, 2), (0, 3, 1, 4)) + tmp1 = einsum(t2, (0, 1, 2, 3), v.xov, (4, 1, 3), (0, 2, 4)) + t2new += einsum(tmp1, (0, 1, 2), tmp1, (3, 4, 2), (3, 0, 4, 1)) * 4 + t2new += einsum(v.xov, (0, 1, 2), v.xov, (0, 3, 4), (3, 1, 4, 2)) + tmp2 = einsum(t2, (0, 1, 2, 3), f.oo, (4, 1), (4, 0, 2, 3)) + t2new += np.transpose(tmp2, (0, 1, 3, 2)) * -1 + t2new += np.transpose(tmp2, (1, 0, 2, 3)) * -1 + del tmp2 + tmp3 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2)) + t2new += np.transpose(tmp3, (0, 1, 3, 2)) + t2new += np.transpose(tmp3, (1, 0, 2, 3)) + del tmp3 + tmp4 = einsum(v.xov, (0, 1, 2), tmp0, (3, 4, 0), (3, 1, 4, 2)) + tmp7 = np.copy(tmp4) + del tmp4 + tmp5 = np.copy(np.transpose(v.xov, (1, 2, 0))) * -1 + tmp5 += tmp0 + del tmp0 + tmp6 = einsum(tmp5, (0, 1, 2), tmp1, (3, 4, 2), (3, 0, 4, 1)) * 2 + del tmp1, tmp5 + tmp7 += tmp6 + del tmp6 + t2new += tmp7 * -1 + t2new += np.transpose(tmp7, (1, 0, 3, 2)) * -1 + del tmp7 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/RDFwrwCCD.py b/ebcc/codegen/RDFwrwCCD.py new file mode 100644 index 00000000..8d457e2c --- /dev/null +++ b/ebcc/codegen/RDFwrwCCD.py @@ -0,0 +1,96 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:58:51.658946 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + tmp0 = np.copy(np.transpose(t2, (1, 0, 2, 3))) * 2 + tmp0 += np.transpose(t2, (1, 0, 3, 2)) * -1 + tmp1 = einsum(tmp0, (0, 1, 2, 3), v.xov, (4, 0, 3), (1, 2, 4)) * 0.5 + del tmp0 + e_cc = einsum(tmp1, (0, 1, 2), v.xov, (2, 0, 1), ()) * 2 + del tmp1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + tmp0 = einsum(v.xov, (0, 1, 2), v.xov, (0, 3, 4), (3, 1, 4, 2)) + t2new = np.copy(np.transpose(tmp0, (1, 0, 3, 2))) + tmp1 = einsum(t2, (0, 1, 2, 3), v.xov, (4, 1, 2), (0, 3, 4)) + t2new += einsum(tmp1, (0, 1, 2), tmp1, (3, 4, 2), (0, 3, 1, 4)) + tmp2 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new += np.transpose(tmp2, (0, 1, 3, 2)) * -1 + t2new += np.transpose(tmp2, (1, 0, 2, 3)) * -1 + del tmp2 + tmp3 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2)) + t2new += np.transpose(tmp3, (0, 1, 3, 2)) + t2new += np.transpose(tmp3, (1, 0, 2, 3)) + del tmp3 + tmp4 = einsum(tmp1, (0, 1, 2), v.xov, (2, 3, 4), (0, 3, 1, 4)) + tmp10 = np.copy(tmp4) + del tmp4 + tmp5 = einsum(v.xoo, (0, 1, 2), v.xvv, (0, 3, 4), (1, 2, 3, 4)) + tmp8 = np.copy(np.transpose(tmp5, (1, 0, 3, 2))) + del tmp5 + tmp6 = np.copy(np.transpose(v.xov, (1, 2, 0))) + tmp6 += tmp1 * -1 + del tmp1 + tmp7 = einsum(tmp6, (0, 1, 2), v.xov, (2, 3, 4), (3, 0, 4, 1)) * 2 + del tmp6 + tmp8 += np.transpose(tmp7, (1, 0, 3, 2)) * -1 + del tmp7 + tmp9 = einsum(t2, (0, 1, 2, 3), tmp8, (4, 1, 5, 3), (0, 4, 2, 5)) + del tmp8 + tmp10 += tmp9 + del tmp9 + t2new += tmp10 * -1 + t2new += np.transpose(tmp10, (1, 0, 3, 2)) * -1 + del tmp10 + tmp11 = einsum(tmp0, (0, 1, 2, 3), t2, (4, 1, 5, 2), (4, 0, 5, 3)) + tmp12 = einsum(tmp11, (0, 1, 2, 3), t2, (4, 1, 3, 5), (0, 4, 2, 5)) + del tmp11 + t2new += tmp12 + t2new += np.transpose(tmp12, (1, 0, 3, 2)) + del tmp12 + tmp13 = np.copy(np.transpose(tmp0, (1, 0, 2, 3))) + tmp13 += np.transpose(tmp0, (1, 0, 3, 2)) * -0.5 + del tmp0 + tmp14 = einsum(t2, (0, 1, 2, 3), tmp13, (1, 4, 5, 3), (0, 4, 2, 5)) * 2 + del tmp13 + t2new += einsum(tmp14, (0, 1, 2, 3), t2, (4, 1, 5, 3), (0, 4, 2, 5)) * 2 + del tmp14 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/RwdwwrwCCD.py b/ebcc/codegen/RwdwwrwCCD.py new file mode 100644 index 00000000..7d4161ee --- /dev/null +++ b/ebcc/codegen/RwdwwrwCCD.py @@ -0,0 +1,74 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:34:01.402919 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + e_cc = einsum(v.ovov, (0, 1, 2, 3), t2, (0, 2, 1, 3), ()) * 2 + e_cc += einsum(t2, (0, 1, 2, 3), v.ovov, (0, 3, 1, 2), ()) * -1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + t2new = np.copy(np.transpose(v.ovov, (0, 2, 1, 3))) + tmp0 = einsum(t2, (0, 1, 2, 3), v.ovov, (4, 5, 1, 3), (0, 4, 2, 5)) + t2new += np.transpose(tmp0, (1, 0, 3, 2)) * 2 + tmp1 = einsum(v.ovov, (0, 1, 2, 3), t2, (4, 2, 3, 5), (4, 0, 5, 1)) + t2new += np.transpose(tmp1, (1, 0, 3, 2)) * -1 + tmp2 = einsum(t2, (0, 1, 2, 3), tmp1, (4, 1, 5, 3), (0, 4, 2, 5)) + t2new += tmp2 * -2 + t2new += np.transpose(tmp2, (1, 0, 3, 2)) * -2 + del tmp2 + tmp3 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2)) + t2new += np.transpose(tmp3, (0, 1, 3, 2)) + t2new += np.transpose(tmp3, (1, 0, 2, 3)) + del tmp3 + tmp4 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new += np.transpose(tmp4, (0, 1, 3, 2)) * -1 + t2new += np.transpose(tmp4, (1, 0, 2, 3)) * -1 + del tmp4 + tmp5 = np.copy(np.transpose(v.ovov, (0, 2, 1, 3))) * 0.5 + tmp5 += tmp0 + del tmp0 + t2new += einsum(tmp5, (0, 1, 2, 3), t2, (4, 1, 5, 3), (4, 0, 5, 2)) * 4 + del tmp5 + tmp6 = np.copy(np.transpose(v.ovov, (0, 2, 1, 3))) * -1 + tmp6 += tmp1 + del tmp1 + t2new += einsum(t2, (0, 1, 2, 3), tmp6, (4, 1, 5, 2), (0, 4, 3, 5)) + del tmp6 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/RwrwCCD.py b/ebcc/codegen/RwrwCCD.py new file mode 100644 index 00000000..d5a8c87b --- /dev/null +++ b/ebcc/codegen/RwrwCCD.py @@ -0,0 +1,83 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:25:24.561604 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + e_cc = einsum(t2, (0, 1, 2, 3), v.ovov, (0, 2, 1, 3), ()) * 2 + e_cc += einsum(t2, (0, 1, 2, 3), v.ovov, (0, 3, 1, 2), ()) * -1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + t2new = einsum(t2, (0, 1, 2, 3), v.ovov, (4, 5, 1, 3), (4, 0, 5, 2)) * 2 + tmp0 = einsum(t2, (0, 1, 2, 3), v.ovov, (4, 5, 1, 2), (0, 4, 3, 5)) + t2new += np.transpose(tmp0, (1, 0, 3, 2)) * -1 + t2new += einsum(t2, (0, 1, 2, 3), v.oovv, (4, 1, 5, 3), (4, 0, 5, 2)) * -1 + t2new += np.transpose(v.ovov, (0, 2, 1, 3)) + tmp1 = einsum(t2, (0, 1, 2, 3), v.ovov, (4, 2, 1, 5), (0, 4, 3, 5)) + tmp2 = einsum(t2, (0, 1, 2, 3), tmp1, (4, 1, 5, 3), (0, 4, 2, 5)) + del tmp1 + t2new += tmp2 + t2new += np.transpose(tmp2, (1, 0, 3, 2)) + del tmp2 + tmp3 = einsum(t2, (0, 1, 2, 3), tmp0, (4, 1, 5, 3), (0, 4, 2, 5)) + t2new += tmp3 * -2 + t2new += np.transpose(tmp3, (1, 0, 3, 2)) * -2 + del tmp3 + tmp4 = einsum(t2, (0, 1, 2, 3), f.vv, (4, 3), (0, 1, 4, 2)) + t2new += np.transpose(tmp4, (0, 1, 3, 2)) + t2new += np.transpose(tmp4, (1, 0, 2, 3)) + del tmp4 + tmp5 = einsum(f.oo, (0, 1), t2, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new += np.transpose(tmp5, (0, 1, 3, 2)) * -1 + t2new += np.transpose(tmp5, (1, 0, 2, 3)) * -1 + del tmp5 + tmp7 = np.copy(np.transpose(v.ovov, (0, 2, 1, 3))) + tmp7 += v.oovv * -0.5 + tmp6 = np.copy(np.transpose(v.ovov, (0, 2, 3, 1))) * -0.5 + tmp6 += np.transpose(v.ovov, (0, 2, 1, 3)) + tmp7 += einsum(tmp6, (0, 1, 2, 3), t2, (4, 0, 5, 2), (4, 1, 5, 3)) * 2 + del tmp6 + t2new += einsum(tmp7, (0, 1, 2, 3), t2, (4, 1, 5, 3), (4, 0, 5, 2)) * 2 + del tmp7 + tmp8 = np.copy(np.transpose(v.ovov, (0, 2, 1, 3))) * -1 + tmp8 += tmp0 + del tmp0 + t2new += einsum(t2, (0, 1, 2, 3), tmp8, (4, 1, 5, 2), (0, 4, 3, 5)) + del tmp8 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/UDFwdwwrwCCD.py b/ebcc/codegen/UDFwdwwrwCCD.py new file mode 100644 index 00000000..f4d2ee17 --- /dev/null +++ b/ebcc/codegen/UDFwdwwrwCCD.py @@ -0,0 +1,117 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:59:07.730741 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + tmp0 = einsum(v.bb.xov, (0, 1, 2), t2.bbbb, (3, 1, 4, 2), (3, 4, 0)) + e_cc = einsum(v.bb.xov, (0, 1, 2), tmp0, (1, 2, 0), ()) + del tmp0 + tmp1 = einsum(t2.aaaa, (0, 1, 2, 3), v.aa.xov, (4, 1, 3), (0, 2, 4)) + tmp1 += einsum(t2.abab, (0, 1, 2, 3), v.bb.xov, (4, 1, 3), (0, 2, 4)) + e_cc += einsum(tmp1, (0, 1, 2), v.aa.xov, (2, 0, 1), ()) + del tmp1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + tmp0 = einsum(t2.aaaa, (0, 1, 2, 3), f.aa.oo, (4, 1), (4, 0, 2, 3)) + t2new = Namespace() + t2new.aaaa = np.copy(np.transpose(tmp0, (1, 0, 3, 2))) * 2 + t2new.aaaa += np.transpose(tmp0, (0, 1, 3, 2)) * -2 + del tmp0 + tmp1 = einsum(f.aa.vv, (0, 1), t2.aaaa, (2, 3, 4, 1), (2, 3, 0, 4)) + t2new.aaaa += np.transpose(tmp1, (1, 0, 2, 3)) * 2 + t2new.aaaa += np.transpose(tmp1, (1, 0, 3, 2)) * -2 + del tmp1 + tmp2 = einsum(t2.aaaa, (0, 1, 2, 3), v.aa.xov, (4, 1, 3), (0, 2, 4)) + t2new.aaaa += einsum(tmp2, (0, 1, 2), tmp2, (3, 4, 2), (0, 3, 1, 4)) * 4 + tmp3 = einsum(t2.abab, (0, 1, 2, 3), v.bb.xov, (4, 1, 3), (0, 2, 4)) + t2new.aaaa += einsum(tmp3, (0, 1, 2), tmp3, (3, 4, 2), (3, 0, 4, 1)) + tmp4 = einsum(tmp2, (0, 1, 2), tmp3, (3, 4, 2), (0, 3, 1, 4)) + t2new.aaaa += tmp4 * 2 + t2new.aaaa += np.transpose(tmp4, (1, 0, 3, 2)) * 2 + del tmp4 + tmp5 = np.copy(np.transpose(v.aa.xov, (1, 2, 0))) * 0.5 + tmp5 += tmp2 + tmp5 += tmp3 * 0.5 + t2new.aaaa += einsum(v.aa.xov, (0, 1, 2), tmp5, (3, 4, 0), (3, 1, 4, 2)) * 2 + del tmp5 + tmp6 = np.copy(tmp2) + del tmp2 + tmp6 += tmp3 * 0.5 + del tmp3 + t2new.aaaa += einsum(tmp6, (0, 1, 2), v.aa.xov, (2, 3, 4), (3, 0, 4, 1)) * 2 + t2new.abab = einsum(f.bb.oo, (0, 1), t2.abab, (2, 1, 3, 4), (2, 0, 3, 4)) * -1 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.aa.oo, (4, 0), (4, 1, 2, 3)) * -1 + t2new.abab += einsum(f.aa.vv, (0, 1), t2.abab, (2, 3, 1, 4), (2, 3, 0, 4)) + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.bb.vv, (4, 3), (0, 1, 2, 4)) + t2new.abab += einsum(v.aa.xov, (0, 1, 2), v.bb.xov, (0, 3, 4), (1, 3, 2, 4)) + tmp9 = np.copy(np.transpose(v.bb.xov, (1, 2, 0))) + tmp7 = einsum(v.aa.xov, (0, 1, 2), t2.abab, (1, 3, 2, 4), (3, 4, 0)) + tmp9 += tmp7 + tmp8 = einsum(v.bb.xov, (0, 1, 2), t2.bbbb, (3, 1, 4, 2), (3, 4, 0)) + tmp9 += tmp8 * 2 + t2new.abab += einsum(tmp9, (0, 1, 2), tmp6, (3, 4, 2), (3, 0, 4, 1)) * 2 + del tmp6, tmp9 + tmp10 = np.copy(tmp7) * 0.5 + tmp10 += tmp8 + t2new.abab += einsum(v.aa.xov, (0, 1, 2), tmp10, (3, 4, 0), (1, 3, 2, 4)) * 2 + tmp11 = einsum(f.bb.oo, (0, 1), t2.bbbb, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new.bbbb = np.copy(np.transpose(tmp11, (1, 0, 3, 2))) * 2 + t2new.bbbb += np.transpose(tmp11, (0, 1, 3, 2)) * -2 + del tmp11 + tmp12 = einsum(f.bb.vv, (0, 1), t2.bbbb, (2, 3, 4, 1), (2, 3, 0, 4)) + t2new.bbbb += np.transpose(tmp12, (1, 0, 2, 3)) * 2 + t2new.bbbb += np.transpose(tmp12, (1, 0, 3, 2)) * -2 + del tmp12 + t2new.bbbb += einsum(tmp7, (0, 1, 2), tmp7, (3, 4, 2), (3, 0, 4, 1)) + t2new.bbbb += einsum(tmp8, (0, 1, 2), tmp8, (3, 4, 2), (3, 0, 4, 1)) * 4 + tmp13 = einsum(tmp8, (0, 1, 2), tmp7, (3, 4, 2), (3, 0, 4, 1)) + t2new.bbbb += tmp13 * 2 + t2new.bbbb += np.transpose(tmp13, (1, 0, 3, 2)) * 2 + del tmp13 + tmp14 = np.copy(np.transpose(v.bb.xov, (1, 2, 0))) * 0.5 + tmp14 += tmp7 * 0.5 + del tmp7 + tmp14 += tmp8 + del tmp8 + t2new.bbbb += einsum(v.bb.xov, (0, 1, 2), tmp14, (3, 4, 0), (3, 1, 4, 2)) * 2 + del tmp14 + t2new.bbbb += einsum(tmp10, (0, 1, 2), v.bb.xov, (2, 3, 4), (3, 0, 4, 1)) * 2 + del tmp10 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/UDFwrwCCD.py b/ebcc/codegen/UDFwrwCCD.py new file mode 100644 index 00000000..d50b2a49 --- /dev/null +++ b/ebcc/codegen/UDFwrwCCD.py @@ -0,0 +1,161 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:58:55.264172 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + tmp0 = einsum(v.bb.xov, (0, 1, 2), t2.bbbb, (3, 1, 4, 2), (3, 4, 0)) + e_cc = einsum(v.bb.xov, (0, 1, 2), tmp0, (1, 2, 0), ()) + del tmp0 + tmp1 = einsum(v.aa.xov, (0, 1, 2), t2.aaaa, (3, 1, 4, 2), (3, 4, 0)) + tmp1 += einsum(t2.abab, (0, 1, 2, 3), v.bb.xov, (4, 1, 3), (0, 2, 4)) + e_cc += einsum(tmp1, (0, 1, 2), v.aa.xov, (2, 0, 1), ()) + del tmp1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + tmp0 = einsum(t2.aaaa, (0, 1, 2, 3), f.aa.oo, (4, 1), (4, 0, 2, 3)) + t2new = Namespace() + t2new.aaaa = np.copy(np.transpose(tmp0, (1, 0, 3, 2))) * 2 + t2new.aaaa += np.transpose(tmp0, (0, 1, 3, 2)) * -2 + del tmp0 + tmp1 = einsum(t2.aaaa, (0, 1, 2, 3), f.aa.vv, (4, 3), (0, 1, 4, 2)) + t2new.aaaa += np.transpose(tmp1, (1, 0, 2, 3)) * 2 + t2new.aaaa += np.transpose(tmp1, (1, 0, 3, 2)) * -2 + del tmp1 + tmp2 = einsum(v.aa.xov, (0, 1, 2), v.aa.xov, (0, 3, 4), (3, 1, 4, 2)) + t2new.aaaa += np.transpose(tmp2, (1, 0, 3, 2)) + tmp4 = einsum(t2.abab, (0, 1, 2, 3), v.bb.xov, (4, 1, 3), (0, 2, 4)) + tmp3 = einsum(v.aa.xov, (0, 1, 2), t2.aaaa, (3, 1, 4, 2), (3, 4, 0)) + tmp5 = einsum(tmp3, (0, 1, 2), tmp4, (3, 4, 2), (0, 3, 1, 4)) + t2new.aaaa += tmp5 * 2 + t2new.aaaa += np.transpose(tmp5, (1, 0, 3, 2)) * 2 + del tmp5 + tmp6 = einsum(v.aa.xvv, (0, 1, 2), v.aa.xoo, (0, 3, 4), (3, 4, 1, 2)) + tmp8 = np.copy(np.transpose(tmp6, (1, 0, 3, 2))) * -1 + tmp8 += einsum(t2.aaaa, (0, 1, 2, 3), tmp2, (4, 1, 3, 5), (0, 4, 2, 5)) * -2 + tmp7 = np.copy(np.transpose(v.aa.xov, (1, 2, 0))) * 0.5 + tmp7 += tmp3 + tmp8 += einsum(tmp7, (0, 1, 2), v.aa.xov, (2, 3, 4), (0, 3, 1, 4)) * 2 + del tmp7 + t2new.aaaa += einsum(tmp8, (0, 1, 2, 3), t2.aaaa, (4, 1, 5, 3), (4, 0, 5, 2)) * 2 + del tmp8 + tmp9 = einsum(v.bb.xov, (0, 1, 2), v.bb.xov, (0, 3, 4), (3, 1, 4, 2)) + tmp11 = einsum(tmp9, (0, 1, 2, 3), t2.abab, (4, 1, 5, 2), (4, 0, 5, 3)) * -1 + tmp10 = np.copy(np.transpose(v.aa.xov, (1, 2, 0))) + tmp10 += tmp4 + tmp11 += einsum(v.bb.xov, (0, 1, 2), tmp10, (3, 4, 0), (3, 1, 4, 2)) + del tmp10 + t2new.aaaa += einsum(tmp11, (0, 1, 2, 3), t2.abab, (4, 1, 5, 3), (4, 0, 5, 2)) + del tmp11 + t2new.aaaa += np.transpose(tmp2, (1, 0, 2, 3)) * -1 + t2new.aaaa += einsum(t2.aaaa, (0, 1, 2, 3), tmp6, (4, 1, 5, 3), (4, 0, 5, 2)) * -2 + tmp12 = np.copy(tmp3) * 2 + del tmp3 + tmp12 += tmp4 + del tmp4 + t2new.aaaa += einsum(tmp12, (0, 1, 2), v.aa.xov, (2, 3, 4), (3, 0, 4, 1)) + del tmp12 + t2new.abab = einsum(f.bb.oo, (0, 1), t2.abab, (2, 1, 3, 4), (2, 0, 3, 4)) * -1 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.aa.oo, (4, 0), (4, 1, 2, 3)) * -1 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.aa.vv, (4, 2), (0, 1, 4, 3)) + t2new.abab += einsum(f.bb.vv, (0, 1), t2.abab, (2, 3, 4, 1), (2, 3, 4, 0)) + t2new.abab += einsum(v.bb.xov, (0, 1, 2), v.aa.xov, (0, 3, 4), (3, 1, 4, 2)) + tmp13 = einsum(v.bb.xoo, (0, 1, 2), v.bb.xvv, (0, 3, 4), (1, 2, 3, 4)) + tmp18 = np.copy(np.transpose(tmp13, (1, 0, 3, 2))) * -1 + tmp14 = einsum(t2.bbbb, (0, 1, 2, 3), tmp9, (1, 4, 5, 3), (0, 4, 2, 5)) + tmp18 += np.transpose(tmp14, (1, 0, 3, 2)) * -2 + tmp17 = np.copy(np.transpose(v.bb.xov, (1, 2, 0))) + tmp15 = einsum(t2.abab, (0, 1, 2, 3), v.aa.xov, (4, 0, 2), (1, 3, 4)) + tmp17 += tmp15 + tmp16 = einsum(v.bb.xov, (0, 1, 2), t2.bbbb, (3, 1, 4, 2), (3, 4, 0)) + tmp17 += tmp16 * 2 + tmp18 += einsum(tmp17, (0, 1, 2), v.bb.xov, (2, 3, 4), (3, 0, 4, 1)) + t2new.abab += einsum(tmp18, (0, 1, 2, 3), t2.abab, (4, 0, 5, 2), (4, 1, 5, 3)) + del tmp18 + tmp19 = einsum(t2.abab, (0, 1, 2, 3), tmp2, (0, 4, 5, 2), (4, 1, 5, 3)) + del tmp2 + tmp20 = np.copy(tmp19) * -1 + tmp20 += einsum(tmp17, (0, 1, 2), v.aa.xov, (2, 3, 4), (3, 0, 4, 1)) + del tmp17 + t2new.abab += einsum(tmp20, (0, 1, 2, 3), t2.aaaa, (4, 0, 5, 2), (4, 1, 5, 3)) * 2 + del tmp20 + t2new.abab += einsum(tmp6, (0, 1, 2, 3), t2.abab, (1, 4, 3, 5), (0, 4, 2, 5)) * -1 + del tmp6 + tmp21 = np.copy(tmp15) + tmp21 += tmp16 * 2 + t2new.abab += einsum(tmp21, (0, 1, 2), v.aa.xov, (2, 3, 4), (3, 0, 4, 1)) + tmp22 = einsum(t2.bbbb, (0, 1, 2, 3), f.bb.oo, (4, 1), (4, 0, 2, 3)) + t2new.bbbb = np.copy(np.transpose(tmp22, (1, 0, 3, 2))) * 2 + t2new.bbbb += np.transpose(tmp22, (0, 1, 3, 2)) * -2 + del tmp22 + tmp23 = einsum(f.bb.vv, (0, 1), t2.bbbb, (2, 3, 4, 1), (2, 3, 0, 4)) + t2new.bbbb += np.transpose(tmp23, (1, 0, 2, 3)) * 2 + t2new.bbbb += np.transpose(tmp23, (1, 0, 3, 2)) * -2 + del tmp23 + t2new.bbbb += np.transpose(tmp9, (1, 0, 3, 2)) + tmp24 = einsum(tmp16, (0, 1, 2), tmp15, (3, 4, 2), (3, 0, 4, 1)) + t2new.bbbb += tmp24 * 2 + t2new.bbbb += np.transpose(tmp24, (1, 0, 3, 2)) * 2 + del tmp24 + tmp26 = np.copy(np.transpose(tmp13, (1, 0, 3, 2))) * -1 + tmp26 += tmp14 * -2 + del tmp14 + tmp25 = np.copy(np.transpose(v.bb.xov, (1, 2, 0))) * 0.5 + tmp25 += tmp16 + del tmp16 + tmp26 += einsum(v.bb.xov, (0, 1, 2), tmp25, (3, 4, 0), (3, 1, 4, 2)) * 2 + del tmp25 + t2new.bbbb += einsum(tmp26, (0, 1, 2, 3), t2.bbbb, (4, 1, 5, 3), (4, 0, 5, 2)) * 2 + del tmp26 + tmp28 = np.copy(tmp19) * -1 + del tmp19 + tmp27 = np.copy(np.transpose(v.bb.xov, (1, 2, 0))) + tmp27 += tmp15 + del tmp15 + tmp28 += einsum(tmp27, (0, 1, 2), v.aa.xov, (2, 3, 4), (3, 0, 4, 1)) + del tmp27 + t2new.bbbb += einsum(tmp28, (0, 1, 2, 3), t2.abab, (0, 4, 2, 5), (4, 1, 5, 3)) + del tmp28 + t2new.bbbb += np.transpose(tmp9, (1, 0, 2, 3)) * -1 + del tmp9 + t2new.bbbb += einsum(tmp13, (0, 1, 2, 3), t2.bbbb, (4, 1, 5, 3), (0, 4, 2, 5)) * -2 + del tmp13 + t2new.bbbb += einsum(v.bb.xov, (0, 1, 2), tmp21, (3, 4, 0), (1, 3, 2, 4)) + del tmp21 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/UwdwwrwCCD.py b/ebcc/codegen/UwdwwrwCCD.py new file mode 100644 index 00000000..a2ec54e3 --- /dev/null +++ b/ebcc/codegen/UwdwwrwCCD.py @@ -0,0 +1,124 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:33:56.658507 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + e_cc = einsum(t2.abab, (0, 1, 2, 3), v.aabb.ovov, (0, 2, 1, 3), ()) + e_cc += einsum(t2.aaaa, (0, 1, 2, 3), v.aaaa.ovov, (0, 3, 1, 2), ()) * -1 + e_cc += einsum(v.bbbb.ovov, (0, 1, 2, 3), t2.bbbb, (0, 2, 3, 1), ()) * -1 + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + tmp0 = einsum(f.aa.oo, (0, 1), t2.aaaa, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new = Namespace() + t2new.aaaa = np.copy(np.transpose(tmp0, (1, 0, 3, 2))) * 2 + t2new.aaaa += np.transpose(tmp0, (0, 1, 3, 2)) * -2 + del tmp0 + tmp1 = einsum(t2.aaaa, (0, 1, 2, 3), f.aa.vv, (4, 3), (0, 1, 4, 2)) + t2new.aaaa += np.transpose(tmp1, (1, 0, 2, 3)) * 2 + t2new.aaaa += np.transpose(tmp1, (1, 0, 3, 2)) * -2 + del tmp1 + t2new.aaaa += np.transpose(v.aaaa.ovov, (0, 2, 1, 3)) + tmp2 = einsum(v.aabb.ovov, (0, 1, 2, 3), t2.abab, (4, 2, 5, 3), (4, 0, 5, 1)) + tmp3 = einsum(t2.aaaa, (0, 1, 2, 3), tmp2, (4, 1, 5, 3), (0, 4, 2, 5)) + t2new.aaaa += tmp3 * 2 + t2new.aaaa += np.transpose(tmp3, (1, 0, 3, 2)) * 2 + del tmp3 + tmp4 = np.copy(np.transpose(v.aabb.ovov, (0, 2, 1, 3))) + tmp4 += einsum(t2.abab, (0, 1, 2, 3), v.bbbb.ovov, (4, 5, 1, 3), (0, 4, 2, 5)) + t2new.aaaa += einsum(t2.abab, (0, 1, 2, 3), tmp4, (4, 1, 5, 3), (0, 4, 2, 5)) + del tmp4 + tmp6 = np.copy(np.transpose(v.aaaa.ovov, (0, 2, 1, 3))) + tmp5 = einsum(t2.aaaa, (0, 1, 2, 3), v.aaaa.ovov, (4, 5, 1, 3), (0, 4, 2, 5)) + tmp6 += tmp5 * 2 + t2new.aaaa += einsum(tmp6, (0, 1, 2, 3), t2.aaaa, (4, 1, 5, 3), (4, 0, 5, 2)) * 2 + del tmp6 + t2new.aaaa += np.transpose(tmp5, (1, 0, 3, 2)) * 2 + del tmp5 + t2new.aaaa += np.transpose(tmp2, (1, 0, 3, 2)) + del tmp2 + t2new.abab = einsum(f.bb.oo, (0, 1), t2.abab, (2, 1, 3, 4), (2, 0, 3, 4)) * -1 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.aa.oo, (4, 0), (4, 1, 2, 3)) * -1 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.aa.vv, (4, 2), (0, 1, 4, 3)) + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.bb.vv, (4, 3), (0, 1, 2, 4)) + t2new.abab += np.transpose(v.aabb.ovov, (0, 2, 1, 3)) + tmp9 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 1, 3))) + tmp7 = einsum(t2.abab, (0, 1, 2, 3), v.aabb.ovov, (0, 2, 4, 5), (1, 4, 3, 5)) + tmp9 += np.transpose(tmp7, (1, 0, 3, 2)) + tmp8 = einsum(t2.bbbb, (0, 1, 2, 3), v.bbbb.ovov, (4, 5, 1, 3), (0, 4, 2, 5)) + tmp9 += np.transpose(tmp8, (1, 0, 3, 2)) * 2 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), tmp9, (1, 4, 3, 5), (0, 4, 2, 5)) + del tmp9 + tmp12 = np.copy(np.transpose(v.aabb.ovov, (0, 2, 1, 3))) * 0.5 + tmp10 = einsum(t2.abab, (0, 1, 2, 3), v.aaaa.ovov, (4, 5, 0, 2), (4, 1, 5, 3)) + tmp12 += tmp10 * 0.5 + tmp11 = einsum(t2.bbbb, (0, 1, 2, 3), v.aabb.ovov, (4, 5, 1, 3), (4, 0, 5, 2)) + tmp12 += tmp11 + t2new.abab += einsum(tmp12, (0, 1, 2, 3), t2.aaaa, (4, 0, 5, 2), (4, 1, 5, 3)) * 4 + del tmp12 + t2new.abab += tmp11 * 2 + t2new.abab += tmp10 + tmp13 = einsum(f.bb.oo, (0, 1), t2.bbbb, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new.bbbb = np.copy(np.transpose(tmp13, (1, 0, 3, 2))) * 2 + t2new.bbbb += np.transpose(tmp13, (0, 1, 3, 2)) * -2 + del tmp13 + tmp14 = einsum(f.bb.vv, (0, 1), t2.bbbb, (2, 3, 4, 1), (2, 3, 0, 4)) + t2new.bbbb += np.transpose(tmp14, (1, 0, 2, 3)) * 2 + t2new.bbbb += np.transpose(tmp14, (1, 0, 3, 2)) * -2 + del tmp14 + t2new.bbbb += np.transpose(v.bbbb.ovov, (0, 2, 1, 3)) + tmp15 = einsum(t2.abab, (0, 1, 2, 3), tmp11, (0, 4, 2, 5), (1, 4, 3, 5)) + del tmp11 + t2new.bbbb += tmp15 * 2 + t2new.bbbb += np.transpose(tmp15, (1, 0, 3, 2)) * 2 + del tmp15 + tmp16 = np.copy(np.transpose(v.aabb.ovov, (0, 2, 1, 3))) + tmp16 += tmp10 + del tmp10 + t2new.bbbb += einsum(t2.abab, (0, 1, 2, 3), tmp16, (0, 4, 2, 5), (1, 4, 3, 5)) + del tmp16 + tmp17 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 1, 3))) * 0.5 + tmp17 += tmp8 + t2new.bbbb += einsum(tmp17, (0, 1, 2, 3), t2.bbbb, (4, 1, 5, 3), (4, 0, 5, 2)) * 4 + del tmp17 + t2new.bbbb += np.transpose(tmp8, (1, 0, 3, 2)) * 2 + del tmp8 + t2new.bbbb += np.transpose(tmp7, (1, 0, 3, 2)) + del tmp7 + + return {"t2new": t2new} + diff --git a/ebcc/codegen/UwrwCCD.py b/ebcc/codegen/UwrwCCD.py new file mode 100644 index 00000000..0505ab8f --- /dev/null +++ b/ebcc/codegen/UwrwCCD.py @@ -0,0 +1,143 @@ +"""Code generated by `albert` version 0.0.0. + + * date: 2024-12-18T11:25:18.888904 + * python version: 3.10.12 (main, Nov 6 2024, 20:22:13) [GCC 11.4.0] + * albert version: 0.0.0 + * caller: /home/ollie/git/albert/albert/code/einsum.py + * node: ollie-desktop + * system: Linux + * processor: x86_64 + * release: 6.8.0-49-generic +""" + +from ebcc import numpy as np +from ebcc.util import pack_2e, einsum, dirsum, Namespace + + +def energy(t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + t2: + v: + + Returns: + e_cc: + """ + + e_cc = einsum(v.bbbb.ovov, (0, 1, 2, 3), t2.bbbb, (0, 2, 1, 3), ()) + e_cc += einsum(t2.abab, (0, 1, 2, 3), v.aabb.ovov, (0, 2, 1, 3), ()) + e_cc += einsum(v.aaaa.ovov, (0, 1, 2, 3), t2.aaaa, (0, 2, 1, 3), ()) + + return e_cc + +def update_amps(f=None, t2=None, v=None, **kwargs): + """Code generated by `albert` 0.0.0. + + Args: + f: + t2: + v: + + Returns: + t2new: + """ + + tmp0 = einsum(f.aa.oo, (0, 1), t2.aaaa, (2, 1, 3, 4), (0, 2, 3, 4)) + t2new = Namespace() + t2new.aaaa = np.copy(np.transpose(tmp0, (1, 0, 3, 2))) * 2 + t2new.aaaa += np.transpose(tmp0, (0, 1, 3, 2)) * -2 + del tmp0 + tmp1 = einsum(t2.aaaa, (0, 1, 2, 3), f.aa.vv, (4, 3), (0, 1, 4, 2)) + t2new.aaaa += np.transpose(tmp1, (1, 0, 2, 3)) * 2 + t2new.aaaa += np.transpose(tmp1, (1, 0, 3, 2)) * -2 + del tmp1 + t2new.aaaa += np.transpose(v.aaaa.ovov, (0, 2, 1, 3)) + tmp2 = einsum(t2.abab, (0, 1, 2, 3), v.aabb.ovov, (4, 5, 1, 3), (0, 4, 2, 5)) + tmp3 = einsum(tmp2, (0, 1, 2, 3), t2.aaaa, (4, 1, 5, 3), (4, 0, 5, 2)) + t2new.aaaa += tmp3 * 2 + t2new.aaaa += np.transpose(tmp3, (1, 0, 3, 2)) * 2 + del tmp3 + tmp5 = np.copy(np.transpose(v.aaaa.ovov, (0, 2, 1, 3))) * 0.5 + tmp5 += v.aaaa.oovv * -0.5 + tmp4 = np.copy(np.transpose(v.aaaa.ovov, (0, 2, 3, 1))) + tmp4 += np.transpose(v.aaaa.ovov, (0, 2, 1, 3)) * -1 + tmp5 += einsum(t2.aaaa, (0, 1, 2, 3), tmp4, (1, 4, 3, 5), (0, 4, 2, 5)) * -1 + del tmp4 + t2new.aaaa += einsum(tmp5, (0, 1, 2, 3), t2.aaaa, (4, 1, 5, 3), (4, 0, 5, 2)) * 4 + del tmp5 + tmp7 = np.copy(np.transpose(v.aabb.ovov, (0, 2, 1, 3))) + tmp6 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 3, 1))) * -1 + tmp6 += np.transpose(v.bbbb.ovov, (0, 2, 1, 3)) + tmp7 += einsum(tmp6, (0, 1, 2, 3), t2.abab, (4, 0, 5, 3), (4, 1, 5, 2)) * -1 + del tmp6 + t2new.aaaa += einsum(tmp7, (0, 1, 2, 3), t2.abab, (4, 1, 5, 3), (4, 0, 5, 2)) + del tmp7 + t2new.aaaa += np.transpose(v.aaaa.ovov, (0, 2, 3, 1)) * -1 + t2new.aaaa += np.transpose(tmp2, (1, 0, 3, 2)) + del tmp2 + tmp8 = np.copy(np.transpose(v.aaaa.ovov, (0, 2, 1, 3))) + tmp8 += v.aaaa.oovv * -1 + t2new.aaaa += einsum(tmp8, (0, 1, 2, 3), t2.aaaa, (4, 0, 5, 2), (1, 4, 3, 5)) * 2 + t2new.abab = einsum(f.bb.oo, (0, 1), t2.abab, (2, 1, 3, 4), (2, 0, 3, 4)) * -1 + t2new.abab += einsum(f.aa.oo, (0, 1), t2.abab, (1, 2, 3, 4), (0, 2, 3, 4)) * -1 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), f.aa.vv, (4, 2), (0, 1, 4, 3)) + t2new.abab += einsum(f.bb.vv, (0, 1), t2.abab, (2, 3, 4, 1), (2, 3, 4, 0)) + t2new.abab += np.transpose(v.aabb.ovov, (0, 2, 1, 3)) + tmp11 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 1, 3))) * 0.5 + tmp11 += v.bbbb.oovv * -0.5 + tmp9 = einsum(v.aabb.ovov, (0, 1, 2, 3), t2.abab, (0, 4, 1, 5), (4, 2, 5, 3)) + tmp11 += np.transpose(tmp9, (1, 0, 3, 2)) * 0.5 + tmp10 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 3, 1))) + tmp10 += np.transpose(v.bbbb.ovov, (0, 2, 1, 3)) * -1 + tmp11 += einsum(t2.bbbb, (0, 1, 2, 3), tmp10, (1, 4, 5, 3), (4, 0, 5, 2)) + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), tmp11, (1, 4, 3, 5), (0, 4, 2, 5)) * 2 + del tmp11 + tmp15 = np.copy(np.transpose(v.aabb.ovov, (0, 2, 1, 3))) + tmp12 = einsum(v.aabb.ovov, (0, 1, 2, 3), t2.bbbb, (4, 2, 5, 3), (0, 4, 1, 5)) + tmp15 += tmp12 * 2 + tmp13 = np.copy(np.transpose(v.aaaa.ovov, (0, 2, 3, 1))) * -1 + tmp13 += np.transpose(v.aaaa.ovov, (0, 2, 1, 3)) + tmp14 = einsum(t2.abab, (0, 1, 2, 3), tmp13, (0, 4, 2, 5), (4, 1, 5, 3)) + del tmp13 + tmp15 += tmp14 + t2new.abab += einsum(tmp15, (0, 1, 2, 3), t2.aaaa, (4, 0, 5, 2), (4, 1, 5, 3)) * 2 + del tmp15 + t2new.abab += tmp12 * 2 + t2new.abab += einsum(t2.abab, (0, 1, 2, 3), tmp8, (0, 4, 2, 5), (4, 1, 5, 3)) + del tmp8 + tmp16 = einsum(t2.bbbb, (0, 1, 2, 3), f.bb.oo, (4, 1), (4, 0, 2, 3)) + t2new.bbbb = np.copy(np.transpose(tmp16, (1, 0, 3, 2))) * 2 + t2new.bbbb += np.transpose(tmp16, (0, 1, 3, 2)) * -2 + del tmp16 + tmp17 = einsum(t2.bbbb, (0, 1, 2, 3), f.bb.vv, (4, 3), (0, 1, 4, 2)) + t2new.bbbb += np.transpose(tmp17, (1, 0, 2, 3)) * 2 + t2new.bbbb += np.transpose(tmp17, (1, 0, 3, 2)) * -2 + del tmp17 + t2new.bbbb += np.transpose(v.bbbb.ovov, (0, 2, 1, 3)) + tmp18 = einsum(tmp12, (0, 1, 2, 3), t2.abab, (0, 4, 2, 5), (4, 1, 5, 3)) + del tmp12 + t2new.bbbb += tmp18 * 2 + t2new.bbbb += np.transpose(tmp18, (1, 0, 3, 2)) * 2 + del tmp18 + tmp19 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 1, 3))) * 0.5 + tmp19 += v.bbbb.oovv * -0.5 + tmp19 += einsum(tmp10, (0, 1, 2, 3), t2.bbbb, (4, 0, 5, 2), (4, 1, 5, 3)) * -1 + del tmp10 + t2new.bbbb += einsum(tmp19, (0, 1, 2, 3), t2.bbbb, (4, 1, 5, 3), (4, 0, 5, 2)) * 4 + del tmp19 + tmp20 = np.copy(np.transpose(v.aabb.ovov, (0, 2, 1, 3))) + tmp20 += tmp14 + del tmp14 + t2new.bbbb += einsum(t2.abab, (0, 1, 2, 3), tmp20, (0, 4, 2, 5), (1, 4, 3, 5)) + del tmp20 + t2new.bbbb += np.transpose(v.bbbb.ovov, (0, 2, 3, 1)) * -1 + t2new.bbbb += np.transpose(tmp9, (1, 0, 3, 2)) + del tmp9 + tmp21 = np.copy(np.transpose(v.bbbb.ovov, (0, 2, 1, 3))) + tmp21 += v.bbbb.oovv * -1 + t2new.bbbb += einsum(t2.bbbb, (0, 1, 2, 3), tmp21, (1, 4, 3, 5), (4, 0, 5, 2)) * 2 + del tmp21 + + return {"t2new": t2new} + diff --git a/ebcc/core/ansatz.py b/ebcc/core/ansatz.py index 5da4591b..998a63ca 100644 --- a/ebcc/core/ansatz.py +++ b/ebcc/core/ansatz.py @@ -26,6 +26,8 @@ "QCISD": ("QCISD", "", 0, 0), "DCD": ("DCD", "", 0, 0), "DCSD": ("DCSD", "", 0, 0), + "rCCD": ("rCCD", "", 0, 0), + "drCCD": ("drCCD", "", 0, 0), "CCSDt'": ("CCSDt'", "", 0, 0), "CCSD-S-1-1": ("CCSD", "S", 1, 1), "CCSD-SD-1-1": ("CCSD", "SD", 1, 1), From b42fea460ae4ab9067ae957a3720862c242de81a Mon Sep 17 00:00:00 2001 From: Oliver Backhouse Date: Wed, 18 Dec 2024 12:07:16 +0000 Subject: [PATCH 2/3] Add rCCD and drCCD to FEATURES --- FEATURES.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FEATURES.md b/FEATURES.md index b1e80faa..7b865191 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -27,6 +27,8 @@ The following table summarises the available methods and routines for the ansatz | QCISD | RUG | RUG | | | | | | | - | | DCD | RU | RU | | | | | | | - | | DCSD | RU | RU | | | | | | | - | +| rCCD | RUG | RUG | | | | | | | - | +| drCCD | RUG | RUG | | | | | | | - | | DF-CCD | RU | RU | RU | RU | RU | | RU | RU | - | | DF-CCSD | RU | RU | RU | RU | RU | | RU | RU | - | | DF-CC2 | RU | RU | RU | RU | RU | | RU | RU | - | @@ -35,6 +37,8 @@ The following table summarises the available methods and routines for the ansatz | DF-QCISD | RU | RU | | | | | | | - | | DF-DCD | RU | RU | | | | | | | - | | DF-DCSD | RU | RU | | | | | | | - | +| DF-rCCD | RU | RU | | | | | | | - | +| DF-drCCD | RU | RU | | | | | | | - | | CCSD-S-1-1 | RUG | RUG | RUG | | | | RUG | RUG | RUG | | CCSD-SD-1-1 | RUG | RUG | RUG | | | | RUG | RUG | RUG | | CCSD-SD-1-2 | RUG | RUG | RUG | | | | RUG | RUG | RUG | From 86133637987d6e9a3f103eb35ac2c778a3642818 Mon Sep 17 00:00:00 2001 From: Oliver Backhouse Date: Wed, 18 Dec 2024 12:24:39 +0000 Subject: [PATCH 3/3] Attribution for ansatzes in FEATURES --- FEATURES.md | 69 ++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/FEATURES.md b/FEATURES.md index 7b865191..e8922752 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -10,38 +10,43 @@ The following table summarises the available methods and routines for the ansatz currently treated by code generation, in the three spin cases: -| Ansatz | E | T | Λ | IP | EA | EE | DM1 | DM2 | BDM | -| :---------: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | -| MP2 | RUG | - | - | RUG | RUG | G | RUG | RUG | - | -| MP3 | RUG | | | | | | | | - | -| CCD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - | -| CCSD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - | -| CCSDT | RUG | RUG | RUG | | | | RUG | RUG | - | -| CCSDTQ | g | g | | | | | | | - | -| CCSD(T) | RUG | RUG | | | | | | | - | -| CCSDt' | RUG | RUG | | | | | | | - | -| CC2 | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - | -| CC3 | RUG | RUG | | | | | | | - | -| LCCD | RUG | RUG | | | | | | | - | -| LCCSD | RUG | RUG | | | | | | | - | -| QCISD | RUG | RUG | | | | | | | - | -| DCD | RU | RU | | | | | | | - | -| DCSD | RU | RU | | | | | | | - | -| rCCD | RUG | RUG | | | | | | | - | -| drCCD | RUG | RUG | | | | | | | - | -| DF-CCD | RU | RU | RU | RU | RU | | RU | RU | - | -| DF-CCSD | RU | RU | RU | RU | RU | | RU | RU | - | -| DF-CC2 | RU | RU | RU | RU | RU | | RU | RU | - | -| DF-LCCD | RU | RU | | | | | | | - | -| DF-LCCSD | RU | RU | | | | | | | - | -| DF-QCISD | RU | RU | | | | | | | - | -| DF-DCD | RU | RU | | | | | | | - | -| DF-DCSD | RU | RU | | | | | | | - | -| DF-rCCD | RU | RU | | | | | | | - | -| DF-drCCD | RU | RU | | | | | | | - | -| CCSD-S-1-1 | RUG | RUG | RUG | | | | RUG | RUG | RUG | -| CCSD-SD-1-1 | RUG | RUG | RUG | | | | RUG | RUG | RUG | -| CCSD-SD-1-2 | RUG | RUG | RUG | | | | RUG | RUG | RUG | +| Ansatz | E | T | Λ | IP | EA | EE | DM1 | DM2 | BDM | +| :-------------: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | +| MP2 | RUG | - | - | RUG | RUG | G | RUG | RUG | - | +| MP3 | RUG | | | | | | | | - | +| CCD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - | +| CCSD | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - | +| CCSDT | RUG | RUG | RUG | | | | RUG | RUG | - | +| CCSDTQ | g | g | | | | | | | - | +| CCSD(T) | RUG | RUG | | | | | | | - | +| CCSDt'[^1] | RUG | RUG | | | | | | | - | +| CC2 | RUG | RUG | RUG | RUG | RUG | G | RUG | RUG | - | +| CC3 | RUG | RUG | | | | | | | - | +| LCCD | RUG | RUG | | | | | | | - | +| LCCSD | RUG | RUG | | | | | | | - | +| QCISD | RUG | RUG | | | | | | | - | +| DCD[^2] | RU | RU | | | | | | | - | +| DCSD[^2] | RU | RU | | | | | | | - | +| rCCD[^3] | RUG | RUG | | | | | | | - | +| drCCD[^3] | RUG | RUG | | | | | | | - | +| DF-CCD | RU | RU | RU | RU | RU | | RU | RU | - | +| DF-CCSD | RU | RU | RU | RU | RU | | RU | RU | - | +| DF-CC2 | RU | RU | RU | RU | RU | | RU | RU | - | +| DF-LCCD | RU | RU | | | | | | | - | +| DF-LCCSD | RU | RU | | | | | | | - | +| DF-QCISD | RU | RU | | | | | | | - | +| DF-DCD[^2] | RU | RU | | | | | | | - | +| DF-DCSD[^2] | RU | RU | | | | | | | - | +| DF-rCCD[^3] | RU | RU | | | | | | | - | +| DF-drCCD[^3] | RU | RU | | | | | | | - | +| CCSD-S-1-1[^4] | RUG | RUG | RUG | | | | RUG | RUG | RUG | +| CCSD-SD-1-1[^4] | RUG | RUG | RUG | | | | RUG | RUG | RUG | +| CCSD-SD-1-2[^4] | RUG | RUG | RUG | | | | RUG | RUG | RUG | + +[^1]: Third order amplitudes in an active space ([10.1063/1.478517](https://doi.org/10.1063/1.478517)) +[^2]: Distinguishable cluster approaches ([10.1063/1.4944087](https://doi.org/10.1063/1.4944087)) +[^3]: Standard and direct ring-CCD approaches, equivalent to RPA and dRPA ([10.1063/1.5032314](https://doi.org/10.1063/1.5032314)) +[^4]: Electron-boson coupled cluster approaches ([10.1063/5.0033132](https://doi.org/10.1063/5.0033132)) - R, U, G indicate availability of restricted, unrestricted, and generalised codes. - Capital letters (R rather than r) indicates that the expressions are optimised for contraction order and subexpression elimination.